Commit 9f60df2f authored by harrylee's avatar harrylee

update broker

parent 65527d44
Pipeline #8119 failed with stages
in 0 seconds
......@@ -22,6 +22,7 @@ var driverName = brokertypes.BrokerX
// Init register dapp
func Init(name string, cfg *types.Chain33Config, sub []byte) {
drivers.Register(cfg, GetName(), newBroker, cfg.GetDappFork(driverName, "Enable"))
//TODO 初始化时,需要把应用链的ID加载进去
InitExecType()
}
......
......@@ -4,10 +4,10 @@ import (
"fmt"
"github.com/33cn/chain33/client"
dbm "github.com/33cn/chain33/common/db"
tab "github.com/33cn/chain33/common/db/table"
"github.com/33cn/chain33/types"
brokertypes "github.com/33cn/plugin/plugin/dapp/broker/types"
storagetypes "github.com/33cn/plugin/plugin/dapp/storage/types"
"strconv"
)
//BrokerDB ...
......@@ -29,86 +29,316 @@ func newBrokerDB(b *broker, tx *types.Transaction, index int) *BrokerDB {
b.GetBlockTime(), b.GetHeight(), index}
}
////GetKVSet ...
//func (b *BrokerDB) GetKVSet() (kvset []*types.KeyValue) {
// kvset = append(kvset, &types.KeyValue{Key: Key(common.ToHex(s.txhash)), Value: types.Encode(payload)})
// return kvset
//}
func(b *BrokerDB)register(payload *brokertypes.Register )(*types.Receipt, error){
//GetKVSet ...
func (b *BrokerDB) GetMetaKVSet(req uint64,meta *brokertypes.Meta) (kvset []*types.KeyValue) {
if req == brokertypes.Req_Callback{
kvset = append(kvset, &types.KeyValue{Key: calCallBackMetaKey(), Value: types.Encode(meta)})
}else if req == brokertypes.Req_Inner {
kvset = append(kvset, &types.KeyValue{Key: calInnerMetaKey(), Value: types.Encode(meta)})
}else if req == brokertypes.Req_DstRollback{
kvset = append(kvset, &types.KeyValue{Key: calDstRollBackMetaKey(), Value: types.Encode(meta)})
}
return kvset
}
return nil,nil
//GetKVSet ...
func (b *BrokerDB) GetEventKVSet(event *brokertypes.InterchainEvent) (kvset []*types.KeyValue) {
kvset = append(kvset, &types.KeyValue{Key: calServicePair(event.GetSrcServiceID(),event.GetDstServiceID(),event.Index), Value: types.Encode(event)})
return kvset
}
//其他执行器注册授权
func (b *BrokerDB) register(payload *brokertypes.Register) (*types.Receipt, error) {
func(b *BrokerDB)audit(payload *brokertypes.Audit )(*types.Receipt, error){
return nil, nil
}
//管理员审批
func (b *BrokerDB) audit(payload *brokertypes.Audit) (*types.Receipt, error) {
return nil,nil
return nil, nil
}
func(b *BrokerDB)updateEventStatus(payload *brokertypes.UpdateEventStatus)(*types.Receipt, error){
func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt, error) {
//FIXME 权限检查
receipt := &types.Receipt{Ty: types.ExecOk}
log :=&brokertypes.ReceiptBrokerLog{Value:&brokertypes.ReceiptBrokerLog_UpdateEventStatus{payload},Ty:brokertypes.TyEmitInterchainEventAction}
receiptlog := &types.ReceiptLog{Ty:brokertypes.TyUpdateEventStatusLog,Log:types.Encode(log)}
receipt.Logs=append(receipt.Logs,receiptlog)
return receipt,nil
if payload.ReqType == brokertypes.Req_Inner{
meta,err:=getMeta(b.db,calInnerMetaKey())
if err !=nil {
meta = &brokertypes.Meta{
Meta: make(map[string]uint64),
XXX_NoUnkeyedLiteral: struct{}{},
XXX_unrecognized: nil,
XXX_sizecache: 0,
}
}
idx :=meta.Meta[genServicePair(payload.SrcServiceID,payload.DstServiceID)]
if payload.SequenceNum != idx+1 {
return nil , fmt.Errorf("incorrect index, expect %d", idx+1)
}
meta.Meta[genServicePair(payload.SrcServiceID,payload.DstServiceID)]=idx+1
kvset := b.GetMetaKVSet(payload.ReqType,meta)
kvset = append(kvset,&types.KeyValue{Key: inMsgKey(genServicePair(payload.SrcServiceID,payload.DstServiceID),idx+1), Value: types.Encode(payload.Response)})
receipt.KV =append(receipt.KV,kvset...)
}else if payload.ReqType == brokertypes.Req_Callback{
meta,err:=getMeta(b.db,calCallBackMetaKey())
if err !=nil {
meta = &brokertypes.Meta{
Meta: make(map[string]uint64),
XXX_NoUnkeyedLiteral: struct{}{},
XXX_unrecognized: nil,
XXX_sizecache: 0,
}
}
idx :=meta.Meta[genServicePair(payload.SrcServiceID,payload.DstServiceID)]
if payload.SequenceNum != idx+1 {
return nil , fmt.Errorf("incorrect index, expect %d", idx+1)
}
meta.Meta[genServicePair(payload.SrcServiceID,payload.DstServiceID)]=idx+1
kvset := b.GetMetaKVSet(payload.ReqType,meta)
kvset = append(kvset,&types.KeyValue{Key: outMsgKey(genServicePair(payload.SrcServiceID,payload.DstServiceID),idx+1), Value: types.Encode(payload.Response)})
receipt.KV =append(receipt.KV,kvset...)
}else if payload.ReqType == brokertypes.Req_DstRollback{
//todo
meta,err:=getMeta(b.db,calDstRollBackMetaKey())
if err !=nil {
meta = &brokertypes.Meta{
Meta: make(map[string]uint64),
XXX_NoUnkeyedLiteral: struct{}{},
XXX_unrecognized: nil,
XXX_sizecache: 0,
}
}
idx :=meta.Meta[genServicePair(payload.SrcServiceID,payload.DstServiceID)]
if payload.SequenceNum < idx+1 {
return nil , fmt.Errorf("incorrect dstrollback index, expect %d", idx+1)
}
meta.Meta[genServicePair(payload.SrcServiceID,payload.DstServiceID)]=payload.SequenceNum
kvset := b.GetMetaKVSet(payload.ReqType,meta)
receipt.KV =append(receipt.KV,kvset...)
}
log := &brokertypes.ReceiptBrokerLog{Value: &brokertypes.ReceiptBrokerLog_UpdateIndex{payload}, Ty: brokertypes.TyEmitInterchainEventAction}
receiptlog := &types.ReceiptLog{Ty: brokertypes.TyUpdateIndexLog, Log: types.Encode(log)}
receipt.Logs = append(receipt.Logs, receiptlog)
return receipt, nil
}
func(b *BrokerDB)emitInterchainEvent(payload *brokertypes.InterchainEvent )(*types.Receipt, error){
func (b *BrokerDB) emitInterchainEvent(payload *brokertypes.InterchainEvent) (*types.Receipt, error) {
//FIXME 权限检查,是否需要设定指定账户拥有跨链的权限
receipt := &types.Receipt{Ty: types.ExecOk}
//发布跨链事件 分为1.信息跨链 2.代币跨链,代币跨链需要在这步将所需金额冻结在broker下面
if payload.ReqType == brokertypes.Req_Type_Storage {
//发布跨链事件分为 1.信息跨链 2.代币跨链,代币跨链需要在这步将所需金额冻结在broker下面
if payload.Type == brokertypes.Req_Type_Storage {
//校验存在交易是否存在
params :=&storagetypes.QueryStorage{TxHash:payload.Args[0]}
_,err:=b.api.Query(storagetypes.StorageX,payload.GetFunc(),params)
params := &storagetypes.QueryStorage{TxHash: payload.Args[0]}
_, err := b.api.Query(storagetypes.StorageX, payload.GetFunc(), params)
if err != nil {
return nil, brokertypes.ErrBrokerStorageTx
}
meta, err := getMeta(b.db, calOutterMetaKey())
if err != nil {
return nil,brokertypes.ErrBrokerStorageTx
meta = &brokertypes.Meta{
Meta: make(map[string]uint64),
XXX_NoUnkeyedLiteral: struct{}{},
XXX_unrecognized: nil,
XXX_sizecache: 0,
}
}
currServiceID,err := b.getCurrServiceID()
if err !=nil {
return nil,err
}
log :=&brokertypes.ReceiptBrokerLog{Value:&brokertypes.ReceiptBrokerLog_EmitInterchainEvent{payload},Ty:brokertypes.TyEmitInterchainEventAction}
receiptlog := &types.ReceiptLog{Ty:brokertypes.TyEmitInterchainEventLog,Log:types.Encode(log)}
receipt.Logs=append(receipt.Logs,receiptlog)
payload.SrcServiceID=currServiceID
//idx :=meta.Meta[genServicePair(currServiceID, payload.DstServiceID)]
meta.Meta[genServicePair(currServiceID, payload.DstServiceID)]++
kvset := &types.KeyValue{Key: calOutterMetaKey(), Value: types.Encode(meta)}
payload.Index=meta.Meta[genServicePair(currServiceID, payload.DstServiceID)]
receipt.KV=append(receipt.KV,kvset)
receipt.KV=append(receipt.KV,b.GetEventKVSet(payload)...)
log := &brokertypes.ReceiptBrokerLog{Value: &brokertypes.ReceiptBrokerLog_EmitInterchainEvent{payload}, Ty: brokertypes.TyEmitInterchainEventAction}
receiptlog := &types.ReceiptLog{Ty: brokertypes.TyEmitInterchainEventLog, Log: types.Encode(log)}
receipt.Logs = append(receipt.Logs, receiptlog)
}
if payload.ReqType == brokertypes.Req_Type_Coins {
if payload.Type == brokertypes.Req_Type_Coins {
//TODO 跨链转账
}
return receipt,nil
return receipt, nil
}
//获取当前链得ID
func (b *BrokerDB) getCurrServiceID()(string,error){
return b.genFullServiceID(b.api.GetConfig().GetTitle())
}
func (b *BrokerDB) genFullServiceID(serviceId string) (string, error) {
//TODO 需要init方法,用于初始化bixhID和appChainID
bxhId, err := b.db.Get([]byte(KeyPrefixStateDB + bxhID))
if err != nil {
return "", err
}
appchainId, err := b.db.Get([]byte(KeyPrefixLocalDB + appchainID))
if err != nil {
return "", err
}
return fmt.Sprintf("%s:%s:%s", bxhId, appchainId, serviceId), nil
}
//去状态数据库中查询Event
func getEvent(statedb dbm.KV, key []byte) (*brokertypes.InterchainEvent, error) {
data, err := statedb.Get(key)
if err != nil {
elog.Error("getEvent", "not found", "key:", key)
return nil, err
}
var event brokertypes.InterchainEvent
err = types.Decode(data, &event)
if err != nil {
elog.Error("getEvent", "can't decode", "err:", err.Error())
return nil, err
}
return &event, nil
}
//根据状态遍历时间列表(可通过定时轮循这个接口,获取跨链时间)
func findInterChainEventListByStatus(localdb dbm.KV,status, direction int32, primaryKey string) (*brokertypes.InterchainEventList, error) {
table := NewInterchainEventTable(localdb)
prefix := []byte(fmt.Sprintf("%d",status))
var rows []*tab.Row
var err error
if primaryKey == "" { //第一次查询,默认展示最新得成交记录
rows, err = table.ListIndex("status", prefix, nil, brokertypes.PageSize, direction)
} else {
rows, err = table.ListIndex("status", prefix, []byte(primaryKey), brokertypes.PageSize, direction)
//去状态数据库中查询meta
func getMeta(statedb dbm.KV, key []byte) (*brokertypes.Meta, error) {
data, err := statedb.Get(key)
if err != nil {
elog.Error("getMeta", "not found", "key:", key)
return nil, err
}
var meta brokertypes.Meta
err = types.Decode(data, &meta)
if err != nil {
elog.Error("findInterChainEventListByStatus.", "err", err.Error())
elog.Error("getMeta", "can't decode", "err:", err.Error())
return nil, err
}
var eventList brokertypes.InterchainEventList
for _, row := range rows {
event := row.Data.(*brokertypes.InterchainEvent)
eventList.List = append(eventList.List, event)
return &meta, nil
}
//去状态数据库中查询message
func getMessage(statedb dbm.KV, key []byte) (*brokertypes.Response, error) {
data, err := statedb.Get(key)
if err != nil {
elog.Error("getMessage", "not found", "key:", key)
return nil, err
}
//设置主键索引
if len(rows) == int(brokertypes.PageSize) {
eventList.PrimaryKey = string(rows[len(rows)-1].Primary)
var resp brokertypes.Response
err = types.Decode(data, &resp)
if err != nil {
elog.Error("getMessage", "can't decode", "err:", err.Error())
return nil, err
}
return &eventList, nil
return &resp, nil
}
//根据index查询event
func findInterChainEventByIndex(localdb dbm.KV,index uint64)(*brokertypes.InterchainEvent,error){
table :=NewInterchainEventTable(localdb)
primaryKey := []byte(fmt.Sprintf("%018d", index))
row,err:=table.GetData(primaryKey)
//监听获取跨出事件列表
func pollInterEvent(statedb dbm.KV,meta *brokertypes.Meta)(*brokertypes.InterChainEventList,error){
outMeta,err := getMeta(statedb,calOutterMetaKey())
if err !=nil {
return nil,err
elog.Error("getMeta", "not found", "key:", calOutterMetaKey)
return nil, err
}
var eventList brokertypes.InterChainEventList
for method, idx := range outMeta.Meta {
startPos, ok := meta.Meta[method]
if !ok {
startPos = 0
}
for i := startPos + 1; i <= idx; i++ {
event, err := getEvent(statedb,calEventKey(method,i))
if err != nil {
elog.Error("get out event by key %s fail",calEventKey(method,i))
continue
}
eventList.List=append(eventList.List,event)
}
}
return &eventList,nil
}
//获取outerMeta
func getOutterMeta(statedb dbm.KV)(*brokertypes.Meta,error){
return getMeta(statedb,calOutterMetaKey())
}
//获取innerMeta
func getInnerMeta(statedb dbm.KV)(*brokertypes.Meta,error){
return getMeta(statedb,calInnerMetaKey())
}
//获取message
func getInMessage(statedb dbm.KV,query *brokertypes.QueryInMessage)(*brokertypes.Response,error){
return getMessage(statedb,inMsgKey(query.InServicePair,query.SequenceNum))
}
//获取message
func getOutMessage(statedb dbm.KV,query *brokertypes.QueryOutMessage)(*brokertypes.Response,error){
return getMessage(statedb,outMsgKey(query.InServicePair,query.SequenceNum))
}
func getConfValue(cfg *types.Chain33Config, db dbm.KV, key string, defaultValue int64) int64 {
var item types.ConfigItem
value, err := getManageKey(cfg, key, db)
if err != nil {
return defaultValue
}
if value != nil {
err = types.Decode(value, &item)
if err != nil {
elog.Debug("broker getConfValue", "decode db key:", key, "err", err.Error())
return defaultValue
}
}
values := item.GetArr().GetValue()
if len(values) == 0 {
elog.Debug("broker getConfValue", "can't get value from values arr. key:", key)
return defaultValue
}
//取数组最后一位,作为最新配置项的值
v, err := strconv.ParseInt(values[len(values)-1], 10, 64)
if err != nil {
elog.Debug("broker getConfValue", "Type conversion error:", err.Error())
return defaultValue
}
return v
}
func getManagerAddr(cfg *types.Chain33Config, db dbm.KV, key, defaultValue string) string {
var item types.ConfigItem
value, err := getManageKey(cfg, key, db)
if err != nil {
return defaultValue
}
if value != nil {
err = types.Decode(value, &item)
if err != nil {
elog.Debug("broker getConfValue", "decode db key:", key, "err", err.Error())
return defaultValue
}
}
values := item.GetArr().GetValue()
if len(values) == 0 {
elog.Debug("broker getConfValue", "can't get value from values arr. key:", key)
return defaultValue
}
return values[len(values)-1]
}
func getManageKey(cfg *types.Chain33Config, key string, db dbm.KV) ([]byte, error) {
manageKey := types.ManageKey(key)
value, err := db.Get([]byte(manageKey))
if err != nil {
if cfg.IsPara() { //平行链只有一种存储方式
elog.Debug("broker getManage", "can't get value from db,key:", key, "err", err.Error())
return nil, err
}
elog.Debug("broker getManageKey", "get db key", "not found")
return getConfigKey(key, db)
}
return value, nil
}
func getConfigKey(key string, db dbm.KV) ([]byte, error) {
configKey := types.ConfigKey(key)
value, err := db.Get([]byte(configKey))
if err != nil {
elog.Debug("broker getConfigKey", "can't get value from db,key:", key, "err", err.Error())
return nil, err
}
return row.Data.(*brokertypes.InterchainEvent),nil
return value, nil
}
\ No newline at end of file
......@@ -10,6 +10,11 @@ import (
* 关键数据上链(statedb)并生成交易回执(log)
*/
func (b *broker) Exec_Init()(*types.Receipt, error){
return nil,nil
}
func (b *broker) Exec_Register(payload *brokertypes.Register, tx *types.Transaction, index int) (*types.Receipt, error) {
db := newBrokerDB(b,tx,index)
return db.register(payload)
......@@ -21,9 +26,9 @@ func (b *broker) Exec_Audit(payload *brokertypes.Audit, tx *types.Transaction, i
return db.audit(payload)
}
func (b *broker) Exec_UpdateEventStatus(payload *brokertypes.UpdateEventStatus, tx *types.Transaction, index int) (*types.Receipt, error) {
func (b *broker) Exec_UpdateIndex(payload *brokertypes.UpdateIndex, tx *types.Transaction, index int) (*types.Receipt, error) {
db := newBrokerDB(b,tx,index)
return db.updateEventStatus(payload)
return db.updateIndex(payload)
}
func (b *broker) Exec_EmitInterchainEvent(payload *brokertypes.InterchainEvent, tx *types.Transaction, index int) (*types.Receipt, error) {
db := newBrokerDB(b,tx,index)
......
package executor
import (
"fmt"
"github.com/33cn/chain33/types"
brokertypes "github.com/33cn/plugin/plugin/dapp/broker/types"
)
......@@ -27,36 +26,17 @@ func (b *broker) ExecLocal_Audit(payload *brokertypes.Audit, tx *types.Transacti
return b.addAutoRollBack(tx, dbSet.KV), nil
}
func (b *broker) ExecLocal_UpdateEventStatus(payload *brokertypes.UpdateEventStatus, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (b *broker) ExecLocal_UpdateIndex(payload *brokertypes.UpdateIndex, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
dbSet := &types.LocalDBSet{}
table :=NewInterchainEventTable(b.GetLocalDB())
primaryKey := []byte(fmt.Sprintf("%018d", payload.Index))
row,err:=table.GetData(primaryKey)
if err !=nil {
return nil,err
}
event:=row.Data.(*brokertypes.InterchainEvent)
//更新状态
event.Status=payload.Status
table.Replace(event)
kvs,err:=table.Save()
if err !=nil {
return nil,err
}
dbSet.KV=append(dbSet.KV,kvs...)
return b.addAutoRollBack(tx, dbSet.KV), nil
}
func (b *broker) ExecLocal_EmitInterchainEvent(payload *brokertypes.InterchainEvent, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
dbSet := &types.LocalDBSet{}
table :=NewInterchainEventTable(b.GetLocalDB())
payload.Index=b.GetIndex(index)
table.Add(payload)
kvs,err:=table.Save()
if err !=nil {
return nil,err
}
dbSet.KV=append(dbSet.KV,kvs...)
return b.addAutoRollBack(tx, dbSet.KV), nil
}
......
package executor
import "fmt"
/*
* 用户合约存取kv数据时,key值前缀需要满足一定规范
* 即key = keyPrefix + userKey
* 需要字段前缀查询时,使用’-‘作为分割符号
*/
var (
const (
//KeyPrefixStateDB state db key必须前缀
KeyPrefixStateDB = "mavl-broker-"
//KeyPrefixLocalDB local db的key必须前缀
KeyPrefixLocalDB = "LODB-broker-"
innerMeta = "inner-meta"
outterMeta = "outter-meta"
callbackMeta = "callback-meta"
dstRollbackMeta = "dst-rollback-meta"
whiteList = "white-list"
adminList = "admin-list"
passed = "1"
rejected = "2"
delimiter = "&"
bxhID = "bxh-id"
appchainID = "appchain-id"
)
//状态数据库中存储innermeta信息
func calInnerMetaKey() []byte {
key := fmt.Sprintf("%s"+":%s", KeyPrefixStateDB, innerMeta)
return []byte(key)
}
//状态数据库中存储outtermeta信息
func calOutterMetaKey() []byte {
key := fmt.Sprintf("%s"+":%s", KeyPrefixStateDB, outterMeta)
return []byte(key)
}
func calCallBackMetaKey() []byte {
key := fmt.Sprintf("%s"+":%s", KeyPrefixStateDB, callbackMeta)
return []byte(key)
}
func calDstRollBackMetaKey() []byte {
key := fmt.Sprintf("%s"+":%s", KeyPrefixStateDB, dstRollbackMeta)
return []byte(key)
}
//生成service key
func genServicePair(from, to string) string {
return fmt.Sprintf("%s-%s",from, to)
}
func calServicePair(from,to string,index uint64)[]byte{
key :=fmt.Sprintf("%s%s-%s-%016d",KeyPrefixStateDB,from, to,index)
return []byte(key)
}
func calEventKey(servicePair string,index uint64)[]byte{
key :=fmt.Sprintf("%s%s-%016d",KeyPrefixStateDB,servicePair,index)
return []byte(key)
}
func outMsgKey(to string, index uint64) []byte {
return []byte(fmt.Sprintf("%sout-msg-%s-%016d",KeyPrefixStateDB, to, index))
}
func inMsgKey(from string, index uint64) []byte {
return []byte(fmt.Sprintf("%sin-msg-%s-%016d",KeyPrefixStateDB,from, index))
}
\ No newline at end of file
package executor
import (
brokertypes "github.com/33cn/plugin/plugin/dapp/broker/types"
)
//获取innterMeta
func(b *broker) Query_QueryInnerMeta(query *brokertypes.QueryInnerMeta)(*brokertypes.Meta,error){
return getInnerMeta(b.GetStateDB())
}
//获取outterMeta
func(b *broker) Query_QueryOutterMeta(query *brokertypes.QueryOutterMeta)(*brokertypes.Meta,error){
return getOutterMeta(b.GetStateDB())
}
//获取inMessage
func(b *broker) Query_QueryInMessage(query *brokertypes.QueryInMessage)(*brokertypes.Response,error){
return getInMessage(b.GetStateDB(),query)
}
//获取outMessage
func(b *broker) Query_QueryOutMessage(query *brokertypes.QueryOutMessage)(*brokertypes.Response,error){
return getOutMessage(b.GetStateDB(),query)
}
//获取监听列表
func(b *broker) Query_PollingEvent(query *brokertypes.PollingEvent)(*brokertypes.InterChainEventList,error){
return pollInterEvent(b.GetStateDB(),query.Meta)
}
\ No newline at end of file
......@@ -13,7 +13,7 @@ var opt_broker_event = &table.Option{
Prefix: KeyPrefixLocalDB,
Name: "broker",
Primary: "index",
Index: []string{"dstChainID", "status","reqType"},
Index: []string{"dstServiceID", "status","reqType"},
}
......@@ -45,12 +45,12 @@ func (m *InterchainEventRow) SetPayload(data types.Message) error {
func (m *InterchainEventRow) Get(key string) ([]byte, error) {
if key == "index" {
return []byte(fmt.Sprintf("%018d", m.Index)), nil
} else if key == "dstChainID" {
return []byte(fmt.Sprintf("%s", m.GetDstChainID())), nil
} else if key == "dstServiceID" {
return []byte(fmt.Sprintf("%s", m.GetDstServiceID())), nil
} else if key == "status" {
return []byte(fmt.Sprintf("%d", m.GetStatus())), nil
}else if key == "reqType" {
return []byte(fmt.Sprintf("%d", m.GetReqType())), nil
}else if key == "type" {
return []byte(fmt.Sprintf("%d", m.GetType())), nil
}
return nil, types.ErrNotFound
}
......
......@@ -6,7 +6,7 @@ message BrokerAction {
Register register = 1;
Audit audit = 2;
InterchainEvent emitInterchainEvent = 3;
UpdateEventStatus updateEventStatus =4;
UpdateIndex updateIndex =4;
}
int32 ty = 5;
}
......@@ -26,43 +26,33 @@ message Audit {
// 轮循事件
message PollingEvent {
string outMeta = 1;
Meta meta = 1;
}
// 更新状态
message UpdateEventStatus {
//源链ID
string index = 1;
//状态 0表示开始处理 1表示跨链成功 2表示跨链失败
int32 status = 2;
// 更新跨链事件索引
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 EmitInterchainEvent{
// //目的链ID,固定格式0x000001
// string dstChainID = 1;
// //源链ID,固定格式0x000002
// string srcChainID = 2;
// //跨链交易类型 0表示storage,1表示coins,2表示token......
// uint64 reqType =3;
// //调用方法
// string func = 4;
// //参数列表
// repeated string args = 6;
//}
// 跨链事件
message InterchainEvent {
//索引值,这个有系统自动生成
uint64 index = 1;
//目的链ID,固定格式0x000001
string dstChainID = 2;
string dstServiceID = 2;
//源链ID,固定格式0x000002
string srcChainID = 3;
string srcServiceID = 3;
//跨链交易类型 0表示storage,1表示coins,2表示token......
uint64 reqType =4;
uint64 type =4;
//调用方法
string func = 5;
//参数列表
......@@ -76,25 +66,69 @@ message ReceiptBrokerLog{
Register register = 1;
Audit audit = 2;
InterchainEvent emitInterchainEvent = 3;
UpdateEventStatus updateEventStatus =4;
UpdateIndex updateIndex =4;
}
int32 ty = 5;
}
service broker {}
//根据状态查看跨链事件
message QueryInterchainEventList {
//事件状态必填(默认是0,只查询待处理状态的事件)
int32 status = 1;
// 主键索引
string primaryKey = 2;
//单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
int32 count = 3;
// 0降序,1升序,默认降序
int32 direction = 4;
//查询跨出事件
message QueryInterchainEvent{
uint64 index =1;
//目的链ID,固定格式0x000001
string dstServiceID = 2;
//源链ID,固定格式0x000002
string srcServiceID = 3;
}
//跨链事件列表
message InterchainEventList {
repeated InterchainEvent list = 1;
string primaryKey = 2;
message InterChainEventList{
repeated InterchainEvent list =1;
}
////根据状态查看跨链事件
//message QueryInterchainEventList {
// //事件状态必填(默认是0,只查询待处理状态的事件)
// int32 status = 1;
// // 主键索引
// string primaryKey = 2;
// //单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
// int32 count = 3;
// // 0降序,1升序,默认降序
// int32 direction = 4;
//}
////跨链事件列表
//message InterchainEventList {
// repeated InterchainEvent list = 1;
// string primaryKey = 2;
//}
message QueryOutterMeta{
}
message QueryInnerMeta{
}
message QueryInMessage{
string inServicePair = 1;
uint64 sequenceNum = 2;
}
message QueryOutMessage{
string inServicePair = 1;
uint64 sequenceNum = 2;
}
message Meta {
map<string,uint64> meta = 1;
}
message Response{
// A status code that should follow the HTTP status codes.
int32 status = 1;
// A message associated with the response code.
string message = 2;
// A payload that can be used to include metadata with this response.
bytes payload = 3;
}
\ No newline at end of file
......@@ -16,12 +16,12 @@ const (
TyUnknowAction = iota + 100
TyRegisterAction
TyAuditAction
TyUpdateEventStatusAction
TyUpdateIndexAction
TyEmitInterchainEventAction
NameRegisterAction = "Register"
NameAuditAction = "Audit"
NameUpdateEventStatusAction = "UpdateEventStatus"
NameUpdateIndexAction = "UpdateIndex"
NameEmitInterchainEventAction = "EmitInterchainEvent"
)
......@@ -32,12 +32,27 @@ const (
Req_Type_Token
)
//元数据类型
const (
Meta_Inner = iota
Meta_Outter
Meta_RollBack
)
//元数据类型
const (
Req_Inner = iota
Req_Callback
Req_DstRollback
)
// 跨链事件状态
const (
Pending = iota
Success
Fail
)
//查询方向
const (
ListDESC = int32(0)
......@@ -56,7 +71,7 @@ const (
TyUnknownLog = iota + 100
TyRegisterLog
TyAuditLog
TyUpdateEventStatusLog
TyUpdateIndexLog
TyEmitInterchainEventLog
)
......@@ -67,7 +82,7 @@ var (
actionMap = map[string]int32{
NameRegisterAction: TyRegisterAction,
NameAuditAction: TyAuditAction,
NameUpdateEventStatusAction: TyUpdateEventStatusAction,
NameUpdateIndexAction: TyUpdateIndexAction,
NameEmitInterchainEventAction: TyEmitInterchainEventAction,
}
//定义log的id和具体log类型及名称,填入具体自定义log类型
......
......@@ -27,7 +27,7 @@ type BrokerAction struct {
// *BrokerAction_Register
// *BrokerAction_Audit
// *BrokerAction_EmitInterchainEvent
// *BrokerAction_UpdateEventStatus
// *BrokerAction_UpdateIndex
Value isBrokerAction_Value `protobuf_oneof:"value"`
Ty int32 `protobuf:"varint,5,opt,name=ty,proto3" json:"ty,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
......@@ -76,8 +76,8 @@ type BrokerAction_EmitInterchainEvent struct {
EmitInterchainEvent *InterchainEvent `protobuf:"bytes,3,opt,name=emitInterchainEvent,proto3,oneof"`
}
type BrokerAction_UpdateEventStatus struct {
UpdateEventStatus *UpdateEventStatus `protobuf:"bytes,4,opt,name=updateEventStatus,proto3,oneof"`
type BrokerAction_UpdateIndex struct {
UpdateIndex *UpdateIndex `protobuf:"bytes,4,opt,name=updateIndex,proto3,oneof"`
}
func (*BrokerAction_Register) isBrokerAction_Value() {}
......@@ -86,7 +86,7 @@ func (*BrokerAction_Audit) isBrokerAction_Value() {}
func (*BrokerAction_EmitInterchainEvent) isBrokerAction_Value() {}
func (*BrokerAction_UpdateEventStatus) isBrokerAction_Value() {}
func (*BrokerAction_UpdateIndex) isBrokerAction_Value() {}
func (m *BrokerAction) GetValue() isBrokerAction_Value {
if m != nil {
......@@ -116,9 +116,9 @@ func (m *BrokerAction) GetEmitInterchainEvent() *InterchainEvent {
return nil
}
func (m *BrokerAction) GetUpdateEventStatus() *UpdateEventStatus {
if x, ok := m.GetValue().(*BrokerAction_UpdateEventStatus); ok {
return x.UpdateEventStatus
func (m *BrokerAction) GetUpdateIndex() *UpdateIndex {
if x, ok := m.GetValue().(*BrokerAction_UpdateIndex); ok {
return x.UpdateIndex
}
return nil
}
......@@ -136,7 +136,7 @@ func (*BrokerAction) XXX_OneofWrappers() []interface{} {
(*BrokerAction_Register)(nil),
(*BrokerAction_Audit)(nil),
(*BrokerAction_EmitInterchainEvent)(nil),
(*BrokerAction_UpdateEventStatus)(nil),
(*BrokerAction_UpdateIndex)(nil),
}
}
......@@ -233,7 +233,7 @@ func (m *Audit) GetStatus() string {
// 轮循事件
type PollingEvent struct {
OutMeta string `protobuf:"bytes,1,opt,name=outMeta,proto3" json:"outMeta,omitempty"`
Meta *Meta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
......@@ -264,73 +264,100 @@ func (m *PollingEvent) XXX_DiscardUnknown() {
var xxx_messageInfo_PollingEvent proto.InternalMessageInfo
func (m *PollingEvent) GetOutMeta() string {
func (m *PollingEvent) GetMeta() *Meta {
if m != nil {
return m.OutMeta
return m.Meta
}
return ""
return nil
}
// 更新状态
type UpdateEventStatus struct {
//源链ID
Index string `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"`
//状态 0表示开始处理 1表示跨链成功 2表示跨链失败
Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
// 更新跨链事件索引
type UpdateIndex struct {
//当前链已经处理到的位置
SequenceNum uint64 `protobuf:"varint,1,opt,name=sequenceNum,proto3" json:"sequenceNum,omitempty"`
//目的链服务ID,固定格式0x000001
DstServiceID string `protobuf:"bytes,2,opt,name=dstServiceID,proto3" json:"dstServiceID,omitempty"`
//源链ID,固定格式0x000002
SrcServiceID string `protobuf:"bytes,3,opt,name=srcServiceID,proto3" json:"srcServiceID,omitempty"`
//请求类型 0表示信息流入 1表示信息流出 2表示回滚
ReqType uint64 `protobuf:"varint,4,opt,name=reqType,proto3" json:"reqType,omitempty"`
//响应信息
Response *Response `protobuf:"bytes,5,opt,name=response,proto3" json:"response,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UpdateEventStatus) Reset() { *m = UpdateEventStatus{} }
func (m *UpdateEventStatus) String() string { return proto.CompactTextString(m) }
func (*UpdateEventStatus) ProtoMessage() {}
func (*UpdateEventStatus) Descriptor() ([]byte, []int) {
func (m *UpdateIndex) Reset() { *m = UpdateIndex{} }
func (m *UpdateIndex) String() string { return proto.CompactTextString(m) }
func (*UpdateIndex) ProtoMessage() {}
func (*UpdateIndex) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{4}
}
func (m *UpdateEventStatus) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpdateEventStatus.Unmarshal(m, b)
func (m *UpdateIndex) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpdateIndex.Unmarshal(m, b)
}
func (m *UpdateEventStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UpdateEventStatus.Marshal(b, m, deterministic)
func (m *UpdateIndex) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UpdateIndex.Marshal(b, m, deterministic)
}
func (m *UpdateEventStatus) XXX_Merge(src proto.Message) {
xxx_messageInfo_UpdateEventStatus.Merge(m, src)
func (m *UpdateIndex) XXX_Merge(src proto.Message) {
xxx_messageInfo_UpdateIndex.Merge(m, src)
}
func (m *UpdateEventStatus) XXX_Size() int {
return xxx_messageInfo_UpdateEventStatus.Size(m)
func (m *UpdateIndex) XXX_Size() int {
return xxx_messageInfo_UpdateIndex.Size(m)
}
func (m *UpdateEventStatus) XXX_DiscardUnknown() {
xxx_messageInfo_UpdateEventStatus.DiscardUnknown(m)
func (m *UpdateIndex) XXX_DiscardUnknown() {
xxx_messageInfo_UpdateIndex.DiscardUnknown(m)
}
var xxx_messageInfo_UpdateEventStatus proto.InternalMessageInfo
var xxx_messageInfo_UpdateIndex proto.InternalMessageInfo
func (m *UpdateEventStatus) GetIndex() string {
func (m *UpdateIndex) GetSequenceNum() uint64 {
if m != nil {
return m.Index
return m.SequenceNum
}
return 0
}
func (m *UpdateIndex) GetDstServiceID() string {
if m != nil {
return m.DstServiceID
}
return ""
}
func (m *UpdateEventStatus) GetStatus() int32 {
func (m *UpdateIndex) GetSrcServiceID() string {
if m != nil {
return m.Status
return m.SrcServiceID
}
return ""
}
func (m *UpdateIndex) GetReqType() uint64 {
if m != nil {
return m.ReqType
}
return 0
}
func (m *UpdateIndex) GetResponse() *Response {
if m != nil {
return m.Response
}
return nil
}
// 跨链事件
type InterchainEvent struct {
//索引值,这个有系统自动生成
Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"`
//目的链ID,固定格式0x000001
DstChainID string `protobuf:"bytes,2,opt,name=dstChainID,proto3" json:"dstChainID,omitempty"`
DstServiceID string `protobuf:"bytes,2,opt,name=dstServiceID,proto3" json:"dstServiceID,omitempty"`
//源链ID,固定格式0x000002
SrcChainID string `protobuf:"bytes,3,opt,name=srcChainID,proto3" json:"srcChainID,omitempty"`
SrcServiceID string `protobuf:"bytes,3,opt,name=srcServiceID,proto3" json:"srcServiceID,omitempty"`
//跨链交易类型 0表示storage,1表示coins,2表示token......
ReqType uint64 `protobuf:"varint,4,opt,name=reqType,proto3" json:"reqType,omitempty"`
Type uint64 `protobuf:"varint,4,opt,name=type,proto3" json:"type,omitempty"`
//调用方法
Func string `protobuf:"bytes,5,opt,name=func,proto3" json:"func,omitempty"`
//参数列表
......@@ -374,23 +401,23 @@ func (m *InterchainEvent) GetIndex() uint64 {
return 0
}
func (m *InterchainEvent) GetDstChainID() string {
func (m *InterchainEvent) GetDstServiceID() string {
if m != nil {
return m.DstChainID
return m.DstServiceID
}
return ""
}
func (m *InterchainEvent) GetSrcChainID() string {
func (m *InterchainEvent) GetSrcServiceID() string {
if m != nil {
return m.SrcChainID
return m.SrcServiceID
}
return ""
}
func (m *InterchainEvent) GetReqType() uint64 {
func (m *InterchainEvent) GetType() uint64 {
if m != nil {
return m.ReqType
return m.Type
}
return 0
}
......@@ -422,7 +449,7 @@ type ReceiptBrokerLog struct {
// *ReceiptBrokerLog_Register
// *ReceiptBrokerLog_Audit
// *ReceiptBrokerLog_EmitInterchainEvent
// *ReceiptBrokerLog_UpdateEventStatus
// *ReceiptBrokerLog_UpdateIndex
Value isReceiptBrokerLog_Value `protobuf_oneof:"value"`
Ty int32 `protobuf:"varint,5,opt,name=ty,proto3" json:"ty,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
......@@ -471,8 +498,8 @@ type ReceiptBrokerLog_EmitInterchainEvent struct {
EmitInterchainEvent *InterchainEvent `protobuf:"bytes,3,opt,name=emitInterchainEvent,proto3,oneof"`
}
type ReceiptBrokerLog_UpdateEventStatus struct {
UpdateEventStatus *UpdateEventStatus `protobuf:"bytes,4,opt,name=updateEventStatus,proto3,oneof"`
type ReceiptBrokerLog_UpdateIndex struct {
UpdateIndex *UpdateIndex `protobuf:"bytes,4,opt,name=updateIndex,proto3,oneof"`
}
func (*ReceiptBrokerLog_Register) isReceiptBrokerLog_Value() {}
......@@ -481,7 +508,7 @@ func (*ReceiptBrokerLog_Audit) isReceiptBrokerLog_Value() {}
func (*ReceiptBrokerLog_EmitInterchainEvent) isReceiptBrokerLog_Value() {}
func (*ReceiptBrokerLog_UpdateEventStatus) isReceiptBrokerLog_Value() {}
func (*ReceiptBrokerLog_UpdateIndex) isReceiptBrokerLog_Value() {}
func (m *ReceiptBrokerLog) GetValue() isReceiptBrokerLog_Value {
if m != nil {
......@@ -511,9 +538,9 @@ func (m *ReceiptBrokerLog) GetEmitInterchainEvent() *InterchainEvent {
return nil
}
func (m *ReceiptBrokerLog) GetUpdateEventStatus() *UpdateEventStatus {
if x, ok := m.GetValue().(*ReceiptBrokerLog_UpdateEventStatus); ok {
return x.UpdateEventStatus
func (m *ReceiptBrokerLog) GetUpdateIndex() *UpdateIndex {
if x, ok := m.GetValue().(*ReceiptBrokerLog_UpdateIndex); ok {
return x.UpdateIndex
}
return nil
}
......@@ -531,136 +558,394 @@ func (*ReceiptBrokerLog) XXX_OneofWrappers() []interface{} {
(*ReceiptBrokerLog_Register)(nil),
(*ReceiptBrokerLog_Audit)(nil),
(*ReceiptBrokerLog_EmitInterchainEvent)(nil),
(*ReceiptBrokerLog_UpdateEventStatus)(nil),
(*ReceiptBrokerLog_UpdateIndex)(nil),
}
}
//根据状态查看跨链事件
type QueryInterchainEventList struct {
//事件状态必填(默认是0,只查询待处理状态的事件)
Status int32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"`
// 主键索引
PrimaryKey string `protobuf:"bytes,2,opt,name=primaryKey,proto3" json:"primaryKey,omitempty"`
//单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
Count int32 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"`
// 0降序,1升序,默认降序
Direction int32 `protobuf:"varint,4,opt,name=direction,proto3" json:"direction,omitempty"`
//查询跨出事件
type QueryInterchainEvent struct {
Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"`
//目的链ID,固定格式0x000001
DstServiceID string `protobuf:"bytes,2,opt,name=dstServiceID,proto3" json:"dstServiceID,omitempty"`
//源链ID,固定格式0x000002
SrcServiceID string `protobuf:"bytes,3,opt,name=srcServiceID,proto3" json:"srcServiceID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *QueryInterchainEventList) Reset() { *m = QueryInterchainEventList{} }
func (m *QueryInterchainEventList) String() string { return proto.CompactTextString(m) }
func (*QueryInterchainEventList) ProtoMessage() {}
func (*QueryInterchainEventList) Descriptor() ([]byte, []int) {
func (m *QueryInterchainEvent) Reset() { *m = QueryInterchainEvent{} }
func (m *QueryInterchainEvent) String() string { return proto.CompactTextString(m) }
func (*QueryInterchainEvent) ProtoMessage() {}
func (*QueryInterchainEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{7}
}
func (m *QueryInterchainEventList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryInterchainEventList.Unmarshal(m, b)
func (m *QueryInterchainEvent) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryInterchainEvent.Unmarshal(m, b)
}
func (m *QueryInterchainEventList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_QueryInterchainEventList.Marshal(b, m, deterministic)
func (m *QueryInterchainEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_QueryInterchainEvent.Marshal(b, m, deterministic)
}
func (m *QueryInterchainEventList) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryInterchainEventList.Merge(m, src)
func (m *QueryInterchainEvent) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryInterchainEvent.Merge(m, src)
}
func (m *QueryInterchainEventList) XXX_Size() int {
return xxx_messageInfo_QueryInterchainEventList.Size(m)
func (m *QueryInterchainEvent) XXX_Size() int {
return xxx_messageInfo_QueryInterchainEvent.Size(m)
}
func (m *QueryInterchainEventList) XXX_DiscardUnknown() {
xxx_messageInfo_QueryInterchainEventList.DiscardUnknown(m)
func (m *QueryInterchainEvent) XXX_DiscardUnknown() {
xxx_messageInfo_QueryInterchainEvent.DiscardUnknown(m)
}
var xxx_messageInfo_QueryInterchainEventList proto.InternalMessageInfo
var xxx_messageInfo_QueryInterchainEvent proto.InternalMessageInfo
func (m *QueryInterchainEventList) GetStatus() int32 {
func (m *QueryInterchainEvent) GetIndex() uint64 {
if m != nil {
return m.Status
return m.Index
}
return 0
}
func (m *QueryInterchainEventList) GetPrimaryKey() string {
func (m *QueryInterchainEvent) GetDstServiceID() string {
if m != nil {
return m.PrimaryKey
return m.DstServiceID
}
return ""
}
func (m *QueryInterchainEventList) GetCount() int32 {
func (m *QueryInterchainEvent) GetSrcServiceID() string {
if m != nil {
return m.SrcServiceID
}
return ""
}
//跨链事件列表
type InterChainEventList struct {
List []*InterchainEvent `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *InterChainEventList) Reset() { *m = InterChainEventList{} }
func (m *InterChainEventList) String() string { return proto.CompactTextString(m) }
func (*InterChainEventList) ProtoMessage() {}
func (*InterChainEventList) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{8}
}
func (m *InterChainEventList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InterChainEventList.Unmarshal(m, b)
}
func (m *InterChainEventList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_InterChainEventList.Marshal(b, m, deterministic)
}
func (m *InterChainEventList) XXX_Merge(src proto.Message) {
xxx_messageInfo_InterChainEventList.Merge(m, src)
}
func (m *InterChainEventList) XXX_Size() int {
return xxx_messageInfo_InterChainEventList.Size(m)
}
func (m *InterChainEventList) XXX_DiscardUnknown() {
xxx_messageInfo_InterChainEventList.DiscardUnknown(m)
}
var xxx_messageInfo_InterChainEventList proto.InternalMessageInfo
func (m *InterChainEventList) GetList() []*InterchainEvent {
if m != nil {
return m.Count
return m.List
}
return nil
}
////根据状态查看跨链事件
//message QueryInterchainEventList {
// //事件状态必填(默认是0,只查询待处理状态的事件)
// int32 status = 1;
// // 主键索引
// string primaryKey = 2;
// //单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
// int32 count = 3;
// // 0降序,1升序,默认降序
// int32 direction = 4;
//}
////跨链事件列表
//message InterchainEventList {
// repeated InterchainEvent list = 1;
// string primaryKey = 2;
//}
type QueryOutterMeta struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *QueryOutterMeta) Reset() { *m = QueryOutterMeta{} }
func (m *QueryOutterMeta) String() string { return proto.CompactTextString(m) }
func (*QueryOutterMeta) ProtoMessage() {}
func (*QueryOutterMeta) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{9}
}
func (m *QueryOutterMeta) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryOutterMeta.Unmarshal(m, b)
}
func (m *QueryOutterMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_QueryOutterMeta.Marshal(b, m, deterministic)
}
func (m *QueryOutterMeta) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryOutterMeta.Merge(m, src)
}
func (m *QueryOutterMeta) XXX_Size() int {
return xxx_messageInfo_QueryOutterMeta.Size(m)
}
func (m *QueryOutterMeta) XXX_DiscardUnknown() {
xxx_messageInfo_QueryOutterMeta.DiscardUnknown(m)
}
var xxx_messageInfo_QueryOutterMeta proto.InternalMessageInfo
type QueryInnerMeta struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *QueryInnerMeta) Reset() { *m = QueryInnerMeta{} }
func (m *QueryInnerMeta) String() string { return proto.CompactTextString(m) }
func (*QueryInnerMeta) ProtoMessage() {}
func (*QueryInnerMeta) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{10}
}
func (m *QueryInnerMeta) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryInnerMeta.Unmarshal(m, b)
}
func (m *QueryInnerMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_QueryInnerMeta.Marshal(b, m, deterministic)
}
func (m *QueryInnerMeta) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryInnerMeta.Merge(m, src)
}
func (m *QueryInnerMeta) XXX_Size() int {
return xxx_messageInfo_QueryInnerMeta.Size(m)
}
func (m *QueryInnerMeta) XXX_DiscardUnknown() {
xxx_messageInfo_QueryInnerMeta.DiscardUnknown(m)
}
var xxx_messageInfo_QueryInnerMeta proto.InternalMessageInfo
type QueryInMessage struct {
InServicePair string `protobuf:"bytes,1,opt,name=inServicePair,proto3" json:"inServicePair,omitempty"`
SequenceNum uint64 `protobuf:"varint,2,opt,name=sequenceNum,proto3" json:"sequenceNum,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *QueryInMessage) Reset() { *m = QueryInMessage{} }
func (m *QueryInMessage) String() string { return proto.CompactTextString(m) }
func (*QueryInMessage) ProtoMessage() {}
func (*QueryInMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{11}
}
func (m *QueryInMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryInMessage.Unmarshal(m, b)
}
func (m *QueryInMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_QueryInMessage.Marshal(b, m, deterministic)
}
func (m *QueryInMessage) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryInMessage.Merge(m, src)
}
func (m *QueryInMessage) XXX_Size() int {
return xxx_messageInfo_QueryInMessage.Size(m)
}
func (m *QueryInMessage) XXX_DiscardUnknown() {
xxx_messageInfo_QueryInMessage.DiscardUnknown(m)
}
var xxx_messageInfo_QueryInMessage proto.InternalMessageInfo
func (m *QueryInMessage) GetInServicePair() string {
if m != nil {
return m.InServicePair
}
return ""
}
func (m *QueryInMessage) GetSequenceNum() uint64 {
if m != nil {
return m.SequenceNum
}
return 0
}
func (m *QueryInterchainEventList) GetDirection() int32 {
type QueryOutMessage struct {
InServicePair string `protobuf:"bytes,1,opt,name=inServicePair,proto3" json:"inServicePair,omitempty"`
SequenceNum uint64 `protobuf:"varint,2,opt,name=sequenceNum,proto3" json:"sequenceNum,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *QueryOutMessage) Reset() { *m = QueryOutMessage{} }
func (m *QueryOutMessage) String() string { return proto.CompactTextString(m) }
func (*QueryOutMessage) ProtoMessage() {}
func (*QueryOutMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{12}
}
func (m *QueryOutMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryOutMessage.Unmarshal(m, b)
}
func (m *QueryOutMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_QueryOutMessage.Marshal(b, m, deterministic)
}
func (m *QueryOutMessage) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryOutMessage.Merge(m, src)
}
func (m *QueryOutMessage) XXX_Size() int {
return xxx_messageInfo_QueryOutMessage.Size(m)
}
func (m *QueryOutMessage) XXX_DiscardUnknown() {
xxx_messageInfo_QueryOutMessage.DiscardUnknown(m)
}
var xxx_messageInfo_QueryOutMessage proto.InternalMessageInfo
func (m *QueryOutMessage) GetInServicePair() string {
if m != nil {
return m.InServicePair
}
return ""
}
func (m *QueryOutMessage) GetSequenceNum() uint64 {
if m != nil {
return m.Direction
return m.SequenceNum
}
return 0
}
//跨链事件列表
type InterchainEventList struct {
List []*InterchainEvent `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
PrimaryKey string `protobuf:"bytes,2,opt,name=primaryKey,proto3" json:"primaryKey,omitempty"`
type Meta struct {
Meta map[string]uint64 `protobuf:"bytes,1,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *InterchainEventList) Reset() { *m = InterchainEventList{} }
func (m *InterchainEventList) String() string { return proto.CompactTextString(m) }
func (*InterchainEventList) ProtoMessage() {}
func (*InterchainEventList) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{8}
func (m *Meta) Reset() { *m = Meta{} }
func (m *Meta) String() string { return proto.CompactTextString(m) }
func (*Meta) ProtoMessage() {}
func (*Meta) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{13}
}
func (m *InterchainEventList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InterchainEventList.Unmarshal(m, b)
func (m *Meta) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Meta.Unmarshal(m, b)
}
func (m *InterchainEventList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_InterchainEventList.Marshal(b, m, deterministic)
func (m *Meta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Meta.Marshal(b, m, deterministic)
}
func (m *InterchainEventList) XXX_Merge(src proto.Message) {
xxx_messageInfo_InterchainEventList.Merge(m, src)
func (m *Meta) XXX_Merge(src proto.Message) {
xxx_messageInfo_Meta.Merge(m, src)
}
func (m *InterchainEventList) XXX_Size() int {
return xxx_messageInfo_InterchainEventList.Size(m)
func (m *Meta) XXX_Size() int {
return xxx_messageInfo_Meta.Size(m)
}
func (m *InterchainEventList) XXX_DiscardUnknown() {
xxx_messageInfo_InterchainEventList.DiscardUnknown(m)
func (m *Meta) XXX_DiscardUnknown() {
xxx_messageInfo_Meta.DiscardUnknown(m)
}
var xxx_messageInfo_InterchainEventList proto.InternalMessageInfo
var xxx_messageInfo_Meta proto.InternalMessageInfo
func (m *InterchainEventList) GetList() []*InterchainEvent {
func (m *Meta) GetMeta() map[string]uint64 {
if m != nil {
return m.List
return m.Meta
}
return nil
}
func (m *InterchainEventList) GetPrimaryKey() string {
type Response struct {
// A status code that should follow the HTTP status codes.
Status int32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"`
// A message associated with the response code.
Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
// A payload that can be used to include metadata with this response.
Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Response) Reset() { *m = Response{} }
func (m *Response) String() string { return proto.CompactTextString(m) }
func (*Response) ProtoMessage() {}
func (*Response) Descriptor() ([]byte, []int) {
return fileDescriptor_f209535e190f2bed, []int{14}
}
func (m *Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Response.Unmarshal(m, b)
}
func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Response.Marshal(b, m, deterministic)
}
func (m *Response) XXX_Merge(src proto.Message) {
xxx_messageInfo_Response.Merge(m, src)
}
func (m *Response) XXX_Size() int {
return xxx_messageInfo_Response.Size(m)
}
func (m *Response) XXX_DiscardUnknown() {
xxx_messageInfo_Response.DiscardUnknown(m)
}
var xxx_messageInfo_Response proto.InternalMessageInfo
func (m *Response) GetStatus() int32 {
if m != nil {
return m.PrimaryKey
return m.Status
}
return 0
}
func (m *Response) GetMessage() string {
if m != nil {
return m.Message
}
return ""
}
func (m *Response) GetPayload() []byte {
if m != nil {
return m.Payload
}
return nil
}
func init() {
proto.RegisterType((*BrokerAction)(nil), "types.BrokerAction")
proto.RegisterType((*Register)(nil), "types.Register")
proto.RegisterType((*Audit)(nil), "types.Audit")
proto.RegisterType((*PollingEvent)(nil), "types.PollingEvent")
proto.RegisterType((*UpdateEventStatus)(nil), "types.UpdateEventStatus")
proto.RegisterType((*UpdateIndex)(nil), "types.UpdateIndex")
proto.RegisterType((*InterchainEvent)(nil), "types.InterchainEvent")
proto.RegisterType((*ReceiptBrokerLog)(nil), "types.ReceiptBrokerLog")
proto.RegisterType((*QueryInterchainEventList)(nil), "types.QueryInterchainEventList")
proto.RegisterType((*InterchainEventList)(nil), "types.InterchainEventList")
proto.RegisterType((*QueryInterchainEvent)(nil), "types.QueryInterchainEvent")
proto.RegisterType((*InterChainEventList)(nil), "types.InterChainEventList")
proto.RegisterType((*QueryOutterMeta)(nil), "types.QueryOutterMeta")
proto.RegisterType((*QueryInnerMeta)(nil), "types.QueryInnerMeta")
proto.RegisterType((*QueryInMessage)(nil), "types.QueryInMessage")
proto.RegisterType((*QueryOutMessage)(nil), "types.QueryOutMessage")
proto.RegisterType((*Meta)(nil), "types.Meta")
proto.RegisterMapType((map[string]uint64)(nil), "types.Meta.MetaEntry")
proto.RegisterType((*Response)(nil), "types.Response")
}
func init() {
......@@ -668,38 +953,47 @@ func init() {
}
var fileDescriptor_f209535e190f2bed = []byte{
// 491 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x54, 0x5d, 0x6e, 0xd3, 0x40,
0x10, 0x8e, 0x9d, 0x6c, 0x7e, 0xa6, 0x11, 0xa5, 0x5b, 0x54, 0xed, 0x03, 0x42, 0x96, 0xc5, 0x43,
0x84, 0xc0, 0x48, 0xe5, 0x04, 0x09, 0x20, 0xb9, 0x50, 0x10, 0x2c, 0xf0, 0xc2, 0xdb, 0xd6, 0x1e,
0xc2, 0x8a, 0xc4, 0x36, 0xeb, 0x71, 0x55, 0x5f, 0x80, 0x03, 0xf0, 0xc0, 0x7d, 0xb8, 0x19, 0xf2,
0xda, 0x6e, 0x5c, 0xb7, 0xa8, 0x17, 0xe8, 0xdb, 0xce, 0xf7, 0x7d, 0x33, 0x3b, 0xdf, 0xec, 0x6a,
0x60, 0x7e, 0x66, 0xd2, 0x1f, 0x68, 0x82, 0xcc, 0xa4, 0x94, 0x72, 0x46, 0x65, 0x86, 0xb9, 0xff,
0xdb, 0x85, 0xf9, 0xca, 0xe2, 0xcb, 0x88, 0x74, 0x9a, 0xf0, 0x67, 0x30, 0x35, 0xb8, 0xd6, 0x39,
0xa1, 0x11, 0x8e, 0xe7, 0x2c, 0xf6, 0x8e, 0xf7, 0x03, 0x2b, 0x0d, 0x64, 0x03, 0x87, 0x03, 0x79,
0x29, 0xe1, 0x8f, 0x81, 0xa9, 0x22, 0xd6, 0x24, 0x5c, 0xab, 0x9d, 0x37, 0xda, 0x65, 0x85, 0x85,
0x03, 0x59, 0x93, 0xfc, 0x0d, 0x1c, 0xe2, 0x56, 0xd3, 0x49, 0x42, 0x68, 0xa2, 0xef, 0x4a, 0x27,
0xaf, 0xcf, 0x31, 0x21, 0x31, 0xb4, 0x39, 0x47, 0x4d, 0x4e, 0x8f, 0x0d, 0x07, 0xf2, 0xa6, 0x24,
0x1e, 0xc2, 0x41, 0x91, 0xc5, 0x8a, 0xd0, 0x86, 0x9f, 0x48, 0x51, 0x91, 0x8b, 0x91, 0xad, 0x24,
0x9a, 0x4a, 0x5f, 0xfa, 0x7c, 0x38, 0x90, 0xd7, 0x93, 0xf8, 0x3d, 0x70, 0xa9, 0x14, 0xcc, 0x73,
0x16, 0x4c, 0xba, 0x54, 0xae, 0x26, 0xc0, 0xce, 0xd5, 0xa6, 0x40, 0xff, 0x29, 0x4c, 0x5b, 0xb3,
0xdc, 0x83, 0x3d, 0xbc, 0xc0, 0x88, 0x52, 0xf3, 0x5e, 0x6d, 0xd1, 0x8e, 0x64, 0x26, 0xbb, 0x90,
0xbf, 0x04, 0x66, 0xed, 0xde, 0x2e, 0xe5, 0x47, 0x30, 0xce, 0xeb, 0x86, 0x5d, 0x4b, 0x36, 0x91,
0xbf, 0x80, 0xf9, 0x87, 0x74, 0xb3, 0xd1, 0xc9, 0xba, 0xf6, 0x28, 0x60, 0x92, 0x16, 0xf4, 0x0e,
0x49, 0x35, 0x55, 0xda, 0xd0, 0x5f, 0xc2, 0xc1, 0x35, 0x77, 0xfc, 0x01, 0x30, 0x9d, 0xc4, 0x78,
0xd1, 0x88, 0xeb, 0xa0, 0x77, 0x19, 0xbb, 0xbc, 0xec, 0xaf, 0x03, 0xfb, 0xfd, 0xa1, 0x5e, 0xa9,
0x30, 0x6a, 0x2b, 0x3c, 0x02, 0x88, 0x73, 0x7a, 0x59, 0xc9, 0x4e, 0x5e, 0x35, 0x2d, 0x77, 0x90,
0x8a, 0xcf, 0x4d, 0xd4, 0xf2, 0xc3, 0x9a, 0xdf, 0x21, 0x95, 0x0d, 0x83, 0x3f, 0x3f, 0x97, 0x19,
0xda, 0x07, 0x1a, 0xc9, 0x36, 0xe4, 0x1c, 0x46, 0xdf, 0x8a, 0x24, 0xb2, 0xc3, 0x9f, 0x49, 0x7b,
0xae, 0x30, 0x65, 0xd6, 0xb9, 0x18, 0x7b, 0xc3, 0x0a, 0xab, 0xce, 0x1d, 0x0f, 0x93, 0x2b, 0x1e,
0xfe, 0xb8, 0x70, 0x5f, 0x62, 0x84, 0x3a, 0xa3, 0xfa, 0xf7, 0x9e, 0xa6, 0xeb, 0xbb, 0xaf, 0x5b,
0xa0, 0xff, 0xcb, 0x01, 0xf1, 0xb1, 0x40, 0x53, 0xf6, 0xee, 0x3e, 0xd5, 0x39, 0x75, 0xa6, 0xe9,
0x74, 0xa7, 0x59, 0xbd, 0x63, 0x66, 0xf4, 0x56, 0x99, 0xf2, 0x2d, 0x96, 0xed, 0x3b, 0xef, 0x90,
0xea, 0x77, 0x44, 0x69, 0xd1, 0xb8, 0x66, 0xb2, 0x0e, 0xf8, 0x43, 0x98, 0xc5, 0xda, 0xa0, 0x5d,
0x1b, 0xd6, 0x05, 0x93, 0x3b, 0xc0, 0x57, 0x70, 0x78, 0x53, 0x0b, 0x4f, 0x60, 0xb4, 0xd1, 0x39,
0x09, 0xc7, 0x1b, 0xfe, 0x7f, 0x7e, 0xd2, 0x6a, 0x6e, 0x6b, 0xeb, 0x78, 0x0a, 0xe3, 0x7a, 0xa5,
0xad, 0xe0, 0xeb, 0x34, 0x08, 0x9e, 0xdb, 0x5a, 0x67, 0x63, 0xbb, 0xdf, 0x5e, 0xfc, 0x0b, 0x00,
0x00, 0xff, 0xff, 0x60, 0x67, 0x5e, 0xab, 0xef, 0x04, 0x00, 0x00,
// 629 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x55, 0x4d, 0x6f, 0xd3, 0x4c,
0x10, 0x8e, 0x13, 0x3b, 0x4d, 0x26, 0x79, 0xdb, 0xbe, 0xdb, 0x52, 0x59, 0x5c, 0x88, 0xac, 0x1e,
0xca, 0x57, 0x2a, 0x15, 0x09, 0x10, 0xb7, 0x14, 0x2a, 0xa5, 0xa8, 0x2d, 0x65, 0xf9, 0x10, 0x70,
0xdb, 0x3a, 0x43, 0x58, 0x9a, 0xd8, 0xee, 0xee, 0xba, 0xaa, 0x6f, 0x1c, 0xf8, 0x5d, 0x5c, 0xf8,
0x63, 0x68, 0xc7, 0x9b, 0xc4, 0x2d, 0x20, 0x2e, 0x15, 0x17, 0x2e, 0xd6, 0xce, 0xb3, 0xcf, 0xee,
0x7c, 0xed, 0x33, 0x86, 0xee, 0x89, 0x4a, 0x4f, 0x51, 0xf5, 0x33, 0x95, 0x9a, 0x94, 0x05, 0xa6,
0xc8, 0x50, 0x47, 0x5f, 0xea, 0xd0, 0xdd, 0x25, 0x7c, 0x10, 0x1b, 0x99, 0x26, 0xec, 0x3e, 0xb4,
0x14, 0x8e, 0xa5, 0x36, 0xa8, 0x42, 0xaf, 0xe7, 0x6d, 0x75, 0x76, 0x56, 0xfa, 0x44, 0xed, 0x73,
0x07, 0x0f, 0x6b, 0x7c, 0x4e, 0x61, 0x9b, 0x10, 0x88, 0x7c, 0x24, 0x4d, 0x58, 0x27, 0x6e, 0xd7,
0x71, 0x07, 0x16, 0x1b, 0xd6, 0x78, 0xb9, 0xc9, 0x9e, 0xc3, 0x1a, 0x4e, 0xa5, 0xd9, 0x4f, 0x0c,
0xaa, 0xf8, 0x93, 0x90, 0xc9, 0xde, 0x39, 0x26, 0x26, 0x6c, 0xd0, 0x99, 0x0d, 0x77, 0xe6, 0xca,
0xee, 0xb0, 0xc6, 0x7f, 0x75, 0x88, 0x3d, 0x84, 0x4e, 0x9e, 0x8d, 0x84, 0xc1, 0xfd, 0x64, 0x84,
0x17, 0xa1, 0x4f, 0x77, 0x30, 0x77, 0xc7, 0x9b, 0xc5, 0xce, 0xb0, 0xc6, 0xab, 0x44, 0xb6, 0x0c,
0x75, 0x53, 0x84, 0x41, 0xcf, 0xdb, 0x0a, 0x78, 0xdd, 0x14, 0xbb, 0x4b, 0x10, 0x9c, 0x8b, 0x49,
0x8e, 0xd1, 0x3d, 0x68, 0xcd, 0x52, 0x63, 0x3d, 0xe8, 0xe0, 0x05, 0xc6, 0x26, 0x55, 0x47, 0x62,
0x8a, 0x54, 0x80, 0x36, 0xaf, 0x42, 0xd1, 0x00, 0x02, 0x4a, 0xee, 0xcf, 0x54, 0xb6, 0x01, 0x4d,
0x6d, 0x84, 0xc9, 0x35, 0x15, 0xa7, 0xcd, 0x9d, 0x15, 0x6d, 0x43, 0xf7, 0x38, 0x9d, 0x4c, 0x64,
0x32, 0x2e, 0x33, 0xba, 0x05, 0xfe, 0x14, 0x8d, 0x70, 0xe5, 0xee, 0xb8, 0x54, 0x0e, 0xd1, 0x08,
0x4e, 0x1b, 0xd1, 0x37, 0x0f, 0x3a, 0x95, 0xcc, 0xac, 0x6b, 0x8d, 0x67, 0x39, 0x26, 0x31, 0x1e,
0xe5, 0x53, 0x3a, 0xe7, 0xf3, 0x2a, 0xc4, 0x22, 0xe8, 0x8e, 0xb4, 0x79, 0x85, 0xea, 0x5c, 0xc6,
0xb8, 0xff, 0xcc, 0x05, 0x70, 0x09, 0xb3, 0x1c, 0xad, 0xe2, 0x05, 0xa7, 0x51, 0x72, 0xaa, 0x18,
0x0b, 0x61, 0x49, 0xe1, 0xd9, 0xeb, 0x22, 0x43, 0x2a, 0xb4, 0xcf, 0x67, 0x26, 0xbb, 0x6b, 0xdf,
0x89, 0xce, 0xd2, 0x44, 0x23, 0x15, 0xb5, 0xfa, 0x4e, 0x4a, 0x98, 0xcf, 0x09, 0xd1, 0x77, 0x0f,
0x56, 0xae, 0xf6, 0x71, 0x1d, 0x02, 0x49, 0x1d, 0x2c, 0xc3, 0x2f, 0x8d, 0x6b, 0x0b, 0x9c, 0x81,
0x6f, 0x16, 0x51, 0xd3, 0xda, 0x62, 0x1f, 0xf3, 0x24, 0xa6, 0x70, 0xdb, 0x9c, 0xd6, 0x16, 0x13,
0x6a, 0xac, 0xc3, 0x66, 0xaf, 0x61, 0x31, 0xbb, 0xae, 0xf4, 0x6d, 0x89, 0x5e, 0xcb, 0xac, 0x6f,
0x5f, 0xeb, 0xb0, 0xca, 0x31, 0x46, 0x99, 0x99, 0x52, 0x32, 0x07, 0xe9, 0xf8, 0x1f, 0xd4, 0x8b,
0x81, 0xf5, 0x97, 0x39, 0xaa, 0xe2, 0xaf, 0x36, 0x34, 0x1a, 0xc0, 0x1a, 0x39, 0x7c, 0x3a, 0x77,
0x78, 0x20, 0xb5, 0x61, 0x77, 0xc0, 0x9f, 0x48, 0x6d, 0x42, 0xaf, 0xd7, 0xf8, 0x7d, 0x69, 0x38,
0x71, 0xa2, 0xff, 0x61, 0x85, 0x02, 0x7f, 0x91, 0x1b, 0x83, 0xca, 0xea, 0x2b, 0x5a, 0x85, 0x65,
0x97, 0x4b, 0xe2, 0x90, 0x77, 0x73, 0xe4, 0x10, 0xb5, 0x16, 0x63, 0x64, 0x9b, 0xf0, 0x9f, 0x4c,
0x5c, 0x20, 0xc7, 0x42, 0x2a, 0x27, 0xf5, 0xcb, 0xe0, 0x55, 0x4d, 0xd6, 0x7f, 0xd2, 0x64, 0xf4,
0x7e, 0xe1, 0xfe, 0xba, 0xaf, 0xfe, 0x0c, 0xbe, 0x0d, 0x9e, 0xdd, 0x9e, 0x4f, 0x12, 0x5b, 0x8d,
0x1b, 0x95, 0x49, 0x42, 0x9f, 0xbd, 0xc4, 0xa8, 0xa2, 0x9c, 0x29, 0x37, 0x1f, 0x41, 0x7b, 0x0e,
0xb1, 0x55, 0x68, 0x9c, 0x62, 0xe1, 0xbc, 0xdb, 0xa5, 0x6d, 0x26, 0x75, 0xdb, 0x79, 0x2b, 0x8d,
0x27, 0xf5, 0xc7, 0x5e, 0xf4, 0xd6, 0x8e, 0xcb, 0x52, 0xd7, 0x15, 0xa5, 0x78, 0x55, 0xa5, 0xd8,
0xb1, 0x31, 0x2d, 0x53, 0x74, 0xfd, 0x9e, 0x99, 0x76, 0x27, 0x13, 0xc5, 0x24, 0x15, 0x23, 0xea,
0x72, 0x97, 0xcf, 0xcc, 0x9d, 0x16, 0x34, 0xcb, 0x1f, 0xd4, 0x2e, 0x7c, 0x68, 0xf5, 0xfb, 0xdb,
0x14, 0xfb, 0x49, 0x93, 0xfe, 0x56, 0x0f, 0x7e, 0x04, 0x00, 0x00, 0xff, 0xff, 0xc2, 0xf6, 0xd8,
0x9f, 0xbd, 0x06, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment