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
a077e677
Commit
a077e677
authored
Jun 29, 2019
by
mdj33
Committed by
vipwzw
Jul 02, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix error
parent
8b458a6e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
76 additions
and
18 deletions
+76
-18
paracommitmsg.go
plugin/consensus/para/paracommitmsg.go
+3
-3
action.go
plugin/dapp/paracross/executor/action.go
+30
-13
paracross_test.go
plugin/dapp/paracross/executor/paracross_test.go
+41
-0
superaccount.go
plugin/dapp/paracross/executor/superaccount.go
+2
-2
No files found.
plugin/consensus/para/paracommitmsg.go
View file @
a077e677
...
...
@@ -52,7 +52,7 @@ func (client *commitMsgClient) handler() {
var
sendingMsgs
[]
*
pt
.
ParacrossNodeStatus
var
readTick
<-
chan
time
.
Time
var
ticker
*
time
.
Ticker
var
a
uthAccountIn
bool
var
lastA
uthAccountIn
bool
client
.
paraClient
.
wg
.
Add
(
1
)
consensusCh
:=
make
(
chan
*
commitConsensRsp
,
1
)
...
...
@@ -169,10 +169,10 @@ out:
plog
.
Debug
(
"para consensus rcv"
,
"consensBlockHash"
,
common
.
ToHex
(
rsp
.
status
.
BlockHash
))
//每次账户加入nodegroup 重新设置finishHeight 重新发送,防止曾经发送过,又退出group场景
if
!
authAccountIn
&&
rsp
.
authAccountIn
&&
finishHeight
>
consensHeight
{
if
!
lastAuthAccountIn
&&
rsp
.
authAccountIn
{
finishHeight
=
consensHeight
}
a
uthAccountIn
=
rsp
.
authAccountIn
lastA
uthAccountIn
=
rsp
.
authAccountIn
if
notification
==
nil
||
isRollback
||
!
rsp
.
authAccountIn
{
isSync
=
false
...
...
plugin/dapp/paracross/executor/action.go
View file @
a077e677
...
...
@@ -432,6 +432,7 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
//用commit.MainBlockHeight 判断更准确,如果用a.exec.MainHeight也可以,但是可能收到MainHeight之前的高度共识tx,
// 后面loopCommitTxDone时候也是用当前共识高度大于分叉高度判断
if
commit
.
Status
.
MainBlockHeight
>=
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
)
{
stat
.
BlockDetails
=
&
pt
.
ParacrossStatusBlockDetails
{}
updateCommitBlockHashs
(
stat
,
commit
.
Status
)
}
...
...
@@ -464,6 +465,7 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
if
types
.
IsDappFork
(
commit
.
Status
.
MainBlockHeight
,
pt
.
ParaX
,
pt
.
ForkCommitTx
)
{
updateCommitAddrs
(
stat
,
nodes
)
}
saveTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
stat
.
Title
,
stat
.
Height
),
stat
)
if
commit
.
Status
.
Height
>
titleStatus
.
Height
+
1
{
saveTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
commit
.
Status
.
Title
,
commit
.
Status
.
Height
),
stat
)
...
...
@@ -476,11 +478,19 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
return
receipt
,
nil
}
}
return
a
.
commitTxDone
(
commit
.
Status
,
stat
,
titleStatus
,
nodes
,
receipt
)
r
,
err
:=
a
.
commitTxDone
(
commit
.
Status
,
stat
,
titleStatus
,
nodes
)
if
err
!=
nil
{
return
nil
,
err
}
receipt
=
mergeReceipt
(
receipt
,
r
)
return
receipt
,
nil
}
//分叉以前stat里面只记录了blockhash的信息,没有crossTxHash等信息,无法通过stat直接重构出mostCommitStatus
func
(
a
*
action
)
commitTxDone
(
nodeStatus
*
pt
.
ParacrossNodeStatus
,
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
nodes
map
[
string
]
struct
{},
receipt
*
types
.
Receipt
)
(
*
types
.
Receipt
,
error
)
{
nodes
map
[
string
]
struct
{})
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{}
clog
.
Debug
(
"paracross.Commit commit"
,
"stat.title"
,
stat
.
Title
,
"stat.height"
,
stat
.
Height
,
"notes"
,
len
(
nodes
))
for
i
,
v
:=
range
stat
.
Details
.
Addrs
{
clog
.
Debug
(
"paracross.Commit commit detail"
,
"addr"
,
v
,
"hash"
,
hex
.
EncodeToString
(
stat
.
Details
.
BlockHash
[
i
]))
...
...
@@ -489,7 +499,6 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac
commitCount
:=
len
(
stat
.
Details
.
Addrs
)
most
,
mostHash
:=
getMostCommit
(
stat
)
if
!
isCommitDone
(
nodes
,
most
)
{
saveTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
stat
.
Title
,
stat
.
Height
),
stat
)
return
receipt
,
nil
}
clog
.
Debug
(
"paracross.Commit commit ----pass"
,
"most"
,
most
,
"mostHash"
,
hex
.
EncodeToString
([]
byte
(
mostHash
)))
...
...
@@ -506,11 +515,16 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac
receiptDone
:=
makeDoneReceipt
(
a
.
exec
.
GetMainHeight
(),
nodeStatus
,
int32
(
most
),
int32
(
commitCount
),
int32
(
len
(
nodes
)))
receipt
=
mergeReceipt
(
receipt
,
receiptDone
)
return
a
.
commitTxDoneStep2
(
nodeStatus
,
stat
,
titleStatus
,
receipt
)
r
,
err
:=
a
.
commitTxDoneStep2
(
nodeStatus
,
stat
,
titleStatus
)
if
err
!=
nil
{
return
nil
,
err
}
receipt
=
mergeReceipt
(
receipt
,
r
)
return
receipt
,
nil
}
func
(
a
*
action
)
commitTxDoneStep2
(
nodeStatus
*
pt
.
ParacrossNodeStatus
,
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
receipt
*
types
.
Receipt
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
commitTxDoneStep2
(
nodeStatus
*
pt
.
ParacrossNodeStatus
,
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
)
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{}
titleStatus
.
Title
=
nodeStatus
.
Title
titleStatus
.
Height
=
nodeStatus
.
Height
...
...
@@ -611,7 +625,6 @@ func (a *action) loopCommitTxDone(title string) (*types.Receipt, error) {
}
func
(
a
*
action
)
checkCommitTxDone
(
title
string
,
stat
*
pt
.
ParacrossHeightStatus
,
nodes
map
[
string
]
struct
{})
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{}
status
,
err
:=
getTitle
(
a
.
db
,
calcTitleKey
(
title
))
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getTitle:%s"
,
title
)
...
...
@@ -622,14 +635,13 @@ func (a *action) checkCommitTxDone(title string, stat *pt.ParacrossHeightStatus,
return
nil
,
nil
}
return
a
.
commitTxDoneByStat
(
stat
,
status
,
nodes
,
receipt
)
return
a
.
commitTxDoneByStat
(
stat
,
status
,
nodes
)
}
//只根据stat的信息在commitDone之后重构一个commitStatus做后续处理
func
(
a
*
action
)
commitTxDoneByStat
(
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
nodes
map
[
string
]
struct
{},
receipt
*
types
.
Receipt
)
(
*
types
.
Receipt
,
error
)
{
//只根据stat的信息在commitDone之后重构一个commitMostStatus做后续处理
func
(
a
*
action
)
commitTxDoneByStat
(
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
nodes
map
[
string
]
struct
{})
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{}
clog
.
Debug
(
"paracross.commitTxDoneByStat"
,
"stat.title"
,
stat
.
Title
,
"stat.height"
,
stat
.
Height
,
"notes"
,
len
(
nodes
))
for
i
,
v
:=
range
stat
.
Details
.
Addrs
{
clog
.
Debug
(
"paracross.commitTxDoneByStat detail"
,
"addr"
,
v
,
"hash"
,
hex
.
EncodeToString
(
stat
.
Details
.
BlockHash
[
i
]))
...
...
@@ -665,7 +677,12 @@ func (a *action) commitTxDoneByStat(stat *pt.ParacrossHeightStatus, titleStatus
receiptDone
:=
makeDoneReceipt
(
a
.
exec
.
GetMainHeight
(),
mostStatus
,
int32
(
most
),
int32
(
commitCount
),
int32
(
len
(
nodes
)))
receipt
=
mergeReceipt
(
receipt
,
receiptDone
)
return
a
.
commitTxDoneStep2
(
mostStatus
,
stat
,
titleStatus
,
receipt
)
r
,
err
:=
a
.
commitTxDoneStep2
(
mostStatus
,
stat
,
titleStatus
)
if
err
!=
nil
{
return
nil
,
err
}
receipt
=
mergeReceipt
(
receipt
,
r
)
return
receipt
,
nil
}
//平行链自共识无缝切换条件:1,平行链没有共识过,2:commit高度是大于自共识分叉高度且上一次共识的主链高度小于自共识分叉高度,保证只运行一次,
...
...
plugin/dapp/paracross/executor/paracross_test.go
View file @
a077e677
...
...
@@ -770,3 +770,44 @@ func createParaNormalTx(s suite.Suite, privFrom string, to []byte) (*types.Trans
return
tx
,
nil
}
func
TestUpdateCommitBlockHashs
(
t
*
testing
.
T
)
{
stat
:=
&
pt
.
ParacrossHeightStatus
{}
stat
.
BlockDetails
=
&
pt
.
ParacrossStatusBlockDetails
{}
commit
:=
&
pt
.
ParacrossNodeStatus
{
MainBlockHash
:
[]
byte
(
"main"
),
MainBlockHeight
:
1
,
BlockHash
:
[]
byte
(
"1122"
),
StateHash
:
[]
byte
(
"statehash"
),
TxResult
:
[]
byte
(
""
),
TxHashs
:
[][]
byte
{
nil
},
CrossTxResult
:
[]
byte
(
""
),
CrossTxHashs
:
[][]
byte
{
nil
},
}
updateCommitBlockHashs
(
stat
,
commit
)
assert
.
Equal
(
t
,
int
(
1
),
len
(
stat
.
BlockDetails
.
BlockHashs
))
assert
.
Equal
(
t
,
commit
.
BlockHash
,
stat
.
BlockDetails
.
BlockHashs
[
0
])
updateCommitBlockHashs
(
stat
,
commit
)
assert
.
Equal
(
t
,
int
(
1
),
len
(
stat
.
BlockDetails
.
BlockHashs
))
assert
.
Equal
(
t
,
commit
.
BlockHash
,
stat
.
BlockDetails
.
BlockHashs
[
0
])
commit2
:=
&
pt
.
ParacrossNodeStatus
{
MainBlockHash
:
[]
byte
(
"main"
),
MainBlockHeight
:
1
,
BlockHash
:
[]
byte
(
"2233"
),
StateHash
:
[]
byte
(
"statehash"
),
TxResult
:
[]
byte
(
"11"
),
TxHashs
:
[][]
byte
{[]
byte
(
"hash2"
)},
CrossTxResult
:
[]
byte
(
"11"
),
CrossTxHashs
:
[][]
byte
{[]
byte
(
"hash2"
)},
}
updateCommitBlockHashs
(
stat
,
commit2
)
assert
.
Equal
(
t
,
int
(
2
),
len
(
stat
.
BlockDetails
.
BlockHashs
))
assert
.
Equal
(
t
,
int
(
2
),
len
(
stat
.
BlockDetails
.
CrossTxHashs
))
assert
.
Equal
(
t
,
commit2
.
BlockHash
,
stat
.
BlockDetails
.
BlockHashs
[
1
])
assert
.
Equal
(
t
,
commit
.
CrossTxHashs
[
0
],
stat
.
BlockDetails
.
CrossTxHashs
[
0
])
assert
.
Equal
(
t
,
commit2
.
CrossTxHashs
[
0
],
stat
.
BlockDetails
.
CrossTxHashs
[
1
])
}
plugin/dapp/paracross/executor/superaccount.go
View file @
a077e677
...
...
@@ -657,7 +657,7 @@ func unpdateNodeGroup(db dbm.KV, title, addr string, add bool) (*types.Receipt,
if
add
{
item
.
GetArr
()
.
Value
=
append
(
item
.
GetArr
()
.
Value
,
addr
)
item
.
Addr
=
addr
clog
.
Info
(
"unpdateNodeGroup
"
,
"add key"
,
string
(
key
)
,
"from"
,
copyItem
.
GetArr
()
.
Value
,
"to"
,
item
.
GetArr
()
.
Value
)
clog
.
Info
(
"unpdateNodeGroup
add"
,
"addr"
,
addr
,
"from"
,
copyItem
.
GetArr
()
.
Value
,
"to"
,
item
.
GetArr
()
.
Value
)
}
else
{
//必须保留至少1个授权账户
...
...
@@ -667,11 +667,11 @@ func unpdateNodeGroup(db dbm.KV, title, addr string, add bool) (*types.Receipt,
item
.
Addr
=
addr
item
.
GetArr
()
.
Value
=
make
([]
string
,
0
)
for
_
,
value
:=
range
copyItem
.
GetArr
()
.
Value
{
clog
.
Info
(
"unpdateNodeGroup"
,
"key delete"
,
string
(
key
),
"current"
,
value
)
if
value
!=
addr
{
item
.
GetArr
()
.
Value
=
append
(
item
.
GetArr
()
.
Value
,
value
)
}
}
clog
.
Info
(
"unpdateNodeGroup delete"
,
"addr"
,
addr
)
}
err
=
db
.
Set
(
key
,
types
.
Encode
(
&
item
))
if
err
!=
nil
{
...
...
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