Commit 998d1f1b authored by mdj33's avatar mdj33 Committed by vipwzw

modify other dapp's coins to coinsExec

parent 66063dca
# coinsx合约
## 前言
1. 为配合BSN联盟链对p2p原生token转账限制规则,为了不影响既有的coins合约,增加了coinsx合约,
2. coinsx合约转账,创世等功能和coins完全一致,增加了对转账的管理功能
## 使用
1. coinsx执行器和coins执行器不同,通过toml配置文件coinExec=“”配置,缺省是coins执行器
1. 如果配置为coinExec="coinsx",则原生代币为coinsx合约,创世到coinsx合约
1. coins cli 会根据配置文件修改相应执行器,transfer,withdraw等命令和coins一致,
1. json-rpc 构建交易需要明确采用配置的coinExec,缺省是coins
1. 平行链资产转移
1. 旧的接口assetTransfer/assetWithdraw 仍只接受coins,如果主链是coinsx,则会失败,需要使用新接口
1. 新接口crossTransfer,通过必填的交易执行器参数保证了平行链铸造的资产和主链保持一致,而不是和平行链配置一致
1. 比如主链coinsx,平行链缺省代币是coins, 主链转移到平行链资产仍为coinsx.bty
1. 比如主链coins, 平行链缺省代币是coinsx, 平行链转移到主链资产为 coinsx.symbol
## coinsx 管理功能
1. 只有节点超级管理员可以配置
1. 配置转账使能和受限标志
1. 配置链上管理员组,增删管理员
## p2p转账限制规则
1. 系统缺省转账受限
1. 节点超级管理员from或to 转账都不受限
1. 如果配置了转账使能,则任何用户转账不受限
1. 如果配置了转账受限功能,则和超级管理员转账不受限,个人之间转账受限
\ No newline at end of file
#!/usr/bin/env bash
coinsTxHashs1=("")
#coinsTxHashs2=("")
coinsgStr=""
coinsRepeatTx=1 #重复发送交易次数
coinsTotalAmount1="0"
coinsTxAmount="5" #每次发送交易数
#defaultTxFee="0.001"
coinsAddr1=""
coinsTxSign=("")
function initCoinsAccount() {
name="${CLI}"
label="coinstest1"
createAccount "${name}" $label
coinsAddr1=$coinsgStr
sleep 1
name="${CLI}"
fromAdd="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
showCoinsBalance "${name}" $fromAdd
coinsTotalAmount1=$coinsgStr
shouAccountList "${name}"
}
function genFirstChainCoinstx() {
echo "====== 发送coins交易 ======"
name=$CLI
echo "当前链为:${name}"
for ((i = 0; i < coinsRepeatTx; i++)); do
From="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
to=$coinsAddr1
note="coinstx"
amount=$coinsTxAmount
genCoinsTx "${name}" $From $to $note $amount
coinsTxSign[$i]="${coinsgStr}"
block_wait_timeout "${CLI}" 1 20
#发送交易
sendCoinsTxHash "${name}" "${coinsgStr}"
coinsTxHashs1[$i]="${coinsgStr}"
sleep 1
height=$(${name} block last_header | jq ".height")
printf '发送第 %d 笔交易当前高度 %s \n' $i "${height}"
done
}
function genSecondChainCoinstx() {
echo "====== 发送交易 ======"
name=$CLI
echo "当前链为:${name}"
#将第一条链产生的签名交易发送出去
for ((i = 0; i < ${#coinsTxSign[*]}; i++)); do
#发送交易
sign="${coinsTxSign[$i]}"
sendCoinsTxHash "${name}" "${sign}"
sleep 1
height=$(${name} block last_header | jq ".height")
printf '发送第 %d 笔交易当前高度 %s \n' $i "${height}"
done
}
function checkCoinsResult() {
name=$CLI
echo "====================检查第一组docker运行结果================="
totalCoinsTxAmount="0"
for ((i = 0; i < ${#coinsTxHashs1[*]}; i++)); do
txHash=${coinsTxHashs1[$i]}
echo $txHash
txQuery "${name}" $txHash
result=$?
if [ $result -eq 0 ]; then
#coinsTxFee1=$(echo "$coinsTxFee1 + $defaultTxFee" | bc)
totalCoinsTxAmount=$(echo "$totalCoinsTxAmount + $coinsTxAmount" | bc)
fi
sleep 1
done
sleep 1
fromAdd="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
showCoinsBalance "${name}" $fromAdd
value1=$coinsgStr
sleep 1
fromAdd=$coinsAddr1
showCoinsBalance "${name}" $fromAdd
value2=$coinsgStr
actTotal=$(echo "$value1 + $value2 " | bc)
echo "${name} 实际金额:$actTotal"
#if [ `echo "${actTotal} > ${coinsTotalAmount1}" | bc` -eq 1 ]; then
if [ "$(echo "${actTotal} > ${coinsTotalAmount1}" | bc)" -eq 1 ]; then
echo "${name} 出现双花"
exit 1
else
echo "${name} 未出现双花"
fi
}
function sendcoinsTx() {
name=$1
fromAdd=$2
toAdd=$3
note=$4
amount=$5
#组合形式交易
#hash=$(sudo docker exec -it $1 ./chain33-cli coins transfer -t $2 -a $5 -n $4 | tr '\r' ' ')
#echo $hash
#sign=$(sudo docker exec -it $1 ./chain33-cli wallet sign -a $3 -d $hash | tr '\r' ' ')
#echo $sign
#sudo docker exec -it $1 ./chain33-cli wallet send -d $sign
#单个命令形式交易
#sudo docker exec -it $1 ./chain33-cli send coins transfer -a $5 -n $4 -t $2 -k $From
result=$($name send coins transfer -a "${amount}" -n "${note}" -t "${toAdd}" -k "${fromAdd}" | tr '\r' ' ')
echo "hash: $result"
coinsgStr=$result
}
function genCoinsTx() {
name=$1
fromAdd=$2
toAdd=$3
note=$4
amount=$5
expire="600s"
#组合形式交易
hash=$(${name} coins transfer -t "${toAdd}" -a "${amount}" -n "${note}" | tr '\r' ' ')
echo "${hash}"
sign=$(${name} wallet sign -a "${fromAdd}" -d "${hash}" -e "${expire}" | tr '\r' ' ')
echo "sign: $sign"
coinsgStr=$sign
}
function sendCoinsTxHash() {
name=$1
sign=$2
result=$(${name} wallet send -d "${sign}" | tr '\r' ' ')
echo "hash: $result"
coinsgStr=$result
}
function showCoinsBalance() {
name=$1
fromAdd=$2
printf '==========showCoinBalance name=%s addr=%s==========\n' "${name}" "${fromAdd}"
result=$($name account balance -e coins -a "${fromAdd}" | jq -r ".balance")
printf 'balance %s \n' "${result}"
coinsgStr=$result
}
function createAccount() {
name=$1
label=$2
printf '==========CreateAccount name=%s ==========\n' "${name}"
result=$($name account create -l "${label}" | jq -r ".acc.addr")
printf 'New account addr %s \n' "${result}"
coinsgStr=$result
}
function shouAccountList() {
name=$1
printf '==========shouAccountList name=%s ==========\n' "${name}"
$name account list
}
...@@ -211,8 +211,20 @@ func isManager(addr string, managers []string) bool { ...@@ -211,8 +211,20 @@ func isManager(addr string, managers []string) bool {
return false return false
} }
/*
p2p转账受限规则,to执行器也受限制
1. 超级管理员或者配置了管理员账号 转账不受限
2. 如果未配置转账使能标志或配置为DISABLE,都受限制
3. 配置ENABLE,则不受限
*/
func checkTransferEnable(cfg *types.Chain33Config, db dbm.KV, from, to string) bool { func checkTransferEnable(cfg *types.Chain33Config, db dbm.KV, from, to string) bool {
stat, _ := getManagerStatus(db) //节点配置的超级管理员转账不受限
suppers := getSuperManager(cfg)
if isManager(from, suppers) || isManager(to, suppers) {
return true
}
stat, err := getManagerStatus(db)
if stat != nil { if stat != nil {
//如果转账不受限,则可以任意转账 //如果转账不受限,则可以任意转账
if stat.TransferFlag == coinTy.TransferFlag_ENABLE { if stat.TransferFlag == coinTy.TransferFlag_ENABLE {
...@@ -223,11 +235,8 @@ func checkTransferEnable(cfg *types.Chain33Config, db dbm.KV, from, to string) b ...@@ -223,11 +235,8 @@ func checkTransferEnable(cfg *types.Chain33Config, db dbm.KV, from, to string) b
return true return true
} }
} }
if err != nil && err != types.ErrNotFound {
//转账受限,允许节点配置的超级管理员 clog.Error("checkTransferEnable", "err", err)
suppers := getSuperManager(cfg)
if isManager(from, suppers) || isManager(to, suppers) {
return true
} }
return false return false
} }
...@@ -58,7 +58,7 @@ func (c *Coinsx) Exec_Withdraw(withdraw *types.AssetsWithdraw, tx *types.Transac ...@@ -58,7 +58,7 @@ func (c *Coinsx) Exec_Withdraw(withdraw *types.AssetsWithdraw, tx *types.Transac
from := tx.From() from := tx.From()
to := tx.GetRealToAddr() to := tx.GetRealToAddr()
if !checkTransferEnable(cfg, c.GetStateDB(), from, to) { if !checkTransferEnable(cfg, c.GetStateDB(), from, to) {
return nil, errors.Wrapf(types.ErrNotAllow, "transfer is limited from=%s to=%s", from, to) return nil, errors.Wrapf(types.ErrNotAllow, "withdraw is limited from=%s to=%s", from, to)
} }
//to 是 execs 合约地址 //to 是 execs 合约地址
if drivers.IsDriverAddress(tx.GetRealToAddr(), c.GetHeight()) || isExecAddrMatch(withdraw.ExecName, tx.GetRealToAddr()) { if drivers.IsDriverAddress(tx.GetRealToAddr(), c.GetHeight()) || isExecAddrMatch(withdraw.ExecName, tx.GetRealToAddr()) {
......
...@@ -65,7 +65,7 @@ func (e *exchange) CheckTx(tx *types.Transaction, index int) error { ...@@ -65,7 +65,7 @@ func (e *exchange) CheckTx(tx *types.Transaction, index int) error {
price := limitOrder.GetPrice() price := limitOrder.GetPrice()
amount := limitOrder.GetAmount() amount := limitOrder.GetAmount()
op := limitOrder.GetOp() op := limitOrder.GetOp()
if !CheckExchangeAsset(left, right) { if !CheckExchangeAsset(e.GetAPI().GetConfig().GetCoinExec(), left, right) {
return exchangetypes.ErrAsset return exchangetypes.ErrAsset
} }
if !CheckPrice(price) { if !CheckPrice(price) {
......
...@@ -108,11 +108,11 @@ func CheckStatus(status int32) bool { ...@@ -108,11 +108,11 @@ func CheckStatus(status int32) bool {
} }
//CheckExchangeAsset 检查交易得资产是否合法 //CheckExchangeAsset 检查交易得资产是否合法
func CheckExchangeAsset(left, right *et.Asset) bool { func CheckExchangeAsset(coinExec string, left, right *et.Asset) bool {
if left.Execer == "" || left.Symbol == "" || right.Execer == "" || right.Symbol == "" { if left.Execer == "" || left.Symbol == "" || right.Execer == "" || right.Symbol == "" {
return false return false
} }
if (left.Execer == "coins" && right.Execer == "coins") || (left.Symbol == right.Symbol) { if (left.Execer == coinExec && right.Execer == coinExec) || (left.Symbol == right.Symbol) {
return false return false
} }
return true return true
...@@ -124,7 +124,7 @@ func (a *Action) LimitOrder(payload *et.LimitOrder) (*types.Receipt, error) { ...@@ -124,7 +124,7 @@ func (a *Action) LimitOrder(payload *et.LimitOrder) (*types.Receipt, error) {
rightAsset := payload.GetRightAsset() rightAsset := payload.GetRightAsset()
//TODO 参数要合法,必须有严格的校验,后面统一加入到checkTx里面 //TODO 参数要合法,必须有严格的校验,后面统一加入到checkTx里面
//coins执行器下面只有bty //coins执行器下面只有bty
if !CheckExchangeAsset(leftAsset, rightAsset) { if !CheckExchangeAsset(a.api.GetConfig().GetCoinExec(), leftAsset, rightAsset) {
return nil, et.ErrAsset return nil, et.ErrAsset
} }
if !CheckAmount(payload.GetAmount()) { if !CheckAmount(payload.GetAmount()) {
......
...@@ -10,7 +10,7 @@ func (s *exchange) Query_QueryMarketDepth(in *et.QueryMarketDepth) (types.Messag ...@@ -10,7 +10,7 @@ func (s *exchange) Query_QueryMarketDepth(in *et.QueryMarketDepth) (types.Messag
if !CheckCount(in.Count) { if !CheckCount(in.Count) {
return nil, et.ErrCount return nil, et.ErrCount
} }
if !CheckExchangeAsset(in.LeftAsset, in.RightAsset) { if !CheckExchangeAsset(s.GetAPI().GetConfig().GetCoinExec(), in.LeftAsset, in.RightAsset) {
return nil, et.ErrAsset return nil, et.ErrAsset
} }
...@@ -22,7 +22,7 @@ func (s *exchange) Query_QueryMarketDepth(in *et.QueryMarketDepth) (types.Messag ...@@ -22,7 +22,7 @@ func (s *exchange) Query_QueryMarketDepth(in *et.QueryMarketDepth) (types.Messag
//查询已经完成得订单 //查询已经完成得订单
func (s *exchange) Query_QueryHistoryOrderList(in *et.QueryHistoryOrderList) (types.Message, error) { func (s *exchange) Query_QueryHistoryOrderList(in *et.QueryHistoryOrderList) (types.Message, error) {
if !CheckExchangeAsset(in.LeftAsset, in.RightAsset) { if !CheckExchangeAsset(s.GetAPI().GetConfig().GetCoinExec(), in.LeftAsset, in.RightAsset) {
return nil, et.ErrAsset return nil, et.ErrAsset
} }
if !CheckCount(in.Count) { if !CheckCount(in.Count) {
......
...@@ -11,7 +11,6 @@ PARANAME="para" ...@@ -11,7 +11,6 @@ PARANAME="para"
PARANAME_GAME="game" PARANAME_GAME="game"
PARA_COIN_FROZEN="5.0000" PARA_COIN_FROZEN="5.0000"
MainLoopCheckForkHeight="60" MainLoopCheckForkHeight="60"
COINSEXEC="coinsx"
BLSPUB_E5="8920442cf306fccd11e7bde3cfffe183a138a941f471df0818edff5580b3ad7df42850a5cec15e09aef0fdd4489f7c12" BLSPUB_E5="8920442cf306fccd11e7bde3cfffe183a138a941f471df0818edff5580b3ad7df42850a5cec15e09aef0fdd4489f7c12"
BLSPUB_KS="a3d97d4186c80268fe6d3689dd574599e25df2dffdcff03f7d8ef64a3bd483241b7d0985958990de2d373d5604caf805" BLSPUB_KS="a3d97d4186c80268fe6d3689dd574599e25df2dffdcff03f7d8ef64a3bd483241b7d0985958990de2d373d5604caf805"
...@@ -385,7 +384,7 @@ function para_cross_transfer_withdraw() { ...@@ -385,7 +384,7 @@ function para_cross_transfer_withdraw() {
local times=200 local times=200
while true; do while true; do
acc=$(${CLI} account balance -e paracross -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq -r ".balance") acc=$(${CLI} account balance -e paracross -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq -r ".balance")
acc_para=$(${PARA_CLI} asset balance -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv --asset_exec paracross --asset_symbol "${COINSEXEC}".bty | jq -r ".balance") 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 " 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 if [ "${acc}" != "9.3000" ] || [ "${acc_para}" != "0.7000" ]; then
block_wait "${CLI}" 2 block_wait "${CLI}" 2
...@@ -394,7 +393,7 @@ function para_cross_transfer_withdraw() { ...@@ -394,7 +393,7 @@ function para_cross_transfer_withdraw() {
echo "para_cross_transfer_withdraw failed" echo "para_cross_transfer_withdraw failed"
${CLI} tx query -s "$hash2" ${CLI} tx query -s "$hash2"
${PARA_CLI} tx query -s "$hash2" ${PARA_CLI} tx query -s "$hash2"
${PARA_CLI} asset balance -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv --asset_exec paracross --asset_symbol "${COINSEXEC}".bty ${PARA_CLI} asset balance -a 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv --asset_exec paracross --asset_symbol coins.bty
exit 1 exit 1
fi fi
else else
...@@ -537,7 +536,7 @@ function para_create_nodegroup_gamechain() { ...@@ -537,7 +536,7 @@ function para_create_nodegroup_gamechain() {
function para_cross_transfer_from_parachain() { function para_cross_transfer_from_parachain() {
echo "=========== # para cross transfer from parachain test =============" echo "=========== # para cross transfer from parachain test ============="
balance=$(${PARA_CLI5} account balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -e user.p.game."${COINSEXEC}" | jq -r ".balance") balance=$(${PARA_CLI5} account balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -e user.p.game.coins | jq -r ".balance")
if [ "${balance}" != "1000.0000" ]; then if [ "${balance}" != "1000.0000" ]; then
echo "para account 1BM2xhBk should be 1000, real is $balance" echo "para account 1BM2xhBk should be 1000, real is $balance"
exit 1 exit 1
...@@ -554,25 +553,25 @@ function para_cross_transfer_from_parachain() { ...@@ -554,25 +553,25 @@ function para_cross_transfer_from_parachain() {
fi fi
echo "========== #1. user.p.game chain transfer to main chain 300 user.p.game.coins.para, remain=0 ===========" echo "========== #1. user.p.game chain transfer to main chain 300 user.p.game.coins.para, remain=0 ==========="
hash=$(${PARA_CLI5} send para cross_transfer -a 300 -e user.p.game."${COINSEXEC}" -s para -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1) hash=$(${PARA_CLI5} send para cross_transfer -a 300 -e user.p.game.coins -s para -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}" echo "${hash}"
query_tx "${PARA_CLI5}" "${hash}" query_tx "${PARA_CLI5}" "${hash}"
check_cross_transfer_game_balance "300.0000" "0.0000" "${hash}" check_cross_transfer_game_balance "300.0000" "0.0000" "${hash}"
echo "========== #2. main transfer 200 user.p.game.coins.para game chain asset to para chain, main remain=100, parachain=200 ====" echo "========== #2. main transfer 200 user.p.game.coins.para game chain asset to para chain, main remain=100, parachain=200 ===="
hash=$(${CLI} --paraName=user.p.para. send para cross_transfer -a 200 -e paracross -s user.p.game."${COINSEXEC}".para -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1) hash=$(${CLI} --paraName=user.p.para. send para cross_transfer -a 200 -e paracross -s user.p.game.coins.para -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}" echo "${hash}"
query_tx "${CLI}" "${hash}" query_tx "${CLI}" "${hash}"
check_cross_transfer_para_balance "100.0000" "200.0000" "${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 ====" 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 -e user.p.para.paracross -s paracross.user.p.game."${COINSEXEC}".para -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1) hash=$(${CLI} --paraName=user.p.para. send para cross_transfer -a 50 -e user.p.para.paracross -s paracross.user.p.game.coins.para -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}" echo "${hash}"
query_tx "${CLI}" "${hash}" query_tx "${CLI}" "${hash}"
check_cross_transfer_para_balance "150.0000" "150.0000" "${hash}" check_cross_transfer_para_balance "150.0000" "150.0000" "${hash}"
echo "========== #4. withdraw game chain asset to game chain from main chain 50 user.p.game.coins.para,parachain=150,main=100,game=50 ======" echo "========== #4. withdraw game chain asset to game chain from main chain 50 user.p.game.coins.para,parachain=150,main=100,game=50 ======"
hash=$(${CLI} --paraName=user.p.game. send para cross_transfer -a 50 -e paracross -s user.p.game."${COINSEXEC}".para -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1) hash=$(${CLI} --paraName=user.p.game. send para cross_transfer -a 50 -e paracross -s user.p.game.coins.para -t 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -k 0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1)
echo "${hash}" echo "${hash}"
query_tx "${CLI}" "${hash}" query_tx "${CLI}" "${hash}"
check_cross_transfer_game_balance "100.0000" "50.0000" "${hash}" check_cross_transfer_game_balance "100.0000" "50.0000" "${hash}"
...@@ -582,8 +581,8 @@ function check_cross_transfer_para_balance() { ...@@ -582,8 +581,8 @@ function check_cross_transfer_para_balance() {
local times=200 local times=200
local hash="$3" local hash="$3"
while true; do while true; do
acc=$(${CLI} asset balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu --asset_exec paracross --asset_symbol user.p.game."${COINSEXEC}".para -e paracross | jq -r ".balance") 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."${COINSEXEC}".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}") res=$(${CLI} para asset_txinfo -s "${hash}")
echo "$res" echo "$res"
succ=$(jq -r ".success" <<<"$res") succ=$(jq -r ".success" <<<"$res")
...@@ -609,7 +608,7 @@ function check_cross_transfer_game_balance() { ...@@ -609,7 +608,7 @@ function check_cross_transfer_game_balance() {
local times=200 local times=200
local hash="$3" local hash="$3"
while true; do while true; do
acc=$(${CLI} asset balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu --asset_exec paracross --asset_symbol user.p.game."${COINSEXEC}".para -e paracross | jq -r ".balance") 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") acc_para=$(${PARA_CLI5} account balance -a 1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu -e user.p.game.paracross | jq -r ".balance")
res=$(${CLI} para asset_txinfo -s "${hash}") res=$(${CLI} para asset_txinfo -s "${hash}")
echo "$res" echo "$res"
...@@ -1068,22 +1067,22 @@ function privacy_transfer_test() { ...@@ -1068,22 +1067,22 @@ function privacy_transfer_test() {
block_wait "${1}" 2 block_wait "${1}" 2
echo "#privacy pub2priv, to=14KEKbYtKKQm4wMthSK9J4La4nAiidGozt" echo "#privacy pub2priv, to=14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
${1} send privacy pub2priv -a 9 -p fcbb75f2b96b6d41f301f2d1abc853d697818427819f412f8e4b4e12cacc0814d2c3914b27bea9151b8968ed1732bd241c8788a332b295b731aee8d39a060388 -e "${COINSEXEC}" -s BTY -k 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 ${1} send privacy pub2priv -a 9 -p fcbb75f2b96b6d41f301f2d1abc853d697818427819f412f8e4b4e12cacc0814d2c3914b27bea9151b8968ed1732bd241c8788a332b295b731aee8d39a060388 -e coins -s BTY -k 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
${1} send privacy pub2priv -a 9 -p fcbb75f2b96b6d41f301f2d1abc853d697818427819f412f8e4b4e12cacc0814d2c3914b27bea9151b8968ed1732bd241c8788a332b295b731aee8d39a060388 -e token -s GD -k 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 ${1} send privacy pub2priv -a 9 -p fcbb75f2b96b6d41f301f2d1abc853d697818427819f412f8e4b4e12cacc0814d2c3914b27bea9151b8968ed1732bd241c8788a332b295b731aee8d39a060388 -e token -s GD -k 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
check_privacy_utxo "${1}" 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt token GD 9.0000 check_privacy_utxo "${1}" 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt token GD 9.0000
check_privacy_utxo "${1}" 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt "${COINSEXEC}" BTY 9.0000 check_privacy_utxo "${1}" 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt coins BTY 9.0000
echo "#privacy priv2priv, to=1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4" echo "#privacy priv2priv, to=1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4"
${1} send privacy priv2priv -a 3 -p 5b0ff936ec2d2825a67a270e34d741d96bf6afe5d4b5692de0a1627f635fd0b3d7b14e44d3f8f7526030a7c59de482084161b441a5d66b483d80316e3b91482b -f 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt -e "${COINSEXEC}" -s BTY -k 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt ${1} send privacy priv2priv -a 3 -p 5b0ff936ec2d2825a67a270e34d741d96bf6afe5d4b5692de0a1627f635fd0b3d7b14e44d3f8f7526030a7c59de482084161b441a5d66b483d80316e3b91482b -f 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt -e coins -s BTY -k 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
${1} send privacy priv2priv -a 3 -p 5b0ff936ec2d2825a67a270e34d741d96bf6afe5d4b5692de0a1627f635fd0b3d7b14e44d3f8f7526030a7c59de482084161b441a5d66b483d80316e3b91482b -f 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt -e token -s GD -k 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt ${1} send privacy priv2priv -a 3 -p 5b0ff936ec2d2825a67a270e34d741d96bf6afe5d4b5692de0a1627f635fd0b3d7b14e44d3f8f7526030a7c59de482084161b441a5d66b483d80316e3b91482b -f 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt -e token -s GD -k 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
check_privacy_utxo "${1}" 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 token GD 3.0000 check_privacy_utxo "${1}" 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 token GD 3.0000
check_privacy_utxo "${1}" 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 "${COINSEXEC}" BTY 3.0000 check_privacy_utxo "${1}" 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 coins BTY 3.0000
echo "#privacy priv2pub, to=1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4" echo "#privacy priv2pub, to=1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4"
${1} send privacy priv2pub -a 6 -t 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 -f 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt -e "${COINSEXEC}" -s BTY -k 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt ${1} send privacy priv2pub -a 6 -t 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 -f 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt -e coins -s BTY -k 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
${1} send privacy priv2pub -a 6 -t 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 -f 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt -e token -s GD -k 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt ${1} send privacy priv2pub -a 6 -t 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 -f 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt -e token -s GD -k 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
check_privacy_utxo "${1}" 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt token GD 0.0000 check_privacy_utxo "${1}" 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt token GD 0.0000
check_privacy_utxo "${1}" 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt "${COINSEXEC}" BTY 0.0000 check_privacy_utxo "${1}" 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt coins BTY 0.0000
} }
function para_test() { function para_test() {
......
...@@ -314,7 +314,7 @@ func (a *action) assetTransfer(transfer *types.AssetsTransfer) (*types.Receipt, ...@@ -314,7 +314,7 @@ func (a *action) assetTransfer(transfer *types.AssetsTransfer) (*types.Receipt,
Note: string(transfer.Note), Note: string(transfer.Note),
ToAddr: transfer.To, ToAddr: transfer.To,
} }
adaptNullAssetExec(a.api.GetConfig(), tr) adaptNullAssetExec(tr)
return a.mainAssetTransfer(tr, a.tx) return a.mainAssetTransfer(tr, a.tx)
} }
...@@ -331,7 +331,7 @@ func (a *action) assetWithdraw(withdraw *types.AssetsWithdraw, withdrawTx *types ...@@ -331,7 +331,7 @@ func (a *action) assetWithdraw(withdraw *types.AssetsWithdraw, withdrawTx *types
if withdraw.Cointoken != "" { if withdraw.Cointoken != "" {
tr.AssetExec = token.TokenX tr.AssetExec = token.TokenX
} }
adaptNullAssetExec(a.api.GetConfig(), tr) adaptNullAssetExec(tr)
return a.mainAssetWithdraw(tr, withdrawTx) return a.mainAssetWithdraw(tr, withdrawTx)
} }
...@@ -387,9 +387,12 @@ func (a *action) createAccount(cfg *types.Chain33Config, db db.KV, exec, symbol ...@@ -387,9 +387,12 @@ func (a *action) createAccount(cfg *types.Chain33Config, db db.KV, exec, symbol
return account.NewAccountDB(cfg, exec, symbol, db) return account.NewAccountDB(cfg, exec, symbol, db)
} }
func adaptNullAssetExec(cfg *types.Chain33Config, transfer *pt.CrossAssetTransfer) { //对于旧的assetTransfer,assetWithdraw资产转移接口,没有填AssetExec,这里只支持coins,如果主链是coinsx执行器,则旧接口会失败,需要用新接口。
//新接口必须填AssetExec,主链和平行链从跨链交易资产参数上会保持一致,目的资产不依赖目标的toml配置文件
//比如主链是coinsx 平行链也会铸造coinsx.bty资产,withdraw到主链也是coinsx
func adaptNullAssetExec(transfer *pt.CrossAssetTransfer) {
if transfer.AssetSymbol == "" { if transfer.AssetSymbol == "" {
transfer.AssetExec = cfg.GetCoinExec() transfer.AssetExec = "coins"
transfer.AssetSymbol = SymbolBty transfer.AssetSymbol = SymbolBty
return return
} }
......
...@@ -8,6 +8,7 @@ import ( ...@@ -8,6 +8,7 @@ import (
"fmt" "fmt"
"github.com/33cn/chain33/common" "github.com/33cn/chain33/common"
"github.com/33cn/chain33/types"
) )
const ( const (
...@@ -23,7 +24,7 @@ const ( ...@@ -23,7 +24,7 @@ const (
//计算隐私资产utxo的前缀, 和exec,token相关 //计算隐私资产utxo的前缀, 和exec,token相关
func calcUtxoAssetPrefix(exec, token string) string { func calcUtxoAssetPrefix(exec, token string) string {
//只有coins资产的key不加exec前缀, 主要考虑是不加分叉兼容历史隐私交易 //只有coins资产的key不加exec前缀, 主要考虑是不加分叉兼容历史隐私交易
if exec == "" || exec == "coins" { if exec == "" || exec == types.DefaultCoinsExec || exec == types.DefaultCoinsXExec {
return token return token
} }
return exec + ":" + token return exec + ":" + token
......
...@@ -270,7 +270,7 @@ func (p *privacy) CheckTx(tx *types.Transaction, index int) error { ...@@ -270,7 +270,7 @@ func (p *privacy) CheckTx(tx *types.Transaction, index int) error {
//只有主链coins隐私转账才收取特殊交易费, assertExec空情况适配老版本 //只有主链coins隐私转账才收取特殊交易费, assertExec空情况适配老版本
cfg := p.GetAPI().GetConfig() cfg := p.GetAPI().GetConfig()
if !cfg.IsPara() && (assertExec == "" || assertExec == "coins") { if !cfg.IsPara() && (assertExec == "" || assertExec == cfg.GetCoinExec()) {
totalOutput := int64(0) totalOutput := int64(0)
for _, output := range output.GetKeyoutput() { for _, output := range output.GetKeyoutput() {
......
...@@ -39,7 +39,7 @@ func (policy *privacyPolicy) On_CreateTransaction(req *privacytypes.ReqCreatePri ...@@ -39,7 +39,7 @@ func (policy *privacyPolicy) On_CreateTransaction(req *privacytypes.ReqCreatePri
cfg := policy.getWalletOperate().GetAPI().GetConfig() cfg := policy.getWalletOperate().GetAPI().GetConfig()
//为空时增加自动设置 //为空时增加自动设置
if req.GetAssetExec() == "coins" && req.GetTokenname() == "" { if req.GetAssetExec() == cfg.GetCoinExec() && req.GetTokenname() == "" {
req.Tokenname = cfg.GetCoinSymbol() req.Tokenname = cfg.GetCoinSymbol()
} }
......
...@@ -652,7 +652,7 @@ func (policy *privacyPolicy) createPrivacy2PublicTx(req *privacytypes.ReqCreateP ...@@ -652,7 +652,7 @@ func (policy *privacyPolicy) createPrivacy2PublicTx(req *privacytypes.ReqCreateP
//需要燃烧的utxo //需要燃烧的utxo
var utxoBurnedAmount int64 var utxoBurnedAmount int64
cfg := policy.getWalletOperate().GetAPI().GetConfig() cfg := policy.getWalletOperate().GetAPI().GetConfig()
isMainetCoins := !cfg.IsPara() && (req.AssetExec == "coins") isMainetCoins := !cfg.IsPara() && (req.AssetExec == cfg.GetCoinExec())
if isMainetCoins { if isMainetCoins {
utxoBurnedAmount = privacytypes.PrivacyTxFee utxoBurnedAmount = privacytypes.PrivacyTxFee
} }
...@@ -1071,7 +1071,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in ...@@ -1071,7 +1071,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in
assetExec, assetSymbol := action.GetAssetExecSymbol() assetExec, assetSymbol := action.GetAssetExecSymbol()
if assetExec == "" { if assetExec == "" {
assetExec = "coins" assetExec = policy.getWalletOperate().GetAPI().GetConfig().GetCoinExec()
} }
txInfo := &privacyTxInfo{ txInfo := &privacyTxInfo{
......
...@@ -21,6 +21,7 @@ import ( ...@@ -21,6 +21,7 @@ import (
const ( const (
// PRIVACYDBVERSION 隐私交易数据库版本号 // PRIVACYDBVERSION 隐私交易数据库版本号
PRIVACYDBVERSION int64 = 1 PRIVACYDBVERSION int64 = 1
COINSEXEC = "coins"
) )
func newStore(db db.DB, coinsExec string) *privacyStore { func newStore(db db.DB, coinsExec string) *privacyStore {
...@@ -556,7 +557,7 @@ func (store *privacyStore) selectCurrentWalletPrivacyTx(txDetal *types.Transacti ...@@ -556,7 +557,7 @@ func (store *privacyStore) selectCurrentWalletPrivacyTx(txDetal *types.Transacti
} }
if assetExec == "" { if assetExec == "" {
assetExec = "coins" assetExec = COINSEXEC
} }
//处理output //处理output
......
...@@ -97,7 +97,7 @@ func (c *Retrieve) ExecDelLocal_Perform(perf *rt.PerformRetrieve, tx *types.Tran ...@@ -97,7 +97,7 @@ func (c *Retrieve) ExecDelLocal_Perform(perf *rt.PerformRetrieve, tx *types.Tran
cfg := c.GetAPI().GetConfig() cfg := c.GetAPI().GetConfig()
if cfg.IsDappFork(c.GetHeight(), rt.RetrieveX, rt.ForkRetriveAssetX) { if cfg.IsDappFork(c.GetHeight(), rt.RetrieveX, rt.ForkRetriveAssetX) {
if len(perf.Assets) == 0 { if len(perf.Assets) == 0 {
perf.Assets = append(perf.Assets, &rt.AssetSymbol{Exec: "coins", Symbol: cfg.GetCoinSymbol()}) perf.Assets = append(perf.Assets, &rt.AssetSymbol{Exec: cfg.GetCoinExec(), Symbol: cfg.GetCoinSymbol()})
} }
} }
for _, asset := range perf.Assets { for _, asset := range perf.Assets {
......
...@@ -214,7 +214,7 @@ func (action *Action) RetrievePerformAssets(perfRet *rt.PerformRetrieve, default ...@@ -214,7 +214,7 @@ func (action *Action) RetrievePerformAssets(perfRet *rt.PerformRetrieve, default
cfg := action.api.GetConfig() cfg := action.api.GetConfig()
// 兼容原来的找回, 在不指定的情况下,找回主币 // 兼容原来的找回, 在不指定的情况下,找回主币
if len(perfRet.Assets) == 0 { if len(perfRet.Assets) == 0 {
perfRet.Assets = append(perfRet.Assets, &rt.AssetSymbol{Exec: "coins", Symbol: cfg.GetCoinSymbol()}) perfRet.Assets = append(perfRet.Assets, &rt.AssetSymbol{Exec: cfg.GetCoinExec(), Symbol: cfg.GetCoinSymbol()})
//return nil, nil //return nil, nil
} }
......
...@@ -219,6 +219,8 @@ ForkTicketFundAddrV1=-1 #fork6.3 ...@@ -219,6 +219,8 @@ ForkTicketFundAddrV1=-1 #fork6.3
ForkRootHash =1 ForkRootHash =1
[fork.sub.coins] [fork.sub.coins]
Enable=0 Enable=0
[fork.sub.coinsx]
Enable=0
[fork.sub.ticket] [fork.sub.ticket]
Enable=0 Enable=0
ForkTicketId = 1600000 ForkTicketId = 1600000
......
...@@ -275,6 +275,8 @@ ForkRootHash=1 ...@@ -275,6 +275,8 @@ ForkRootHash=1
[fork.sub.coins] [fork.sub.coins]
Enable=0 Enable=0
[fork.sub.coinsx]
Enable=0
[fork.sub.ticket] [fork.sub.ticket]
Enable=0 Enable=0
......
...@@ -562,7 +562,7 @@ func (policy *ticketPolicy) closeTicket(height int64) (int, error) { ...@@ -562,7 +562,7 @@ func (policy *ticketPolicy) closeTicket(height int64) (int, error) {
func (policy *ticketPolicy) processFee(priv crypto.PrivKey) error { func (policy *ticketPolicy) processFee(priv crypto.PrivKey) error {
addr := address.PubKeyToAddress(priv.PubKey().Bytes()).String() addr := address.PubKeyToAddress(priv.PubKey().Bytes()).String()
operater := policy.getWalletOperate() operater := policy.getWalletOperate()
acc1, err := operater.GetBalance(addr, "coins") acc1, err := operater.GetBalance(addr, policy.getWalletOperate().GetAPI().GetConfig().GetCoinExec())
if err != nil { if err != nil {
return err return err
} }
...@@ -638,7 +638,7 @@ func (policy *ticketPolicy) buyTicketOne(height int64, priv crypto.PrivKey) ([]b ...@@ -638,7 +638,7 @@ func (policy *ticketPolicy) buyTicketOne(height int64, priv crypto.PrivKey) ([]b
//ticket balance and coins balance //ticket balance and coins balance
addr := address.PubKeyToAddress(priv.PubKey().Bytes()).String() addr := address.PubKeyToAddress(priv.PubKey().Bytes()).String()
operater := policy.getWalletOperate() operater := policy.getWalletOperate()
acc1, err := operater.GetBalance(addr, "coins") acc1, err := operater.GetBalance(addr, policy.getWalletOperate().GetAPI().GetConfig().GetCoinExec())
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err
} }
......
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