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
eb4c79bf
Commit
eb4c79bf
authored
Sep 14, 2021
by
mdj33
Committed by
vipwzw
Sep 18, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add para chain no cross asset height list
parent
8966343e
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
124 additions
and
0 deletions
+124
-0
chain33.toml
chain33.toml
+3
-0
action.go
plugin/dapp/paracross/executor/action.go
+54
-0
paracross_test.go
plugin/dapp/paracross/executor/paracross_test.go
+67
-0
No files found.
chain33.toml
View file @
eb4c79bf
...
...
@@ -273,6 +273,9 @@ superManager=[
nodeGroupFrozenCoins
=
0
#平行链共识停止后主链等待的高度
paraConsensusStopBlocks
=
30000
#配置平行链无资产跨链交易的高度列表,title不用加user.p,不同title使用#分割,不同高度序列使用.分割,高度为平行链自身的高度,不是主链高度
#mc.10-100.200-300#guodun.50-60.300-400#game.10-50.70-90
paraNoCrossAssetHeightList
=
""
[exec.sub.autonomy]
total
=
"16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp"
...
...
plugin/dapp/paracross/executor/action.go
View file @
eb4c79bf
...
...
@@ -7,6 +7,7 @@ package executor
import
(
"bytes"
"encoding/hex"
"strconv"
"strings"
"github.com/33cn/chain33/account"
...
...
@@ -981,6 +982,45 @@ func rollbackCrossTx(a *action, cross *types.TransactionDetail, crossTxHash []by
}
//无跨链交易高度列表是人为配置的,是确认的历史高度,是一种特殊处理,不会影响区块状态hash
//mc.10-100.200-300#guodun.50-60.300-400#game.10-50.70-90
func
isInNoHeightCrossAsseList
(
list
string
,
status
*
pt
.
ParacrossNodeStatus
)
(
bool
,
error
)
{
paraChains
:=
strings
.
Split
(
list
,
"#"
)
for
_
,
chain
:=
range
paraChains
{
paras
:=
strings
.
Split
(
chain
,
"."
)
//compare title
if
strings
.
ToLower
(
"user.p."
+
paras
[
0
]
+
"."
)
!=
strings
.
ToLower
(
status
.
Title
)
{
continue
}
//check para height
heights
:=
paras
[
1
:
]
for
_
,
h
:=
range
heights
{
p
:=
strings
.
Split
(
h
,
"-"
)
if
len
(
p
)
!=
2
{
return
false
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"check NoHeightCrossAsseList title=%s,height=%s"
,
chain
,
h
)
}
s
,
err
:=
strconv
.
Atoi
(
p
[
0
])
if
err
!=
nil
{
return
false
,
errors
.
Wrapf
(
err
,
"check NoHeightCrossAsseList title=%s,height=%s"
,
chain
,
h
)
}
e
,
err
:=
strconv
.
Atoi
(
p
[
1
])
if
err
!=
nil
{
return
false
,
errors
.
Wrapf
(
err
,
"check NoHeightCrossAsseList title=%s,height=%s"
,
chain
,
h
)
}
if
s
>
e
{
return
false
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"check NoHeightCrossAsseList title=%s,height=%s"
,
chain
,
h
)
}
//共识的平行链高度(不是主链高度)落在范围内,说明此高度没有跨链资产交易,可以忽略
if
status
.
Height
>=
int64
(
s
)
&&
status
.
Height
<=
int64
(
e
)
{
return
true
,
nil
}
}
}
return
false
,
nil
}
func
getCrossTxHashsByRst
(
api
client
.
QueueProtocolAPI
,
status
*
pt
.
ParacrossNodeStatus
)
([][]
byte
,
[]
byte
,
error
)
{
//支持带版本号的跨链交易bitmap
//1.如果等于0,是老版本的平行链,按老的方式处理. 2. 如果大于0等于ver,新版本且没有跨链交易,不需要处理. 3. 大于ver,说明有跨链交易按老的方式处理
...
...
@@ -1000,6 +1040,20 @@ func getCrossTxHashsByRst(api client.QueueProtocolAPI, status *pt.ParacrossNodeS
return
nil
,
nil
,
nil
}
}
conf
:=
types
.
ConfSub
(
cfg
,
pt
.
ParaX
)
heightListStr
:=
conf
.
GStr
(
"paraNoCrossAssetHeightList"
)
if
len
(
heightListStr
)
>
0
{
in
,
err
:=
isInNoHeightCrossAsseList
(
heightListStr
,
status
)
if
err
!=
nil
{
clog
.
Error
(
"getCrossTxHashs decode NoHeightCrossAsseList"
,
"err"
,
err
)
return
nil
,
nil
,
err
}
//在配置的无资产跨链高度列表中,则直接退出
if
in
{
clog
.
Debug
(
"getCrossTxHashs NoHeightCrossAsseList"
,
"str"
,
heightListStr
,
"height"
,
status
.
Height
,
"title"
,
status
.
Title
)
return
nil
,
nil
,
nil
}
}
blockDetail
,
err
:=
GetBlock
(
api
,
status
.
MainBlockHash
)
if
err
!=
nil
{
...
...
plugin/dapp/paracross/executor/paracross_test.go
View file @
eb4c79bf
...
...
@@ -877,3 +877,70 @@ func TestVerifyBlsSign(t *testing.T) {
assert
.
Equal
(
t
,
nil
,
err
)
}
func
TestIsInNoHeightCrossAsseList
(
t
*
testing
.
T
)
{
status1
:=
&
pt
.
ParacrossNodeStatus
{
Title
:
"user.p.mc."
,
Height
:
1000
,
}
str
:=
"mc.10-100"
isIn
,
err
:=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
false
,
isIn
)
status1
.
Height
=
100
isIn
,
err
=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
true
,
isIn
)
str
=
"mc.10-100.200-300#guodun.50-60.300-400"
status1
.
Height
=
200
isIn
,
err
=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
true
,
isIn
)
status1
.
Title
=
"user.p.guodun."
status1
.
Height
=
61
isIn
,
err
=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
false
,
isIn
)
status1
.
Height
=
60
isIn
,
err
=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
true
,
isIn
)
str
=
"mc.10-100.200-300#guodun.50-60.300-400#guo.80-90.300-400"
status1
.
Title
=
"user.p.Guo."
status1
.
Height
=
60
isIn
,
err
=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
false
,
isIn
)
status1
.
Height
=
300
isIn
,
err
=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
true
,
isIn
)
//异常情况
str
=
"mc.10-100.200-300#guodun.50-60.300-400#guo.80.300-400"
status1
.
Title
=
"user.p.Guo."
status1
.
Height
=
300
isIn
,
err
=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
NotNil
(
t
,
err
)
assert
.
Equal
(
t
,
false
,
isIn
)
str
=
"mc.10-100.200-300#guodun.50-60.300-400#guo"
status1
.
Title
=
"user.p.Guo."
status1
.
Height
=
300
isIn
,
err
=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
false
,
isIn
)
str
=
"mc.10-100.200-300#guodun.50-60.300-400#"
status1
.
Title
=
"user.p.Guo."
status1
.
Height
=
300
isIn
,
err
=
isInNoHeightCrossAsseList
(
str
,
status1
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
false
,
isIn
)
}
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