syntax = "proto3";
package types;
option go_package = "../types";
message BrokerAction {
    oneof value {
        Init      init   =1;
        RegisterExector  registerExector      = 2;
        Audit     audit         = 3;
        InterchainEvent emitInterchainEvent = 4;
        UpdateIndex  updateIndex =5;
    }
    int32 ty = 6;
}
//broker初始化信息
message Init {

    string bxhId = 1;

    string appChainId = 2;
}


// 业务合约注册模型: 0表示正在审核，1表示审核通过，2表示审核失败
message RegisterExector {
    //业务合约名称
    string exectorName = 1;
}

//审核
message Audit {
     //业务合约名称
    string exectorName = 1;
     //状态码  0表示正在审核，1表示审核通过，2表示审核失败
    string status = 2;
}

// 轮循事件
message PollingEvent {
      Meta  meta = 1;
}

// 更新跨链事件索引
message UpdateIndex {
    //当前链已经处理到的位置
    uint64  sequenceNum = 1;
    //目的链服务ID,固定格式0x000001
    string  dstServiceID = 2;
    //源链ID,固定格式0x000002
    string  srcServiceID = 3;
    //请求类型 0表示信息流入 1表示信息流出 2表示回滚
    uint64  reqType =4;
    //跨入交易执行结果更新
    Response response =5;
}
// 跨链事件
message InterchainEvent {
    //索引值，这个有系统自动生成
    uint64  index = 1;
    //目的链ID,固定格式0x000001
    string  dstServiceID = 2;
    //源链ID,固定格式0x000002
    string  srcServiceID = 3;
    //跨链交易类型 0表示storage,1表示coins,2表示token......
    uint64  type =4;
    //方法集合分别表示 当前,回调，回滚方法 用，号分割 比如: "interchainGet,interchainSet,interchainRollback"
    string  func = 5;
    //参数列表
    string  args = 6;
    //回调参数
    string  argscb =7;
    //回滚参数
    string  argsrb =8;
    //状态 0表示开始处理  1表示跨链成功  2表示跨链失败
//    int32   status = 7;
}
//ReceiptBrokerLog
message ReceiptBrokerLog{
    oneof value {
        RegisterExector  registerExector      = 1;
        Audit     audit         = 2;
        InterchainEvent emitInterchainEvent = 3;
        UpdateIndex  updateIndex =4;
    }
    int32 ty = 5;
}
service broker {}

//查询跨出事件
message QueryInterchainEvent{
    uint64 index =1;
    //目的链ID,固定格式0x000001
    string  dstServiceID = 2;
    //源链ID,固定格式0x000002
    string  srcServiceID = 3;
}
//跨链事件列表
message InterChainEventList{
    repeated InterchainEvent list =1;
}

message QueryNilParam{

}
message QueryOutterMeta{

}

message QueryInnerMeta{

}

message QueryInMessage{
    string inServicePair = 1;
    uint64 sequenceNum = 2;
}

message QueryOutMessage{
    string inServicePair = 1;
    uint64 sequenceNum = 2;
}

message BrokerInfo {
    //跨链协议版本ID
    string bxhId =1;
    //应用链ID
    string appChainId = 2;
}


message Meta {
    map<string,uint64> meta = 1;
}


message Response{
    //状态 0表示开始处理  1表示跨链成功  2表示跨链失败
    int32   status = 1;
}