Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
9f60df2f
Commit
9f60df2f
authored
Oct 11, 2021
by
harrylee
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update broker
parent
65527d44
Pipeline
#8119
failed with stages
in 0 seconds
Changes
10
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
924 additions
and
277 deletions
+924
-277
broker.go
plugin/dapp/broker/executor/broker.go
+1
-0
brokerdb.go
plugin/dapp/broker/executor/brokerdb.go
+284
-53
exec.go
plugin/dapp/broker/executor/exec.go
+7
-2
exec_local.go
plugin/dapp/broker/executor/exec_local.go
+5
-25
kv.go
plugin/dapp/broker/executor/kv.go
+61
-1
query,go.go
plugin/dapp/broker/executor/query,go.go
+26
-0
tables.go
plugin/dapp/broker/executor/tables.go
+5
-5
broker.proto
plugin/dapp/broker/proto/broker.proto
+76
-41
broker.go
plugin/dapp/broker/types/broker.go
+19
-4
broker.pb.go
plugin/dapp/broker/types/broker.pb.go
+440
-146
No files found.
plugin/dapp/broker/executor/broker.go
View file @
9f60df2f
...
...
@@ -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
()
}
...
...
plugin/dapp/broker/executor/brokerdb.go
View file @
9f60df2f
...
...
@@ -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
.
Req
Type
==
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
.
Req
Type
==
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
plugin/dapp/broker/executor/exec.go
View file @
9f60df2f
...
...
@@ -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_Update
EventStatus
(
payload
*
brokertypes
.
UpdateEventStatus
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
func
(
b
*
broker
)
Exec_Update
Index
(
payload
*
brokertypes
.
UpdateIndex
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
db
:=
newBrokerDB
(
b
,
tx
,
index
)
return
db
.
update
EventStatus
(
payload
)
return
db
.
update
Index
(
payload
)
}
func
(
b
*
broker
)
Exec_EmitInterchainEvent
(
payload
*
brokertypes
.
InterchainEvent
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
db
:=
newBrokerDB
(
b
,
tx
,
index
)
...
...
plugin/dapp/broker/executor/exec_local.go
View file @
9f60df2f
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
}
...
...
plugin/dapp/broker/executor/kv.go
View file @
9f60df2f
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
plugin/dapp/broker/executor/query,go.go
View file @
9f60df2f
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
plugin/dapp/broker/executor/tables.go
View file @
9f60df2f
...
...
@@ -13,7 +13,7 @@ var opt_broker_event = &table.Option{
Prefix
:
KeyPrefixLocalDB
,
Name
:
"broker"
,
Primary
:
"index"
,
Index
:
[]
string
{
"dst
Chain
ID"
,
"status"
,
"reqType"
},
Index
:
[]
string
{
"dst
Service
ID"
,
"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
==
"dst
Chain
ID"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%s"
,
m
.
GetDst
Chain
ID
())),
nil
}
else
if
key
==
"dst
Service
ID"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%s"
,
m
.
GetDst
Service
ID
())),
nil
}
else
if
key
==
"status"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%d"
,
m
.
GetStatus
())),
nil
}
else
if
key
==
"
reqT
ype"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%d"
,
m
.
Get
Req
Type
())),
nil
}
else
if
key
==
"
t
ype"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%d"
,
m
.
GetType
())),
nil
}
return
nil
,
types
.
ErrNotFound
}
...
...
plugin/dapp/broker/proto/broker.proto
View file @
9f60df2f
...
...
@@ -6,7 +6,7 @@ message BrokerAction {
Register
register
=
1
;
Audit
audit
=
2
;
InterchainEvent
emitInterchainEvent
=
3
;
Update
EventStatus
updateEventStatus
=
4
;
Update
Index
updateIndex
=
4
;
}
int32
ty
=
5
;
}
...
...
@@ -26,43 +26,33 @@ message Audit {
// 轮循事件
message
PollingEvent
{
string
outM
eta
=
1
;
Meta
m
eta
=
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
dst
Chain
ID
=
2
;
string
dst
Service
ID
=
2
;
//源链ID,固定格式0x000002
string
src
Chain
ID
=
3
;
string
src
Service
ID
=
3
;
//跨链交易类型 0表示storage,1表示coins,2表示token......
uint64
reqT
ype
=
4
;
uint64
t
ype
=
4
;
//调用方法
string
func
=
5
;
//参数列表
...
...
@@ -76,25 +66,69 @@ message ReceiptBrokerLog{
Register
register
=
1
;
Audit
audit
=
2
;
InterchainEvent
emitInterchainEvent
=
3
;
Update
EventStatus
updateEventStatus
=
4
;
Update
Index
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
plugin/dapp/broker/types/broker.go
View file @
9f60df2f
...
...
@@ -16,12 +16,12 @@ const (
TyUnknowAction
=
iota
+
100
TyRegisterAction
TyAuditAction
TyUpdate
EventStatus
Action
TyUpdate
Index
Action
TyEmitInterchainEventAction
NameRegisterAction
=
"Register"
NameAuditAction
=
"Audit"
NameUpdate
EventStatusAction
=
"UpdateEventStatus
"
NameUpdate
IndexAction
=
"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
TyUpdate
EventStatus
Log
TyUpdate
Index
Log
TyEmitInterchainEventLog
)
...
...
@@ -67,7 +82,7 @@ var (
actionMap
=
map
[
string
]
int32
{
NameRegisterAction
:
TyRegisterAction
,
NameAuditAction
:
TyAuditAction
,
NameUpdate
EventStatusAction
:
TyUpdateEventStatus
Action
,
NameUpdate
IndexAction
:
TyUpdateIndex
Action
,
NameEmitInterchainEventAction
:
TyEmitInterchainEventAction
,
}
//定义log的id和具体log类型及名称,填入具体自定义log类型
...
...
plugin/dapp/broker/types/broker.pb.go
View file @
9f60df2f
...
...
@@ -27,7 +27,7 @@ type BrokerAction struct {
// *BrokerAction_Register
// *BrokerAction_Audit
// *BrokerAction_EmitInterchainEvent
// *BrokerAction_Update
EventStatus
// *BrokerAction_Update
Index
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_Update
EventStatus
struct
{
Update
EventStatus
*
UpdateEventStatus
`protobuf:"bytes,4,opt,name=updateEventStatus
,proto3,oneof"`
type
BrokerAction_Update
Index
struct
{
Update
Index
*
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_Update
EventStatus
)
isBrokerAction_Value
()
{}
func
(
*
BrokerAction_Update
Index
)
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
)
GetUpdate
EventStatus
()
*
UpdateEventStatus
{
if
x
,
ok
:=
m
.
GetValue
()
.
(
*
BrokerAction_Update
EventStatus
);
ok
{
return
x
.
Update
EventStatus
func
(
m
*
BrokerAction
)
GetUpdate
Index
()
*
UpdateIndex
{
if
x
,
ok
:=
m
.
GetValue
()
.
(
*
BrokerAction_Update
Index
);
ok
{
return
x
.
Update
Index
}
return
nil
}
...
...
@@ -136,7 +136,7 @@ func (*BrokerAction) XXX_OneofWrappers() []interface{} {
(
*
BrokerAction_Register
)(
nil
),
(
*
BrokerAction_Audit
)(
nil
),
(
*
BrokerAction_EmitInterchainEvent
)(
nil
),
(
*
BrokerAction_Update
EventStatus
)(
nil
),
(
*
BrokerAction_Update
Index
)(
nil
),
}
}
...
...
@@ -233,7 +233,7 @@ func (m *Audit) GetStatus() string {
// 轮循事件
type
PollingEvent
struct
{
OutMeta
string
`protobuf:"bytes,1,opt,name=outMeta,proto3" json:"outM
eta,omitempty"`
Meta
*
Meta
`protobuf:"bytes,1,opt,name=meta,proto3" json:"m
eta,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
)
Get
OutMeta
()
string
{
func
(
m
*
PollingEvent
)
Get
Meta
()
*
Meta
{
if
m
!=
nil
{
return
m
.
Out
Meta
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
*
Update
EventStatus
)
Reset
()
{
*
m
=
UpdateEventStatus
{}
}
func
(
m
*
Update
EventStatus
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
Update
EventStatus
)
ProtoMessage
()
{}
func
(
*
Update
EventStatus
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
m
*
Update
Index
)
Reset
()
{
*
m
=
UpdateIndex
{}
}
func
(
m
*
Update
Index
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
Update
Index
)
ProtoMessage
()
{}
func
(
*
Update
Index
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_f209535e190f2bed
,
[]
int
{
4
}
}
func
(
m
*
Update
EventStatus
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_Update
EventStatus
.
Unmarshal
(
m
,
b
)
func
(
m
*
Update
Index
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_Update
Index
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
Update
EventStatus
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_Update
EventStatus
.
Marshal
(
b
,
m
,
deterministic
)
func
(
m
*
Update
Index
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_Update
Index
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
Update
EventStatus
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_Update
EventStatus
.
Merge
(
m
,
src
)
func
(
m
*
Update
Index
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_Update
Index
.
Merge
(
m
,
src
)
}
func
(
m
*
Update
EventStatus
)
XXX_Size
()
int
{
return
xxx_messageInfo_Update
EventStatus
.
Size
(
m
)
func
(
m
*
Update
Index
)
XXX_Size
()
int
{
return
xxx_messageInfo_Update
Index
.
Size
(
m
)
}
func
(
m
*
Update
EventStatus
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_Update
EventStatus
.
DiscardUnknown
(
m
)
func
(
m
*
Update
Index
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_Update
Index
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_Update
EventStatus
proto
.
InternalMessageInfo
var
xxx_messageInfo_Update
Index
proto
.
InternalMessageInfo
func
(
m
*
Update
EventStatus
)
GetIndex
()
string
{
func
(
m
*
Update
Index
)
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
*
Update
EventStatus
)
GetStatus
()
int32
{
func
(
m
*
Update
Index
)
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
Dst
ChainID
string
`protobuf:"bytes,2,opt,name=dstChainID,proto3" json:"dstChain
ID,omitempty"`
Dst
ServiceID
string
`protobuf:"bytes,2,opt,name=dstServiceID,proto3" json:"dstService
ID,omitempty"`
//源链ID,固定格式0x000002
Src
ChainID
string
`protobuf:"bytes,3,opt,name=srcChainID,proto3" json:"srcChain
ID,omitempty"`
Src
ServiceID
string
`protobuf:"bytes,3,opt,name=srcServiceID,proto3" json:"srcService
ID,omitempty"`
//跨链交易类型 0表示storage,1表示coins,2表示token......
ReqType
uint64
`protobuf:"varint,4,opt,name=reqType,proto3" json:"reqT
ype,omitempty"`
Type
uint64
`protobuf:"varint,4,opt,name=type,proto3" json:"t
ype,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
)
GetDst
Chain
ID
()
string
{
func
(
m
*
InterchainEvent
)
GetDst
Service
ID
()
string
{
if
m
!=
nil
{
return
m
.
Dst
Chain
ID
return
m
.
Dst
Service
ID
}
return
""
}
func
(
m
*
InterchainEvent
)
GetSrc
Chain
ID
()
string
{
func
(
m
*
InterchainEvent
)
GetSrc
Service
ID
()
string
{
if
m
!=
nil
{
return
m
.
Src
Chain
ID
return
m
.
Src
Service
ID
}
return
""
}
func
(
m
*
InterchainEvent
)
Get
Req
Type
()
uint64
{
func
(
m
*
InterchainEvent
)
GetType
()
uint64
{
if
m
!=
nil
{
return
m
.
Req
Type
return
m
.
Type
}
return
0
}
...
...
@@ -422,7 +449,7 @@ type ReceiptBrokerLog struct {
// *ReceiptBrokerLog_Register
// *ReceiptBrokerLog_Audit
// *ReceiptBrokerLog_EmitInterchainEvent
// *ReceiptBrokerLog_Update
EventStatus
// *ReceiptBrokerLog_Update
Index
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_Update
EventStatus
struct
{
Update
EventStatus
*
UpdateEventStatus
`protobuf:"bytes,4,opt,name=updateEventStatus
,proto3,oneof"`
type
ReceiptBrokerLog_Update
Index
struct
{
Update
Index
*
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_Update
EventStatus
)
isReceiptBrokerLog_Value
()
{}
func
(
*
ReceiptBrokerLog_Update
Index
)
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
)
GetUpdate
EventStatus
()
*
UpdateEventStatus
{
if
x
,
ok
:=
m
.
GetValue
()
.
(
*
ReceiptBrokerLog_Update
EventStatus
);
ok
{
return
x
.
Update
EventStatus
func
(
m
*
ReceiptBrokerLog
)
GetUpdate
Index
()
*
UpdateIndex
{
if
x
,
ok
:=
m
.
GetValue
()
.
(
*
ReceiptBrokerLog_Update
Index
);
ok
{
return
x
.
Update
Index
}
return
nil
}
...
...
@@ -531,136 +558,394 @@ func (*ReceiptBrokerLog) XXX_OneofWrappers() []interface{} {
(
*
ReceiptBrokerLog_Register
)(
nil
),
(
*
ReceiptBrokerLog_Audit
)(
nil
),
(
*
ReceiptBrokerLog_EmitInterchainEvent
)(
nil
),
(
*
ReceiptBrokerLog_Update
EventStatus
)(
nil
),
(
*
ReceiptBrokerLog_Update
Index
)(
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
*
QueryInterchainEvent
List
)
Reset
()
{
*
m
=
QueryInterchainEventLis
t
{}
}
func
(
m
*
QueryInterchainEvent
List
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryInterchainEvent
List
)
ProtoMessage
()
{}
func
(
*
QueryInterchainEvent
List
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
m
*
QueryInterchainEvent
)
Reset
()
{
*
m
=
QueryInterchainEven
t
{}
}
func
(
m
*
QueryInterchainEvent
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryInterchainEvent
)
ProtoMessage
()
{}
func
(
*
QueryInterchainEvent
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_f209535e190f2bed
,
[]
int
{
7
}
}
func
(
m
*
QueryInterchainEvent
List
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_QueryInterchainEvent
List
.
Unmarshal
(
m
,
b
)
func
(
m
*
QueryInterchainEvent
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_QueryInterchainEvent
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
QueryInterchainEvent
List
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_QueryInterchainEvent
List
.
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
*
QueryInterchainEvent
List
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_QueryInterchainEvent
List
.
Merge
(
m
,
src
)
func
(
m
*
QueryInterchainEvent
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_QueryInterchainEvent
.
Merge
(
m
,
src
)
}
func
(
m
*
QueryInterchainEvent
List
)
XXX_Size
()
int
{
return
xxx_messageInfo_QueryInterchainEvent
List
.
Size
(
m
)
func
(
m
*
QueryInterchainEvent
)
XXX_Size
()
int
{
return
xxx_messageInfo_QueryInterchainEvent
.
Size
(
m
)
}
func
(
m
*
QueryInterchainEvent
List
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_QueryInterchainEvent
List
.
DiscardUnknown
(
m
)
func
(
m
*
QueryInterchainEvent
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_QueryInterchainEvent
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_QueryInterchainEvent
List
proto
.
InternalMessageInfo
var
xxx_messageInfo_QueryInterchainEvent
proto
.
InternalMessageInfo
func
(
m
*
QueryInterchainEvent
List
)
GetStatus
()
int32
{
func
(
m
*
QueryInterchainEvent
)
GetIndex
()
uint64
{
if
m
!=
nil
{
return
m
.
Status
return
m
.
Index
}
return
0
}
func
(
m
*
QueryInterchainEvent
List
)
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
((
*
Update
EventStatus
)(
nil
),
"types.UpdateEventStatus
"
)
proto
.
RegisterType
((
*
Update
Index
)(
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.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment