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
6d6d870f
Commit
6d6d870f
authored
Jul 27, 2020
by
madengji
Committed by
33cn
Aug 06, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
para bind miner fix
parent
3abdcf52
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
43 additions
and
34 deletions
+43
-34
chain33.para.toml
chain33.para.toml
+1
-1
testcase.sh
plugin/dapp/paracross/cmd/build/testcase.sh
+1
-0
paracross.go
plugin/dapp/paracross/commands/paracross.go
+3
-4
kv.go
plugin/dapp/paracross/executor/kv.go
+0
-4
query.go
plugin/dapp/paracross/executor/query.go
+12
-3
reward.go
plugin/dapp/paracross/executor/reward.go
+24
-21
paracross.proto
plugin/dapp/paracross/proto/paracross.proto
+2
-1
No files found.
chain33.para.toml
View file @
6d6d870f
...
@@ -90,7 +90,7 @@ coinReward=18
...
@@ -90,7 +90,7 @@ coinReward=18
#发展基金奖励
#发展基金奖励
coinDevFund
=
12
coinDevFund
=
12
#如果超级节点上绑定了委托账户,则奖励超级节点coinBaseReward,其余部分(coinReward-coinBaseReward)按权重分给委托账户
#如果超级节点上绑定了委托账户,则奖励超级节点coinBaseReward,其余部分(coinReward-coinBaseReward)按权重分给委托账户
coinBaseReward
=
5
coinBaseReward
=
3
#委托账户最少解绑定时间(按小时)
#委托账户最少解绑定时间(按小时)
unBindTime
=
24
unBindTime
=
24
...
...
plugin/dapp/paracross/cmd/build/testcase.sh
View file @
6d6d870f
...
@@ -54,6 +54,7 @@ function para_set_toml() {
...
@@ -54,6 +54,7 @@ function para_set_toml() {
sed
-i
$xsedfix
's/^mainLoopCheckCommitTxDoneForkHeight=.*/mainLoopCheckCommitTxDoneForkHeight='''
$MainLoopCheckForkHeight
'''/g'
"
${
1
}
"
sed
-i
$xsedfix
's/^mainLoopCheckCommitTxDoneForkHeight=.*/mainLoopCheckCommitTxDoneForkHeight='''
$MainLoopCheckForkHeight
'''/g'
"
${
1
}
"
sed
-i
$xsedfix
's/^mainBlockHashForkHeight=.*/mainBlockHashForkHeight=1/g'
"
${
1
}
"
sed
-i
$xsedfix
's/^mainBlockHashForkHeight=.*/mainBlockHashForkHeight=1/g'
"
${
1
}
"
sed
-i
$xsedfix
's/^unBindTime=.*/unBindTime=0/g'
"
${
1
}
"
#blsSign case
#blsSign case
if
[
-n
"
$3
"
]
;
then
if
[
-n
"
$3
"
]
;
then
...
...
plugin/dapp/paracross/commands/paracross.go
View file @
6d6d870f
...
@@ -545,7 +545,7 @@ func createNodeBindTx(cmd *cobra.Command, args []string) {
...
@@ -545,7 +545,7 @@ func createNodeBindTx(cmd *cobra.Command, args []string) {
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
action
,
_
:=
cmd
.
Flags
()
.
GetUint32
(
"action"
)
action
,
_
:=
cmd
.
Flags
()
.
GetUint32
(
"action"
)
node
,
_
:=
cmd
.
Flags
()
.
GetString
(
"node"
)
node
,
_
:=
cmd
.
Flags
()
.
GetString
(
"node"
)
coins
,
_
:=
cmd
.
Flags
()
.
GetUint
32
(
"coins"
)
coins
,
_
:=
cmd
.
Flags
()
.
GetUint
64
(
"coins"
)
if
!
strings
.
HasPrefix
(
paraName
,
"user.p"
)
{
if
!
strings
.
HasPrefix
(
paraName
,
"user.p"
)
{
fmt
.
Fprintln
(
os
.
Stderr
,
"paraName is not right, paraName format like `user.p.guodun.`"
)
fmt
.
Fprintln
(
os
.
Stderr
,
"paraName is not right, paraName format like `user.p.guodun.`"
)
...
@@ -556,7 +556,7 @@ func createNodeBindTx(cmd *cobra.Command, args []string) {
...
@@ -556,7 +556,7 @@ func createNodeBindTx(cmd *cobra.Command, args []string) {
fmt
.
Fprintln
(
os
.
Stderr
,
"coins should bigger than 0"
)
fmt
.
Fprintln
(
os
.
Stderr
,
"coins should bigger than 0"
)
}
}
payload
:=
&
pt
.
ParaBindMinerInfo
{
BindAction
:
int32
(
action
),
BindCount
:
int64
(
coins
),
Target
Addr
:
node
}
payload
:=
&
pt
.
ParaBindMinerInfo
{
BindAction
:
int32
(
action
),
BindCount
:
int64
(
coins
),
Target
Node
:
node
}
params
:=
&
rpctypes
.
CreateTxIn
{
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
getRealExecName
(
paraName
,
pt
.
ParaX
),
Execer
:
getRealExecName
(
paraName
,
pt
.
ParaX
),
ActionName
:
"ParaBindMiner"
,
ActionName
:
"ParaBindMiner"
,
...
@@ -587,8 +587,7 @@ func addNodeBindCmdFlags(cmd *cobra.Command) {
...
@@ -587,8 +587,7 @@ func addNodeBindCmdFlags(cmd *cobra.Command) {
func
nodeBindInfo
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
nodeBindInfo
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
addr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"node"
)
addr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"addr"
)
var
params
rpctypes
.
Query4Jrpc
var
params
rpctypes
.
Query4Jrpc
params
.
Execer
=
pt
.
ParaX
params
.
Execer
=
pt
.
ParaX
...
...
plugin/dapp/paracross/executor/kv.go
View file @
6d6d870f
...
@@ -195,7 +195,3 @@ func calcParaBindMinerAddr(node, bind string) []byte {
...
@@ -195,7 +195,3 @@ func calcParaBindMinerAddr(node, bind string) []byte {
func
calcParaBindMinerNode
(
node
string
)
[]
byte
{
func
calcParaBindMinerNode
(
node
string
)
[]
byte
{
return
[]
byte
(
paraBindMinderNode
+
node
)
return
[]
byte
(
paraBindMinderNode
+
node
)
}
}
func
calcParaBindMinerNodePrefix
()
[]
byte
{
return
[]
byte
(
paraBindMinderNode
)
}
plugin/dapp/paracross/executor/query.go
View file @
6d6d870f
...
@@ -537,12 +537,13 @@ func (p *Paracross) Query_GetHeight(req *types.ReqString) (*pt.ParacrossConsensu
...
@@ -537,12 +537,13 @@ func (p *Paracross) Query_GetHeight(req *types.ReqString) (*pt.ParacrossConsensu
// Query_GetNodeBindMinerList query get super node bind miner list
// Query_GetNodeBindMinerList query get super node bind miner list
func
(
p
*
Paracross
)
Query_GetNodeBindMinerList
(
in
*
types
.
ReqString
)
(
types
.
Message
,
error
)
{
func
(
p
*
Paracross
)
Query_GetNodeBindMinerList
(
in
*
types
.
ReqString
)
(
types
.
Message
,
error
)
{
if
in
==
nil
||
len
(
in
.
Data
)
==
0
{
if
in
==
nil
||
len
(
in
.
Data
)
==
0
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"in=%v"
,
in
)
return
nil
,
types
.
ErrInvalidParam
}
}
list
,
err
:=
getBindNodeInfo
(
p
.
GetStateDB
(),
in
.
Data
)
list
,
err
:=
getBindNodeInfo
(
p
.
GetStateDB
(),
in
.
Data
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
clog
.
Error
(
"Query_GetNodeBindMinerList get node"
,
"err"
,
err
,
"req"
,
in
.
Data
)
return
nil
,
errors
.
Cause
(
err
)
}
}
var
resp
pt
.
RespParaNodeBindList
var
resp
pt
.
RespParaNodeBindList
...
@@ -551,10 +552,18 @@ func (p *Paracross) Query_GetNodeBindMinerList(in *types.ReqString) (types.Messa
...
@@ -551,10 +552,18 @@ func (p *Paracross) Query_GetNodeBindMinerList(in *types.ReqString) (types.Messa
for
_
,
addr
:=
range
list
.
Miners
{
for
_
,
addr
:=
range
list
.
Miners
{
info
,
err
:=
getBindAddrInfo
(
p
.
GetStateDB
(),
in
.
Data
,
addr
)
info
,
err
:=
getBindAddrInfo
(
p
.
GetStateDB
(),
in
.
Data
,
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
clog
.
Error
(
"Query_GetNodeBindMinerList get addr"
,
"err"
,
err
,
"node"
,
in
.
Data
,
"addr"
,
addr
)
return
nil
,
errors
.
Cause
(
err
)
}
}
resp
.
Details
=
append
(
resp
.
Details
,
info
)
resp
.
Details
=
append
(
resp
.
Details
,
info
)
}
}
info
,
err
:=
getBindAddrInfo
(
p
.
GetStateDB
(),
in
.
Data
,
"1E5saiXVb9mW8wcWUUZjsHJPZs5GmdzuSY"
)
if
err
!=
nil
{
clog
.
Error
(
"Query_GetNodeBindMinerList get addr"
,
"err"
,
err
,
"node"
,
in
.
Data
,
"addr"
,
"1E5saiXVb9mW8wcWUUZjsHJPZs5GmdzuSY"
)
return
nil
,
errors
.
Cause
(
err
)
}
resp
.
Details
=
append
(
resp
.
Details
,
info
)
return
&
resp
,
nil
return
&
resp
,
nil
}
}
plugin/dapp/paracross/executor/reward.go
View file @
6d6d870f
...
@@ -242,7 +242,7 @@ func makeNodeBindReceipt(addr string, prev, current *pt.ParaNodeBindList) *types
...
@@ -242,7 +242,7 @@ func makeNodeBindReceipt(addr string, prev, current *pt.ParaNodeBindList) *types
//绑定到超级节点
//绑定到超级节点
func
(
a
*
action
)
bind2Node
(
node
string
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
bind2Node
(
node
string
)
(
*
types
.
Receipt
,
error
)
{
info
,
err
:=
getBindNodeInfo
(
a
.
db
,
node
)
info
,
err
:=
getBindNodeInfo
(
a
.
db
,
node
)
if
!
isNotFound
(
errors
.
Cause
(
err
))
{
if
err
!=
nil
&&
!
isNotFound
(
errors
.
Cause
(
err
))
{
return
nil
,
errors
.
Wrap
(
err
,
"bind2Node"
)
return
nil
,
errors
.
Wrap
(
err
,
"bind2Node"
)
}
}
...
@@ -314,13 +314,17 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
...
@@ -314,13 +314,17 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"bindMiner bindCount nil from addr %s"
,
a
.
fromaddr
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"bindMiner bindCount nil from addr %s"
,
a
.
fromaddr
)
}
}
ok
,
err
:=
a
.
isValidSuperNode
(
cmd
.
TargetAddr
)
ok
,
err
:=
a
.
isValidSuperNode
(
cmd
.
TargetNode
)
if
err
!=
nil
||
!
ok
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"invalid target node=%s"
,
cmd
.
TargetAddr
)
return
nil
,
err
}
//非有效超级节点
if
!
ok
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"invalid target node=%s"
,
cmd
.
TargetNode
)
}
}
current
,
err
:=
getBindAddrInfo
(
a
.
db
,
cmd
.
Target
Addr
,
a
.
fromaddr
)
current
,
err
:=
getBindAddrInfo
(
a
.
db
,
cmd
.
Target
Node
,
a
.
fromaddr
)
if
!
isNotFound
(
errors
.
Cause
(
err
))
{
if
err
!=
nil
&&
!
isNotFound
(
errors
.
Cause
(
err
))
{
return
nil
,
errors
.
Wrap
(
err
,
"getBindAddrInfo"
)
return
nil
,
errors
.
Wrap
(
err
,
"getBindAddrInfo"
)
}
}
...
@@ -332,24 +336,23 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
...
@@ -332,24 +336,23 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"bind coins same current=%d, cmd=%d"
,
current
.
BindCount
,
cmd
.
BindCount
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"bind coins same current=%d, cmd=%d"
,
current
.
BindCount
,
cmd
.
BindCount
)
}
}
//释放一部分
冻结
coins
//释放一部分coins
if
cmd
.
BindCount
<
current
.
BindCount
{
if
cmd
.
BindCount
<
current
.
BindCount
{
receipt
,
err
=
a
.
coinsAccount
.
ExecActive
(
a
.
fromaddr
,
a
.
execaddr
,
(
current
.
BindCount
-
cmd
.
BindCount
)
*
types
.
Coin
)
receipt
,
err
=
a
.
coinsAccount
.
ExecActive
(
a
.
fromaddr
,
a
.
execaddr
,
(
current
.
BindCount
-
cmd
.
BindCount
)
*
types
.
Coin
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"bindOp Active addr=%s,execaddr=%s,coins=%d"
,
a
.
fromaddr
,
a
.
execaddr
,
current
.
BindCount
-
cmd
.
BindCount
)
return
nil
,
errors
.
Wrapf
(
err
,
"bindOp Active addr=%s,execaddr=%s,coins=%d"
,
a
.
fromaddr
,
a
.
execaddr
,
current
.
BindCount
-
cmd
.
BindCount
)
}
}
}
}
else
{
//冻结更多
//冻结更多
receipt
,
err
=
a
.
coinsAccount
.
ExecFrozen
(
a
.
fromaddr
,
a
.
execaddr
,
(
cmd
.
BindCount
-
current
.
BindCount
)
*
types
.
Coin
)
receipt
,
err
=
a
.
coinsAccount
.
ExecFrozen
(
a
.
fromaddr
,
a
.
execaddr
,
(
cmd
.
BindCount
-
current
.
BindCount
)
*
types
.
Coin
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"bindOp frozen more addr=%s,execaddr=%s,coins=%d"
,
a
.
fromaddr
,
a
.
execaddr
,
cmd
.
BindCount
-
current
.
BindCount
)
return
nil
,
errors
.
Wrapf
(
err
,
"bindOp frozen more addr=%s,execaddr=%s,coins=%d"
,
a
.
fromaddr
,
a
.
execaddr
,
cmd
.
BindCount
-
current
.
BindCount
)
}
}
}
acctCopy
:=
*
current
acctCopy
:=
*
current
current
.
BindCount
=
cmd
.
BindCount
current
.
BindCount
=
cmd
.
BindCount
r
:=
makeAddrBindReceipt
(
cmd
.
TargetNode
,
a
.
fromaddr
,
&
acctCopy
,
current
)
r
:=
makeAddrBindReceipt
(
cmd
.
TargetAddr
,
a
.
fromaddr
,
&
acctCopy
,
current
)
return
mergeReceipt
(
receipt
,
r
),
nil
return
mergeReceipt
(
receipt
,
r
),
nil
}
}
...
@@ -366,13 +369,13 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
...
@@ -366,13 +369,13 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
BindCount
:
cmd
.
BindCount
,
BindCount
:
cmd
.
BindCount
,
BlockTime
:
a
.
blocktime
,
BlockTime
:
a
.
blocktime
,
BlockHeight
:
a
.
height
,
BlockHeight
:
a
.
height
,
Target
Addr
:
cmd
.
TargetAddr
,
Target
Node
:
cmd
.
TargetNode
,
}
}
rBind
:=
makeAddrBindReceipt
(
cmd
.
Target
Addr
,
a
.
fromaddr
,
nil
,
acct
)
rBind
:=
makeAddrBindReceipt
(
cmd
.
Target
Node
,
a
.
fromaddr
,
nil
,
acct
)
mergeReceipt
(
receipt
,
rBind
)
mergeReceipt
(
receipt
,
rBind
)
//增加到列表中
//增加到列表中
rList
,
err
:=
a
.
bind2Node
(
cmd
.
Target
Addr
)
rList
,
err
:=
a
.
bind2Node
(
cmd
.
Target
Node
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -382,15 +385,15 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
...
@@ -382,15 +385,15 @@ func (a *action) bindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
}
}
func
(
a
*
action
)
unBindOp
(
cmd
*
pt
.
ParaBindMinerInfo
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
unBindOp
(
cmd
*
pt
.
ParaBindMinerInfo
)
(
*
types
.
Receipt
,
error
)
{
acct
,
err
:=
getBindAddrInfo
(
a
.
db
,
cmd
.
Target
Addr
,
a
.
fromaddr
)
acct
,
err
:=
getBindAddrInfo
(
a
.
db
,
cmd
.
Target
Node
,
a
.
fromaddr
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
cfg
:=
a
.
api
.
GetConfig
()
cfg
:=
a
.
api
.
GetConfig
()
unBindHours
:=
cfg
.
MGInt
(
"mver.consensus.paracross.unBindTime"
,
a
.
height
)
unBindHours
:=
cfg
.
MGInt
(
"mver.consensus.paracross.unBindTime"
,
a
.
height
)
if
a
cct
.
BlockTime
-
a
.
blockt
ime
<
unBindHours
*
60
*
60
{
if
a
.
blocktime
-
acct
.
BlockT
ime
<
unBindHours
*
60
*
60
{
return
nil
,
errors
.
Wrapf
(
err
,
"unBindOp unbind time=%d less %d hours than bind time =%d"
,
a
.
blocktime
,
unBindHours
,
acct
.
BlockTime
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrNotAllow
,
"unBindOp unbind time=%d less %d hours than bind time =%d"
,
a
.
blocktime
,
unBindHours
,
acct
.
BlockTime
)
}
}
//unfrozen
//unfrozen
...
@@ -400,11 +403,11 @@ func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
...
@@ -400,11 +403,11 @@ func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
}
}
//删除 bind addr
//删除 bind addr
rUnBind
:=
makeAddrBindReceipt
(
cmd
.
Target
Addr
,
a
.
fromaddr
,
acct
,
nil
)
rUnBind
:=
makeAddrBindReceipt
(
cmd
.
Target
Node
,
a
.
fromaddr
,
acct
,
nil
)
mergeReceipt
(
receipt
,
rUnBind
)
mergeReceipt
(
receipt
,
rUnBind
)
//从列表删除
//从列表删除
rUnList
,
err
:=
a
.
unbind2Node
(
cmd
.
Target
Addr
)
rUnList
,
err
:=
a
.
unbind2Node
(
cmd
.
Target
Node
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -414,8 +417,8 @@ func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
...
@@ -414,8 +417,8 @@ func (a *action) unBindOp(cmd *pt.ParaBindMinerInfo) (*types.Receipt, error) {
}
}
func
(
a
*
action
)
bindMiner
(
info
*
pt
.
ParaBindMinerInfo
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
bindMiner
(
info
*
pt
.
ParaBindMinerInfo
)
(
*
types
.
Receipt
,
error
)
{
if
len
(
info
.
Target
Addr
)
<=
0
{
if
len
(
info
.
Target
Node
)
<=
0
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"bindMiner
targetAddr
should not be nil to addr %s"
,
a
.
fromaddr
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"bindMiner
TargetNode
should not be nil to addr %s"
,
a
.
fromaddr
)
}
}
//只允许平行链操作
//只允许平行链操作
...
...
plugin/dapp/paracross/proto/paracross.proto
View file @
6d6d870f
...
@@ -163,7 +163,7 @@ message ParaBindMinerInfo{
...
@@ -163,7 +163,7 @@ message ParaBindMinerInfo{
string
addr
=
1
;
// miner addr
string
addr
=
1
;
// miner addr
int32
bindAction
=
2
;
// 1: bind, 2:unbind
int32
bindAction
=
2
;
// 1: bind, 2:unbind
int64
bindCount
=
3
;
// bind coins count
int64
bindCount
=
3
;
// bind coins count
string
target
Addr
=
4
;
// super node addr
string
target
Node
=
4
;
// super node addr
int64
blockTime
=
5
;
// action bind block time
int64
blockTime
=
5
;
// action bind block time
int64
blockHeight
=
6
;
// action bind block height
int64
blockHeight
=
6
;
// action bind block height
}
}
...
@@ -334,6 +334,7 @@ message ParacrossAction {
...
@@ -334,6 +334,7 @@ message ParacrossAction {
ParaNodeGroupConfig
nodeGroupConfig
=
10
;
ParaNodeGroupConfig
nodeGroupConfig
=
10
;
ParaStageConfig
selfStageConfig
=
11
;
ParaStageConfig
selfStageConfig
=
11
;
CrossAssetTransfer
crossAssetTransfer
=
12
;
CrossAssetTransfer
crossAssetTransfer
=
12
;
ParaBindMinerInfo
paraBindMiner
=
13
;
}
}
int32
ty
=
2
;
int32
ty
=
2
;
}
}
...
...
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