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
d0d26641
Commit
d0d26641
authored
Nov 21, 2019
by
mdj33
Committed by
vipwzw
Nov 26, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
asset transfer fail rollbak
parent
1e556e29
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
277 additions
and
51 deletions
+277
-51
dapp-test-rpc.sh
build/dapp-test-rpc.sh
+1
-5
chain33.para.toml
chain33.para.toml
+1
-0
test-rpc.sh
plugin/dapp/paracross/cmd/test/test-rpc.sh
+105
-28
paracross.go
plugin/dapp/paracross/commands/paracross.go
+30
-0
action.go
plugin/dapp/paracross/executor/action.go
+59
-3
asset.go
plugin/dapp/paracross/executor/asset.go
+18
-0
exec_local.go
plugin/dapp/paracross/executor/exec_local.go
+1
-0
query.go
plugin/dapp/paracross/executor/query.go
+32
-7
paracross.proto
plugin/dapp/paracross/proto/paracross.proto
+19
-1
rpc.go
plugin/dapp/paracross/rpc/rpc.go
+3
-3
rpc_test.go
plugin/dapp/paracross/rpc/rpc_test.go
+4
-4
type.go
plugin/dapp/paracross/types/type.go
+4
-0
No files found.
build/dapp-test-rpc.sh
View file @
d0d26641
...
@@ -10,17 +10,13 @@ function dapp_test_rpc() {
...
@@ -10,17 +10,13 @@ function dapp_test_rpc() {
if
[
-d
dapptest
]
;
then
if
[
-d
dapptest
]
;
then
cp
"
$DAPP_TEST_COMMON
"
dapptest/
cp
"
$DAPP_TEST_COMMON
"
dapptest/
cd
dapptest
||
return
cd
dapptest
||
return
rm
-f
"retries.log"
rm
-f
"jobs.log"
rm
-f
"jobs.log"
dapps
=
$(
find
.
-maxdepth
1
-type
d
!
-name
dapptest
!
-name
.
|
sed
's/^\.\///'
|
sort
)
dapps
=
$(
find
.
-maxdepth
1
-type
d
!
-name
dapptest
!
-name
.
|
sed
's/^\.\///'
|
sort
)
echo
"dapps list:
$dapps
"
echo
"dapps list:
$dapps
"
set
+e
set
+e
parallel
-k
--joblog
./jobs.log
'echo tried {} >>./retries.log; ./{}/"'
"
${
RPC_TESTFILE
}
"
'" "'
"
$ip
"
'"'
:::
"
$dapps
"
parallel
-k
--joblog
./jobs.log
./
{}
/
"
${
RPC_TESTFILE
}
"
"
$ip
"
:::
"
$dapps
"
local
ret
=
$?
local
ret
=
$?
# retries 3 times if one dapp fail
echo
"============ # retried dapps log: ============="
cat
./retries.log
echo
"============ # check dapps test log: ============="
echo
"============ # check dapps test log: ============="
cat
./jobs.log
cat
./jobs.log
set
-e
set
-e
...
...
chain33.para.toml
View file @
d0d26641
...
@@ -255,6 +255,7 @@ ForkParacrossCommitTx=0
...
@@ -255,6 +255,7 @@ ForkParacrossCommitTx=0
ForkLoopCheckCommitTxDone
=
0
ForkLoopCheckCommitTxDone
=
0
#平行链分阶段自共识支持合约配置,缺省是0
#平行链分阶段自共识支持合约配置,缺省是0
ForkParaSelfConsStages
=
0
ForkParaSelfConsStages
=
0
ForkParaAssetTransferRbk
=
0
[fork.sub.evm]
[fork.sub.evm]
Enable
=
0
Enable
=
0
...
...
plugin/dapp/paracross/cmd/test/test-rpc.sh
View file @
d0d26641
...
@@ -293,36 +293,16 @@ function paracross_ListNodeStatus() {
...
@@ -293,36 +293,16 @@ function paracross_ListNodeStatus() {
para_test_addr
=
"1MAuE8QSbbech3bVKK2JPJJxYxNtT95oSU"
para_test_addr
=
"1MAuE8QSbbech3bVKK2JPJJxYxNtT95oSU"
para_test_prikey
=
"0x24d1fad138be98eebee31440f144aa38c404533f40862995282162bc538e91c8"
para_test_prikey
=
"0x24d1fad138be98eebee31440f144aa38c404533f40862995282162bc538e91c8"
function
paracross_testTxGroup
()
{
function
paracross_txgroupex
()
{
local
para_ip
=
$1
local
amount_transfer
=
$1
local
amount_trade
=
$2
ispara
=
$(
echo
'"'
"
${
para_ip
}
"
'"'
| jq
'.|contains("8901")'
)
local
para_ip
=
$3
echo
"ipara=
$ispara
"
local
paracross_addr
=
""
local
main_ip
=
${
para_ip
//8901/8801
}
paracross_addr
=
$(
curl
-ksd
'{"method":"Chain33.ConvertExectoAddr","params":[{"execname":"paracross"}]}'
"
${
main_ip
}
"
| jq
-r
".result"
)
echo
"paracross_addr=
$paracross_addr
"
#execer
local
paracross_execer_name
=
"user.p.para.paracross"
local
paracross_execer_name
=
"user.p.para.paracross"
local
trade_exec_name
=
"user.p.para.trade"
local
trade_exec_name
=
"user.p.para.trade"
local
trade_exec_addr
=
"12bihjzbaYWjcpDiiy9SuAWeqNksQdiN13"
local
amount_trade
=
100000000
local
amount_transfer
=
800000000
chain33_ImportPrivkey
"
${
para_test_prikey
}
"
"
${
para_test_addr
}
"
"paracross-transfer6"
"
${
main_ip
}
"
# tx fee + transfer 10 coins
chain33_applyCoins
"
${
para_test_addr
}
"
1000000000
"
${
main_ip
}
"
chain33_QueryBalance
"
${
para_test_addr
}
"
"
$main_ip
"
#deposit 8 coins to paracross
chain33_SendToAddress
"
${
para_test_addr
}
"
"
$paracross_addr
"
"
$amount_transfer
"
"
${
main_ip
}
"
chain33_QueryExecBalance
"
${
para_test_addr
}
"
"paracross"
"
${
main_ip
}
"
# 资产从主链转移到平行链
# 资产从主链转移到平行链
tx_hash_asset
=
$(
curl
-ksd
'{"method":"Chain33.CreateTransaction","params":[{"execer":"'
"
${
paracross_execer_name
}
"
'","actionName":"ParacrossAssetTransfer","payload":{"execName":"'
"
${
paracross_execer_name
}
"
'","to":"'
"
$para_test_addr
"
'","amount":'
${
amount_transfer
}
'}}]}'
"
${
para_ip
}
"
| jq
-r
".result"
)
tx_hash_asset
=
$(
curl
-ksd
'{"method":"Chain33.CreateTransaction","params":[{"execer":"'
"
${
paracross_execer_name
}
"
'","actionName":"ParacrossAssetTransfer","payload":{"execName":"'
"
${
paracross_execer_name
}
"
'","to":"'
"
$para_test_addr
"
'","amount":'
${
amount_transfer
}
'}}]}'
"
${
para_ip
}
"
| jq
-r
".result"
)
#curl -ksd '{"method":"Chain33.CreateTransaction","params":[{"execer":"user.p.para.paracross","actionName":"ParacrossAssetTransfer","payload":{"execName":"user.p.para.paracross","to":"1MAuE8QSbbech3bVKK2JPJJxYxNtT95oSU","amount":100000000}}]}' http://172.20.0.5:8901
# 资产从平行链转移到平行链合约
# 资产从平行链转移到平行链合约
req
=
'"method":"Chain33.CreateTransaction","params":[{"execer":"'
"
${
paracross_execer_name
}
"
'","actionName":"TransferToExec","payload":{"execName":"'
"
${
paracross_execer_name
}
"
'","to":"'
"
${
trade_exec_addr
}
"
'","amount":'
${
amount_trade
}
', "cointoken":"coins.bty"}}]'
req
=
'"method":"Chain33.CreateTransaction","params":[{"execer":"'
"
${
paracross_execer_name
}
"
'","actionName":"TransferToExec","payload":{"execName":"'
"
${
paracross_execer_name
}
"
'","to":"'
"
${
trade_exec_addr
}
"
'","amount":'
${
amount_trade
}
', "cointoken":"coins.bty"}}]'
...
@@ -348,19 +328,107 @@ function paracross_testTxGroup() {
...
@@ -348,19 +328,107 @@ function paracross_testTxGroup() {
#sign 1
#sign 1
tx_sign
=
$(
curl
-ksd
'{"method":"Chain33.SignRawTx","params":[{"privkey":"'
"
$para_test_prikey
"
'","txHex":"'
"
$tx_hash_group
"
'","index":2,"expire":"120s"}]}'
"
${
para_ip
}
"
| jq
-r
".result"
)
tx_sign
=
$(
curl
-ksd
'{"method":"Chain33.SignRawTx","params":[{"privkey":"'
"
$para_test_prikey
"
'","txHex":"'
"
$tx_hash_group
"
'","index":2,"expire":"120s"}]}'
"
${
para_ip
}
"
| jq
-r
".result"
)
#curl -ksd '{"method":"Chain33.SignRawTx","params":[{"privkey":"0x24d1fad138be98eebee31440f144aa38c404533f40862995282162bc538e91c8","txHex":"0a10757365722e702e706172612e6e6f6e6512126e6f2d6665652d7472616e73616374696f6e1a6e080112210320bbac09528e19c55b0f89cb37ab265e7e856b1a8c388780322dbbfd194b52ba1a473045022100fe7763b2fa5b42eddccf1a3434cb6d6bb60a5c5c32e5498219e99be01bb94ad302201ecb9931a2bb4e1b0d49ec50ee552a774c1db8a1eb9b2dff47e4b931625e3af220e0a71230a89780b2a5b187990a3a2231466a58697076505142754e6f7a4133506150724b6846703854343166717141707640034a8c050a8e020a10757365722e702e706172612e6e6f6e6512126e6f2d6665652d7472616e73616374696f6e1a6e080112210320bbac09528e19c55b0f89cb37ab265e7e856b1a8c388780322dbbfd194b52ba1a473045022100fe7763b2fa5b42eddccf1a3434cb6d6bb60a5c5c32e5498219e99be01bb94ad302201ecb9931a2bb4e1b0d49ec50ee552a774c1db8a1eb9b2dff47e4b931625e3af220e0a71230a89780b2a5b187990a3a2231466a58697076505142754e6f7a4133506150724b6846703854343166717141707640034a2054ba4451fb8f226dd54b52ec086f4eaa4990d66876899b1badec8ce96ef55208522000f2e5970b5b1854da143f4f3e91bf7eb87d1d62869ef08a2ce3b109994ec3650abb010a15757365722e702e706172612e7061726163726f7373122e10904e22291080c2d72f2222314d41754538515362626563683362564b4b324a504a4a7859784e745439356f535530d195faf7d3a1ec9a4c3a223139574a4a7639366e4b4155347348465771476d7371666a786433376a617a71696940034a2054ba4451fb8f226dd54b52ec086f4eaa4990d66876899b1badec8ce96ef5520852208fb7939bf2701e5af9cef05da33020be682e10c84fde9bd8d24765031fad530b0aba010a15757365722e702e706172612e7061726163726f7373124f1004424b0a09636f696e732e6274791080ade2042215757365722e702e706172612e7061726163726f73732a2231326269686a7a626159576a637044696979395375415765714e6b735164694e313330a8c984ebb2bb90a5613a223139574a4a7639366e4b4155347348465771476d7371666a786433376a617a71696940034a2054ba4451fb8f226dd54b52ec086f4eaa4990d66876899b1badec8ce96ef55208522000f2e5970b5b1854da143f4f3e91bf7eb87d1d62869ef08a2ce3b109994ec365","index":2,"expire":"120s"}]}' http://172.20.0.5:8901
#sign 2
#sign 2
tx_sign2
=
$(
curl
-ksd
'{"method":"Chain33.SignRawTx","params":[{"privkey":"'
"
$para_test_prikey
"
'","txHex":"'
"
$tx_sign
"
'","index":3,"expire":"120s"}]}'
"
${
para_ip
}
"
| jq
-r
".result"
)
tx_sign2
=
$(
curl
-ksd
'{"method":"Chain33.SignRawTx","params":[{"privkey":"'
"
$para_test_prikey
"
'","txHex":"'
"
$tx_sign
"
'","index":3,"expire":"120s"}]}'
"
${
para_ip
}
"
| jq
-r
".result"
)
#curl -ksd '{"method":"Chain33.SignRawTx","params":[{"privkey":"0x24d1fad138be98eebee31440f144aa38c404533f40862995282162bc538e91c8","txHex":"0a10757365722e702e706172612e6e6f6e6512126e6f2d6665652d7472616e73616374696f6e1a6e080112210320bbac09528e19c55b0f89cb37ab265e7e856b1a8c388780322dbbfd194b52ba1a473045022100fe7763b2fa5b42eddccf1a3434cb6d6bb60a5c5c32e5498219e99be01bb94ad302201ecb9931a2bb4e1b0d49ec50ee552a774c1db8a1eb9b2dff47e4b931625e3af220e0a71230a89780b2a5b187990a3a2231466a58697076505142754e6f7a4133506150724b6846703854343166717141707640034afc050a8e020a10757365722e702e706172612e6e6f6e6512126e6f2d6665652d7472616e73616374696f6e1a6e080112210320bbac09528e19c55b0f89cb37ab265e7e856b1a8c388780322dbbfd194b52ba1a473045022100fe7763b2fa5b42eddccf1a3434cb6d6bb60a5c5c32e5498219e99be01bb94ad302201ecb9931a2bb4e1b0d49ec50ee552a774c1db8a1eb9b2dff47e4b931625e3af220e0a71230a89780b2a5b187990a3a2231466a58697076505142754e6f7a4133506150724b6846703854343166717141707640034a2054ba4451fb8f226dd54b52ec086f4eaa4990d66876899b1badec8ce96ef55208522000f2e5970b5b1854da143f4f3e91bf7eb87d1d62869ef08a2ce3b109994ec3650aab020a15757365722e702e706172612e7061726163726f7373122e10904e22291080c2d72f2222314d41754538515362626563683362564b4b324a504a4a7859784e745439356f53551a6e0801122103589ebf581958aeb8a72ff517f823c878aee16139ecbf0001a4611e9c004fecdf1a473045022100da5ad2bdc6e1e43a01d32c44f116e5d0bf96aa4c16debad49381ea5d11a49835022055a510460df9b63f8f585393d6603abf1388fac0e122b53ef3533f242287915730d195faf7d3a1ec9a4c3a223139574a4a7639366e4b4155347348465771476d7371666a786433376a617a71696940034a2054ba4451fb8f226dd54b52ec086f4eaa4990d66876899b1badec8ce96ef5520852208fb7939bf2701e5af9cef05da33020be682e10c84fde9bd8d24765031fad530b0aba010a15757365722e702e706172612e7061726163726f7373124f1004424b0a09636f696e732e6274791080ade2042215757365722e702e706172612e7061726163726f73732a2231326269686a7a626159576a637044696979395375415765714e6b735164694e313330a8c984ebb2bb90a5613a223139574a4a7639366e4b4155347348465771476d7371666a786433376a617a71696940034a2054ba4451fb8f226dd54b52ec086f4eaa4990d66876899b1badec8ce96ef55208522000f2e5970b5b1854da143f4f3e91bf7eb87d1d62869ef08a2ce3b109994ec365","index":3,"expire":"120s"}]}' http://172.20.0.5:8901
#send
#send
chain33_SendTx
"
${
tx_sign2
}
"
"
${
para_ip
}
"
chain33_SendTx
"
${
tx_sign2
}
"
"
${
para_ip
}
"
#tx_rst=$(curl -ksd '{"method":"Chain33.SendTransaction","params":[{"token":"BTY","data":"${tx_sign2}"}]'} "${para_ip}" | jq -r ".result" )
local
transfer_expect
=
"700000000"
}
//测试平行链交易组跨链失败,主链自动恢复原值
function
paracross_testTxGroupFail
()
{
local
para_ip
=
$1
ispara
=
$(
echo
'"'
"
${
para_ip
}
"
'"'
| jq
'.|contains("8901")'
)
echo
"ipara=
$ispara
"
local
paracross_addr
=
""
local
main_ip
=
${
para_ip
//8901/8801
}
paracross_addr
=
$(
curl
-ksd
'{"method":"Chain33.ConvertExectoAddr","params":[{"execname":"paracross"}]}'
"
${
main_ip
}
"
| jq
-r
".result"
)
echo
"paracross_addr=
$paracross_addr
"
#execer
local
trade_exec_addr
=
"12bihjzbaYWjcpDiiy9SuAWeqNksQdiN13"
//测试跨链过去1个,交易组转账8个失败的场景,主链应该还保持原来的
local
amount_trade
=
800000000
local
amount_transfer
=
100000000
local
amount_left
=
500000000
left_exec_val
=
$(
paracross_QueryMainBalance
"
${
para_test_addr
}
"
)
if
[
"
${
left_exec_val
}
"
!=
$amount_left
]
;
then
echo
"paracross_testTxGroupFail left main paracross failed, get=
$left_exec_val
,expec=
$amount_left
"
exit
1
fi
paracross_txgroupex
"
${
amount_transfer
}
"
"
${
amount_trade
}
"
"
${
para_ip
}
"
local
count
=
0
local times
=
100
local
paracross_execer_name
=
"user.p.para.paracross"
local
trade_exec_name
=
"user.p.para.trade"
local
transfer_expect
=
"200000000"
local
exec_expect
=
"100000000"
while
true
;
do
transfer_val
=
$(
paracross_QueryParaBalance
"
${
para_test_addr
}
"
"
$paracross_execer_name
"
)
transfer_exec_val
=
$(
paracross_QueryParaBalance
"
${
para_test_addr
}
"
"
$trade_exec_name
"
)
left_exec_val
=
$(
paracross_QueryMainBalance
"
${
para_test_addr
}
"
)
if
[
"
${
left_exec_val
}
"
!=
$amount_left
]
||
[
"
${
transfer_val
}
"
!=
$transfer_expect
]
||
[
"
${
transfer_exec_val
}
"
!=
$exec_expect
]
;
then
echo
"trans=
${
transfer_val
}
-expect=
${
transfer_expect
}
,trader=
${
transfer_exec_val
}
-expect=
${
exec_expect
}
,left=
${
left_exec_val
}
-expect=
${
amount_left
}
"
chain33_BlockWait 2
${
UNIT_HTTP
}
times
=
$((
times
-
1
))
if
[
$times
-le
0
]
;
then
echo
"para_cross_transfer_testfail failed"
exit
1
fi
echo
"paracross_testTxGroupFail left main paracross failed, get=
$left_exec_val
,expec=
$amount_left
"
else
count
=
$((
count
+
1
))
break
fi
done
[
"
$count
"
-eq
1
]
local
rst
=
$?
echo_rst
"
$FUNCNAME
"
"
$rst
"
}
function
paracross_testTxGroup
()
{
local
para_ip
=
$1
ispara
=
$(
echo
'"'
"
${
para_ip
}
"
'"'
| jq
'.|contains("8901")'
)
echo
"ipara=
$ispara
"
local
paracross_addr
=
""
local
main_ip
=
${
para_ip
//8901/8801
}
paracross_addr
=
$(
curl
-ksd
'{"method":"Chain33.ConvertExectoAddr","params":[{"execname":"paracross"}]}'
"
${
main_ip
}
"
| jq
-r
".result"
)
echo
"paracross_addr=
$paracross_addr
"
#execer
local
paracross_execer_name
=
"user.p.para.paracross"
local
trade_exec_name
=
"user.p.para.trade"
local
trade_exec_addr
=
"12bihjzbaYWjcpDiiy9SuAWeqNksQdiN13"
local
amount_trade
=
100000000
local
amount_deposit
=
800000000
local
amount_transfer
=
300000000
local
amount_left
=
500000000
chain33_ImportPrivkey
"
${
para_test_prikey
}
"
"
${
para_test_addr
}
"
"paracross-transfer6"
"
${
main_ip
}
"
# tx fee + transfer 10 coins
chain33_applyCoins
"
${
para_test_addr
}
"
1000000000
"
${
main_ip
}
"
chain33_QueryBalance
"
${
para_test_addr
}
"
"
$main_ip
"
#deposit 8 coins to paracross
chain33_SendToAddress
"
${
para_test_addr
}
"
"
$paracross_addr
"
"
$amount_deposit
"
"
${
main_ip
}
"
chain33_QueryExecBalance
"
${
para_test_addr
}
"
"paracross"
"
${
main_ip
}
"
paracross_txgroupex
"
${
amount_transfer
}
"
"
${
amount_trade
}
"
"
${
para_ip
}
"
local
transfer_expect
=
"200000000"
local
exec_expect
=
"100000000"
local
exec_expect
=
"100000000"
transfer_val
=
$(
paracross_QueryParaBalance
"
${
para_test_addr
}
"
"
$paracross_execer_name
"
)
transfer_val
=
$(
paracross_QueryParaBalance
"
${
para_test_addr
}
"
"
$paracross_execer_name
"
)
transfer_exec_val
=
$(
paracross_QueryParaBalance
"
${
para_test_addr
}
"
"
$trade_exec_name
"
)
transfer_exec_val
=
$(
paracross_QueryParaBalance
"
${
para_test_addr
}
"
"
$trade_exec_name
"
)
left_exec_val
=
$(
paracross_QueryMainBalance
"
${
para_test_addr
}
"
)
if
[
"
${
transfer_val
}
"
!=
$transfer_expect
]
;
then
if
[
"
${
transfer_val
}
"
!=
$transfer_expect
]
;
then
echo
"paracross_testTxGroup trasfer failed, get=
$transfer_val
,expec=
$transfer_expect
"
echo
"paracross_testTxGroup trasfer failed, get=
$transfer_val
,expec=
$transfer_expect
"
exit
1
exit
1
...
@@ -369,6 +437,10 @@ function paracross_testTxGroup() {
...
@@ -369,6 +437,10 @@ function paracross_testTxGroup() {
echo
"paracross_testTxGroup toexec failed, get=
$transfer_exec_val
,expec=
$exec_expect
"
echo
"paracross_testTxGroup toexec failed, get=
$transfer_exec_val
,expec=
$exec_expect
"
exit
1
exit
1
fi
fi
if
[
"
${
left_exec_val
}
"
!=
$amount_left
]
;
then
echo
"paracross_testTxGroup left main paracross failed, get=
$left_exec_val
,expec=
$amount_left
"
exit
1
fi
echo_rst
"
$FUNCNAME
"
0
echo_rst
"
$FUNCNAME
"
0
...
@@ -396,6 +468,10 @@ paracross_testSelfConsensStages() {
...
@@ -396,6 +468,10 @@ paracross_testSelfConsensStages() {
resp
=
$(
curl
-ksd
"{
$req
}"
"
${
para_ip
}
"
)
resp
=
$(
curl
-ksd
"{
$req
}"
"
${
para_ip
}
"
)
echo
"
$resp
"
echo
"
$resp
"
id
=
$(
jq
-r
".result.stageInfo[0].id"
<<<
"
$resp
"
)
id
=
$(
jq
-r
".result.stageInfo[0].id"
<<<
"
$resp
"
)
if
[
-z
"
$id
"
]
;
then
echo
"paracross stage apply id null"
exit
1
fi
echo
"vote id"
echo
"vote id"
KS_PRI
=
"0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b"
KS_PRI
=
"0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b"
...
@@ -446,6 +522,7 @@ function run_testcases() {
...
@@ -446,6 +522,7 @@ function run_testcases() {
paracross_ListNodeStatus
paracross_ListNodeStatus
paracross_Transfer_Withdraw
paracross_Transfer_Withdraw
paracross_testTxGroup
"
$UNIT_HTTP
"
paracross_testTxGroup
"
$UNIT_HTTP
"
paracross_testTxGroupFail
"
$UNIT_HTTP
"
paracross_testSelfConsensStages
"
$UNIT_HTTP
"
paracross_testSelfConsensStages
"
$UNIT_HTTP
"
}
}
...
...
plugin/dapp/paracross/commands/paracross.go
View file @
d0d26641
...
@@ -37,6 +37,7 @@ func ParcCmd() *cobra.Command {
...
@@ -37,6 +37,7 @@ func ParcCmd() *cobra.Command {
paraConfigCmd
(),
paraConfigCmd
(),
GetParaInfoCmd
(),
GetParaInfoCmd
(),
GetParaListCmd
(),
GetParaListCmd
(),
GetParaAssetTransCmd
(),
IsSyncCmd
(),
IsSyncCmd
(),
GetHeightCmd
(),
GetHeightCmd
(),
GetBlockInfoCmd
(),
GetBlockInfoCmd
(),
...
@@ -936,6 +937,35 @@ func getNodeGroupAddrsCmd() *cobra.Command {
...
@@ -936,6 +937,35 @@ func getNodeGroupAddrsCmd() *cobra.Command {
return
cmd
return
cmd
}
}
func
addParaAssetTranCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"hash"
,
"s"
,
""
,
"asset transfer tx hash"
)
cmd
.
MarkFlagRequired
(
"hash"
)
}
func
paraAssetTransfer
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
hash
,
_
:=
cmd
.
Flags
()
.
GetString
(
"hash"
)
params
:=
types
.
ReqString
{
Data
:
hash
,
}
var
res
pt
.
ParacrossAssetRsp
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"paracross.GetAssetTxResult"
,
params
,
&
res
)
ctx
.
Run
()
}
// GetParaAssetTransCmd get para chain asset transfer info
func
GetParaAssetTransCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"asset_tranfer"
,
Short
:
"Get para chain cross asset transfer info"
,
Run
:
paraAssetTransfer
,
}
addParaAssetTranCmdFlags
(
cmd
)
return
cmd
}
func
nodeGroup
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
nodeGroup
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
...
...
plugin/dapp/paracross/executor/action.go
View file @
d0d26641
...
@@ -762,7 +762,7 @@ func (a *action) execCrossTx(tx *types.TransactionDetail, crossTxHash []byte) (*
...
@@ -762,7 +762,7 @@ func (a *action) execCrossTx(tx *types.TransactionDetail, crossTxHash []byte) (*
if
payload
.
Ty
==
pt
.
ParacrossActionAssetWithdraw
{
if
payload
.
Ty
==
pt
.
ParacrossActionAssetWithdraw
{
receiptWithdraw
,
err
:=
a
.
assetWithdraw
(
payload
.
GetAssetWithdraw
(),
tx
.
Tx
)
receiptWithdraw
,
err
:=
a
.
assetWithdraw
(
payload
.
GetAssetWithdraw
(),
tx
.
Tx
)
if
err
!=
nil
{
if
err
!=
nil
{
clog
.
Crit
(
"paracross.Commit
Decode
Tx failed"
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHash
))
clog
.
Crit
(
"paracross.Commit
withdraw
Tx failed"
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHash
))
return
nil
,
errors
.
Cause
(
err
)
return
nil
,
errors
.
Cause
(
err
)
}
}
...
@@ -773,6 +773,31 @@ func (a *action) execCrossTx(tx *types.TransactionDetail, crossTxHash []byte) (*
...
@@ -773,6 +773,31 @@ func (a *action) execCrossTx(tx *types.TransactionDetail, crossTxHash []byte) (*
}
}
func
(
a
*
action
)
rollbackCrossTx
(
tx
*
types
.
TransactionDetail
,
crossTxHash
[]
byte
)
(
*
types
.
Receipt
,
error
)
{
if
!
bytes
.
HasSuffix
(
tx
.
Tx
.
Execer
,
[]
byte
(
pt
.
ParaX
))
{
return
nil
,
nil
}
var
payload
pt
.
ParacrossAction
err
:=
types
.
Decode
(
tx
.
Tx
.
Payload
,
&
payload
)
if
err
!=
nil
{
clog
.
Crit
(
"paracross.Commit.rollbackCrossTx Decode Tx failed"
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHash
))
return
nil
,
err
}
if
payload
.
Ty
==
pt
.
ParacrossActionAssetTransfer
{
receipt
,
err
:=
a
.
assetTransferRollback
(
payload
.
GetAssetTransfer
(),
tx
.
Tx
)
if
err
!=
nil
{
clog
.
Crit
(
"paracross.Commit rbk Tx failed"
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHash
))
return
nil
,
errors
.
Cause
(
err
)
}
clog
.
Debug
(
"paracross.Commit rollbackCrossTx"
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHash
),
"mainHeight"
,
a
.
height
)
return
receipt
,
nil
}
return
nil
,
nil
}
func
getCrossTxHashsByRst
(
api
client
.
QueueProtocolAPI
,
status
*
pt
.
ParacrossNodeStatus
)
([][]
byte
,
[]
byte
,
error
)
{
func
getCrossTxHashsByRst
(
api
client
.
QueueProtocolAPI
,
status
*
pt
.
ParacrossNodeStatus
)
([][]
byte
,
[]
byte
,
error
)
{
//只获取跨链tx
//只获取跨链tx
cfg
:=
api
.
GetConfig
()
cfg
:=
api
.
GetConfig
()
...
@@ -781,11 +806,13 @@ func getCrossTxHashsByRst(api client.QueueProtocolAPI, status *pt.ParacrossNodeS
...
@@ -781,11 +806,13 @@ func getCrossTxHashsByRst(api client.QueueProtocolAPI, status *pt.ParacrossNodeS
clog
.
Error
(
"getCrossTxHashs decode rst"
,
"CrossTxResult"
,
string
(
status
.
TxResult
),
"paraHeight"
,
status
.
Height
)
clog
.
Error
(
"getCrossTxHashs decode rst"
,
"CrossTxResult"
,
string
(
status
.
TxResult
),
"paraHeight"
,
status
.
Height
)
return
nil
,
nil
,
types
.
ErrInvalidParam
return
nil
,
nil
,
types
.
ErrInvalidParam
}
}
clog
.
Debug
(
"getCrossTxHashsByRst"
,
"height"
,
status
.
Height
,
"txResult"
,
string
(
status
.
TxResult
))
//空块
if
!
cfg
.
IsDappFork
(
status
.
MainBlockHeight
,
pt
.
ParaX
,
pt
.
ForkParaAssetTransferRbk
)
{
if
len
(
rst
)
==
0
{
if
len
(
rst
)
==
0
{
return
nil
,
nil
,
nil
return
nil
,
nil
,
nil
}
}
}
blockDetail
,
err
:=
GetBlock
(
api
,
status
.
MainBlockHash
)
blockDetail
,
err
:=
GetBlock
(
api
,
status
.
MainBlockHash
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -800,6 +827,7 @@ func getCrossTxHashsByRst(api client.QueueProtocolAPI, status *pt.ParacrossNodeS
...
@@ -800,6 +827,7 @@ func getCrossTxHashsByRst(api client.QueueProtocolAPI, status *pt.ParacrossNodeS
}
}
paraCrossHashs
:=
FilterParaCrossTxHashes
(
paraAllTxs
)
paraCrossHashs
:=
FilterParaCrossTxHashes
(
paraAllTxs
)
crossRst
:=
util
.
CalcBitMapByBitMap
(
paraCrossHashs
,
baseHashs
,
rst
)
crossRst
:=
util
.
CalcBitMapByBitMap
(
paraCrossHashs
,
baseHashs
,
rst
)
clog
.
Debug
(
"getCrossTxHashsByRst.crossRst"
,
"height"
,
status
.
Height
,
"txResult"
,
hex
.
EncodeToString
(
crossRst
),
"len"
,
len
(
paraCrossHashs
))
return
paraCrossHashs
,
crossRst
,
nil
return
paraCrossHashs
,
crossRst
,
nil
...
@@ -858,6 +886,9 @@ func getCrossTxHashs(api client.QueueProtocolAPI, status *pt.ParacrossNodeStatus
...
@@ -858,6 +886,9 @@ func getCrossTxHashs(api client.QueueProtocolAPI, status *pt.ParacrossNodeStatus
}
}
func
(
a
*
action
)
execCrossTxs
(
status
*
pt
.
ParacrossNodeStatus
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
execCrossTxs
(
status
*
pt
.
ParacrossNodeStatus
)
(
*
types
.
Receipt
,
error
)
{
var
receipt
types
.
Receipt
var
receipt
types
.
Receipt
...
@@ -881,7 +912,7 @@ func (a *action) execCrossTxs(status *pt.ParacrossNodeStatus) (*types.Receipt, e
...
@@ -881,7 +912,7 @@ func (a *action) execCrossTxs(status *pt.ParacrossNodeStatus) (*types.Receipt, e
return
nil
,
err
return
nil
,
err
}
}
if
tx
==
nil
{
if
tx
==
nil
{
clog
.
Error
(
"paracross.Commit Load Tx
failed
"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
clog
.
Error
(
"paracross.Commit Load Tx
nil
"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
"para tx index"
,
i
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]))
"para tx index"
,
i
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]))
return
nil
,
types
.
ErrHashNotExist
return
nil
,
types
.
ErrHashNotExist
}
}
...
@@ -900,6 +931,31 @@ func (a *action) execCrossTxs(status *pt.ParacrossNodeStatus) (*types.Receipt, e
...
@@ -900,6 +931,31 @@ func (a *action) execCrossTxs(status *pt.ParacrossNodeStatus) (*types.Receipt, e
clog
.
Error
(
"paracross.Commit commitDone"
,
"do cross number"
,
i
,
"hash"
,
clog
.
Error
(
"paracross.Commit commitDone"
,
"do cross number"
,
i
,
"hash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]),
hex
.
EncodeToString
(
crossTxHashs
[
i
]),
"para res"
,
util
.
BitMapBit
(
crossTxResult
,
uint32
(
i
)))
"para res"
,
util
.
BitMapBit
(
crossTxResult
,
uint32
(
i
)))
cfg
:=
a
.
api
.
GetConfig
()
if
cfg
.
IsDappFork
(
a
.
height
,
pt
.
ParaX
,
pt
.
ForkParaAssetTransferRbk
)
{
tx
,
err
:=
GetTx
(
a
.
api
,
crossTxHashs
[
i
])
if
err
!=
nil
{
clog
.
Crit
(
"paracross.Commit rbk Load Tx failed"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
"para tx index"
,
i
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]))
return
nil
,
err
}
if
tx
==
nil
{
clog
.
Error
(
"paracross.Commit rbk Load Tx nil"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
"para tx index"
,
i
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]))
return
nil
,
types
.
ErrHashNotExist
}
receiptCross
,
err
:=
a
.
rollbackCrossTx
(
tx
,
crossTxHashs
[
i
])
if
err
!=
nil
{
clog
.
Error
(
"paracross.Commit rollbackCrossTx"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
"para tx index"
,
i
,
"error"
,
err
)
return
nil
,
errors
.
Cause
(
err
)
}
if
receiptCross
==
nil
{
continue
}
receipt
.
KV
=
append
(
receipt
.
KV
,
receiptCross
.
KV
...
)
receipt
.
Logs
=
append
(
receipt
.
Logs
,
receiptCross
.
Logs
...
)
}
}
}
}
}
...
...
plugin/dapp/paracross/executor/asset.go
View file @
d0d26641
...
@@ -87,6 +87,24 @@ func (a *action) assetWithdraw(withdraw *types.AssetsWithdraw, withdrawTx *types
...
@@ -87,6 +87,24 @@ func (a *action) assetWithdraw(withdraw *types.AssetsWithdraw, withdrawTx *types
return
assetWithdrawBalance
(
paraAcc
,
a
.
fromaddr
,
withdraw
.
Amount
)
return
assetWithdrawBalance
(
paraAcc
,
a
.
fromaddr
,
withdraw
.
Amount
)
}
}
func
(
a
*
action
)
assetTransferRollback
(
transfer
*
types
.
AssetsTransfer
,
transferTx
*
types
.
Transaction
)
(
*
types
.
Receipt
,
error
)
{
cfg
:=
a
.
api
.
GetConfig
()
isPara
:=
cfg
.
IsPara
()
//主链处理分支
if
!
isPara
{
accDB
,
err
:=
createAccount
(
cfg
,
a
.
db
,
transfer
.
Cointoken
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"assetTransferToken call account.NewAccountDB failed"
)
}
execAddr
:=
address
.
ExecAddress
(
pt
.
ParaX
)
fromAcc
:=
address
.
ExecAddress
(
string
(
transferTx
.
Execer
))
clog
.
Debug
(
"paracross.AssetTransferRbk "
,
"execer"
,
string
(
transferTx
.
Execer
),
"transfer.txHash"
,
hex
.
EncodeToString
(
transferTx
.
Hash
()),
"curTx"
,
hex
.
EncodeToString
(
a
.
tx
.
Hash
()))
return
accDB
.
ExecTransfer
(
fromAcc
,
transferTx
.
From
(),
execAddr
,
transfer
.
Amount
)
}
return
nil
,
nil
}
func
createAccount
(
cfg
*
types
.
Chain33Config
,
db
db
.
KV
,
symbol
string
)
(
*
account
.
DB
,
error
)
{
func
createAccount
(
cfg
*
types
.
Chain33Config
,
db
db
.
KV
,
symbol
string
)
(
*
account
.
DB
,
error
)
{
var
accDB
*
account
.
DB
var
accDB
*
account
.
DB
var
err
error
var
err
error
...
...
plugin/dapp/paracross/executor/exec_local.go
View file @
d0d26641
...
@@ -228,6 +228,7 @@ func setMinerTxResultFork(cfg *types.Chain33Config, status *pt.ParacrossNodeStat
...
@@ -228,6 +228,7 @@ func setMinerTxResultFork(cfg *types.Chain33Config, status *pt.ParacrossNodeStat
//主链自己过滤平行链tx, 对平行链执行失败的tx主链无法识别,主链和平行链需要获取相同的最初的tx map
//主链自己过滤平行链tx, 对平行链执行失败的tx主链无法识别,主链和平行链需要获取相同的最初的tx map
//全部平行链tx结果
//全部平行链tx结果
status
.
TxResult
=
[]
byte
(
hex
.
EncodeToString
(
util
.
CalcSingleBitMap
(
curTxHashs
,
receipts
)))
status
.
TxResult
=
[]
byte
(
hex
.
EncodeToString
(
util
.
CalcSingleBitMap
(
curTxHashs
,
receipts
)))
clog
.
Debug
(
"setMinerTxResultFork"
,
"height"
,
status
.
Height
,
"txResult"
,
string
(
status
.
TxResult
))
//ForkLoopCheckCommitTxDone 后只保留全部txreseult 结果
//ForkLoopCheckCommitTxDone 后只保留全部txreseult 结果
if
!
pt
.
IsParaForkHeight
(
cfg
,
status
.
MainBlockHeight
,
pt
.
ForkLoopCheckCommitTxDone
)
{
if
!
pt
.
IsParaForkHeight
(
cfg
,
status
.
MainBlockHeight
,
pt
.
ForkLoopCheckCommitTxDone
)
{
...
...
plugin/dapp/paracross/executor/query.go
View file @
d0d26641
...
@@ -218,11 +218,15 @@ func (p *Paracross) Query_GetDoneTitleHeight(in *pt.ReqParacrossTitleHeight) (ty
...
@@ -218,11 +218,15 @@ func (p *Paracross) Query_GetDoneTitleHeight(in *pt.ReqParacrossTitleHeight) (ty
}
}
// Query_GetAssetTxResult query get asset tx reseult
// Query_GetAssetTxResult query get asset tx reseult
func
(
p
*
Paracross
)
Query_GetAssetTxResult
(
in
*
types
.
Req
Hash
)
(
types
.
Message
,
error
)
{
func
(
p
*
Paracross
)
Query_GetAssetTxResult
(
in
*
types
.
Req
String
)
(
types
.
Message
,
error
)
{
if
in
==
nil
{
if
in
==
nil
||
in
.
Data
==
""
{
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
return
p
.
paracrossGetAssetTxResult
(
in
.
Hash
)
hash
,
err
:=
common
.
FromHex
(
in
.
Data
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"fromHex"
)
}
return
p
.
paracrossGetAssetTxResult
(
hash
)
}
}
// Query_GetMainBlockHash query get mainblockHash by tx
// Query_GetMainBlockHash query get mainblockHash by tx
...
@@ -296,7 +300,7 @@ func listLocalTitles(db dbm.KVDB) (types.Message, error) {
...
@@ -296,7 +300,7 @@ func listLocalTitles(db dbm.KVDB) (types.Message, error) {
MostSameCommit
:
st
.
MostSameCommit
,
MostSameCommit
:
st
.
MostSameCommit
,
Title
:
st
.
Title
,
Title
:
st
.
Title
,
Height
:
st
.
Height
,
Height
:
st
.
Height
,
TxResult
:
hex
.
EncodeToS
tring
(
st
.
TxResult
),
TxResult
:
s
tring
(
st
.
TxResult
),
}
}
resp
.
Titles
=
append
(
resp
.
Titles
,
rst
)
resp
.
Titles
=
append
(
resp
.
Titles
,
rst
)
...
@@ -400,13 +404,34 @@ func (p *Paracross) paracrossGetAssetTxResult(hash []byte) (types.Message, error
...
@@ -400,13 +404,34 @@ func (p *Paracross) paracrossGetAssetTxResult(hash []byte) (types.Message, error
return
nil
,
err
return
nil
,
err
}
}
var
r
esul
t
pt
.
ParacrossAsset
var
r
s
t
pt
.
ParacrossAsset
err
=
types
.
Decode
(
value
,
&
r
esul
t
)
err
=
types
.
Decode
(
value
,
&
r
s
t
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
return
&
result
,
nil
rsp
:=
&
pt
.
ParacrossAssetRsp
{
From
:
rst
.
From
,
To
:
rst
.
To
,
Amount
:
rst
.
Amount
,
Exec
:
rst
.
Exec
,
Symbol
:
rst
.
Symbol
,
Height
:
rst
.
Height
,
CommitDoneHeight
:
rst
.
CommitDoneHeight
,
ParaHeight
:
rst
.
ParaHeight
,
}
rsp
.
TxHash
=
common
.
ToHex
(
rst
.
TxHash
)
rsp
.
IsWithdraw
=
"false"
if
rst
.
IsWithdraw
{
rsp
.
IsWithdraw
=
"true"
}
rsp
.
Success
=
"false"
if
rst
.
Success
{
rsp
.
Success
=
"true"
}
return
rsp
,
nil
}
}
//Query_GetSelfConsStages get self consensus stages configed
//Query_GetSelfConsStages get self consensus stages configed
...
...
plugin/dapp/paracross/proto/paracross.proto
View file @
d0d26641
...
@@ -385,6 +385,23 @@ message ParacrossAsset {
...
@@ -385,6 +385,23 @@ message ParacrossAsset {
bool
success
=
23
;
bool
success
=
23
;
}
}
message
ParacrossAssetRsp
{
// input
string
from
=
1
;
string
to
=
2
;
string
isWithdraw
=
3
;
string
txHash
=
4
;
int64
amount
=
5
;
string
exec
=
6
;
string
symbol
=
7
;
// 主链部分
int64
height
=
10
;
// 平行链部分
int64
commitDoneHeight
=
21
;
int64
paraHeight
=
22
;
string
success
=
23
;
}
message
ParaLocalDbBlock
{
message
ParaLocalDbBlock
{
int64
height
=
1
;
int64
height
=
1
;
bytes
mainHash
=
2
;
bytes
mainHash
=
2
;
...
@@ -408,6 +425,6 @@ service paracross {
...
@@ -408,6 +425,6 @@ service paracross {
rpc
ListTitles
(
ReqNil
)
returns
(
RespParacrossTitles
)
{}
rpc
ListTitles
(
ReqNil
)
returns
(
RespParacrossTitles
)
{}
rpc
GetDoneTitleHeight
(
ReqParacrossTitleHeight
)
returns
(
RespParacrossDone
)
{}
rpc
GetDoneTitleHeight
(
ReqParacrossTitleHeight
)
returns
(
RespParacrossDone
)
{}
rpc
GetTitleHeight
(
ReqParacrossTitleHeight
)
returns
(
ParacrossHeightStatusRsp
)
{}
rpc
GetTitleHeight
(
ReqParacrossTitleHeight
)
returns
(
ParacrossHeightStatusRsp
)
{}
rpc
GetAssetTxResult
(
Req
Hash
)
returns
(
ParacrossAsset
)
{}
rpc
GetAssetTxResult
(
Req
String
)
returns
(
ParacrossAssetRsp
)
{}
rpc
IsSync
(
ReqNil
)
returns
(
IsCaughtUp
)
{}
rpc
IsSync
(
ReqNil
)
returns
(
IsCaughtUp
)
{}
}
}
\ No newline at end of file
plugin/dapp/paracross/rpc/rpc.go
View file @
d0d26641
...
@@ -118,20 +118,20 @@ func (c *channelClient) GetDoneTitleHeight(ctx context.Context, req *pt.ReqParac
...
@@ -118,20 +118,20 @@ func (c *channelClient) GetDoneTitleHeight(ctx context.Context, req *pt.ReqParac
return
nil
,
types
.
ErrDecode
return
nil
,
types
.
ErrDecode
}
}
func
(
c
*
channelClient
)
GetAssetTxResult
(
ctx
context
.
Context
,
req
*
types
.
Req
Hash
)
(
*
pt
.
ParacrossAsset
,
error
)
{
func
(
c
*
channelClient
)
GetAssetTxResult
(
ctx
context
.
Context
,
req
*
types
.
Req
String
)
(
*
pt
.
ParacrossAssetRsp
,
error
)
{
cfg
:=
c
.
GetConfig
()
cfg
:=
c
.
GetConfig
()
data
,
err
:=
c
.
Query
(
pt
.
GetExecName
(
cfg
),
"GetAssetTxResult"
,
req
)
data
,
err
:=
c
.
Query
(
pt
.
GetExecName
(
cfg
),
"GetAssetTxResult"
,
req
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
if
resp
,
ok
:=
data
.
(
*
pt
.
ParacrossAsset
);
ok
{
if
resp
,
ok
:=
data
.
(
*
pt
.
ParacrossAsset
Rsp
);
ok
{
return
resp
,
nil
return
resp
,
nil
}
}
return
nil
,
types
.
ErrDecode
return
nil
,
types
.
ErrDecode
}
}
// GetAssetTxResult get asset tx result
// GetAssetTxResult get asset tx result
func
(
c
*
Jrpc
)
GetAssetTxResult
(
req
*
types
.
Req
Hash
,
result
*
interface
{})
error
{
func
(
c
*
Jrpc
)
GetAssetTxResult
(
req
*
types
.
Req
String
,
result
*
interface
{})
error
{
if
req
==
nil
{
if
req
==
nil
{
return
types
.
ErrInvalidParam
return
types
.
ErrInvalidParam
}
}
...
...
plugin/dapp/paracross/rpc/rpc_test.go
View file @
d0d26641
...
@@ -124,8 +124,8 @@ func TestChannelClient_GetAssetTxResult(t *testing.T) {
...
@@ -124,8 +124,8 @@ func TestChannelClient_GetAssetTxResult(t *testing.T) {
api
.
On
(
"GetConfig"
,
mock
.
Anything
)
.
Return
(
cfg
,
nil
)
api
.
On
(
"GetConfig"
,
mock
.
Anything
)
.
Return
(
cfg
,
nil
)
client
:=
newGrpc
(
api
)
client
:=
newGrpc
(
api
)
client
.
Init
(
"paracross"
,
nil
,
nil
,
nil
)
client
.
Init
(
"paracross"
,
nil
,
nil
,
nil
)
req
:=
&
types
.
Req
Hash
{}
req
:=
&
types
.
Req
String
{}
api
.
On
(
"Query"
,
pt
.
GetExecName
(
cfg
),
"GetAssetTxResult"
,
req
)
.
Return
(
&
pt
.
ParacrossAsset
{},
nil
)
api
.
On
(
"Query"
,
pt
.
GetExecName
(
cfg
),
"GetAssetTxResult"
,
req
)
.
Return
(
&
pt
.
ParacrossAsset
Rsp
{},
nil
)
_
,
err
:=
client
.
GetAssetTxResult
(
context
.
Background
(),
req
)
_
,
err
:=
client
.
GetAssetTxResult
(
context
.
Background
(),
req
)
assert
.
Nil
(
t
,
err
)
assert
.
Nil
(
t
,
err
)
}
}
...
@@ -135,9 +135,9 @@ func TestJrpc_GetAssetTxResult(t *testing.T) {
...
@@ -135,9 +135,9 @@ func TestJrpc_GetAssetTxResult(t *testing.T) {
api
:=
new
(
mocks
.
QueueProtocolAPI
)
api
:=
new
(
mocks
.
QueueProtocolAPI
)
api
.
On
(
"GetConfig"
,
mock
.
Anything
)
.
Return
(
cfg
,
nil
)
api
.
On
(
"GetConfig"
,
mock
.
Anything
)
.
Return
(
cfg
,
nil
)
j
:=
newJrpc
(
api
)
j
:=
newJrpc
(
api
)
req
:=
&
types
.
Req
Hash
{}
req
:=
&
types
.
Req
String
{}
var
result
interface
{}
var
result
interface
{}
api
.
On
(
"Query"
,
pt
.
GetExecName
(
cfg
),
"GetAssetTxResult"
,
req
)
.
Return
(
&
pt
.
ParacrossAsset
{},
nil
)
api
.
On
(
"Query"
,
pt
.
GetExecName
(
cfg
),
"GetAssetTxResult"
,
req
)
.
Return
(
&
pt
.
ParacrossAsset
Rsp
{},
nil
)
err
:=
j
.
GetAssetTxResult
(
req
,
&
result
)
err
:=
j
.
GetAssetTxResult
(
req
,
&
result
)
assert
.
Nil
(
t
,
err
)
assert
.
Nil
(
t
,
err
)
}
}
...
...
plugin/dapp/paracross/types/type.go
View file @
d0d26641
...
@@ -26,6 +26,8 @@ var (
...
@@ -26,6 +26,8 @@ var (
MainLoopCheckCommitTxDoneForkHeight
=
"mainLoopCheckCommitTxDoneForkHeight"
MainLoopCheckCommitTxDoneForkHeight
=
"mainLoopCheckCommitTxDoneForkHeight"
// ForkParaSelfConsStages 平行链自共识分阶段共识
// ForkParaSelfConsStages 平行链自共识分阶段共识
ForkParaSelfConsStages
=
"ForkParaSelfConsStages"
ForkParaSelfConsStages
=
"ForkParaSelfConsStages"
// ForkParaAssetTransferRbk 平行链资产转移平行链失败主链回滚
ForkParaAssetTransferRbk
=
"ForkParaAssetTransferRbk"
// ParaConsSubConf sub
// ParaConsSubConf sub
ParaConsSubConf
=
"consensus.sub.para"
ParaConsSubConf
=
"consensus.sub.para"
...
@@ -52,6 +54,8 @@ func InitFork(cfg *types.Chain33Config) {
...
@@ -52,6 +54,8 @@ func InitFork(cfg *types.Chain33Config) {
cfg
.
RegisterDappFork
(
ParaX
,
"ForkParacrossWithdrawFromParachain"
,
1298600
)
cfg
.
RegisterDappFork
(
ParaX
,
"ForkParacrossWithdrawFromParachain"
,
1298600
)
cfg
.
RegisterDappFork
(
ParaX
,
ForkCommitTx
,
1850000
)
cfg
.
RegisterDappFork
(
ParaX
,
ForkCommitTx
,
1850000
)
cfg
.
RegisterDappFork
(
ParaX
,
ForkLoopCheckCommitTxDone
,
3230000
)
cfg
.
RegisterDappFork
(
ParaX
,
ForkLoopCheckCommitTxDone
,
3230000
)
cfg
.
RegisterDappFork
(
ParaX
,
ForkParaAssetTransferRbk
,
4500000
)
//只在平行链启用
//只在平行链启用
cfg
.
RegisterDappFork
(
ParaX
,
ForkParaSelfConsStages
,
types
.
MaxHeight
)
cfg
.
RegisterDappFork
(
ParaX
,
ForkParaSelfConsStages
,
types
.
MaxHeight
)
}
}
...
...
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