Commit 83a7a649 authored by mdj33's avatar mdj33 Committed by vipwzw

add game para chain

parent 40bb46f6
......@@ -25,12 +25,17 @@ services:
expose:
- "8802"
chain29:
entrypoint: /root/entrypoint.sh
environment:
PARAFILE: "/root/chain33.para29.toml"
nginx:
image: nginx:latest
depends_on:
- chain33
- chain30
- chain29
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
expose:
......
......@@ -4,9 +4,11 @@ PARA_CLI="docker exec ${NODE3} /root/chain33-para-cli"
PARA_CLI2="docker exec ${NODE2} /root/chain33-para-cli"
PARA_CLI1="docker exec ${NODE1} /root/chain33-para-cli"
PARA_CLI4="docker exec ${NODE4} /root/chain33-para-cli"
PARA_CLI5="docker exec ${NODE5} /root/chain33-para-cli --paraName user.p.game."
MAIN_CLI="docker exec ${NODE3} /root/chain33-cli"
PARANAME="para"
PARANAME_GAME="game"
PARA_COIN_FROZEN="5.0000"
MainLoopCheckForkHeight="60"
......@@ -19,21 +21,25 @@ fi
#source test-rpc.sh
function para_init() {
para_set_toml chain33.para33.toml
para_set_toml chain33.para32.toml
para_set_toml chain33.para31.toml
para_set_toml chain33.para30.toml
para_set_toml chain33.para33.toml "$PARANAME"
para_set_toml chain33.para32.toml "$PARANAME"
para_set_toml chain33.para31.toml "$PARANAME"
para_set_toml chain33.para30.toml "$PARANAME"
sed -i $xsedfix 's/^authAccount=.*/authAccount="1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4"/g' chain33.para33.toml
sed -i $xsedfix 's/^authAccount=.*/authAccount="1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR"/g' chain33.para32.toml
sed -i $xsedfix 's/^authAccount=.*/authAccount="1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k"/g' chain33.para31.toml
sed -i $xsedfix 's/^authAccount=.*/authAccount="1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"/g' chain33.para30.toml
para_set_toml chain33.para29.toml "$PARANAME_GAME"
sed -i $xsedfix 's/^authAccount=.*/authAccount="1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4"/g' chain33.para29.toml
}
function para_set_toml() {
cp chain33.para.toml "${1}"
local paraname="$2"
sed -i $xsedfix 's/^Title.*/Title="user.p.'''$PARANAME'''."/g' "${1}"
sed -i $xsedfix 's/^Title.*/Title="user.p.'''$paraname'''."/g' "${1}"
sed -i $xsedfix 's/^# TestNet=.*/TestNet=true/g' "${1}"
sed -i $xsedfix 's/^startHeight=.*/startHeight=1/g' "${1}"
sed -i $xsedfix 's/^interval=.*/interval=4/g' "${1}"
......@@ -93,6 +99,15 @@ function para_set_wallet() {
para_import_key "${PARA_CLI}" "0xfdf2bbff853ecff2e7b86b2a8b45726c6538ca7d1403dc94e50131ef379bdca0" "othernode1"
#1NNaYHkscJaLJ2wUrFNeh6cQXBS4TrFYeB
para_import_key "${PARA_CLI}" "0x794443611e7369a57b078881445b93b754cbc9b9b8f526535ab9c6d21d29203d" "othernode2"
#cross_transfer
#14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
# para_import_key "${PARA_CLI5}" "0xCC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944" "genesis"
#1KS
para_import_wallet "${PARA_CLI5}" "0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b" "paraAuthAccount"
#1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu
para_import_key "${PARA_CLI5}" "0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1" "cross_transfer"
}
function para_import_wallet() {
......@@ -143,6 +158,7 @@ function para_transfer() {
main_transfer2account "1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR"
main_transfer2account "1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k"
main_transfer2account "1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
main_transfer2account "1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu"
# super node test
main_transfer2account "1E5saiXVb9mW8wcWUUZjsHJPZs5GmdzuSY"
main_transfer2account "1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj"
......@@ -152,12 +168,16 @@ function para_transfer() {
main_transfer2account "1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3" 10
main_transfer2account "1EZKahMRfoMiKp1BewjWrQWoaJ9kmC4hum" 10
#relay rpc test
para_transfer2account "12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
para_transfer2account "1E5saiXVb9mW8wcWUUZjsHJPZs5GmdzuSY"
para_transfer2account "1PUiGcbsccfxW3zuvHXZBJfznziph5miAo"
para_transfer2account "1EDnnePAZN48aC2hiTDzhkczfF39g1pZZX"
para_transfer2account "${PARA_CLI}" "12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
para_transfer2account "${PARA_CLI}" "1E5saiXVb9mW8wcWUUZjsHJPZs5GmdzuSY"
para_transfer2account "${PARA_CLI}" "1PUiGcbsccfxW3zuvHXZBJfznziph5miAo"
para_transfer2account "${PARA_CLI}" "1EDnnePAZN48aC2hiTDzhkczfF39g1pZZX"
#cross_transfer
#0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1
para_transfer2account "${PARA_CLI5}" "1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu"
#rpc test pool addr
para_transfer2account "1PcGKYYoLn1PLLJJodc1UpgWGeFAQasAkx" 500000
para_transfer2account "${PARA_CLI}" "1PcGKYYoLn1PLLJJodc1UpgWGeFAQasAkx" 500000
block_wait "${CLI}" 2
echo "=========== # main chain send to paracross ============="
......@@ -168,8 +188,6 @@ function para_transfer() {
block_wait "${CLI}" 2
# para_create_manage_nodegroup
echo "=========== # config token blacklist ============="
#token precreate
txhash=$(para_configkey "${PARA_CLI}" "token-blacklist" "BTY")
......@@ -189,12 +207,12 @@ function main_transfer2account() {
}
function para_transfer2account() {
echo "${1}"
echo "${2}"
local coins=1000
if [ "$#" -ge 2 ]; then
coins="$2"
if [ "$#" -ge 3 ]; then
coins="$3"
fi
hash1=$(${PARA_CLI} send coins transfer -a "$coins" -n transfer -t "${1}" -k 0xCC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944)
hash1=$(${1} send coins transfer -a "$coins" -n transfer -t "${2}" -k 0xCC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944)
echo "${hash1}"
}
......@@ -208,20 +226,6 @@ function main_transfer2paracross() {
echo "${hash1}"
}
function para_create_manage_nodegroup() {
echo "=========== # para chain send config ============="
para_configkey "${CLI}" "paracross-nodes-user.p.${PARANAME}." "1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4"
para_configkey "${CLI}" "paracross-nodes-user.p.${PARANAME}." "1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR"
para_configkey "${CLI}" "paracross-nodes-user.p.${PARANAME}." "1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k"
para_configkey "${CLI}" "paracross-nodes-user.p.${PARANAME}." "1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
para_configkey "${PARA_CLI}" "paracross-nodes-user.p.${PARANAME}." "1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4"
para_configkey "${PARA_CLI}" "paracross-nodes-user.p.${PARANAME}." "1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR"
para_configkey "${PARA_CLI}" "paracross-nodes-user.p.${PARANAME}." "1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k"
para_configkey "${PARA_CLI}" "paracross-nodes-user.p.${PARANAME}." "1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
block_wait "${CLI}" 1
}
function para_configkey() {
tx=$(${1} config config_tx -o add -c "${2}" -v "${3}")
sign=$(${CLI} wallet sign -k 0xc34b5d9d44ac7b754806f761d3d4d2c4fe5214f6b074c19f069c4f5c2a29c8cc -d "${tx}")
......@@ -357,15 +361,16 @@ function para_cross_transfer_withdraw() {
local times=200
while true; do
acc=$(${CLI} account balance -e paracross -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq -r ".balance")
echo "account balance is ${acc}, expect 9.3 "
if [ "${acc}" != "9.3000" ]; then
acc_para=$(${PARA_CLI} asset balance -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv --asset_exec paracross --asset_symbol coins.bty | jq -r ".balance")
echo "account balance is ${acc}, expect 9.3, para acct balance is ${acc_para},expect 0.7 "
if [ "${acc}" != "9.3000" ] || [ "${acc_para}" != "0.7000" ]; then
block_wait "${CLI}" 2
times=$((times - 1))
if [ $times -le 0 ]; then
echo "para_cross_transfer_withdraw failed"
${CLI} tx query -s "$hash2"
${PARA_CLI} tx query -s "$hash2"
${PARA_CLI} asset balance -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv -e user.p.para.paracross --asset_exec paracross --asset_symbol coins.bty
${PARA_CLI} asset balance -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv --asset_exec paracross --asset_symbol coins.bty
exit 1
fi
else
......@@ -465,13 +470,14 @@ function para_cross_transfer_withdraw_for_token() {
local times=100
while true; do
acc=$(${CLI} asset balance -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv --asset_symbol FZM --asset_exec token -e paracross | jq -r ".balance")
echo "account balance is ${acc}, expect 224 "
if [ "${acc}" != "224.0000" ]; then
acc_para=$(${PARA_CLI} asset balance -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv --asset_symbol token.FZM --asset_exec paracross -e paracross | jq -r ".balance")
echo "account balance is ${acc}, expect 224, para acct balance is ${acc_para}, execpt=109 "
if [ "${acc}" != "224.0000" ] || [ "${acc_para}" != "109.0000" ]; then
block_wait "${CLI}" 2
times=$((times - 1))
if [ $times -le 0 ]; then
echo "para_cross_transfer_withdraw failed"
exit 1
# exit 1
fi
else
echo "para_cross_transfer_withdraw success"
......@@ -480,6 +486,149 @@ function para_cross_transfer_withdraw_for_token() {
done
}
function para_create_nodegroup_gamechain() {
echo "=========== # game para chain create node group test ============="
##apply
txhash=$(${CLI} --paraName user.p.game. send para nodegroup apply -a "1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4" -c 5 -k 0xd165c84ed37c2a427fea487470ee671b7a0495d68d82607cafbc6348bf23bec5)
echo "tx=$txhash"
query_tx "${PARA_CLI5}" "${txhash}"
id=$txhash
echo "=========== # game para chain approve node group ============="
##approve
txhash=$(${CLI} --paraName user.p.game. send para nodegroup approve -i "$id" -c 5 -k 0xc34b5d9d44ac7b754806f761d3d4d2c4fe5214f6b074c19f069c4f5c2a29c8cc)
echo "tx=$txhash"
query_tx "${PARA_CLI5}" "${txhash}"
status=$(${PARA_CLI5} para nodegroup status | jq -r ".status")
if [ "$status" != 2 ]; then
echo "status not approve status=$status"
exit 1
fi
${PARA_CLI5} para nodegroup addrs
}
function para_cross_transfer_from_parachain() {
echo "=========== # para cross transfer from parachain test ============="
balance=$(${PARA_CLI5} account balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -e user.p.game.coins | jq -r ".balance")
if [ "${balance}" != "1000.0000" ]; then
echo "para account 1BM2xhBk should be 1000, real is $balance"
exit 1
fi
hash=$(${PARA_CLI5} send coins send_exec -e user.p.game.paracross -a 300 -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}"
query_tx "${PARA_CLI5}" "${hash}"
balance=$(${PARA_CLI5} account balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -e user.p.game.paracross | jq -r ".balance")
if [ "${balance}" != "300.0000" ]; then
echo "para paracross account 1BM2xhBk should be 300, real is $balance"
exit 1
fi
echo "========== #1. user.p.game chain transfer to main chain 300 user.p.game.coins.para, remain=700 ==========="
hash=$(${PARA_CLI5} send para cross_transfer -a 300 -s user.p.game.coins.para -d 1 -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}"
query_tx "${PARA_CLI5}" "${hash}"
check_cross_transfer_game_balance "300.0000" "0.0000" "${hash}"
echo "check asset transfer tx=$hash"
res=$(${CLI} para asset_txinfo -s "${hash}")
echo "$res"
succ=$(jq -r ".success" <<<"$res")
if [ "${succ}" != "true" ]; then
echo "para asset transfer tx report fail"
exit 1
fi
echo "========== #2. main transfer 200 user.p.game.coins.para game chain asset to para chain, main remain=100, parachain=200 ===="
hash=$(${CLI} send para transfer_exec -e paracross -a 200 -s user.p.game.coins.para -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}"
query_tx "${CLI}" "${hash}"
hash=$(${CLI} --paraName=user.p.para. send para cross_transfer -a 200 -s user.p.game.coins.para -d 0 -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}"
query_tx "${CLI}" "${hash}"
check_cross_transfer_para_balance "100.0000" "200.0000" "${hash}"
echo "========== #3. withdraw game chain asset to main chain from para chain 50 user.p.game.coins.para,parachain=150,main=150 ===="
hash=$(${CLI} --paraName=user.p.para. send para cross_transfer -a 50 -s user.p.game.coins.para -d 1 -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}"
query_tx "${CLI}" "${hash}"
check_cross_transfer_para_balance "100.0000" "150.0000" "${hash}"
echo "withdraw 50 from paracross exec"
hash=$(${CLI} send para withdraw -a 50 -e paracross -s user.p.game.coins.para -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}"
query_tx "${CLI}" "${hash}"
acc=$(${CLI} asset balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu --asset_exec paracross --asset_symbol user.p.game.coins.para -e paracross | jq -r ".balance")
if [ "${acc}" != "150.0000" ]; then
echo "para_cross_transfer_ withdraw from paracross exec failed, acc=$acc"
exit 1
fi
echo "========== #4. withdraw game chain asset to game chain from main chain 50 user.p.game.coins.para,parachain=150,main=100,para=50+700 ======"
hash=$(${CLI} --paraName=user.p.game. send para cross_transfer -a 50 -s user.p.game.coins.para -d 0 -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}"
query_tx "${CLI}" "${hash}"
check_cross_transfer_game_balance "100.0000" "50.0000" "${hash}"
}
function check_cross_transfer_para_balance() {
local times=200
while true; do
acc=$(${CLI} asset balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu --asset_exec paracross --asset_symbol user.p.game.coins.para -e paracross | jq -r ".balance")
acc_para=$(${PARA_CLI} asset balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu --asset_exec paracross --asset_symbol paracross.user.p.game.coins.para -e paracross | jq -r ".balance")
res=$(${CLI} para asset_txinfo -s "${hash}")
echo "$res"
succ=$(jq -r ".success" <<<"$res")
echo "main account balance is ${acc}, expect $1, para acct balance is ${acc_para},expect $2, cross rst=$succ, expect=true "
if [ "${acc}" != "$1" ] || [ "${acc_para}" != "$2" ] || [ "${succ}" != "true" ]; then
block_wait "${CLI}" 2
times=$((times - 1))
if [ $times -le 0 ]; then
echo "para_cross_transfer main chain to para chain failed"
${CLI} tx query -s "$hash"
${PARA_CLI} tx query -s "$hash"
exit 1
fi
else
echo "para_cross_transfer main chain to para chain success"
break
fi
done
}
function check_cross_transfer_game_balance() {
local times=200
while true; do
acc=$(${CLI} asset balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu --asset_exec paracross --asset_symbol user.p.game.coins.para -e paracross | jq -r ".balance")
acc_para=$(${PARA_CLI5} account balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -e user.p.game.paracross | jq -r ".balance")
res=$(${CLI} para asset_txinfo -s "${hash}")
echo "$res"
succ=$(jq -r ".success" <<<"$res")
echo "main account balance is ${acc}, expect $1, para exec acct balance is ${acc_para},expect $2, cross rst=$succ, expect=true "
if [ "${acc}" != "$1" ] || [ "${acc_para}" != "$2" ] || [ "${succ}" != "true" ]; then
block_wait "${CLI}" 2
times=$((times - 1))
if [ $times -le 0 ]; then
echo "para_cross_transfer main chain and game chain failed"
${CLI} tx query -s "$3"
${PARA_CLI5} tx query -s "$3"
exit 1
fi
else
echo "para_cross_transfer main chain and game chain success"
break
fi
done
}
function para_create_nodegroup_test() {
echo "=========== # para chain create node group test ============="
##apply
......@@ -935,17 +1084,19 @@ function privacy_transfer_test() {
function para_test() {
echo "=========== # para chain test ============="
block_wait2height "${PARA_CLI}" $MainLoopCheckForkHeight "1"
# block_wait2height "${PARA_CLI}" $MainLoopCheckForkHeight "1"
para_create_nodegroup
para_nodegroup_behalf_quit_test
para_nodemanage_cancel_test
para_nodemanage_test
para_nodemanage_node_behalf_join
para_create_nodegroup_gamechain
# para_nodemanage_cancel_test
# para_nodemanage_test
# para_nodemanage_node_behalf_join
token_create "${PARA_CLI}"
token_transfer "${PARA_CLI}"
para_cross_transfer_withdraw
para_cross_transfer_withdraw_for_token
privacy_transfer_test "${PARA_CLI}"
para_cross_transfer_from_parachain
}
function paracross() {
......
......@@ -1009,10 +1009,18 @@ func (a *action) execCrossTxs(status *pt.ParacrossNodeStatus) (*types.Receipt, e
func (a *action) AssetTransfer(transfer *types.AssetsTransfer) (*types.Receipt, error) {
clog.Debug("Paracross.Exec", "AssetTransfer", transfer.Cointoken, "transfer", "")
//rbk fork后 如果没有nodegroup conf,也不允许跨链
if a.api.GetConfig().IsDappFork(a.height, pt.ParaX, pt.ForkParaAssetTransferRbk) {
err := a.isAllowTransfer()
if err != nil {
return nil, errors.Wrap(err, "AssetTransfer not allow")
}
}
receipt, err := a.assetTransfer(transfer)
if err != nil {
clog.Error("AssetTransfer failed", "err", err)
return nil, errors.Cause(err)
return nil, errors.Wrap(err, "AssetTransfer failed")
}
return receipt, nil
}
......@@ -1026,6 +1034,14 @@ func (a *action) AssetWithdraw(withdraw *types.AssetsWithdraw) (*types.Receipt,
}
}
//rbk fork后 如果没有nodegroup conf,也不允许跨链
if cfg.IsDappFork(a.height, pt.ParaX, pt.ForkParaAssetTransferRbk) {
err := a.isAllowTransfer()
if err != nil {
return nil, errors.Wrap(err, "AssetTransfer not allow")
}
}
isPara := cfg.IsPara()
if !isPara {
// 需要平行链先执行, 达成共识时,继续执行
......@@ -1035,8 +1051,7 @@ func (a *action) AssetWithdraw(withdraw *types.AssetsWithdraw) (*types.Receipt,
"txHash", common.ToHex(a.tx.Hash()), "token name", withdraw.Cointoken)
receipt, err := a.assetWithdraw(withdraw, a.tx)
if err != nil {
clog.Error("AssetWithdraw failed", "err", err)
return nil, errors.Cause(err)
return nil, errors.Wrap(err, "AssetWithdraw failed")
}
return receipt, nil
}
......@@ -1046,9 +1061,14 @@ func (a *action) CrossAssetTransfer(transfer *pt.CrossAssetTransfer) (*types.Rec
cfg := a.api.GetConfig()
isPara := cfg.IsPara()
err := a.isAllowTransfer()
if err != nil {
return nil, errors.Wrap(err, "CrossAssetTransfer not Allow")
}
act, err := getCrossAction(transfer, string(a.tx.Execer))
if act == pt.ParacrossNoneTransfer {
return nil, err
return nil, errors.Wrap(err, "CrossAssetTransfer non action")
}
// 需要平行链先执行, 达成共识时,继续执行
if !isPara && (act == pt.ParacrossMainWithdraw || act == pt.ParacrossParaTransfer) {
......@@ -1056,8 +1076,7 @@ func (a *action) CrossAssetTransfer(transfer *pt.CrossAssetTransfer) (*types.Rec
}
receipt, err := a.crossAssetTransfer(transfer, act, a.tx)
if err != nil {
clog.Error("CrossAssetTransfer failed", "err", err)
return nil, err
return nil, errors.Wrap(err, "CrossAssetTransfer failed")
}
return receipt, nil
}
......@@ -1129,6 +1148,21 @@ func getTitleFrom(exec []byte) ([]byte, error) {
return exec[:last+1], nil
}
func (a *action) isAllowTransfer() error {
tit, err := getTitleFrom(a.tx.Execer)
if err != nil {
return errors.Wrapf(types.ErrInvalidParam, "CrossAssetTransfer, not para chain exec=%s", string(a.tx.Execer))
}
nodes, err := a.getNodesGroup(string(tit))
if err != nil {
return errors.Wrapf(err, "CrossAssetTransfer get nodegroup err,title=%s", tit)
}
if len(nodes) == 0 {
return errors.Wrapf(err, "CrossAssetTransfer nodegroup not create,title=%s", tit)
}
return nil
}
/*
func (a *Paracross) CrossLimits(tx *types.Transaction, index int) bool {
if tx.GroupCount < 2 {
......
......@@ -20,23 +20,19 @@ import (
"github.com/pkg/errors"
)
const SYMBOL_BTY = "bty"
const SymbolBty = "bty"
//平行链向主链transfer,先在平行链处理,共识后再在主链铸造
//主链的token转移到user.p.bb.平行链,在平行链上表示为mavl-paracross-token.symbol:
//主链的平行链转移进来的token在主链表示为mavl-paracross-user.p.aa.token.symbol 转移到user.p.bb.平行链,在平行链bb上表示mavl-paracross-paracross.user.p.aa.token.symbol
//在用户看来,平行链的资产是user.p.test.ccny, 主链资产是coins.bty, 平行链往主链转还是主链往平行链转都是这个名字
//如果主链上user.p.test.coins.ccny往user.p.test.平行链转,就是withdraw流程,如果往另一个平行链user.p.xx.转,则是转移流程
//在用户看来,平行链的资产是user.p.test.ccny, 主链资产是coins.bty, 平行链往主链转还是主链往平行链转都是统一的名字
//如果主链上user.p.test.coins.ccny往user.p.test.平行链转,就是withdraw流程,如果往另一个平行链user.p.para.转,则是转移流程
//主链转移场景: type=0,tx.exec:user.p.test.
//1. 主链本币转移: exec:coins/token symbol:{coins/token}.bty/cny or bty/cny,
//1. 主链本币转移: original exec:coins/token symbol:{coins/token}.bty/cny or bty/cny,
// 平行链资产: paracross-coins.bty
//2. 主链外币转移: exec:paracross, symbol: user.p.para.coins.ccny,
//2. 主链外币转移: original exec:paracross, symbol: user.p.para.coins.ccny,
// 平行链资产: paracross-paracross.user.p.para.coins.ccny
//3. 平行链本币提回:  exec:coins, symbol: user.p.test.coins.ccny
//3. 平行链本币提回:  original exec:coins, symbol: user.p.test.coins.ccny
// 平行链资产: paracross账户coins.ccny资产释放
//平行链转移场景:type=1,tx.exec:user.p.test.
//1. 平行链本币转移: exec:coins/token, symbol:user.p.test.{coins/token}.ccny
//1. 平行链本币转移: original exec:coins/token, symbol:user.p.test.{coins/token}.ccny
// 主链产生资产: paracross-user.p.test.{coins}.ccny
//2. 主链外币提取: exec:paracross, symbol: user.p.para.coins.ccny
// 主链恢复外币资产: user.p.test.paracross地址释放user.p.para.coins.ccny
......@@ -47,6 +43,7 @@ func getCrossAction(transfer *pt.CrossAssetTransfer, txExecer string) (int64, er
if !ok {
return pt.ParacrossNoneTransfer, errors.Wrapf(types.ErrInvalidParam, "getCrossAction wrong execer:%s", txExecer)
}
//主链向平行链转移, 转移主链资产(包括主链本币和平行链转移进来的外币)或平行链资产withdraw
if transfer.Type == 0 {
// same prefix for paraChain and Symbol
......@@ -66,12 +63,12 @@ func getCrossAction(transfer *pt.CrossAssetTransfer, txExecer string) (int64, er
return pt.ParacrossMainWithdraw, nil
}
//自动补充一些参数,比如paracross执行器或symbol
//自动补充修正原生执行器名字
func formatTransfer(transfer *pt.CrossAssetTransfer, act int64) *pt.CrossAssetTransfer {
newTransfer := *transfer
if act == pt.ParacrossMainTransfer || act == pt.ParacrossMainWithdraw {
//转移平行链资产到另一个平行链
if strings.HasPrefix(transfer.AssetSymbol, types.ParaKeyX) {
if strings.Contains(transfer.AssetSymbol, types.ParaKeyX) {
newTransfer.AssetExec = pt.ParaX
return &newTransfer
}
......@@ -83,12 +80,13 @@ func formatTransfer(transfer *pt.CrossAssetTransfer, act int64) *pt.CrossAssetTr
newTransfer.AssetSymbol = elements[len(elements)-1]
return &newTransfer
}
//symbol非空时候默认是token发行的
newTransfer.AssetExec = token.TokenX
return &newTransfer
}
//assetSymbol 为null
//assetSymbol 为null 默认是coins.bty
newTransfer.AssetExec = coins.CoinsX
newTransfer.AssetSymbol = SYMBOL_BTY
newTransfer.AssetSymbol = SymbolBty
return &newTransfer
}
......@@ -98,15 +96,13 @@ func formatTransfer(transfer *pt.CrossAssetTransfer, act int64) *pt.CrossAssetTr
e := strings.Split(transfer.AssetSymbol, ".")
newTransfer.AssetSymbol = e[len(e)-1]
newTransfer.AssetExec = e[len(e)-2]
//user.p.xx.ccny,没有写coins 执行器场景
//user.p.xx.ccny,没有写coins 执行器,默认是平行链coins执行器
if len(e) == 4 {
newTransfer.AssetExec = coins.CoinsX
}
return &newTransfer
}
return transfer
}
func (a *action) crossAssetTransfer(transfer *pt.CrossAssetTransfer, act int64, actTx *types.Transaction) (*types.Receipt, error) {
......@@ -172,7 +168,7 @@ func (a *action) execTransfer(transfer *pt.CrossAssetTransfer) (*types.Receipt,
cfg := a.api.GetConfig()
accDB, err := a.createAccount(cfg, a.db, transfer.AssetExec, transfer.AssetSymbol)
if err != nil {
return nil, errors.Wrap(err, "execTransfer.createAccount failed")
return nil, errors.Wrapf(err, "execTransfer.createAccount failed,exec=%s,symbol=%s", transfer.AssetExec, transfer.AssetSymbol)
}
//主链上存入toAddr为user.p.xx.paracross地址
......@@ -197,7 +193,7 @@ func (a *action) execWithdraw(withdraw *pt.CrossAssetTransfer, withdrawTx *types
cfg := a.api.GetConfig()
accDB, err := a.createAccount(cfg, a.db, withdraw.AssetExec, withdraw.AssetSymbol)
if err != nil {
return nil, errors.Wrap(err, "execWithdraw.createAccount failed")
return nil, errors.Wrapf(err, "execWithdraw.createAccount failed,exec=%s,symbol=%s", withdraw.AssetExec, withdraw.AssetSymbol)
}
execAddr := address.ExecAddress(pt.ParaX)
fromAddr := address.ExecAddress(string(withdrawTx.Execer))
......@@ -211,6 +207,10 @@ func (a *action) execWithdraw(withdraw *pt.CrossAssetTransfer, withdrawTx *types
return accDB.ExecTransfer(fromAddr, withdraw.ToAddr, execAddr, withdraw.Amount)
}
//平行链向主链transfer,先在平行链处理,共识后再在主链铸造
//主链Alice的token转移到user.p.bb.平行链,在平行链上表示为mavl-paracross-token.symbol:Addr(Alice),这里并没有放在Addr(user.p.bb.paracross)子账号下
//平行链转移到主链的token在主链表示为mavl-paracross-user.p.aa.token.symbol:Addr(Alice),再转移到user.p.bb.平行链,需要先transfer到paracross执行器下
//在平行链bb上铸造新币,表示为mavl-paracross-paracross.user.p.aa.token.symbol,第二个paracross代表在主链原生执行器为paracross
func (a *action) execCreateAsset(transfer *pt.CrossAssetTransfer) (*types.Receipt, error) {
cfg := a.api.GetConfig()
paraTitle, err := getTitleFrom(a.tx.Execer)
......@@ -222,7 +222,7 @@ func (a *action) execCreateAsset(transfer *pt.CrossAssetTransfer) (*types.Receip
assetSymbol := transfer.AssetSymbol
if assetSymbol == "" {
assetExec = coins.CoinsX
assetSymbol = SYMBOL_BTY
assetSymbol = SymbolBty
} else if assetExec == "" {
assetExec = token.TokenX
}
......@@ -234,7 +234,7 @@ func (a *action) execCreateAsset(transfer *pt.CrossAssetTransfer) (*types.Receip
if err != nil {
return nil, errors.Wrapf(err, "execCreateAsset call NewParaAccount failed,exec=%s,symbol=%s", assetExec, assetSymbol)
}
clog.Debug("paracross.execCreateAsset", "execer", string(a.tx.Execer), "assetExec", assetExec, "symbol", assetSymbol,
clog.Debug("paracross.execCreateAsset", "assetExec", assetExec, "symbol", assetSymbol,
"txHash", hex.EncodeToString(a.tx.Hash()))
return assetDepositBalance(paraAcc, transfer.ToAddr, transfer.Amount)
}
......@@ -243,14 +243,14 @@ func (a *action) execDestroyAsset(withdraw *pt.CrossAssetTransfer) (*types.Recei
cfg := a.api.GetConfig()
paraTitle, err := getTitleFrom(a.tx.Execer)
if err != nil {
return nil, errors.Wrap(err, "execDestroyAsset call getTitleFrom failed")
return nil, errors.Wrapf(err, "execDestroyAsset call getTitleFrom failed=%s", string(a.tx.Execer))
}
assetExec := withdraw.AssetExec
assetSymbol := withdraw.AssetSymbol
if assetSymbol == "" {
assetExec = coins.CoinsX
assetSymbol = SYMBOL_BTY
assetSymbol = SymbolBty
} else if assetExec == "" {
assetExec = token.TokenX
}
......@@ -261,7 +261,7 @@ func (a *action) execDestroyAsset(withdraw *pt.CrossAssetTransfer) (*types.Recei
if err != nil {
return nil, errors.Wrapf(err, "execDestroyAsset call NewParaAccount failed,exec=%s,symbol=%s", assetExec, assetSymbol)
}
clog.Debug("paracross.execDestroyAsset", "execer", string(a.tx.Execer), "assetExec", assetExec, "symbol", assetSymbol,
clog.Debug("paracross.execDestroyAsset", "assetExec", assetExec, "symbol", assetSymbol,
"txHash", hex.EncodeToString(a.tx.Hash()), "from", a.fromaddr, "amount", withdraw.Amount)
return assetWithdrawBalance(paraAcc, a.fromaddr, withdraw.Amount)
}
......@@ -277,6 +277,7 @@ func (a *action) assetTransfer(transfer *types.AssetsTransfer) (*types.Receipt,
return a.mainAssetTransfer(tr)
}
//旧的接口,只有主链从平行链转移
func (a *action) assetWithdraw(withdraw *types.AssetsWithdraw, withdrawTx *types.Transaction) (*types.Receipt, error) {
tr := &pt.CrossAssetTransfer{
AssetExec: withdraw.ExecName,
......@@ -304,7 +305,7 @@ func (a *action) assetTransferRollback(tr *pt.CrossAssetTransfer, transferTx *ty
}
execAddr := address.ExecAddress(pt.ParaX)
fromAcc := address.ExecAddress(string(transferTx.Execer))
clog.Debug("paracross.AssetTransferRbk ", "execer", string(transferTx.Execer),
clog.Debug("paracross.AssetTransferRbk ", "exec", transfer.AssetExec, "sym", transfer.AssetSymbol,
"transfer.txHash", hex.EncodeToString(transferTx.Hash()), "curTx", hex.EncodeToString(a.tx.Hash()))
return accDB.ExecTransfer(fromAcc, transferTx.From(), execAddr, transfer.Amount)
}
......@@ -320,14 +321,14 @@ func (a *action) paraAssetWithdrawRollback(wtw *pt.CrossAssetTransfer, withdrawT
withdraw := formatTransfer(wtw, pt.ParacrossParaWithdraw)
paraTitle, err := getTitleFrom(a.tx.Execer)
if err != nil {
return nil, errors.Wrap(err, "paraAssetWithdrawRollback call getTitleFrom failed")
return nil, errors.Wrapf(err, "paraAssetWithdrawRollback call getTitleFrom failed=%s", string(a.tx.Execer))
}
var paraAcc *account.DB
paraAcc, err = NewParaAccount(cfg, string(paraTitle), string(paraTitle)+withdraw.AssetExec, withdraw.AssetSymbol, a.db)
if err != nil {
return nil, errors.Wrap(err, "paraAssetWithdrawRollback call NewParaAccount failed")
return nil, errors.Wrapf(err, "paraAssetWithdrawRollback call NewParaAccount failed,exec=%s,sym=%s", withdraw.AssetExec, withdraw.AssetSymbol)
}
clog.Debug("paracross.paraAssetWithdrawRollback", "execer", string(a.tx.Execer), "txHash", hex.EncodeToString(a.tx.Hash()))
clog.Debug("paracross.paraAssetWithdrawRollback", "exec", withdraw.AssetExec, "sym", withdraw.AssetSymbol, "txHash", hex.EncodeToString(a.tx.Hash()))
return assetDepositBalance(paraAcc, withdrawTx.From(), withdraw.Amount)
}
return nil, nil
......
......@@ -67,7 +67,7 @@ func (e *Paracross) Exec_CrossAssetTransfer(payload *pt.CrossAssetTransfer, tx *
receipt, err := a.CrossAssetTransfer(payload)
if err != nil {
clog.Error("Paracross CrossAssetTransfer failed", "error", err, "hash", hex.EncodeToString(tx.Hash()))
return nil, errors.Cause(err)
return nil, err
}
return receipt, nil
}
......
......@@ -701,7 +701,7 @@ func (a *action) nodeGroupCoinsFrozen(createAddr string, configCoinsFrozen int64
conf := types.ConfSub(cfg, pt.ParaX)
confCoins := conf.GInt("nodeGroupFrozenCoins")
if configCoinsFrozen < confCoins {
return nil, pt.ErrParaNodeGroupFrozenCoinsNotEnough
return nil, errors.Wrapf(pt.ErrParaNodeGroupFrozenCoinsNotEnough, "nodeGroupCoinsFrozen apply=%d,conf=%d", configCoinsFrozen, confCoins)
}
if configCoinsFrozen == 0 {
clog.Info("node group apply configCoinsFrozen is 0")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment