Commit 63d58991 authored by QM's avatar QM Committed by vipwzw

delete shell

parent a9fa9d1f
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
source "./publicTest.sh"
source "./relayerPublic.sh"
# ETH 部署合约者的私钥 用于部署合约时签名使用
#ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
chain33DeployKey="0xcc38546e9e659d15e6b4893f0ab32a06d103931a8230b0bde71459d2b27d6944"
ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
#chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
Chain33Cli="../../chain33-cli"
chain33BridgeBank=""
ethBridgeBank=""
#chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
#chain33EthBridgeTokenAddr=""
#ethereumBtyBridgeTokenAddr=""
#chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
multisignChain33Addr=""
multisignEthAddr=""
CLIA="./ebcli_A"
# shellcheck disable=SC2034
{
bseMultisignA=0x0f2e821517D4f64a012a04b668a6b1aa3B262e08
bseMultisignB=0x21B5f4C2F6Ff418fa0067629D9D76AE03fB4a2d2
bseMultisignC=0xee760B2E502244016ADeD3491948220B3b1dd789
bseMultisignKeyA=f934e9171c5cf13b35e6c989e95f5e95fa471515730af147b66d60fbcd664b7c
bseMultisignKeyB=2bcf3e23a17d3f3b190a26a098239ad2d20267a673440e0f57a23f44f94b77b9
bseMultisignKeyC=e5f8caae6468061c17543bc2205c8d910b3c71ad4d055105cde94e88ccb4e650
TestNodeAddr="https://data-seed-prebsc-1-s1.binance.org:8545/"
}
function deployMultisign() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
for name in A B C D; do
eval chain33MultisignKey=\$chain33MultisignKey${name}
eval chain33Multisign=\$chain33Multisign${name}
# shellcheck disable=SC2154
result=$(${Chain33Cli} account import_key -k "${chain33MultisignKey}" -l multisignAddr$name)
# shellcheck disable=SC2154
check_addr "${result}" "${chain33Multisign}"
# chain33Multisign 要有手续费
hash=$(${Chain33Cli} send coins transfer -a 10 -t "${chain33Multisign}" -k "${chain33DeployAddr}")
check_tx "${Chain33Cli}" "${hash}"
result=$(${Chain33Cli} account balance -a "${chain33Multisign}" -e coins)
balance_ret "${result}" "10.0000"
done
echo -e "${GRE}=========== 部署 chain33 离线钱包合约 ===========${NOC}"
result=$(${CLIA} chain33 multisign deploy)
cli_ret "${result}" "chain33 multisign deploy"
multisignChain33Addr=$(echo "${result}" | jq -r ".msg")
# shellcheck disable=SC2154
result=$(${CLIA} chain33 multisign setup -k "${chain33DeployKey}" -o "${chain33MultisignA},${chain33MultisignB},${chain33MultisignC},${chain33MultisignD}")
cli_ret "${result}" "chain33 multisign setup"
# multisignChain33Addr 要有手续费
hash=$(${Chain33Cli} send coins transfer -a 10 -t "${multisignChain33Addr}" -k "${chain33DeployAddr}")
check_tx "${Chain33Cli}" "${hash}"
result=$(${Chain33Cli} account balance -a "${multisignChain33Addr}" -e coins)
balance_ret "${result}" "10.0000"
# shellcheck disable=SC2154
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "configOfflineSaveAccount(${multisignChain33Addr})" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# echo -e "${GRE}=========== 部署 ETH 离线钱包合约 ===========${NOC}"
# result=$(${CLIA} ethereum multisign deploy)
# cli_ret "${result}" "ethereum multisign deploy"
# multisignEthAddr=$(echo "${result}" | jq -r ".msg")
#
# result=$(${CLIA} ethereum multisign setup -k "${ethDeployKey}" -o "${bseMultisignA},${bseMultisignB},${bseMultisignC}")
# cli_ret "${result}" "ethereum multisign setup"
#
# result=$(${CLIA} ethereum multisign set_offline_addr -s "${multisignEthAddr}")
# cli_ret "${result}" "set_offline_addr"
#
# echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lock_eth_balance() {
local lockAmount=$1
local bridgeBankBalance=$2
local multisignBalance=$3
result=$(${CLIA} ethereum lock -m "${lockAmount}" -k "${ethValidatorAddrKeyA}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
# cli_ret "${result}" "balance" ".balance" "${bridgeBankBalance}"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
# cli_ret "${result}" "balance" ".balance" "${multisignBalance}"
}
function lockEth() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo '2:#配置自动转离线钱包(BNB, 4, 50%)'
# result=$(${CLIA} ethereum multisign set_offline_token -s ETH -m 4)
# cli_ret "${result}" "set_offline_token -s ETH -m 4"
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
# cli_ret "${result}" "balance" ".balance" "0"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
# cli_ret "${result}" "balance" ".balance" "0"
# lock_eth_balance 4 2 2
lock_eth_balance 2 4 2
# lock_eth_balance 1 10 10
# lock_eth_balance 16 13 23
# transfer
hash=$(./ebcli_A ethereum multisign transfer -a 1 -r "${ethBridgeBank}" -k "${bseMultisignKeyA},${bseMultisignKeyB},${bseMultisignKeyC}")
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
result=$(${CLIA} ethereum balance -o "${bseMultisignA}")
hash=$(./ebcli_A ethereum multisign transfer -a 1 -r "${bseMultisignA}" -k "${bseMultisignKeyA},${bseMultisignKeyB},${bseMultisignKeyC}")
result=$(${CLIA} ethereum balance -o "${bseMultisignA}")
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lock_eth_ycc_balance() {
local lockAmount=$1
local bridgeBankBalance=$2
local multisignBalance=$3
result=$(${CLIA} ethereum lock -m "${lockAmount}" -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "${bridgeBankBalance}"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "${multisignBalance}"
}
function lockEthYcc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo '2:#配置自动转离线钱包(ycc, 100, 40%)'
result=$(${CLIA} ethereum multisign set_offline_token -s BYC -m 100 -p 40 -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "set_offline_token -s YCC -m 100"
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
lock_eth_ycc_balance 70 70 0
lock_eth_ycc_balance 30 60 40
lock_eth_ycc_balance 60 72 88
# transfer
# multisignEthAddr 要有手续费
./ebcli_A ethereum transfer -k "${ethDeployKey}" -m 10 -r "${multisignEthAddr}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function StartRelayerOnBsc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
BridgeRegistryOnEth=0x5331F912027057fBE8139D91B225246e8159232f
ethBridgeBank=0xC65B02a22B714b55D708518E2426a22ffB79113d
multisignEthAddr=0xbf271b2B23DA4fA8Dc93Ce86D27dd09796a7Bf54
function mainTest() {
StartChain33
# shellcheck disable=SC2009
pid=$(ps -ef | grep "ebrelayer" | grep -v 'grep' | awk '{print $2}' | xargs)
if [ "${pid}" == "" ]; then
kill_ebrelayer ebrelayer
sleep 2
rm datadir/ logs/ -rf
fi
# shellcheck disable=SC2155
line=$(delete_line_show "./relayer.toml" 'EthProviderCli="http://127.0.0.1:7545"')
if [ "${line}" ]; then
sed -i ''"${line}"' a EthProviderCli="https://data-seed-prebsc-1-s1.binance.org:8545/"' "./relayer.toml"
fi
line=$(delete_line_show "./relayer.toml" 'EthProvider="ws://127.0.0.1:7545/"')
if [ "${line}" ]; then
sed -i ''"${line}"' a EthProvider="wss://data-seed-prebsc-1-s1.binance.org:8545/"' "./relayer.toml"
fi
# StartRelayer_A
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 修改 relayer.toml 配置文件 pushName 字段
pushNameChange "./relayer.toml"
# 启动 ebrelayer
start_ebrelayerA
# 导入私钥 部署合约 设置 bridgeRegistry 地址
# InitAndDeploy
{
echo -e "${GRE}=========== InitAndDeploy begin ===========${NOC}"
result=$(${CLIA} set_pwd -p 123456hzj)
cli_ret "${result}" "set_pwd"
result=$(${CLIA} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
result=$(${CLIA} chain33 import_privatekey -k "${chain33DeployKey}")
cli_ret "${result}" "chain33 import_privatekey"
result=$(${CLIA} ethereum import_privatekey -k "${ethDeployKey}")
cli_ret "${result}" "ethereum import_privatekey"
# 在 chain33 上部署合约
result=$(${CLIA} chain33 deploy)
cli_ret "${result}" "chain33 deploy"
BridgeRegistryOnChain33=$(echo "${result}" | jq -r ".msg")
# 拷贝 BridgeRegistry.abi 和 BridgeBank.abi
cp BridgeRegistry.abi "${BridgeRegistryOnChain33}.abi"
chain33BridgeBank=$(${Chain33Cli} evm query -c "${chain33DeployAddr}" -b "bridgeBank()" -a "${BridgeRegistryOnChain33}")
cp Chain33BridgeBank.abi "${chain33BridgeBank}.abi"
# 在 Eth 上部署合约
# result=$(${CLIA} ethereum deploy)
# cli_ret "${result}" "ethereum deploy"
# BridgeRegistryOnEth=$(echo "${result}" | jq -r ".msg")
# 拷贝 BridgeRegistry.abi 和 BridgeBank.abi
# cp BridgeRegistry.abi "${BridgeRegistryOnEth}.abi"
# result=$(${CLIA} ethereum bridgeBankAddr)
# ethBridgeBank=$(echo "${result}" | jq -r ".addr")
cp EthBridgeBank.abi "${ethBridgeBank}.abi"
# 修改 relayer.toml 字段
updata_relayer "BridgeRegistryOnChain33" "${BridgeRegistryOnChain33}" "./relayer.toml"
line=$(delete_line_show "./relayer.toml" "BridgeRegistry=")
if [ "${line}" ]; then
sed -i ''"${line}"' a BridgeRegistry="'"${BridgeRegistryOnEth}"'"' "./relayer.toml"
fi
echo -e "${GRE}=========== InitAndDeploy end ===========${NOC}"
}
# 重启
kill_ebrelayer ebrelayer
start_ebrelayerA
result=$(${CLIA} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
deployMultisign
lockEth
# lockEthYcc
}
mainTest
#lockEth
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
# 主要在平行链上测试
source "./offlinePublic.sh"
# ETH 部署合约者的私钥 用于部署合约时签名使用
ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
chain33DeployKey="0x027ca96466c71c7e7c5d73b7e1f43cb889b3bd65ebd2413eefd31c6709c262ae"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
chain33PerfAddr="1JcF5wH8PuQHHcDQECaGoqxegPc2kZcKcn"
chain33PerfAddrKey="0x238905271d330592886f8b30bef8f95fa66c87023c96b9a59638a080f7503c67"
ethReceiverAddr1="0xa4ea64a583f6e51c3799335b28a8f0529570a635"
#ethReceiverAddrKey1="355b876d7cbcb930d5dfab767f66336ce327e082cbaa1877210c1bae89b1df71"
maturityDegree=10
chain33BridgeBank=""
ethBridgeBank=""
chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
chain33EthBridgeTokenAddr=""
ethereumBtyBridgeTokenAddr=""
chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
#BridgeRegistryOnChain33=""
#chain33YccERC20TokenAddr=""
#BridgeRegistryOnEth=""
#ethereumYccBridgeTokenAddr=""
chain33ZbcERC20TokenAddr=""
ethereumZbcBridgeTokenAddr=""
multisignChain33Addr=""
multisignEthAddr=""
chain33ID=0
# validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
#ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# shellcheck disable=SC2034
{
ethValidatorAddrKeyb="a5f3063552f4483cfc20ac4f40f45b798791379862219de9e915c64722c1d400"
ethValidatorAddrKeyc="bbf5e65539e9af0eb0cfac30bad475111054b09c11d668fc0731d54ea777471e"
ethValidatorAddrKeyd="c9fa31d7984edf81b8ef3b40c761f1847f6fcd5711ab2462da97dc458f1f896b"
# 新增地址 chain33 需要导入地址 转入 10 bty当收费费
chain33Validatora="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
chain33Validatorb="155ooMPBTF8QQsGAknkK7ei5D78rwDEFe6"
chain33Validatorc="13zBdQwuyDh7cKN79oT2odkxYuDbgQiXFv"
chain33Validatord="113ZzVamKfAtGt9dq45fX1mNsEoDiN95HG"
#chain33ValidatorKeya="0xcc38546e9e659d15e6b4893f0ab32a06d103931a8230b0bde71459d2b27d6944"
chain33ValidatorKeyb="0x9d539bc5fd084eb7fe86ad631dba9aa086dba38418725c38d9751459f567da66"
chain33ValidatorKeyc="0x0a6671f101e30a2cc2d79d77436b62cdf2664ed33eb631a9c9e3f3dd348a23be"
chain33ValidatorKeyd="0x3818b257b05ee75b6e43ee0e3cfc2d8502342cf67caed533e3756966690b62a5"
}
function start_docker_ebrelayerA() {
# shellcheck disable=SC2154
docker cp "./relayer.toml" "${dockerNamePrefix}_ebrelayera_1":/root/relayer.toml
start_docker_ebrelayer "${dockerNamePrefix}_ebrelayera_1" "/root/ebrelayer" "./ebrelayera.log"
sleep 5
}
# start ebrelayer B C D
function updata_toml_start_bcd() {
for name in b c d; do
local file="./relayer$name.toml"
cp './relayer.toml' "${file}"
# 删除配置文件中不需要的字段
for deleteName in "deploy4chain33" "deployerPrivateKey" "operatorAddr" "validatorsAddr" "initPowers" "deploy" "deployerPrivateKey" "operatorAddr" "validatorsAddr" "initPowers"; do
delete_line "${file}" "${deleteName}"
done
pushNameChange "${file}"
pushHost=$(get_docker_addr "${dockerNamePrefix}_ebrelayer${name}_1")
line=$(delete_line_show "${file}" "pushHost")
sed -i ''"${line}"' a pushHost="http://'"${pushHost}"':20000"' "${file}"
line=$(delete_line_show "${file}" "pushBind")
sed -i ''"${line}"' a pushBind="'"${pushHost}"':20000"' "${file}"
docker cp "${file}" "${dockerNamePrefix}_ebrelayer${name}_1":/root/relayer.toml
start_docker_ebrelayer "${dockerNamePrefix}_ebrelayer${name}_1" "/root/ebrelayer" "./ebrelayer${name}.log"
CLI="docker exec ${dockerNamePrefix}_ebrelayer${name}_1 /root/ebcli_A"
result=$(${CLI} set_pwd -p 123456hzj)
cli_ret "${result}" "set_pwd"
result=$(${CLI} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
eval chain33ValidatorKey=\$chain33ValidatorKey${name}
# shellcheck disable=SC2154
result=$(${CLI} chain33 import_privatekey -k "${chain33ValidatorKey}")
cli_ret "${result}" "chain33 import_privatekey"
eval ethValidatorAddrKey=\$ethValidatorAddrKey${name}
# shellcheck disable=SC2154
result=$(${CLI} ethereum import_privatekey -k "${ethValidatorAddrKey}")
cli_ret "${result}" "ethereum import_privatekey"
done
}
function restart_ebrelayerA() {
# 重启
kill_docker_ebrelayer "${dockerNamePrefix}_ebrelayera_1"
sleep 1
start_docker_ebrelayerA
result=$(${CLIA} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
}
# chain33 lock BTY, eth burn BTY
function TestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== chain33 lock BTY, eth burn BTY ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 原来的地址金额
result=$(${Chain33Cli} asset balance -a "${chain33PerfAddr}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "50.0000"
# chain33 lock bty
hash=$(${Chain33Cli} send evm call -f 1 -a 5 -k "${chain33PerfAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33BtyERC20TokenAddr}, 500000000)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# 原来的地址金额 减少了 5
result=$(${Chain33Cli} asset balance -a "${chain33PerfAddr}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "45.0000"
# chain33BridgeBank 是否增加了 5
result=$(${Chain33Cli} asset balance -a "${chain33BridgeBank}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "5.0000"
sleep 4
# eth 这端 金额是否增加了 5
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} ethereum burn -m 5 -k "${ethDeployKey}" -r "${chain33PerfAddr}" -t "${ethereumBtyBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
sleep 4
# eth 这端 金额是否减少了 3
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# # eth burn
# result=$(${CLIA} ethereum burn -m 3 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBtyBridgeTokenAddr}" ) #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
# cli_ret "${result}" "burn"
#
# sleep 4
#
# # eth 这端 金额是否减少了 3
# result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
# cli_ret "${result}" "balance" ".balance" "2"
#
# sleep ${maturityDegree}
#
# # 接收的地址金额 变成了 3
# result=$(${Chain33Cli} asset balance -a "${chain33ReceiverAddr}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
# is_equal "${result}" "3.0000"
#
# # chain33BridgeBank 是否减少了 3
# result=$(${Chain33Cli} asset balance -a "${chain33BridgeBank}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
# is_equal "${result}" "2.0000"
#
# # eth burn 2
# result=$(${CLIA} ethereum burn -m 2 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBtyBridgeTokenAddr}" ) #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
# cli_ret "${result}" "burn"
#
# sleep 4
#
# # eth 这端 金额是否减少了
# result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
# cli_ret "${result}" "balance" ".balance" "0"
#
# sleep ${maturityDegree}
#
# # 接收的地址金额 变成了 5
# result=$(${Chain33Cli} asset balance -a "${chain33ReceiverAddr}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
# is_equal "${result}" "5.0000"
#
# # chain33BridgeBank 是否减少了 3
# result=$(${Chain33Cli} asset balance -a "${chain33BridgeBank}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
# is_equal "${result}" "0.0000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# chain33 lock ZBC, eth burn ZBC
function TestChain33ToEthZBCAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== chain33 lock ZBC, eth burn ZBC ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 原来的地址金额
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "0"
# chain33 lock ZBC
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33ZbcERC20TokenAddr}, 900000000)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# chain33BridgeBank 是否增加了 9
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "900000000"
sleep 4
# eth 这端 金额是否增加了 9
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "9"
# eth burn
result=$(${CLIA} ethereum burn -m 8 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumZbcBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
sleep 4
# eth 这端 金额是否减少了 1
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "1"
sleep ${maturityDegree}
# 接收的地址金额 变成了 8
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33ReceiverAddr}" -b "balanceOf(${chain33ReceiverAddr})")
is_equal "${result}" "800000000"
# chain33BridgeBank 是否减少了 1
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "100000000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn
function TestETH2Chain33Assets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 11个
result=$(${CLIA} ethereum lock -m 11 -k "${ethValidatorAddrKeyA}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
# eth 等待 2 个区块
sleep 4
# 查询 ETH 这端 bridgeBank 地址 11
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "11"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11 * le8
is_equal "${result}" "1100000000"
# 原来的数额
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "100"
echo '#5.burn ETH from Chain33 ETH(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33EthBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11-5 * le8
is_equal "${result}" "600000000"
# 查询 ETH 这端 bridgeBank 地址 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "6"
# 比之前多 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "105"
echo '#5.burn ETH from Chain33 ETH(Chain33)-----> Ethereum 6'
${CLIA} chain33 burn -m 6 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33EthBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11-5 * le8
is_equal "${result}" "0"
# 查询 ETH 这端 bridgeBank 地址 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "0"
# 比之前多 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "111"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function TestETH2Chain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== eth to chain33 在以太坊上锁定 ycc 资产,然后在 chain33 上 burn ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 7个 YCC
result=$(${CLIA} ethereum lock -m 7 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "lock"
# eth 等待 2 个区块
sleep 4
# 查询 ETH 这端 bridgeBank 地址 7 YCC
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "7"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7 * le8
is_equal "${result}" "700000000"
# 原来的数额 0
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
# cli_ret "${result}" "balance" ".balance" "0"
echo '#5.burn YCC from Chain33 YCC(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33BycBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7-5 * le8
is_equal "${result}" "200000000"
# 查询 ETH 这端 bridgeBank 地址 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
# 更新后的金额 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
echo '#5.burn YCC from Chain33 YCC(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 2 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33BycBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7-5 * le8
is_equal "${result}" "0"
# 查询 ETH 这端 bridgeBank 地址 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 更新后的金额 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "7"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_set_offline_token_Bty() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}===== chain33 端 configLockedTokenOfflineSave BTY ======${NOC}"
# echo '2:#配置自动转离线钱包(bty, 100, 50%)'
${Boss4xCLI} chain33 offline set_offline_token -c "${chain33BridgeBank}" -s BTY -m 10000000000 -p 50 -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "chain33_set_offline_token.txt"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_transfer_multisign_Bty_test() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# transfer test
# shellcheck disable=SC2154
${Boss4xCLI} chain33 offline create_multisign_transfer -a 50 -r "${chain33BridgeBank}" -m "${multisignChain33Addr}"
# shellcheck disable=SC2154
${Boss4xCLI} chain33 offline multisign_transfer -k "${chain33DeployKey}" -s "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" --chainID "${chain33ID}"
chain33_offline_send "multisign_transfer.txt"
sleep 10
result=$(${Chain33Cli} asset balance -a "${chain33BridgeBank}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "103.2500"
result=$(${Chain33Cli} asset balance -a "${multisignChain33Addr}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "59.7500"
# shellcheck disable=SC2154
${Boss4xCLI} chain33 offline create_multisign_transfer -a 10 -r "${chain33MultisignA}" -m "${multisignChain33Addr}"
# shellcheck disable=SC2154
${Boss4xCLI} chain33 offline multisign_transfer -k "${chain33DeployKey}" -s "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" --chainID "${chain33ID}"
chain33_offline_send "multisign_transfer.txt"
sleep 10
result=$(${Chain33Cli} asset balance -a "${chain33MultisignA}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "10.0000"
result=$(${Chain33Cli} asset balance -a "${multisignChain33Addr}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "49.7500"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function initPara() {
# para add
hash=$(${Para8901Cli} send coins transfer -a 10000 -n test -t "${chain33ReceiverAddr}" -k CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944)
check_tx "${Para8901Cli}" "${hash}"
Chain33Cli=${Para8901Cli}
InitChain33Validator
# 先把 bty 转入到 paracross 合约中
hash=$(${MainCli} send coins send_exec -e paracross -a 1000 -k "${chain33DeployKey}")
check_tx "${MainCli}" "${hash}"
# 主链中的 bty 夸链到 平行链中
hash=$(${Para8801Cli} send para cross_transfer -a 800 -e coins -s bty -t "${chain33DeployAddr}" -k "${chain33DeployKey}")
check_tx "${Para8801Cli}" "${hash}"
check_tx "${Para8901Cli}" "${hash}"
result=$(${Para8901Cli} asset balance -a "${chain33DeployAddr}" --asset_exec paracross --asset_symbol coins.bty | jq -r .balance)
is_equal "${result}" "800.0000"
# 把平行链中的 bty 转入 平行链中的 evm 合约
hash=$(${Para8901Cli} send para transfer_exec -a 500 -e user.p.para.evm -s coins.bty -k "${chain33DeployKey}")
check_tx "${Para8901Cli}" "${hash}"
result=$(${Para8901Cli} asset balance -a "${chain33DeployAddr}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "500.0000"
{
result=$(${MainCli} account import_key -k "${chain33PerfAddrKey}" -l "PerfAddr")
check_addr "${result}" "${chain33PerfAddr}"
hash=$(${MainCli} send coins transfer -a 200 -n test -t "${chain33PerfAddr}" -k 4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01)
check_tx "${MainCli}" "${hash}"
result=$(${Para8901Cli} account import_key -k "${chain33PerfAddrKey}" -l "PerfAddr")
check_addr "${result}" "${chain33PerfAddr}"
hash=$(${Para8901Cli} send coins transfer -a 200 -n test -t "${chain33PerfAddr}" -k 4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01)
check_tx "${Para8901Cli}" "${hash}"
# 先把 bty 转入到 paracross 合约中
hash=$(${MainCli} send coins send_exec -e paracross -a 100 -k "${chain33PerfAddrKey}")
check_tx "${MainCli}" "${hash}"
# 主链中的 bty 夸链到 平行链中
hash=$(${Para8801Cli} send para cross_transfer -a 80 -e coins -s bty -t "${chain33PerfAddr}" -k "${chain33PerfAddrKey}")
check_tx "${Para8801Cli}" "${hash}"
check_tx "${Para8901Cli}" "${hash}"
result=$(${Para8901Cli} asset balance -a "${chain33PerfAddr}" --asset_exec paracross --asset_symbol coins.bty | jq -r .balance)
is_equal "${result}" "80.0000"
# 把平行链中的 bty 转入 平行链中的 evm 合约
hash=$(${Para8901Cli} send para transfer_exec -a 50 -e user.p.para.evm -s coins.bty -k "${chain33PerfAddrKey}")
check_tx "${Para8901Cli}" "${hash}"
result=$(${Para8901Cli} asset balance -a "${chain33PerfAddr}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "50.0000"
}
}
# lock bty 判断是否转入多签地址金额是否正确
function lock_bty_multisign_docker() {
local lockAmount=$1
local lockAmount2="${1}00000000"
hash=$(${Chain33Cli} send evm call -f 1 -a "${lockAmount}" -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33BtyERC20TokenAddr}, ${lockAmount2})" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
if [[ $# -eq 3 ]]; then
local bridgeBankBalance=$2
local multisignBalance=$3
result=$(${Chain33Cli} asset balance -a "${chain33BridgeBank}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "${bridgeBankBalance}"
result=$(${Chain33Cli} asset balance -a "${multisignChain33Addr}" --asset_exec paracross --asset_symbol coins.bty -e user.p.para.evm | jq -r .balance)
is_equal "${result}" "${multisignBalance}"
fi
}
function lockBty() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}===== chain33 端 lock BTY ======${NOC}"
# echo '2:#配置自动转离线钱包(bty, 100, 50%)'
offline_set_offline_token_Bty
lock_bty_multisign_docker 33 "33.0000" "0.0000"
lock_bty_multisign_docker 80 "56.5000" "56.5000"
lock_bty_multisign_docker 50 "53.2500" "109.7500"
# transfer test
offline_transfer_multisign_Bty_test
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockChain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}===== chain33 端 lock ERC20 YCC ======${NOC}"
# echo '2:#配置自动转离线钱包(YCC, 100, 60%)'
offline_set_offline_token_Chain33Ycc
lock_chain33_ycc_multisign 30 30 0
lock_chain33_ycc_multisign 70 40 60
lock_chain33_ycc_multisign 260 120 240
lock_chain33_ycc_multisign 10 52 318
# transfer test
offline_transfer_multisign_Chain33Ycc_test
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockEth() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}===== ethereum 端 lock ETH ======${NOC}"
# echo '2:#配置自动转离线钱包(eth, 20, 50%)'
offline_set_offline_token_Eth
# 重启 nonce 会不统一 要重启一下
restart_ebrelayerA
lock_eth_multisign 19 19 0
lock_eth_multisign 1 10 10
lock_eth_multisign 16 13 23
# transfer
# shellcheck disable=SC2154
offline_transfer_multisign_Eth_test
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockEthYcc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}===== ethereum 端 lock ERC20 YCC ======${NOC}"
# echo '2:#配置自动转离线钱包(ycc, 100, 40%)'
offline_set_offline_token_EthYcc
# 重启 nonce 会不统一 要重启一下
restart_ebrelayerA
lock_ethereum_ycc_multisign 70 70 0
lock_ethereum_ycc_multisign 30 60 40
lock_ethereum_ycc_multisign 60 72 88
# multisignEthAddr 要有手续费
${CLIA} ethereum transfer -k "${ethDeployKey}" -m 10 -r "${multisignEthAddr}"
sleep 10
# transfer
offline_transfer_multisign_EthYcc
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function StartDockerRelayerDeploy() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 修改 relayer.toml 配置文件 pushName 字段
pushNameChange "./relayer.toml"
# 修改 relayer.toml 配置文件 initPowers
validators_config
# change EthProvider url
dockerAddr=$(get_docker_addr "${dockerNamePrefix}_ganachetest_1")
# 修改 relayer.toml 配置文件
updata_relayer_a_toml "${dockerAddr}" "${dockerNamePrefix}_ebrelayera_1" "./relayer.toml"
# 删除私钥
delete_line "./relayer.toml" "deployerPrivateKey="
delete_line "./relayer.toml" "deployerPrivateKey="
# para
# shellcheck disable=SC2155
local line=$(delete_line_show "./relayer.toml" "chain33Host")
# 在第 line 行后面 新增合约地址
docker_chain33_ip=$(get_docker_addr "${dockerNamePrefix}_chain33_1")
sed -i ''"${line}"' a chain33Host="http://'"${docker_chain33_ip}"':8901"' "./relayer.toml"
# shellcheck disable=SC2155
local line=$(delete_line_show "./relayer.toml" "ChainName")
# 在第 line 行后面 新增合约地址
sed -i ''"${line}"' a ChainName="user.p.para."' "./relayer.toml"
# shellcheck disable=SC2155
local line=$(delete_line_show "./relayer.toml" "maturityDegree=10")
sed -i ''"${line}"' a maturityDegree=1' "./relayer.toml"
# shellcheck disable=SC2155
local line=$(delete_line_show "./relayer.toml" "EthMaturityDegree=10")
sed -i ''"${line}"' a EthMaturityDegree=1' "./relayer.toml"
# 启动 ebrelayer
start_docker_ebrelayerA
# 部署合约 设置 bridgeRegistry 地址
InitAndOfflineDeploy
# 设置离线多签数据
# Chain33Cli=${MainCli}
# initMultisignChain33Addr
# Chain33Cli=${Para8901Cli}
# offline_setupChain33Multisign
# offline_setupEthMultisign
# Chain33Cli=${MainCli}
# transferChain33MultisignFee
# Chain33Cli=${Para8901Cli}
#
# docker cp "${BridgeRegistryOnChain33}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${BridgeRegistryOnChain33}.abi
# docker cp "${chain33BridgeBank}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33BridgeBank}.abi
# docker cp "${BridgeRegistryOnEth}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${BridgeRegistryOnEth}.abi
# docker cp "${ethBridgeBank}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${ethBridgeBank}.abi
# 重启
restart_ebrelayerA
# start ebrelayer B C D
updata_toml_start_bcd
# 设置 token 地址
# InitTokenAddr
offline_create_bridge_token_eth_BTY
# offline_create_bridge_token_chain33_ETH
# offline_deploy_erc20_eth_BYC
# offline_create_bridge_token_chain33_BYC
# offline_deploy_erc20_chain33_YCC
# offline_create_bridge_token_eth_YCC
# offline_deploy_erc20_chain33_ZBC
# offline_create_bridge_token_eth_ZBC
# docker cp "${chain33EthBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33EthBridgeTokenAddr}.abi
# docker cp "${chain33BycBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33BycBridgeTokenAddr}.abi
# docker cp "${chain33YccERC20TokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33YccERC20TokenAddr}.abi
# docker cp "${ethereumYccBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${ethereumYccBridgeTokenAddr}.abi
# 重启
restart_ebrelayerA
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function AllRelayerMainTest() {
set +e
docker_chain33_ip=$(get_docker_addr "${dockerNamePrefix}_chain33_1")
MainCli="./chain33-cli --rpc_laddr http://${docker_chain33_ip}:8801"
Para8801Cli="./chain33-cli --rpc_laddr http://${docker_chain33_ip}:8901 --paraName user.p.para."
Para8901Cli="./chain33-cli --rpc_laddr http://${docker_chain33_ip}:8901 --paraName user.p.para."
# shellcheck disable=SC2034
{
CLIA="docker exec ${dockerNamePrefix}_ebrelayera_1 /root/ebcli_A"
CLIB="docker exec ${dockerNamePrefix}_ebrelayerb_1 /root/ebcli_A"
CLIC="docker exec ${dockerNamePrefix}_ebrelayerc_1 /root/ebcli_A"
CLID="docker exec ${dockerNamePrefix}_ebrelayerd_1 /root/ebcli_A"
docker_ganachetest_ip=$(get_docker_addr "${dockerNamePrefix}_ganachetest_1")
Boss4xCLI="docker exec ${dockerNamePrefix}_ebrelayera_1 /root/boss4x --rpc_laddr http://${docker_chain33_ip}:8901 --rpc_laddr_ethereum http://${docker_ganachetest_ip}:8545 --paraName user.p.para."
echo "${Boss4xCLI}"
}
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
if [[ ${1} != "" ]]; then
maturityDegree=${1}
echo -e "${GRE}maturityDegree is ${maturityDegree} ${NOC}"
fi
# shellcheck disable=SC2120
if [[ $# -ge 2 ]]; then
chain33ID="${2}"
fi
# init
Chain33Cli=${MainCli}
InitChain33Validator
# para add
initPara
Chain33Cli=${Para8901Cli}
StartDockerRelayerDeploy
# test
# Chain33Cli=${Para8901Cli}
while true; do
TestChain33ToEthAssets
sleep 60
done
# TestChain33ToEthAssets
# TestChain33ToEthZBCAssets
# TestETH2Chain33Assets
# TestETH2Chain33Ycc
# Chain33Cli=${Para8901Cli}
# lockBty
# lockChain33Ycc
# lockEth
# lockEthYcc
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
source "./publicTest.sh"
source "./relayerPublic.sh"
# ETH 部署合约者的私钥 用于部署合约时签名使用
#ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
chain33DeployKey="0xcc38546e9e659d15e6b4893f0ab32a06d103931a8230b0bde71459d2b27d6944"
ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
#chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
Chain33Cli="../../chain33-cli"
chain33BridgeBank=""
ethBridgeBank=""
#chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
#chain33EthBridgeTokenAddr=""
#ethereumBtyBridgeTokenAddr=""
#chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
multisignChain33Addr=""
multisignEthAddr=""
CLIA="./ebcli_A"
chain33ID=0
# shellcheck disable=SC2034
{
bseMultisignA=0x0f2e821517D4f64a012a04b668a6b1aa3B262e08
bseMultisignB=0x21B5f4C2F6Ff418fa0067629D9D76AE03fB4a2d2
bseMultisignC=0xee760B2E502244016ADeD3491948220B3b1dd789
bseMultisignKeyA=f934e9171c5cf13b35e6c989e95f5e95fa471515730af147b66d60fbcd664b7c
bseMultisignKeyB=2bcf3e23a17d3f3b190a26a098239ad2d20267a673440e0f57a23f44f94b77b9
bseMultisignKeyC=e5f8caae6468061c17543bc2205c8d910b3c71ad4d055105cde94e88ccb4e650
TestNodeAddr="https://data-seed-prebsc-1-s1.binance.org:8545/"
}
function deployMultisign() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
for name in A B C D; do
eval chain33MultisignKey=\$chain33MultisignKey${name}
eval chain33Multisign=\$chain33Multisign${name}
# shellcheck disable=SC2154
result=$(${Chain33Cli} account import_key -k "${chain33MultisignKey}" -l multisignAddr$name)
# shellcheck disable=SC2154
check_addr "${result}" "${chain33Multisign}"
# chain33Multisign 要有手续费
hash=$(${Chain33Cli} send coins transfer -a 10 -t "${chain33Multisign}" -k "${chain33DeployAddr}")
check_tx "${Chain33Cli}" "${hash}"
result=$(${Chain33Cli} account balance -a "${chain33Multisign}" -e coins)
balance_ret "${result}" "10.0000"
done
echo -e "${GRE}=========== 部署 chain33 离线钱包合约 ===========${NOC}"
result=$(${CLIA} chain33 multisign deploy)
cli_ret "${result}" "chain33 multisign deploy"
multisignChain33Addr=$(echo "${result}" | jq -r ".msg")
# shellcheck disable=SC2154
result=$(${CLIA} chain33 multisign setup -k "${chain33DeployKey}" -o "${chain33MultisignA},${chain33MultisignB},${chain33MultisignC},${chain33MultisignD}")
cli_ret "${result}" "chain33 multisign setup"
# multisignChain33Addr 要有手续费
hash=$(${Chain33Cli} send coins transfer -a 10 -t "${multisignChain33Addr}" -k "${chain33DeployAddr}")
check_tx "${Chain33Cli}" "${hash}"
result=$(${Chain33Cli} account balance -a "${multisignChain33Addr}" -e coins)
balance_ret "${result}" "10.0000"
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "configOfflineSaveAccount(${multisignChain33Addr})" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# echo -e "${GRE}=========== 部署 ETH 离线钱包合约 ===========${NOC}"
# result=$(${CLIA} ethereum multisign deploy)
# cli_ret "${result}" "ethereum multisign deploy"
# multisignEthAddr=$(echo "${result}" | jq -r ".msg")
#
# result=$(${CLIA} ethereum multisign setup -k "${ethDeployKey}" -o "${bseMultisignA},${bseMultisignB},${bseMultisignC}")
# cli_ret "${result}" "ethereum multisign setup"
#
# result=$(${CLIA} ethereum multisign set_offline_addr -s "${multisignEthAddr}")
# cli_ret "${result}" "set_offline_addr"
#
# echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lock_eth_balance() {
local lockAmount=$1
local bridgeBankBalance=$2
local multisignBalance=$3
result=$(${CLIA} ethereum lock -m "${lockAmount}" -k "${ethValidatorAddrKeyA}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
# cli_ret "${result}" "balance" ".balance" "${bridgeBankBalance}"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
# cli_ret "${result}" "balance" ".balance" "${multisignBalance}"
}
function lockEth() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo '2:#配置自动转离线钱包(BNB, 4, 50%)'
# result=$(${CLIA} ethereum multisign set_offline_token -s ETH -m 4)
# cli_ret "${result}" "set_offline_token -s ETH -m 4"
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
# cli_ret "${result}" "balance" ".balance" "0"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
# cli_ret "${result}" "balance" ".balance" "0"
# lock_eth_balance 4 2 2
lock_eth_balance 2 4 2
# lock_eth_balance 1 10 10
# lock_eth_balance 16 13 23
# transfer
hash=$(./ebcli_A ethereum multisign transfer -a 1 -r "${ethBridgeBank}" -k "${bseMultisignKeyA},${bseMultisignKeyB},${bseMultisignKeyC}")
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
result=$(${CLIA} ethereum balance -o "${bseMultisignA}")
hash=$(./ebcli_A ethereum multisign transfer -a 1 -r "${bseMultisignA}" -k "${bseMultisignKeyA},${bseMultisignKeyB},${bseMultisignKeyC}")
result=$(${CLIA} ethereum balance -o "${bseMultisignA}")
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lock_eth_ycc_balance() {
local lockAmount=$1
local bridgeBankBalance=$2
local multisignBalance=$3
result=$(${CLIA} ethereum lock -m "${lockAmount}" -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "${bridgeBankBalance}"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "${multisignBalance}"
}
function lockEthYcc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo '2:#配置自动转离线钱包(ycc, 100, 40%)'
result=$(${CLIA} ethereum multisign set_offline_token -s BYC -m 100 -p 40 -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "set_offline_token -s YCC -m 100"
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
lock_eth_ycc_balance 70 70 0
lock_eth_ycc_balance 30 60 40
lock_eth_ycc_balance 60 72 88
# transfer
# multisignEthAddr 要有手续费
./ebcli_A ethereum transfer -k "${ethDeployKey}" -m 10 -r "${multisignEthAddr}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function StartRelayerOnBsc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
BridgeRegistryOnEth=0x5331F912027057fBE8139D91B225246e8159232f
ethBridgeBank=0xC65B02a22B714b55D708518E2426a22ffB79113d
multisignEthAddr=0xbf271b2B23DA4fA8Dc93Ce86D27dd09796a7Bf54
# shellcheck disable=SC2120
function mainTest() {
if [[ $# -ge 1 && ${1} != "" ]]; then
chain33ID="${1}"
fi
StartChain33
# shellcheck disable=SC2009
pid=$(ps -ef | grep "ebrelayer" | grep -v 'grep' | awk '{print $2}' | xargs)
if [ "${pid}" == "" ]; then
kill_ebrelayer ebrelayer
sleep 2
rm datadir/ logs/ -rf
fi
# shellcheck disable=SC2155
line=$(delete_line_show "./relayer.toml" 'EthProviderCli="http://127.0.0.1:7545"')
if [ "${line}" ]; then
sed -i ''"${line}"' a EthProviderCli="https://data-seed-prebsc-1-s1.binance.org:8545/"' "./relayer.toml"
fi
line=$(delete_line_show "./relayer.toml" 'EthProvider="ws://127.0.0.1:7545/"')
if [ "${line}" ]; then
sed -i ''"${line}"' a EthProvider="wss://data-seed-prebsc-1-s1.binance.org:8545/"' "./relayer.toml"
fi
# StartRelayer_A
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 修改 relayer.toml 配置文件 pushName 字段
pushNameChange "./relayer.toml"
# 启动 ebrelayer
start_ebrelayerA
# 导入私钥 部署合约 设置 bridgeRegistry 地址
# InitAndDeploy
{
echo -e "${GRE}=========== InitAndDeploy begin ===========${NOC}"
result=$(${CLIA} set_pwd -p 123456hzj)
cli_ret "${result}" "set_pwd"
result=$(${CLIA} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
result=$(${CLIA} chain33 import_privatekey -k "${chain33DeployKey}")
cli_ret "${result}" "chain33 import_privatekey"
result=$(${CLIA} ethereum import_privatekey -k "${ethDeployKey}")
cli_ret "${result}" "ethereum import_privatekey"
# 在 chain33 上部署合约
result=$(${CLIA} chain33 deploy)
cli_ret "${result}" "chain33 deploy"
BridgeRegistryOnChain33=$(echo "${result}" | jq -r ".msg")
# 拷贝 BridgeRegistry.abi 和 BridgeBank.abi
cp BridgeRegistry.abi "${BridgeRegistryOnChain33}.abi"
chain33BridgeBank=$(${Chain33Cli} evm query -c "${chain33DeployAddr}" -b "bridgeBank()" -a "${BridgeRegistryOnChain33}")
cp Chain33BridgeBank.abi "${chain33BridgeBank}.abi"
# 在 Eth 上部署合约
# result=$(${CLIA} ethereum deploy)
# cli_ret "${result}" "ethereum deploy"
# BridgeRegistryOnEth=$(echo "${result}" | jq -r ".msg")
# 拷贝 BridgeRegistry.abi 和 BridgeBank.abi
# cp BridgeRegistry.abi "${BridgeRegistryOnEth}.abi"
# result=$(${CLIA} ethereum bridgeBankAddr)
# ethBridgeBank=$(echo "${result}" | jq -r ".addr")
cp EthBridgeBank.abi "${ethBridgeBank}.abi"
# 修改 relayer.toml 字段
updata_relayer "BridgeRegistryOnChain33" "${BridgeRegistryOnChain33}" "./relayer.toml"
line=$(delete_line_show "./relayer.toml" "BridgeRegistry=")
if [ "${line}" ]; then
sed -i ''"${line}"' a BridgeRegistry="'"${BridgeRegistryOnEth}"'"' "./relayer.toml"
fi
echo -e "${GRE}=========== InitAndDeploy end ===========${NOC}"
}
# 重启
kill_ebrelayer ebrelayer
start_ebrelayerA
result=$(${CLIA} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
deployMultisign
lockEth
# lockEthYcc
}
mainTest "${1}"
#lockEth
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
source "./publicTest.sh"
source "./relayerPublic.sh"
source "./multisignPublicTest.sh"
# ETH 部署合约者的私钥 用于部署合约时签名使用
ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
ethReceiverAddr1="0xa4ea64a583f6e51c3799335b28a8f0529570a635"
#ethReceiverAddrKey1="355b876d7cbcb930d5dfab767f66336ce327e082cbaa1877210c1bae89b1df71"
maturityDegree=10
Chain33Cli="../../chain33-cli"
chain33BridgeBank=""
ethBridgeBank=""
chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
chain33EthBridgeTokenAddr=""
ethereumBtyBridgeTokenAddr=""
chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
chain33ZbcERC20TokenAddr=""
ethereumZbcBridgeTokenAddr=""
CLIA="./ebcli_A"
Boss4xCLI="./boss4x"
chain33ID=0
# $1 send file
function chain33_offline_send() {
result=$(${Boss4xCLI} chain33 offline send -f "${1}")
hash=$(echo "${result}" | jq -r ".[0].TxHash")
check_tx "${Chain33Cli}" "${hash}"
}
# $1 send file $2 key
function ethereum_offline_sign_send() {
key="${ethDeployKey}"
if [[ ${2} != "" ]]; then
key="${2}"
fi
${Boss4xCLI} ethereum offline sign -f "${1}" -k "${key}"
result=$(${Boss4xCLI} ethereum offline send -f "deploysigntxs.txt")
hash=$(echo "${result}" | jq -r ".[0].TxHash")
check_eth_tx "${hash}"
}
# chain33 lock BTY, eth burn BTY
function TestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== chain33 lock BTY, eth burn BTY ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 原来的地址金额
result=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm)
# balance=$(cli_ret "${result}" "balance" ".balance")
# chain33 lock bty
hash=$(${Chain33Cli} send evm call -f 1 -a 5 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33BtyERC20TokenAddr}, 500000000)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# 原来的地址金额 减少了 5
result=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm)
# cli_ret "${result}" "balance" ".balance" "$(echo "${balance}-5" | bc)"
#balance_ret "${result}" "195.0000"
# chain33BridgeBank 是否增加了 5
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "5.0000"
eth_block_wait 10
# eth 这端 金额是否增加了 5
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} ethereum burn -m 3 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBtyBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
eth_block_wait 10
# eth 这端 金额是否减少了 3
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
sleep ${maturityDegree}
# 接收的地址金额 变成了 3
result=$(${Chain33Cli} account balance -a "${chain33ReceiverAddr}" -e evm)
balance_ret "${result}" "3.0000"
# chain33BridgeBank 是否减少了 3
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "2.0000"
# eth burn
result=$(${CLIA} ethereum burn -m 2 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBtyBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
eth_block_wait 10
sleep ${maturityDegree}
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "0.0000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# chain33 lock ZBC, eth burn ZBC
function TestChain33ToEthZBCAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== chain33 lock ZBC, eth burn ZBC ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 原来的地址金额
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "0"
# chain33 lock ZBC
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33ZbcERC20TokenAddr}, 900000000)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# chain33BridgeBank 是否增加了 9
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "900000000"
eth_block_wait 10
# eth 这端 金额是否增加了 9
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "9"
# eth burn
result=$(${CLIA} ethereum burn -m 8 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumZbcBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
eth_block_wait 10
# eth 这端 金额是否减少了 1
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "1"
sleep ${maturityDegree}
# 接收的地址金额 变成了 8
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33ReceiverAddr}" -b "balanceOf(${chain33ReceiverAddr})")
is_equal "${result}" "800000000"
# chain33BridgeBank 是否减少了 1
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "100000000"
# eth burn
result=$(${CLIA} ethereum burn -m 1 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumZbcBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
eth_block_wait 10
sleep ${maturityDegree}
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "0"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn
function TestETH2Chain33Assets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 11个
result=$(${CLIA} ethereum lock -m 11 -k "${ethValidatorAddrKeyA}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 10
# 查询 ETH 这端 bridgeBank 地址 11
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "11"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11 * le8
is_equal "${result}" "1100000000"
# 原来的数额
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "100"
echo '#5.burn ETH from Chain33 ETH(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33EthBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11-5 * le8
is_equal "${result}" "600000000"
# 查询 ETH 这端 bridgeBank 地址 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "6"
# 比之前多 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "105"
${CLIA} chain33 burn -m 6 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33EthBridgeTokenAddr}"
sleep ${maturityDegree}
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "0"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function TestETH2Chain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== eth to chain33 在以太坊上锁定 ycc 资产,然后在 chain33 上 burn ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 7个 YCC
result=$(${CLIA} ethereum lock -m 7 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 10
# 查询 ETH 这端 bridgeBank 地址 7 YCC
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "7"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7 * le8
is_equal "${result}" "700000000"
# 原来的数额 0
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
echo '#5.burn YCC from Chain33 YCC(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33BycBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7-5 * le8
is_equal "${result}" "200000000"
# 查询 ETH 这端 bridgeBank 地址 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
# 更新后的金额 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
${CLIA} chain33 burn -m 2 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33BycBridgeTokenAddr}"
sleep ${maturityDegree}
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# shellcheck disable=SC2120
function InitAndOfflineDeploy() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
result=$(${CLIA} set_pwd -p 123456hzj)
cli_ret "${result}" "set_pwd"
result=$(${CLIA} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
# shellcheck disable=SC2154
result=$(${CLIA} chain33 import_privatekey -k "${chain33ValidatorKeyA}")
cli_ret "${result}" "chain33 import_privatekey"
result=$(${CLIA} ethereum import_privatekey -k "${ethValidatorAddrKeyA}")
cli_ret "${result}" "ethereum import_privatekey"
# 在 chain33 上部署合约
# ./boss4x chain33 offline create -f 1 -k 0x027ca96466c71c7e7c5d73b7e1f43cb889b3bd65ebd2413eefd31c6709c262ae -n "deploy crossx to chain33" -r "1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ, [1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ, 155ooMPBTF8QQsGAknkK7ei5D78rwDEFe6, 13zBdQwuyDh7cKN79oT2odkxYuDbgQiXFv, 113ZzVamKfAtGt9dq45fX1mNsEoDiN95HG], [25, 25, 25, 25]" --chainID 0
# shellcheck disable=SC2154
${Boss4xCLI} chain33 offline create -f 1 -k "${chain33DeployKey}" -n "deploy crossx to chain33" -r "${chain33ValidatorA}, [${chain33ValidatorA}, ${chain33ValidatorB}, ${chain33ValidatorC}, ${chain33ValidatorD}], [25, 25, 25, 25]" --chainID 0
result=$(${Boss4xCLI} chain33 offline send -f "deployCrossX2Chain33.txt")
for i in {0..7}; do
hash=$(echo "${result}" | jq -r ".[$i].TxHash")
check_tx "${Chain33Cli}" "${hash}"
done
BridgeRegistryOnChain33=$(echo "${result}" | jq -r ".[6].ContractAddr")
# shellcheck disable=SC2034
multisignChain33Addr=$(echo "${result}" | jq -r ".[7].ContractAddr")
${CLIA} chain33 multisign set_multiSign -a "${multisignChain33Addr}"
# 拷贝 BridgeRegistry.abi 和 BridgeBank.abi
cp BridgeRegistry.abi "${BridgeRegistryOnChain33}.abi"
chain33BridgeBank=$(${Chain33Cli} evm query -c "${chain33DeployAddr}" -b "bridgeBank()" -a "${BridgeRegistryOnChain33}")
cp Chain33BridgeBank.abi "${chain33BridgeBank}.abi"
# 在 Eth 上部署合约
# ./boss4x ethereum offline create -p "25,25,25,25" -o 0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a -v "0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a,0x0df9a824699bc5878232c9e612fe1a5346a5a368,0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1,0xd9dab021e74ecf475788ed7b61356056b2095830"
# ./boss4x ethereum offline sign -k 8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230
# shellcheck disable=SC2154
${Boss4xCLI} ethereum offline create -p "25,25,25,25" -o "${ethValidatorAddrA}" -v "${ethValidatorAddrA},${ethValidatorAddrB},${ethValidatorAddrC},${ethValidatorAddrD}"
${Boss4xCLI} ethereum offline sign -k "${ethValidatorAddrKeyA}"
result=$(${Boss4xCLI} ethereum offline send -f "deploysigntxs.txt")
for i in {0..7}; do
hash=$(echo "${result}" | jq -r ".[$i].TxHash")
check_eth_tx "${hash}"
done
BridgeRegistryOnEth=$(echo "${result}" | jq -r ".[6].ContractAddr")
ethBridgeBank=$(echo "${result}" | jq -r ".[3].ContractAddr")
# shellcheck disable=SC2034
multisignEthAddr=$(echo "${result}" | jq -r ".[7].ContractAddr")
${CLIA} ethereum multisign set_multiSign -a "${multisignEthAddr}"
# 拷贝 BridgeRegistry.abi 和 BridgeBank.abi
cp BridgeRegistry.abi "${BridgeRegistryOnEth}.abi"
cp EthBridgeBank.abi "${ethBridgeBank}.abi"
# 修改 relayer.toml 字段
updata_relayer "BridgeRegistryOnChain33" "${BridgeRegistryOnChain33}" "./relayer.toml"
line=$(delete_line_show "./relayer.toml" "BridgeRegistry=")
if [ "${line}" ]; then
sed -i ''"${line}"' a BridgeRegistry="'"${BridgeRegistryOnEth}"'"' "./relayer.toml"
fi
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_deploy_erc20_eth_BYC() {
# eth 上 铸币 YCC
echo -e "${GRE}======= 在 ethereum 上创建 ERC20 BYC ======${NOC}"
${Boss4xCLI} ethereum offline create_erc20 -m 33000000000000000000 -s BYC -o "${ethValidatorAddrA}" -d "${ethDeployAddr}"
${Boss4xCLI} ethereum offline sign -f "deployErc20YCC.txt" -k "${ethDeployKey}"
sleep 10
result=$(${Boss4xCLI} ethereum offline send -f "deploysigntxs.txt")
hash=$(echo "${result}" | jq -r ".[0].TxHash")
check_eth_tx "${hash}"
ethereumBycERC20TokenAddr=$(echo "${result}" | jq -r ".[0].ContractAddr")
# result=$(${CLIA} ethereum token add_lock_list -s BYC -t "${ethereumBycERC20TokenAddr}")
# cli_ret "${result}" "add_lock_list"
${Boss4xCLI} ethereum offline create_add_lock_list -s BYC -t "${ethereumBycERC20TokenAddr}" -c "${ethBridgeBank}" -d "${ethDeployAddr}"
ethereum_offline_sign_send "create_add_lock_list.txt"
}
function offline_create_bridge_token_chain33_BYC() {
# 在chain33上创建bridgeToken YCC
echo -e "${GRE}======= 在 chain33 上创建 bridgeToken YCC ======${NOC}"
# hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "createNewBridgeToken(YCC)" --chainID "${chain33ID}")
# check_tx "${Chain33Cli}" "${hash}"
${Boss4xCLI} chain33 offline create_bridge_token -c "${chain33BridgeBank}" -s YCC -k "${chain33DeployKey}" --chainID "${chain33ID}" -n "create_bridge_token:YCC"
chain33_offline_send "create_bridge_token.txt"
chain33BycBridgeTokenAddr=$(${Chain33Cli} evm query -a "${chain33BridgeBank}" -c "${chain33DeployAddr}" -b "getToken2address(YCC)")
echo "YCC Token Addr = ${chain33BycBridgeTokenAddr}"
cp BridgeToken.abi "${chain33BycBridgeTokenAddr}.abi"
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33BycBridgeTokenAddr}" -b "symbol()")
is_equal "${result}" "YCC"
}
function offline_deploy_erc20_chain33_YCC() {
# chain33 token create YCC
echo -e "${GRE}======= 在 chain33 上创建 ERC20 YCC ======${NOC}"
${Boss4xCLI} chain33 offline create_erc20 -s YCC -k "${chain33DeployKey}" -o "${chain33DeployAddr}" --chainID "${chain33ID}"
result=$(${Boss4xCLI} chain33 offline send -f "deployErc20YCCChain33.txt")
hash=$(echo "${result}" | jq -r ".[0].TxHash")
check_tx "${Chain33Cli}" "${hash}"
chain33YccERC20TokenAddr=$(echo "${result}" | jq -r ".[0].ContractAddr")
cp ERC20.abi "${chain33YccERC20TokenAddr}.abi"
# echo 'YCC.1:增加allowance的设置,或者使用relayer工具进行'
# hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33YccERC20TokenAddr}" -p "approve(${chain33BridgeBank}, 330000000000)" --chainID "${chain33ID}")
# check_tx "${Chain33Cli}" "${hash}"
${Boss4xCLI} chain33 offline approve_erc20 -a 330000000000 -s "${chain33BridgeBank}" -c "${chain33YccERC20TokenAddr}" -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "approve_erc20.txt"
# echo 'YCC.2:#执行add lock操作:addToken2LockList'
# hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "addToken2LockList(${chain33YccERC20TokenAddr}, YCC)" --chainID "${chain33ID}")
# check_tx "${Chain33Cli}" "${hash}"
${Boss4xCLI} chain33 offline create_add_lock_list -c "${chain33BridgeBank}" -s YCC -t "${chain33YccERC20TokenAddr}" -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "create_add_lock_list.txt"
}
function offline_deploy_erc20_chain33_ZBC() {
# chain33 token create ZBC
echo -e "${GRE}======= 在 chain33 上创建 ERC20 ZBC ======${NOC}"
${Boss4xCLI} chain33 offline create_erc20 -s ZBC -k "${chain33DeployKey}" -o "${chain33DeployAddr}" --chainID "${chain33ID}"
result=$(${Boss4xCLI} chain33 offline send -f "deployErc20ZBCChain33.txt")
hash=$(echo "${result}" | jq -r ".[0].TxHash")
check_tx "${Chain33Cli}" "${hash}"
chain33ZbcERC20TokenAddr=$(echo "${result}" | jq -r ".[0].ContractAddr")
cp ERC20.abi "${chain33ZbcERC20TokenAddr}.abi"
# echo 'ZBC.1:增加allowance的设置,或者使用relayer工具进行'
# hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33ZbcERC20TokenAddr}" -p "approve(${chain33BridgeBank}, 330000000000)" --chainID "${chain33ID}")
# check_tx "${Chain33Cli}" "${hash}"
${Boss4xCLI} chain33 offline approve_erc20 -a 330000000000 -s "${chain33BridgeBank}" -c "${chain33ZbcERC20TokenAddr}" -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "approve_erc20.txt"
# echo 'ZBC.2:#执行add lock操作:addToken2LockList'
# hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "addToken2LockList(${chain33ZbcERC20TokenAddr}, ZBC)" --chainID "${chain33ID}")
# check_tx "${Chain33Cli}" "${hash}"
${Boss4xCLI} chain33 offline create_add_lock_list -c "${chain33BridgeBank}" -s ZBC -t "${chain33ZbcERC20TokenAddr}" -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "create_add_lock_list.txt"
}
function offline_create_bridge_token_eth_BTY() {
# 在 Ethereum 上创建 bridgeToken BTY
echo -e "${GRE}======= 在 Ethereum 上创建 bridgeToken BTY ======${NOC}"
${Boss4xCLI} ethereum offline create_bridge_token -s BTY -c "${ethBridgeBank}" -d "${ethDeployAddr}"
ethereum_offline_sign_send "create_bridge_token.txt"
ethereumBtyBridgeTokenAddr=$(./ebcli_A ethereum receipt -s "${hash}" | jq -r .logs[0].address)
}
function offline_create_bridge_token_chain33_ETH() {
# 在 chain33 上创建 bridgeToken ETH
echo -e "${GRE}======= 在 chain33 上创建 bridgeToken ETH ======${NOC}"
# hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "createNewBridgeToken(ETH)" --chainID "${chain33ID}")
# check_tx "${Chain33Cli}" "${hash}"
${Boss4xCLI} chain33 offline create_bridge_token -c "${chain33BridgeBank}" -s ETH -k "${chain33DeployKey}" --chainID "${chain33ID}" -n "create_bridge_token:ETH"
chain33_offline_send "create_bridge_token.txt"
chain33EthBridgeTokenAddr=$(${Chain33Cli} evm query -a "${chain33BridgeBank}" -c "${chain33DeployAddr}" -b "getToken2address(ETH)")
echo "ETH Token Addr= ${chain33EthBridgeTokenAddr}"
cp BridgeToken.abi "${chain33EthBridgeTokenAddr}.abi"
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33EthBridgeTokenAddr}" -b "symbol()")
is_equal "${result}" "ETH"
}
function offline_create_bridge_token_eth_YCC() {
# ethereum create-bridge-token YCC
echo -e "${GRE}======= 在 ethereum 上创建 bridgeToken ycc ======${NOC}"
${Boss4xCLI} ethereum offline create_bridge_token -s YCC -c "${ethBridgeBank}" -d "${ethDeployAddr}"
ethereum_offline_sign_send "create_bridge_token.txt"
ethereumYccBridgeTokenAddr=$(./ebcli_A ethereum receipt -s "${hash}" | jq -r .logs[0].address)
cp BridgeToken.abi "${ethereumYccBridgeTokenAddr}.abi"
}
function offline_create_bridge_token_eth_ZBC() {
# ethereum create-bridge-token ZBC
echo -e "${GRE}======= 在 ethereum 上创建 bridgeToken ZBC ======${NOC}"
${Boss4xCLI} ethereum offline create_bridge_token -s ZBC -c "${ethBridgeBank}" -d "${ethDeployAddr}"
ethereum_offline_sign_send "create_bridge_token.txt"
ethereumZbcBridgeTokenAddr=$(./ebcli_A ethereum receipt -s "${hash}" | jq -r .logs[0].address)
cp BridgeToken.abi "${ethereumZbcBridgeTokenAddr}.abi"
}
function offline_setupChain33Multisign() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== 设置 chain33 离线钱包合约 ===========${NOC}"
# shellcheck disable=SC2154
# result=$(${CLIA} chain33 multisign setup -k "${chain33DeployKey}" -o "${chain33MultisignA},${chain33MultisignB},${chain33MultisignC},${chain33MultisignD}")
# cli_ret "${result}" "chain33 multisign setup"
${Boss4xCLI} chain33 offline multisign_setup -m "${multisignChain33Addr}" -o "${chain33MultisignA},${chain33MultisignB},${chain33MultisignC},${chain33MultisignD}" -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "multisign_setup.txt"
${Boss4xCLI} chain33 offline set_offline_addr -a "${multisignChain33Addr}" -c "${chain33BridgeBank}" -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "chain33_set_offline_addr.txt"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_setupEthMultisign() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== 设置 ETH 离线钱包合约 ===========${NOC}"
# shellcheck disable=SC2154
# result=$(${CLIA} ethereum multisign setup -k "${ethDeployKey}" -o "${ethMultisignA},${ethMultisignB},${ethMultisignC},${ethMultisignD}")
# cli_ret "${result}" "ethereum multisign setup"
${Boss4xCLI} ethereum offline multisign_setup -m "${multisignEthAddr}" -d "${ethDeployAddr}" -o "${ethMultisignA},${ethMultisignB},${ethMultisignC},${ethMultisignD}"
ethereum_offline_sign_send "multisign_setup.txt"
${Boss4xCLI} ethereum offline set_offline_addr -a "${multisignEthAddr}" -c "${ethBridgeBank}" -d "${ethDeployAddr}"
ethereum_offline_sign_send "set_offline_addr.txt"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function StartRelayerAndOfflineDeploy() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
kill_all_ebrelayer
# 修改 relayer.toml 配置文件 pushName 字段
pushNameChange "./relayer.toml"
validators_config
# 删除私钥
delete_line "./relayer.toml" "deployerPrivateKey="
delete_line "./relayer.toml" "deployerPrivateKey="
# 启动 ebrelayer
start_ebrelayerA
# 导入私钥 部署合约 设置 bridgeRegistry 地址
InitAndOfflineDeploy
# 设置离线多签数据
initMultisignChain33Addr
offline_setupChain33Multisign
offline_setupEthMultisign
transferChain33MultisignFee
# 重启
kill_ebrelayer ebrelayer
start_ebrelayerA
result=$(${CLIA} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
ethBridgeBank=$(./ebcli_A ethereum bridgeBankAddr | jq -r ".addr")
cp EthBridgeBank.abi "${ethBridgeBank}.abi"
# start ebrelayer B C D
updata_toml_start_BCD
# 设置 token 地址
# InitTokenAddr
offline_create_bridge_token_eth_BTY
offline_create_bridge_token_chain33_ETH
offline_deploy_erc20_eth_BYC
offline_create_bridge_token_chain33_BYC
offline_deploy_erc20_chain33_YCC
offline_create_bridge_token_eth_YCC
offline_deploy_erc20_chain33_ZBC
offline_create_bridge_token_eth_ZBC
# 重启
restart_ebrelayerA
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function restart_ebrelayerA() {
# 重启
kill_ebrelayer "./ebrelayer ./relayer.toml"
start_ebrelayerA
result=$(${CLIA} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
sleep ${maturityDegree}
}
function offline_set_offline_token_Eth() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo '2:#配置自动转离线钱包(eth, 20, 50%)'
${Boss4xCLI} ethereum offline set_offline_token -s ETH -m 20 -c "${ethBridgeBank}" -d "${ethDeployAddr}"
ethereum_offline_sign_send "set_offline_token.txt"
# result=$(${CLIA} ethereum multisign set_offline_token -s ETH -m 20)
# cli_ret "${result}" "set_offline_token -s ETH -m 20"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_set_offline_token_EthYcc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
${Boss4xCLI} ethereum offline set_offline_token -s BYC -m 100 -p 40 -t "${ethereumBycERC20TokenAddr}" -c "${ethBridgeBank}" -d "${ethDeployAddr}"
ethereum_offline_sign_send "set_offline_token.txt"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_transfer_multisign_Eth_test() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# transfer
# shellcheck disable=SC2154
# ${CLIA} ethereum multisign transfer -a 3 -r "${ethBridgeBank}" -o "${ethValidatorAddrKeyB}" -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
${Boss4xCLI} ethereum offline multisign_transfer_prepare -a 3 -r "${ethBridgeBank}" -c "${multisignEthAddr}" -d "${ethValidatorAddrB}"
# shellcheck disable=SC2154
${Boss4xCLI} ethereum offline sign_multisign_tx -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
${Boss4xCLI} ethereum offline create_multisign_tx
# shellcheck disable=SC2154
ethereum_offline_sign_send create_multisign_tx.txt "${ethValidatorAddrKeyB}"
sleep 10
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "16"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
cli_ret "${result}" "balance" ".balance" "20"
# transfer
# shellcheck disable=SC2154
# ${CLIA} ethereum multisign transfer -a 5 -r "${ethMultisignA}" -o "${ethValidatorAddrKeyB}" -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
${Boss4xCLI} ethereum offline multisign_transfer_prepare -a 5 -r "${ethMultisignA}" -c "${multisignEthAddr}" -d "${ethValidatorAddrB}"
${Boss4xCLI} ethereum offline sign_multisign_tx -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
${Boss4xCLI} ethereum offline create_multisign_tx
ethereum_offline_sign_send create_multisign_tx.txt "${ethValidatorAddrKeyB}"
sleep 10
result=$(${CLIA} ethereum balance -o "${ethMultisignA}")
cli_ret "${result}" "balance" ".balance" "105"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
cli_ret "${result}" "balance" ".balance" "15"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_transfer_multisign_EthYcc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# transfer
# multisignEthAddr 要有手续费
${CLIA} ethereum transfer -k "${ethDeployKey}" -m 10 -r "${multisignEthAddr}"
sleep 10
# transfer
# ${CLIA} ethereum multisign transfer -a 8 -r "${ethBridgeBank}" -o "${ethValidatorAddrKeyB}" -t "${ethereumBycERC20TokenAddr}" -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
${Boss4xCLI} ethereum offline multisign_transfer_prepare -a 8 -r "${ethBridgeBank}" -c "${multisignEthAddr}" -d "${ethValidatorAddrB}" -t "${ethereumBycERC20TokenAddr}"
${Boss4xCLI} ethereum offline sign_multisign_tx -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
${Boss4xCLI} ethereum offline create_multisign_tx
ethereum_offline_sign_send create_multisign_tx.txt "${ethValidatorAddrKeyB}"
sleep 10
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "80"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "80"
# transfer
# ${CLIA} ethereum multisign transfer -a 10 -r "${ethMultisignA}" -o "${ethValidatorAddrKeyB}" -t "${ethereumBycERC20TokenAddr}" -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
${Boss4xCLI} ethereum offline multisign_transfer_prepare -a 10 -r "${ethMultisignA}" -c "${multisignEthAddr}" -d "${ethValidatorAddrB}" -t "${ethereumBycERC20TokenAddr}"
${Boss4xCLI} ethereum offline sign_multisign_tx -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
${Boss4xCLI} ethereum offline create_multisign_tx
ethereum_offline_sign_send create_multisign_tx.txt "${ethValidatorAddrKeyB}"
sleep 10
result=$(${CLIA} ethereum balance -o "${ethMultisignA}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "10"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "70"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_set_offline_token_Bty() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}===== chain33 端 configLockedTokenOfflineSave BTY ======${NOC}"
# echo '2:#配置自动转离线钱包(bty, 1000, 50%)'
# hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "configLockedTokenOfflineSave(${chain33BtyERC20TokenAddr},BTY,100000000000,50)" --chainID "${chain33ID}")
# check_tx "${Chain33Cli}" "${hash}"
${Boss4xCLI} chain33 offline set_offline_token -c "${chain33BridgeBank}" -s BTY -m 100000000000 -p 50 -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "chain33_set_offline_token.txt"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_transfer_multisign_Bty_test() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# transfer test
# shellcheck disable=SC2154
# hash=$(${CLIA} chain33 multisign transfer -a 100 -r "${chain33BridgeBank}" -k "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" | jq -r ".msg")
${Boss4xCLI} chain33 offline create_multisign_transfer -a 100 -r "${chain33BridgeBank}" -m "${multisignChain33Addr}"
# shellcheck disable=SC2154
${Boss4xCLI} chain33 offline multisign_transfer -k "${chain33DeployKey}" -s "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" --chainID "${chain33ID}"
chain33_offline_send "multisign_transfer.txt"
sleep 10
result=$(${Chain33Cli} account balance -a "${multisignChain33Addr}" -e evm)
balance_ret "${result}" "997.5000"
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "632.5000"
# shellcheck disable=SC2154
# hash=$(${CLIA} chain33 multisign transfer -a 100 -r "${chain33MultisignA}" -k "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" | jq -r ".msg")
${Boss4xCLI} chain33 offline create_multisign_transfer -a 100 -r "${chain33MultisignA}" -m "${multisignChain33Addr}"
# shellcheck disable=SC2154
${Boss4xCLI} chain33 offline multisign_transfer -k "${chain33DeployKey}" -s "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" --chainID "${chain33ID}"
chain33_offline_send "multisign_transfer.txt"
sleep 10
result=$(${Chain33Cli} account balance -a "${multisignChain33Addr}" -e evm)
balance_ret "${result}" "897.5000"
result=$(${Chain33Cli} account balance -a "${chain33MultisignA}" -e evm)
balance_ret "${result}" "100.0000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_set_offline_token_Chain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}===== chain33 端 configLockedTokenOfflineSave ERC20 YCC ======${NOC}"
# echo '2:#配置自动转离线钱包(YCC, 100, 60%)'
# hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "configLockedTokenOfflineSave(${chain33YccERC20TokenAddr},YCC,10000000000,60)" --chainID "${chain33ID}")
# check_tx "${Chain33Cli}" "${hash}"
${Boss4xCLI} chain33 offline set_offline_token -c "${chain33BridgeBank}" -t "${chain33YccERC20TokenAddr}" -s YCC -m 10000000000 -p 60 -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "chain33_set_offline_token.txt"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_transfer_multisign_Chain33Ycc_test() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# transfer test
# hash=$(${CLIA} chain33 multisign transfer -a 10 -r "${chain33BridgeBank}" -t "${chain33YccERC20TokenAddr}" -k "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" | jq -r ".msg")
${Boss4xCLI} chain33 offline create_multisign_transfer -a 10 -r "${chain33BridgeBank}" -m "${multisignChain33Addr}" -t "${chain33YccERC20TokenAddr}"
# shellcheck disable=SC2154
${Boss4xCLI} chain33 offline multisign_transfer -k "${chain33DeployKey}" -s "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" --chainID "${chain33ID}"
chain33_offline_send "multisign_transfer.txt"
sleep 10
result=$(${Chain33Cli} evm query -a "${chain33YccERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "6200000000"
result=$(${Chain33Cli} evm query -a "${chain33YccERC20TokenAddr}" -c "${multisignChain33Addr}" -b "balanceOf(${multisignChain33Addr})")
is_equal "${result}" "30800000000"
# hash=$(${CLIA} chain33 multisign transfer -a 5 -r "${chain33MultisignA}" -t "${chain33YccERC20TokenAddr}" -k "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" | jq -r ".msg")
${Boss4xCLI} chain33 offline create_multisign_transfer -a 5 -r "${chain33MultisignA}" -m "${multisignChain33Addr}" -t "${chain33YccERC20TokenAddr}"
# shellcheck disable=SC2154
${Boss4xCLI} chain33 offline multisign_transfer -k "${chain33DeployKey}" -s "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" --chainID "${chain33ID}"
chain33_offline_send "multisign_transfer.txt"
sleep 10
result=$(${Chain33Cli} evm query -a "${chain33YccERC20TokenAddr}" -c "${chain33MultisignA}" -b "balanceOf(${chain33MultisignA})")
is_equal "${result}" "500000000"
result=$(${Chain33Cli} evm query -a "${chain33YccERC20TokenAddr}" -c "${multisignChain33Addr}" -b "balanceOf(${multisignChain33Addr})")
is_equal "${result}" "30300000000"
# 判断 ETH 这端是否金额一致
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumYccBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "370"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockAndtransfer_multisign_chain33Bty() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
offline_set_offline_token_Bty
lock_multisign_Bty_test
offline_transfer_multisign_Bty_test
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockAndtransfer_multisign_chain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
offline_set_offline_token_Chain33Ycc
lock_multisign_Chain33Ycc_test
offline_transfer_multisign_Chain33Ycc_test
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockAndtransfer_multisign_ethereumEth() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}===== ethereum 端 lock multisign ETH ======${NOC}"
offline_set_offline_token_Eth
# 重启 nonce 会不统一 要重启一下
restart_ebrelayerA
lock_multisign_Eth_test
offline_transfer_multisign_Eth_test
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockAndtransfer_multisign_ethereumBty() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}===== ethereum 端 lock multisign YCC ======${NOC}"
offline_set_offline_token_EthYcc
# 重启
restart_ebrelayerA
lock_multisign_EthYcc
offline_transfer_multisign_EthYcc
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# shellcheck disable=SC2120
function mainTest() {
if [[ $# -ge 1 && ${1} != "" ]]; then
chain33ID="${1}"
fi
StartChain33
start_trufflesuite
StartRelayerAndOfflineDeploy
TestChain33ToEthAssets
TestChain33ToEthZBCAssets
TestETH2Chain33Assets
TestETH2Chain33Ycc
lockAndtransfer_multisign_chain33Bty
lockAndtransfer_multisign_chain33Ycc
lockAndtransfer_multisign_ethereumEth
lockAndtransfer_multisign_ethereumBty
}
mainTest "${1}"
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
source "./publicTest.sh"
source "./relayerPublic.sh"
# ETH 部署合约者的私钥 用于部署合约时签名使用
#ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
ethSendAddress=0x495953A743ef169EC5D4aC7b5F786BF2Bd56aFd5
ethSendPrivateKeys=0x2809477ede1261da21270096776ba7dc68b89c9df5f029965eaa5fe7f0b80697
# validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
#ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
#chain33DeployKey="0xcc38546e9e659d15e6b4893f0ab32a06d103931a8230b0bde71459d2b27d6944"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
#maturityDegree=10
Chain33Cli="../../chain33-cli"
chain33BridgeBank=""
#ethBridgeBank=""
chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
chain33EthBridgeTokenAddr=""
ethereumBtyBridgeTokenAddr=""
chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
CLIA="./ebcli_A"
chain33ID=0
# chain33 lock BTY, eth burn BTY
function LockTestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# chain33 lock bty
hash=$(${Chain33Cli} send evm call -f 1 -a 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethSendAddress}, ${chain33BtyERC20TokenAddr}, 100000000)" --khainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# chain33 lock BTY, eth burn BTY
function BurnTestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# eth burn
result=$(${CLIA} ethereum burn -m 1 -k "${ethSendPrivateKeys}" -r "${chain33DeployAddr}" -t "${ethereumBtyBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn
function LockTestETH2Chain33Assets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# ETH 这端 lock 11个
result=$(${CLIA} ethereum lock -m 2 -k "${ethSendPrivateKeys}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn
function BurnTestETH2Chain33Assets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
result=$(${CLIA} chain33 burn -m 2 -k "${chain33ReceiverAddrKey}" -r "${ethSendAddress}" -t "${chain33EthBridgeTokenAddr}")
cli_ret "${result}" "burn"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function LockTestETH2Chain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# ETH 这端 lock 3个 BYC
result=$(${CLIA} ethereum lock -m 3 -k "${ethSendPrivateKeys}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "lock"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function BurnTestETH2Chain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo '#5.burn YCC from Chain33 YCC(Chain33)-----> Ethereum'
result=$(${CLIA} chain33 burn -m 3 -k "${chain33ReceiverAddrKey}" -r "${ethSendAddress}" -t "${chain33BycBridgeTokenAddr}")
cli_ret "${result}" "burn"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function mainTest() {
StartChain33
start_trufflesuite
AllRelayerStart
${CLIA} ethereum token token_transfer -k "${ethDeployKey}" -m 10000 -r "${ethSendAddress}" -t "${ethereumBycERC20TokenAddr}"
for ((i = 0; i < 10; i++)); do
LockTestChain33ToEthAssets
LockTestETH2Chain33Assets
LockTestETH2Chain33Ycc
sleep 1
done
while true; do
LockTestChain33ToEthAssets
LockTestETH2Chain33Assets
LockTestETH2Chain33Ycc
eth_block_wait 2
BurnTestChain33ToEthAssets
BurnTestETH2Chain33Assets
BurnTestETH2Chain33Ycc
eth_block_wait 10
done
}
mainTest
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
source "./publicTest.sh"
source "./relayerPublic.sh"
# ETH 部署合约者的私钥 用于部署合约时签名使用
ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
#chain33DeployKey="0xcc38546e9e659d15e6b4893f0ab32a06d103931a8230b0bde71459d2b27d6944"
#maturityDegree=10
Chain33Cli="../../chain33-cli"
chain33BridgeBank=""
ethBridgeBank=""
chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
#chain33EthBridgeTokenAddr=""
#ethereumBtyBridgeTokenAddr=""
#chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
multisignChain33Addr=""
multisignEthAddr=""
ethereumYccBridgeTokenAddr=""
chain33YccERC20TokenAddr=""
CLIA="./ebcli_A"
chain33ID=0
chain33BridgeBank=16A3uxgPqCv5pVkKqtdVnv2As6DbfRVZRH
multisignChain33Addr=1b193HbfvVUunUL2DVXrqt9jnbAWwLjcT
function lockBty() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo '2:#配置自动转离线钱包(bty, 100, 50%)'
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e ${chain33BridgeBank} -p "configLockedTokenOfflineSave(${chain33BtyERC20TokenAddr},BTY,10000000000,50)" --khainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
# balance_ret "${result}" "0"
result=$(${Chain33Cli} account balance -a "${multisignChain33Addr}" -e evm)
# balance_ret "${result}" "0"
for ((i = 0; i < 1000; i++)); do
echo "${i}"
lock_bty_multisign 1
sleep 1
done
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
# balance_ret "${result}" "50"
result=$(${Chain33Cli} account balance -a "${multisignChain33Addr}" -e evm)
# balance_ret "${result}" "950"
# # transfer test
# hash=$(${CLIA} chain33 multisign transfer -a 100 -r "${chain33BridgeBank}" -k "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" | jq -r ".msg")
# check_tx "${Chain33Cli}" "${hash}"
# sleep 2
# result=$(${Chain33Cli} account balance -a "${multisignChain33Addr}" -e evm)
# balance_ret "${result}" "997.5000"
# result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
# balance_ret "${result}" "632.5000"
#
# hash=$(${CLIA} chain33 multisign transfer -a 100 -r "${chain33MultisignA}" -k "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" | jq -r ".msg")
# check_tx "${Chain33Cli}" "${hash}"
# sleep 2
# result=$(${Chain33Cli} account balance -a "${multisignChain33Addr}" -e evm)
# balance_ret "${result}" "897.5000"
# result=$(${Chain33Cli} account balance -a "${chain33MultisignA}" -e evm)
# balance_ret "${result}" "100.0000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockChain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo '2:#配置自动转离线钱包(YCC, 100, 60%)'
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e ${chain33BridgeBank} -p "configLockedTokenOfflineSave(${chain33YccERC20TokenAddr},YCC,10000000000,60)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
lock_chain33_ycc_multisign 30 30 0
lock_chain33_ycc_multisign 70 40 60
lock_chain33_ycc_multisign 260 120 240
lock_chain33_ycc_multisign 10 52 318
# transfer test
# shellcheck disable=SC2154
hash=$(${CLIA} chain33 multisign transfer -a 10 -r "${chain33BridgeBank}" -t "${chain33YccERC20TokenAddr}" -k "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" | jq -r ".msg")
check_tx "${Chain33Cli}" "${hash}"
sleep 2
result=$(${Chain33Cli} evm query -a "${chain33YccERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "6200000000"
result=$(${Chain33Cli} evm query -a "${chain33YccERC20TokenAddr}" -c "${multisignChain33Addr}" -b "balanceOf(${multisignChain33Addr})")
is_equal "${result}" "30800000000"
# shellcheck disable=SC2154
hash=$(${CLIA} chain33 multisign transfer -a 5 -r "${chain33MultisignA}" -t "${chain33YccERC20TokenAddr}" -k "${chain33MultisignKeyA},${chain33MultisignKeyB},${chain33MultisignKeyC},${chain33MultisignKeyD}" | jq -r ".msg")
check_tx "${Chain33Cli}" "${hash}"
sleep 2
result=$(${Chain33Cli} evm query -a "${chain33YccERC20TokenAddr}" -c "${chain33MultisignA}" -b "balanceOf(${chain33MultisignA})")
is_equal "${result}" "500000000"
result=$(${Chain33Cli} evm query -a "${chain33YccERC20TokenAddr}" -c "${multisignChain33Addr}" -b "balanceOf(${multisignChain33Addr})")
is_equal "${result}" "30300000000"
# 判断 ETH 这端是否金额一致
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumYccBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "370"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockEth() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo '2:#配置自动转离线钱包(eth, 20, 50%)'
result=$(${CLIA} ethereum multisign set_offline_token -s ETH -m 20)
cli_ret "${result}" "set_offline_token -s ETH -m 20"
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "0"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
cli_ret "${result}" "balance" ".balance" "0"
lock_eth_multisign 19 19 0
lock_eth_multisign 1 10 10
lock_eth_multisign 16 13 23
# transfer
# shellcheck disable=SC2154
${CLIA} ethereum multisign transfer -a 3 -r "${ethBridgeBank}" -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
sleep 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "16"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
cli_ret "${result}" "balance" ".balance" "20"
# transfer
# shellcheck disable=SC2154
${CLIA} ethereum multisign transfer -a 5 -r "${ethMultisignA}" -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
sleep 2
result=$(${CLIA} ethereum balance -o "${ethMultisignA}")
cli_ret "${result}" "balance" ".balance" "105"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}")
cli_ret "${result}" "balance" ".balance" "15"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function lockEthYcc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo '2:#配置自动转离线钱包(ycc, 100, 40%)'
result=$(${CLIA} ethereum multisign set_offline_token -s BYC -m 100 -p 40 -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "set_offline_token -s YCC -m 100"
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
lock_ethereum_ycc_multisign 70 70 0
lock_ethereum_ycc_multisign 30 60 40
lock_ethereum_ycc_multisign 60 72 88
# transfer
# multisignEthAddr 要有手续费
./ebcli_A ethereum transfer -k "${ethDeployKey}" -m 10 -r "${multisignEthAddr}"
# transfer
${CLIA} ethereum multisign transfer -a 8 -r "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}" -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
sleep 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "80"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "80"
# transfer
${CLIA} ethereum multisign transfer -a 10 -r "${ethMultisignA}" -t "${ethereumBycERC20TokenAddr}" -k "${ethMultisignKeyA},${ethMultisignKeyB},${ethMultisignKeyC},${ethMultisignKeyD}"
sleep 2
result=$(${CLIA} ethereum balance -o "${ethMultisignA}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "10"
result=$(${CLIA} ethereum balance -o "${multisignEthAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "70"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# shellcheck disable=SC2120
function mainTest() {
if [[ $# -ge 1 && ${1} != "" ]]; then
chain33ID="${1}"
fi
StartChain33
start_trufflesuite
AllRelayerStart
deployMultisign
lockBty
# lockChain33Ycc
# lockEth
# lockEthYcc
}
mainTest "${1}"
#lockBty
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
source "./publicTest.sh"
source "./relayerPublic.sh"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
#chain33DeployKey="0xcc38546e9e659d15e6b4893f0ab32a06d103931a8230b0bde71459d2b27d6944"
# ETH 部署合约者的私钥 用于部署合约时签名使用
ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
#ethValidatorAddrA="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
ethValidatorAddrB="0x0df9a824699bc5878232c9e612fe1a5346a5a368"
#ethValidatorAddrKeyB="a5f3063552f4483cfc20ac4f40f45b798791379862219de9e915c64722c1d400"
maturityDegree=10
Chain33Cli="../../chain33-cli"
CLIA="./ebcli_A"
chain33ID=0
#BridgeRegistryOnChain33=""
chain33BridgeBank=""
#BridgeRegistryOnEth=""
ethBridgeBank=""
chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
chain33EthBridgeTokenAddr=""
ethereumBtyBridgeTokenAddr=""
chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
# chain33 lock BTY, eth burn BTY
function TestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 原来的地址金额
result=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm)
# balance=$(cli_ret "${result}" "balance" ".balance")
# chain33 lock bty
hash=$(${Chain33Cli} send evm call -f 1 -a 5 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33BtyERC20TokenAddr}, 500000000)" --khainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# 原来的地址金额 减少了 5
result=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm)
# cli_ret "${result}" "balance" ".balance" "$(echo "${balance}-5" | bc)"
#balance_ret "${result}" "195.0000"
# chain33BridgeBank 是否增加了 5
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "5.0000"
eth_block_wait 2
# eth 这端 金额是否增加了 5
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} ethereum burn -m 3 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBtyBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
eth_block_wait 2
# eth 这端 金额是否减少了 3
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
sleep ${maturityDegree}
# 接收的地址金额 变成了 3
result=$(${Chain33Cli} account balance -a "${chain33ReceiverAddr}" -e evm)
balance_ret "${result}" "3.0000"
# chain33BridgeBank 是否减少了 3
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "2.0000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn
function TestETH2Chain33Assets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 11个
result=$(${CLIA} ethereum lock -m 11 -k "${ethValidatorAddrKeyA}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
# 查询 ETH 这端 bridgeBank 地址 11
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "11"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11 * le8
is_equal "${result}" "1100000000"
# 原来的数额
result=$(${CLIA} ethereum balance -o "${ethValidatorAddrB}")
cli_ret "${result}" "balance" ".balance" "100"
echo '#5.burn ETH from Chain33 ETH(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethValidatorAddrB}" -t "${chain33EthBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11-5 * le8
is_equal "${result}" "600000000"
# 查询 ETH 这端 bridgeBank 地址 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "6"
# 比之前多 5
result=$(${CLIA} ethereum balance -o "${ethValidatorAddrB}")
cli_ret "${result}" "balance" ".balance" "105"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function TestETH2Chain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 7个 YCC
result=$(${CLIA} ethereum lock -m 7 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
# 查询 ETH 这端 bridgeBank 地址 7 YCC
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "7"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7 * le8
is_equal "${result}" "700000000"
# 原来的数额 0
result=$(${CLIA} ethereum balance -o "${ethValidatorAddrB}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
echo '#5.burn YCC from Chain33 YCC(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethValidatorAddrB}" -t "${chain33BycBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7-5 * le8
is_equal "${result}" "200000000"
# 查询 ETH 这端 bridgeBank 地址 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
# 更新后的金额 5
result=$(${CLIA} ethereum balance -o "${ethValidatorAddrB}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# shellcheck disable=SC2120
function mainTest() {
if [[ $# -ge 1 && ${1} != "" ]]; then
chain33ID="${1}"
fi
StartChain33
start_trufflesuite
StartOneRelayer
TestChain33ToEthAssets
TestETH2Chain33Assets
TestETH2Chain33Ycc
}
mainTest "${1}"
Title="local"
TestNet=true
CoinSymbol="bty"
TxHeight=true
ChainID=33
# crypto模块配置
[crypto]
enableTypes=[] #设置启用的加密插件名称,不配置启用所有
[crypto.enableHeight] #配置已启用插件的启用高度,不配置采用默认高度0, 负数表示不启用
secp256k1=0
[crypto.sub.secp256k1] #支持插件子配置
[log]
# 日志级别,支持debug(dbug)/info/warn/error(eror)/crit
loglevel = "debug"
logConsoleLevel = "info"
# 日志文件名,可带目录,所有生成的日志文件都放到此目录下
logFile = "logs/chain33.log"
# 单个日志文件的最大值(单位:兆)
maxFileSize = 20
# 最多保存的历史日志文件个数
maxBackups = 20
# 最多保存的历史日志消息(单位:天)
maxAge = 28
# 日志文件名是否使用本地事件(否则使用UTC时间)
localTime = true
# 历史日志文件是否压缩(压缩格式为gz)
compress = false
# 是否打印调用源文件和行号
callerFile = true
# 是否打印调用方法
callerFunction = true
[blockchain]
defCacheSize=128
maxFetchBlockNum=128
timeoutSeconds=5
batchBlockNum=128
driver="leveldb"
dbPath="datadir"
dbCache=64
isStrongConsistency=true
singleMode=true
batchsync=false
isRecordBlockSequence=true
isParaChain=false
enableTxQuickIndex=true
# 使能精简localdb
enableReduceLocaldb=false
# 关闭分片存储,默认false为开启分片存储;平行链不需要分片需要修改此默认参数为true
disableShard=false
# 分片存储中每个大块包含的区块数
chunkblockNum=1000
# 使能从P2pStore中获取数据
enableFetchP2pstore=false
# 使能假设已删除已归档数据后,获取数据情况
enableIfDelLocalChunk=false
# 开启推送功能
enablePushSubscribe=true
[p2p]
types=[ "dht"]
enable=true
driver="leveldb"
dbPath="datadir/addrbook"
dbCache=4
grpcLogFile="grpc33.log"
[p2p.sub.dht]
port=13803
[rpc]
jrpcBindAddr="localhost:8801"
grpcBindAddr="localhost:8802"
whitelist=["127.0.0.1"]
jrpcFuncWhitelist=["*"]
grpcFuncWhitelist=["*"]
enableTLS=false
certFile="cert.pem"
keyFile="key.pem"
[mempool]
name="timeline"
poolCacheSize=10240
# 最小得交易手续费率,这个没有默认值,必填,一般是0.001 coins
minTxFeeRate=100000
# 最大的交易手续费率, 0.1 coins
maxTxFeeRate=10000000
# 单笔交易最大的手续费, 10 coins
maxTxFee=1000000000
maxTxNumPerAccount=100
isLevelFee=false
[mempool.sub.timeline]
poolCacheSize=10240
[mempool.sub.score]
poolCacheSize=10240
timeParam=1 #时间占价格比例
priceConstant=1544 #手续费相对于时间的一个合适的常量,取当前unxi时间戳前四位数,排序时手续费高1e-5~=快1s
pricePower=1 #常量比例
[mempool.sub.price]
poolCacheSize=10240
[consensus]
name="solo"
minerstart=true
genesisBlockTime=1514533394
genesis="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
minerExecs=["ticket", "autonomy"]
[mver.consensus]
fundKeyAddr = "1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5"
powLimitBits = "0x1f00ffff"
maxTxNumber = 1600 #160
[mver.consensus.ForkChainParamV1]
maxTxNumber = 10000
[mver.consensus.ForkChainParamV2]
powLimitBits = "0x1f2fffff"
[mver.consensus.ForkTicketFundAddrV1]
fundKeyAddr = "1Ji3W12KGScCM7C2p8bg635sNkayDM8MGY"
[mver.consensus.ticket]
coinReward = 18
coinDevFund = 12
ticketPrice = 10000
retargetAdjustmentFactor = 4
futureBlockTime = 16
ticketFrozenTime = 5 #5s only for test
ticketWithdrawTime = 10 #10s only for test
ticketMinerWaitTime = 2 #2s only for test
targetTimespan = 2304
targetTimePerBlock = 16
[mver.consensus.ticket.ForkChainParamV1]
targetTimespan = 288 #only for test
targetTimePerBlock = 2
[consensus.sub.solo]
genesis="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
genesisBlockTime=1514533394
hotkeyAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
waitTxMs=10
[consensus.sub.ticket]
genesisBlockTime=1514533394
[[consensus.sub.ticket.genesis]]
minerAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
returnAddr="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
count=10000
[[consensus.sub.ticket.genesis]]
minerAddr="1PUiGcbsccfxW3zuvHXZBJfznziph5miAo"
returnAddr="1EbDHAXpoiewjPLX9uqoz38HsKqMXayZrF"
count=10000
[[consensus.sub.ticket.genesis]]
minerAddr="1EDnnePAZN48aC2hiTDzhkczfF39g1pZZX"
returnAddr="1KcCVZLSQYRUwE5EXTsAoQs9LuJW6xwfQa"
count=10000
[store]
name="mavl"
driver="leveldb"
dbPath="datadir/mavltree"
dbCache=128
[store.sub.mavl]
enableMavlPrefix=false
enableMVCC=false
enableMavlPrune=false
pruneHeight=10000
# 是否使能mavl数据载入内存
enableMemTree=false
# 是否使能mavl叶子节点数据载入内存
enableMemVal=false
# 缓存close ticket数目,该缓存越大同步速度越快,最大设置到1500000
tkCloseCacheLen=100000
[wallet]
minFee=1000000
driver="leveldb"
dbPath="datadir/wallet"
dbCache=16
signType="secp256k1"
coinType="bty"
[wallet.sub.ticket]
minerwhitelist=["*"]
[exec]
enableStat=false
enableMVCC=false
[exec.sub.token]
saveTokenTxList=true
tokenApprs = [
"1Bsg9j6gW83sShoee1fZAt9TkUjcrCgA9S",
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK",
"1LY8GFia5EiyoTodMLfkB5PHNNpXRqxhyB",
"1GCzJDS6HbgTQ2emade7mEJGGWFfA15pS9",
"1JYB8sxi4He5pZWHCd3Zi2nypQ4JMB6AxN",
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv",
]
[exec.sub.relay]
genesis="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
[exec.sub.cert]
# 是否启用证书验证和签名
enable=false
# 加密文件路径
cryptoPath="authdir/crypto"
# 带证书签名类型,支持"auth_ecdsa", "auth_sm2"
signType="auth_ecdsa"
[exec.sub.manage]
superManager=[
"1Bsg9j6gW83sShoee1fZAt9TkUjcrCgA9S",
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv",
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK"
]
[exec.sub.autonomy]
total="16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp"
useBalance=false
[health]
listenAddr="localhost:8805"
checkInterval=1
unSyncMaxTimes=2
[metrics]
#是否使能发送metrics数据的发送
enableMetrics=false
#数据保存模式
dataEmitMode="influxdb"
[metrics.sub.influxdb]
#以纳秒为单位的发送间隔
duration=1000000000
url="http://influxdb:8086"
database="chain33metrics"
username=""
password=""
namespace=""
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
source "./publicTest.sh"
source "./relayerPublic.sh"
# ETH 部署合约者的私钥 用于部署合约时签名使用
ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
ethReceiverAddr1="0xa4ea64a583f6e51c3799335b28a8f0529570a635"
#ethReceiverAddrKey1="355b876d7cbcb930d5dfab767f66336ce327e082cbaa1877210c1bae89b1df71"
maturityDegree=10
Chain33Cli="../../chain33-cli"
chain33BridgeBank=""
ethBridgeBank=""
chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
chain33EthBridgeTokenAddr=""
ethereumBtyBridgeTokenAddr=""
chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
chain33ZbcERC20TokenAddr=""
ethereumZbcBridgeTokenAddr=""
chain33ID=0
CLIA="./ebcli_A"
# chain33 lock BTY, eth burn BTY
function TestChain33ToEthAssetsKill() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
kill_ebrelayerD
# chain33 lock bty
hash=$(${Chain33Cli} send evm call -f 1 -a 5 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33BtyERC20TokenAddr}, 500000000)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# chain33BridgeBank 是否增加了 5
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "5.0000"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
start_ebrelayerC
# eth 这端 金额是否增加了 5
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
kill_ebrelayerC
# eth burn
result=$(${CLIA} ethereum burn -m 3 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBtyBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
eth_block_wait 2
# eth 这端 金额是否减少了 3
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
result=$(${Chain33Cli} account balance -a "${chain33ReceiverAddr}" -e evm)
balance_ret "${result}" "0.0000"
start_ebrelayerC
start_ebrelayerD
# 接收的地址金额 变成了 3
result=$(${Chain33Cli} account balance -a "${chain33ReceiverAddr}" -e evm)
balance_ret "${result}" "3.0000"
# chain33BridgeBank 是否减少了 3
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "2.0000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# chain33 lock ZBC, eth burn ZBC
function TestChain33ToEthZBCAssetsKill() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== chain33 lock ZBC, eth burn ZBC ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 原来的地址金额
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "0"
kill_ebrelayerC
kill_ebrelayerD
# chain33 lock ZBC
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33ZbcERC20TokenAddr}, 900000000)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# chain33BridgeBank 是否增加了 9
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "900000000"
eth_block_wait 2
# eth 这端
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
start_ebrelayerC
# eth 这端 金额是否增加了 9
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "9"
kill_ebrelayerC
# eth burn
result=$(${CLIA} ethereum burn -m 8 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumZbcBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
eth_block_wait 2
# eth 这端 金额是否减少了 1
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "1"
sleep ${maturityDegree}
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33ReceiverAddr}" -b "balanceOf(${chain33ReceiverAddr})")
is_equal "${result}" "0"
start_ebrelayerC
start_ebrelayerD
# 接收的地址金额 变成了 8
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33ReceiverAddr}" -b "balanceOf(${chain33ReceiverAddr})")
is_equal "${result}" "800000000"
# chain33BridgeBank 是否减少了 1
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "100000000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn
function TestETH2Chain33AssetsKill() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
kill_ebrelayerD
# ETH 这端 lock 11个
result=$(${CLIA} ethereum lock -m 11 -k "${ethValidatorAddrKeyA}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
# 查询 ETH 这端 bridgeBank 地址 11
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "11"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额 原来是0
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11 * le8
is_equal "${result}" "0"
start_ebrelayerC
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11 * le8
is_equal "${result}" "1100000000"
# 原来的数额
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "100"
kill_ebrelayerC
echo '#5.burn ETH from Chain33 ETH(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33EthBridgeTokenAddr}"
sleep ${maturityDegree}
# 原来的数额
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "100"
start_ebrelayerC
start_ebrelayerD
# 比之前多 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "105"
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11-5 * le8
is_equal "${result}" "600000000"
# 查询 ETH 这端 bridgeBank 地址 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "6"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function TestETH2Chain33YccKill() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
kill_ebrelayerD
# ETH 这端 lock 7个 YCC
result=$(${CLIA} ethereum lock -m 7 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
sleep ${maturityDegree}
# 查询 ETH 这端 bridgeBank 地址 7 YCC
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "7"
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额 地址原来是 0
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7 * le8
is_equal "${result}" "0"
start_ebrelayerC
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7 * le8
is_equal "${result}" "700000000"
# 原来的数额 0
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
echo '#5.burn YCC from Chain33 YCC(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33BycBridgeTokenAddr}"
sleep ${maturityDegree}
# 原来的数额 0
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
start_ebrelayerC
start_ebrelayerD
# 更新后的金额 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7-5 * le8
is_equal "${result}" "200000000"
# 查询 ETH 这端 bridgeBank 地址 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# shellcheck disable=SC2120
function mainTest() {
if [[ $# -ge 1 && ${1} != "" ]]; then
chain33ID="${1}"
fi
StartChain33
start_trufflesuite
AllRelayerStart
TestChain33ToEthAssetsKill
TestChain33ToEthZBCAssetsKill
TestETH2Chain33AssetsKill
TestETH2Chain33YccKill
}
mainTest "${1}"
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
source "./publicTest.sh"
source "./relayerPublic.sh"
# ETH 部署合约者的私钥 用于部署合约时签名使用
ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
ethReceiverAddr1="0xa4ea64a583f6e51c3799335b28a8f0529570a635"
#ethReceiverAddrKey1="355b876d7cbcb930d5dfab767f66336ce327e082cbaa1877210c1bae89b1df71"
maturityDegree=10
Chain33Cli="../../chain33-cli"
chain33BridgeBank=""
ethBridgeBank=""
chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
chain33EthBridgeTokenAddr=""
ethereumBtyBridgeTokenAddr=""
chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
chain33ZbcERC20TokenAddr=""
ethereumZbcBridgeTokenAddr=""
CLIA="./ebcli_A"
chain33ID=0
# chain33 lock BTY, eth burn BTY
function TestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== chain33 lock BTY, eth burn BTY ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 原来的地址金额
result=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm)
# balance=$(cli_ret "${result}" "balance" ".balance")
# chain33 lock bty
hash=$(${Chain33Cli} send evm call -f 1 -a 5 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33BtyERC20TokenAddr}, 500000000)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# 原来的地址金额 减少了 5
result=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm)
# cli_ret "${result}" "balance" ".balance" "$(echo "${balance}-5" | bc)"
#balance_ret "${result}" "195.0000"
# chain33BridgeBank 是否增加了 5
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "5.0000"
eth_block_wait 2
# eth 这端 金额是否增加了 5
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} ethereum burn -m 3 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBtyBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
eth_block_wait 2
# eth 这端 金额是否减少了 3
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
sleep ${maturityDegree}
# 接收的地址金额 变成了 3
result=$(${Chain33Cli} account balance -a "${chain33ReceiverAddr}" -e evm)
balance_ret "${result}" "3.0000"
# chain33BridgeBank 是否减少了 3
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "2.0000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# chain33 lock ZBC, eth burn ZBC
function TestChain33ToEthZBCAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== chain33 lock ZBC, eth burn ZBC ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 原来的地址金额
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "0"
# chain33 lock ZBC
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33ZbcERC20TokenAddr}, 900000000)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
# chain33BridgeBank 是否增加了 9
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "900000000"
eth_block_wait 2
# eth 这端 金额是否增加了 9
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "9"
# eth burn
result=$(${CLIA} ethereum burn -m 8 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumZbcBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
eth_block_wait 2
# eth 这端 金额是否减少了 1
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumZbcBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "1"
sleep ${maturityDegree}
# 接收的地址金额 变成了 8
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33ReceiverAddr}" -b "balanceOf(${chain33ReceiverAddr})")
is_equal "${result}" "800000000"
# chain33BridgeBank 是否减少了 1
result=$(${Chain33Cli} evm query -a "${chain33ZbcERC20TokenAddr}" -c "${chain33BridgeBank}" -b "balanceOf(${chain33BridgeBank})")
is_equal "${result}" "100000000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn
function TestETH2Chain33Assets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 11个
result=$(${CLIA} ethereum lock -m 11 -k "${ethValidatorAddrKeyA}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
# 查询 ETH 这端 bridgeBank 地址 11
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "11"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11 * le8
is_equal "${result}" "1100000000"
# 原来的数额
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "100"
echo '#5.burn ETH from Chain33 ETH(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33EthBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11-5 * le8
is_equal "${result}" "600000000"
# 查询 ETH 这端 bridgeBank 地址 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "6"
# 比之前多 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "105"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function TestETH2Chain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== eth to chain33 在以太坊上锁定 ycc 资产,然后在 chain33 上 burn ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 7个 YCC
result=$(${CLIA} ethereum lock -m 7 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
eth_block_wait 2
# 查询 ETH 这端 bridgeBank 地址 7 YCC
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "7"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7 * le8
is_equal "${result}" "700000000"
# 原来的数额 0
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
echo '#5.burn YCC from Chain33 YCC(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33BycBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7-5 * le8
is_equal "${result}" "200000000"
# 查询 ETH 这端 bridgeBank 地址 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
# 更新后的金额 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# shellcheck disable=SC2120
function mainTest() {
if [[ $# -ge 1 && ${1} != "" ]]; then
chain33ID="${1}"
fi
StartChain33
start_trufflesuite
AllRelayerStart
TestChain33ToEthAssets
TestChain33ToEthZBCAssets
TestETH2Chain33Assets
TestETH2Chain33Ycc
}
mainTest "${1}"
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
source "./publicTest.sh"
source "./relayerPublic.sh"
# ETH 部署合约者的私钥 用于部署合约时签名使用
ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
#chain33DeployKey="0xcc38546e9e659d15e6b4893f0ab32a06d103931a8230b0bde71459d2b27d6944"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
ethReceiverAddr1="0xa4ea64a583f6e51c3799335b28a8f0529570a635"
#ethReceiverAddrKey1="355b876d7cbcb930d5dfab767f66336ce327e082cbaa1877210c1bae89b1df71"
maturityDegree=10
chain33BridgeBank=""
ethBridgeBank=""
chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
chain33EthBridgeTokenAddr=""
ethereumBtyBridgeTokenAddr=""
chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
BridgeRegistryOnChain33=""
chain33YccERC20TokenAddr=""
BridgeRegistryOnEth=""
ethereumYccBridgeTokenAddr=""
# validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
#ethValidatorAddrKeyA="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# shellcheck disable=SC2034
{
ethValidatorAddrKeyb="a5f3063552f4483cfc20ac4f40f45b798791379862219de9e915c64722c1d400"
ethValidatorAddrKeyc="bbf5e65539e9af0eb0cfac30bad475111054b09c11d668fc0731d54ea777471e"
ethValidatorAddrKeyd="c9fa31d7984edf81b8ef3b40c761f1847f6fcd5711ab2462da97dc458f1f896b"
# 新增地址 chain33 需要导入地址 转入 10 bty当收费费
chain33Validatora="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
chain33Validatorb="155ooMPBTF8QQsGAknkK7ei5D78rwDEFe6"
chain33Validatorc="13zBdQwuyDh7cKN79oT2odkxYuDbgQiXFv"
chain33Validatord="113ZzVamKfAtGt9dq45fX1mNsEoDiN95HG"
#chain33ValidatorKeya="0xcc38546e9e659d15e6b4893f0ab32a06d103931a8230b0bde71459d2b27d6944"
chain33ValidatorKeyb="0x9d539bc5fd084eb7fe86ad631dba9aa086dba38418725c38d9751459f567da66"
chain33ValidatorKeyc="0x0a6671f101e30a2cc2d79d77436b62cdf2664ed33eb631a9c9e3f3dd348a23be"
chain33ValidatorKeyd="0x3818b257b05ee75b6e43ee0e3cfc2d8502342cf67caed533e3756966690b62a5"
}
#CLIA="./ebcli_A"
#ethUrl=""
function start_docker_ebrelayerA() {
# shellcheck disable=SC2154
docker cp "./relayer.toml" "${dockerNamePrefix}_ebrelayera_1":/root/relayer.toml
start_docker_ebrelayer "${dockerNamePrefix}_ebrelayera_1" "/root/ebrelayer" "./ebrelayera.log"
sleep 5
}
# start ebrelayer B C D
function updata_toml_start_bcd() {
for name in b c d; do
local file="./relayer$name.toml"
cp './relayer.toml' "${file}"
# 删除配置文件中不需要的字段
for deleteName in "deploy4chain33" "deployerPrivateKey" "operatorAddr" "validatorsAddr" "initPowers" "deploy" "deployerPrivateKey" "operatorAddr" "validatorsAddr" "initPowers"; do
delete_line "${file}" "${deleteName}"
done
pushNameChange "${file}"
pushHost=$(get_docker_addr "${dockerNamePrefix}_ebrelayer${name}_1")
line=$(delete_line_show "${file}" "pushHost")
sed -i ''"${line}"' a pushHost="http://'"${pushHost}"':20000"' "${file}"
line=$(delete_line_show "${file}" "pushBind")
sed -i ''"${line}"' a pushBind="'"${pushHost}"':20000"' "${file}"
docker cp "${file}" "${dockerNamePrefix}_ebrelayer${name}_1":/root/relayer.toml
start_docker_ebrelayer "${dockerNamePrefix}_ebrelayer${name}_1" "/root/ebrelayer" "./ebrelayer${name}.log"
CLI="docker exec ${dockerNamePrefix}_ebrelayer${name}_1 /root/ebcli_A"
result=$(${CLI} set_pwd -p 123456hzj)
cli_ret "${result}" "set_pwd"
result=$(${CLI} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
eval chain33ValidatorKey=\$chain33ValidatorKey${name}
# shellcheck disable=SC2154
result=$(${CLI} chain33 import_privatekey -k "${chain33ValidatorKey}")
cli_ret "${result}" "chain33 import_privatekey"
eval ethValidatorAddrKey=\$ethValidatorAddrKey${name}
# shellcheck disable=SC2154
result=$(${CLI} ethereum import_privatekey -k "${ethValidatorAddrKey}")
cli_ret "${result}" "ethereum import_privatekey"
done
}
function StartDockerRelayerDeploy() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 修改 relayer.toml 配置文件 pushName 字段
pushNameChange "./relayer.toml"
# 修改 relayer.toml 配置文件 initPowers
validators_config
# change EthProvider url
dockerAddr=$(get_docker_addr "${dockerNamePrefix}_ganachetest_1")
# ethUrl="http://${dockerAddr}:8545"
# 修改 relayer.toml 配置文件
updata_relayer_a_toml "${dockerAddr}" "${dockerNamePrefix}_ebrelayera_1" "./relayer.toml"
# 启动 ebrelayer
start_docker_ebrelayerA
# 导入私钥 部署合约 设置 bridgeRegistry 地址
InitAndDeploy
docker cp "${BridgeRegistryOnChain33}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${BridgeRegistryOnChain33}.abi
docker cp "${chain33BridgeBank}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33BridgeBank}.abi
docker cp "${BridgeRegistryOnEth}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${BridgeRegistryOnEth}.abi
docker cp "${ethBridgeBank}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${ethBridgeBank}.abi
# 重启
# kill ebrelayer A
kill_docker_ebrelayer "${dockerNamePrefix}_ebrelayera_1"
sleep 1
# kill_ebrelayer ebrelayer
start_docker_ebrelayerA
result=$(${CLIA} unlock -p 123456hzj)
cli_ret "${result}" "unlock"
# start ebrelayer B C D
updata_toml_start_bcd
# 设置 token 地址
InitTokenAddr
docker cp "${chain33EthBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33EthBridgeTokenAddr}.abi
docker cp "${chain33BycBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33BycBridgeTokenAddr}.abi
docker cp "${chain33YccERC20TokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33YccERC20TokenAddr}.abi
docker cp "${ethereumYccBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${ethereumYccBridgeTokenAddr}.abi
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# chain33 lock BTY, eth burn BTY
function TestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# 原来的地址金额
result=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm)
# balance=$(cli_ret "${result}" "balance" ".balance")
# chain33 lock bty
hash=$(${Chain33Cli} send evm call -f 1 -a 5 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethDeployAddr}, ${chain33BtyERC20TokenAddr}, 500000000)")
check_tx "${Chain33Cli}" "${hash}"
# 原来的地址金额 减少了 5
result=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm)
# cli_ret "${result}" "balance" ".balance" "$(echo "${balance}-5" | bc)"
#balance_ret "${result}" "195.0000"
# chain33BridgeBank 是否增加了 5
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "5.0000"
sleep 2
# eth_block_wait 2 "${ethUrl}"
# eth 这端 金额是否增加了 5
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} ethereum burn -m 3 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBtyBridgeTokenAddr}") #--node_addr https://ropsten.infura.io/v3/9e83f296716142ffbaeaafc05790f26c)
cli_ret "${result}" "burn"
sleep 2
# eth_block_wait 2 "${ethUrl}"
# eth 这端 金额是否减少了 3
result=$(${CLIA} ethereum balance -o "${ethDeployAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
sleep ${maturityDegree}
# 接收的地址金额 变成了 3
result=$(${Chain33Cli} account balance -a "${chain33ReceiverAddr}" -e evm)
balance_ret "${result}" "3.0000"
# chain33BridgeBank 是否减少了 3
result=$(${Chain33Cli} account balance -a "${chain33BridgeBank}" -e evm)
balance_ret "${result}" "2.0000"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# eth to chain33 在以太坊上锁定 ETH 资产,然后在 chain33 上 burn
function TestETH2Chain33Assets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 11个
result=$(${CLIA} ethereum lock -m 11 -k "${ethValidatorAddrKeyA}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
sleep 2
# eth_block_wait 2 "${ethUrl}"
# 查询 ETH 这端 bridgeBank 地址 11
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "11"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11 * le8
is_equal "${result}" "1100000000"
# 原来的数额
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "100"
echo '#5.burn ETH from Chain33 ETH(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33EthBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 11-5 * le8
is_equal "${result}" "600000000"
# 查询 ETH 这端 bridgeBank 地址 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}")
cli_ret "${result}" "balance" ".balance" "6"
# 比之前多 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}")
cli_ret "${result}" "balance" ".balance" "105"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function TestETH2Chain33Ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 查询 ETH 这端 bridgeBank 地址原来是 0
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 这端 lock 7个 YCC
result=$(${CLIA} ethereum lock -m 7 -k "${ethDeployKey}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "lock"
# eth 等待 10 个区块
sleep 2
# eth_block_wait 2 "${ethUrl}"
# 查询 ETH 这端 bridgeBank 地址 7 YCC
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "7"
sleep ${maturityDegree}
# chain33 chain33EthBridgeTokenAddr(ETH合约中)查询 lock 金额
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7 * le8
is_equal "${result}" "700000000"
# 原来的数额 0
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
echo '#5.burn YCC from Chain33 YCC(Chain33)-----> Ethereum'
${CLIA} chain33 burn -m 5 -k "${chain33ReceiverAddrKey}" -r "${ethReceiverAddr1}" -t "${chain33BycBridgeTokenAddr}"
sleep ${maturityDegree}
echo "check the balance on chain33"
result=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 结果是 7-5 * le8
is_equal "${result}" "200000000"
# 查询 ETH 这端 bridgeBank 地址 2
result=$(${CLIA} ethereum balance -o "${ethBridgeBank}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "2"
# 更新后的金额 5
result=$(${CLIA} ethereum balance -o "${ethReceiverAddr1}" -t "${ethereumBycERC20TokenAddr}")
cli_ret "${result}" "balance" ".balance" "5"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function AllRelayerMainTest() {
set +e
docker_chain33_ip=$(get_docker_addr "${dockerNamePrefix}_chain33_1")
Chain33Cli="./chain33-cli --rpc_laddr http://${docker_chain33_ip}:8801"
# shellcheck disable=SC2034
{
CLIA="docker exec ${dockerNamePrefix}_ebrelayera_1 /root/ebcli_A"
CLIB="docker exec ${dockerNamePrefix}_ebrelayerb_1 /root/ebcli_A"
CLIC="docker exec ${dockerNamePrefix}_ebrelayerc_1 /root/ebcli_A"
CLID="docker exec ${dockerNamePrefix}_ebrelayerd_1 /root/ebcli_A"
}
echo "${CLIA}"
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
if [[ ${1} != "" ]]; then
maturityDegree=${1}
echo -e "${GRE}maturityDegree is ${maturityDegree} ${NOC}"
fi
# init
InitChain33Validator
StartDockerRelayerDeploy
# test
TestChain33ToEthAssets
TestETH2Chain33Assets
TestETH2Chain33Ycc
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
set -x
set +e
# 只测试 lock 操作,不测试 burn
source "./publicTest.sh"
source "./relayerPublic.sh"
source "./multisignPublicTest.sh"
## ETH 部署合约者的私钥 用于部署合约时签名使用
#ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
#ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
#
## chain33 部署合约者的私钥 用于部署合约时签名使用
#chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
#
#Chain33Cli="../../chain33-cli"
#chain33BridgeBank=""
#ethBridgeBank=""
#chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
#ethereumBycERC20TokenAddr=""
#multisignChain33Addr=""
#multisignEthAddr=""
#ethereumYccBridgeTokenAddr=""
#chain33YccERC20TokenAddr=""
#
#CLIA="./ebcli_A"
chain33ID=0
function mainTest() {
if [[ $# -ge 1 && ${1} != "" ]]; then
# shellcheck disable=SC2034
chain33ID="${1}"
fi
StartChain33
start_trufflesuite
AllRelayerStart
deployMultisign
lockBty
lockChain33Ycc
lockEth
lockEthYcc
}
mainTest "${1}"
#!/usr/bin/env bash
# shellcheck disable=SC2128
# shellcheck source=/dev/null
# shellcheck disable=SC2178
set -x
source "./publicTest.sh"
source "./relayerPublic.sh"
ethAddress[0]=0xdb15E7327aDc83F2878624bBD6307f5Af1B477b4
ethAddress[1]=0x9cBA1fF8D0b0c9Bc95d5762533F8CddBE795f687
ethAddress[2]=0x1919203bA8b325278d28Fb8fFeac49F2CD881A4e
ethAddress[3]=0xA4Ea64a583F6e51C3799335b28a8F0529570A635
ethAddress[4]=0x0C05bA5c230fDaA503b53702aF1962e08D0C60BF
ethAddress[5]=0x0921948C0d25BBbe85285CB5975677503319F02A
ethAddress[6]=0x69921517970a28b73ac5E4C8ac8Fd135A80D2be1
ethAddress[7]=0x9a8438aeaa86aFA6a18e39551E14078fb2bdea90
ethAddress[8]=0xcF73954c8BaE39cCe0eb633885B6Bcf93f70c867
ethAddress[9]=0x1A03038C468F2520288c352d74232f862BA7c6a6
ethAddress[10]=0xe51a1c7f7C704D8FcC192b242bE656fFB34A70e4
ethAddress[11]=0x4c85848a7E2985B76f06a7Ed338FCB3aF94a7DCf
ethAddress[12]=0x6F163E6daf0090D897AD7016484f10e0cE844994
ethAddress[13]=0xbc333839E37bc7fAAD0137aBaE2275030555101f
ethAddress[14]=0x495953A743ef169EC5D4aC7b5F786BF2Bd56aFd5
privateKeys[0]=0x1385016736f7379884763f4a39811d1391fa156a7ca017be6afffa52bb327695
privateKeys[1]=0x4ae589fe3837dcfc90d1c85b8423dc30841525cbebc41dfb537868b0f8376bbf
privateKeys[2]=0x62ca4122aac0e6f35bed02fc15c7ddbdaa07f2f2a1821c8b8210b891051e3ee9
privateKeys[3]=0x355b876d7cbcb930d5dfab767f66336ce327e082cbaa1877210c1bae89b1df71
privateKeys[4]=0x9dc6df3a8ab139a54d8a984f54958ae0661f880229bf3bdbb886b87d58b56a08
privateKeys[5]=0x5a43f2c8724f60ea5d6b87ad424daa73639a5fc76702edd3e5eaed37aaffdf49
privateKeys[6]=0x03b28c0fc78c6ebae719b559b0781db24644b655d4bd58e5cf2311c9f03baa3d
privateKeys[7]=0x72dff1c863631208a3d4f67a5fb0b7ebe69f827a75f332e2069dc7c825cb2202
privateKeys[8]=0xecbc20b02e1ffd321e31c2a6d7d35a69715ba43ef2b0048a27de4f67b8249bde
privateKeys[9]=0x1649955b3f2852a9cd71e50237b5a6f717539cffbe336bfcd95eb19a1b5c6f1b
privateKeys[10]=0xd3064a91f01a60b0e3d92d08fc8be144a61a2a4a7780827727cd3804a66d31bd
privateKeys[11]=0x5e8aadb91eaa0fce4df0bcc8bd1af9e703a1d6db78e7a4ebffd6cf045e053574
privateKeys[12]=0x0504bcb22b21874b85b15f1bfae19ad62fc2ad89caefc5344dc669c57efa60db
privateKeys[13]=0x0c61f5a879d70807686e43eccc1f52987a15230ae0472902834af4d1933674f2
privateKeys[14]=0x2809477ede1261da21270096776ba7dc68b89c9df5f029965eaa5fe7f0b80697
# ETH 部署合约者的私钥 用于部署合约时签名使用
#ethDeployAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
ethDeployKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
# chain33 部署合约者的私钥 用于部署合约时签名使用
chain33DeployAddr="1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ"
#chain33DeployKey="0xcc38546e9e659d15e6b4893f0ab32a06d103931a8230b0bde71459d2b27d6944"
chain33ReceiverAddr="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
chain33ReceiverAddrKey="4257d8692ef7fe13c68b65d6a52f03933db2fa5ce8faf210b5b8b80c721ced01"
maturityDegree=10
Chain33Cli="../../chain33-cli"
chain33BridgeBank=""
chain33BtyERC20TokenAddr="1111111111111111111114oLvT2"
chain33EthBridgeTokenAddr=""
ethereumBtyBridgeTokenAddr=""
chain33BycBridgeTokenAddr=""
ethereumBycERC20TokenAddr=""
CLIA="./ebcli_A"
chain33ID=0
function loop_send_lock_bty() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
preChain33Balance=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm | jq -r ".balance" | sed 's/\"//g')
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
preEthBalance[$i]=$(${CLIA} ethereum balance -o "${ethAddress[i]}" -t "${ethereumBtyBridgeTokenAddr}" | jq -r ".balance")
hash=$(${Chain33Cli} send evm call -f 1 -a 1 -k "${chain33DeployAddr}" -e "${chain33BridgeBank}" -p "lock(${ethAddress[i]}, ${chain33BtyERC20TokenAddr}, 100000000)" --chainID "${chain33ID}")
check_tx "${Chain33Cli}" "${hash}"
i=$((i + 1))
done
eth_block_wait $((maturityDegree + 2))
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
nowEthBalance=$(${CLIA} ethereum balance -o "${ethAddress[i]}" -t "${ethereumBtyBridgeTokenAddr}" | jq -r ".balance")
res=$((nowEthBalance - preEthBalance[i]))
echo ${i} "preBalance" "${preEthBalance[i]}" "nowBalance" "${nowEthBalance}" "diff" ${res}
check_number "${res}" 1
i=$((i + 1))
done
nowChain33Balance=$(${Chain33Cli} account balance -a "${chain33DeployAddr}" -e evm | jq -r ".balance" | sed 's/\"//g')
diff=$(echo "$preChain33Balance - $nowChain33Balance" | bc)
check_number "${diff}" "${#privateKeys[@]}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function loop_send_burn_bty() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
preChain33Balance=$(${Chain33Cli} account balance -a "${chain33ReceiverAddr}" -e evm | jq -r ".balance" | sed 's/\"//g')
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
preEthBalance[$i]=$(${CLIA} ethereum balance -o "${ethAddress[i]}" -t "${ethereumBtyBridgeTokenAddr}" | jq -r ".balance")
result=$(${CLIA} ethereum burn -m 1 -k "${privateKeys[i]}" -r "${chain33ReceiverAddr}" -t "${ethereumBtyBridgeTokenAddr}")
cli_ret "${result}" "burn"
i=$((i + 1))
done
eth_block_wait $((maturityDegree + 2))
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
nowEthBalance=$(${CLIA} ethereum balance -o "${ethAddress[i]}" -t "${ethereumBtyBridgeTokenAddr}" | jq -r ".balance")
res=$((preEthBalance[i] - nowEthBalance))
echo ${i} "preBalance" "${preEthBalance[i]}" "nowBalance" "${nowEthBalance}" "diff" ${res}
check_number "${res}" 1
i=$((i + 1))
done
nowChain33Balance=$(${Chain33Cli} account balance -a "${chain33ReceiverAddr}" -e evm | jq -r ".balance" | sed 's/\"//g')
diff=$(echo "$nowChain33Balance - $preChain33Balance" | bc)
check_number "${diff}" "${#privateKeys[@]}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function loop_send_lock_eth() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
preChain33Balance=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
preEthBalance[$i]=$(${CLIA} ethereum balance -o "${ethAddress[i]}" | jq -r ".balance")
result=$(${CLIA} ethereum lock -m 1 -k "${privateKeys[i]}" -r "${chain33ReceiverAddr}")
cli_ret "${result}" "lock"
i=$((i + 1))
done
eth_block_wait $((maturityDegree + 2))
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
nowEthBalance=$(${CLIA} ethereum balance -o "${ethAddress[i]}" | jq -r ".balance")
res=$(echo "${preEthBalance[i]} - $nowEthBalance" | bc)
echo ${i} "preBalance" "${preEthBalance[i]}" "nowBalance" "${nowEthBalance}" "diff" "${res}"
diff=$(echo "$res >= 1" | bc) # 浮点数比较 判断是否大于1 大于返回1 小于返回0
if [ "${diff}" -ne 1 ]; then
echo -e "${RED}error number, expect greater than 1, get ${res}${NOC}"
exit 1
fi
i=$((i + 1))
done
nowChain33Balance=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
diff=$(echo "$nowChain33Balance - $preChain33Balance" | bc)
diff=$(echo "$diff / 100000000" | bc)
check_number "${diff}" "${#privateKeys[@]}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function loop_send_burn_eth() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
preChain33Balance=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
preEthBalance[$i]=$(${CLIA} ethereum balance -o "${ethAddress[i]}" | jq -r ".balance")
ethTxHash=$(${CLIA} chain33 burn -m 1 -k "${chain33ReceiverAddrKey}" -r "${ethAddress[i]}" -t "${chain33EthBridgeTokenAddr}" | jq -r ".msg")
echo ${i} "burn chain33 tx hash:" "${ethTxHash}"
i=$((i + 1))
done
eth_block_wait $((maturityDegree + 2))
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
nowEthBalance=$(${CLIA} ethereum balance -o "${ethAddress[i]}" | jq -r ".balance")
res=$(echo "$nowEthBalance - ${preEthBalance[i]}" | bc)
echo ${i} "preBalance" "${preEthBalance[i]}" "nowBalance" "${nowEthBalance}" "diff" "${res}"
diff=$(echo "$res >= 1" | bc) # 浮点数比较 判断是否大于1 大于返回1 小于返回0
if [ "${diff}" -ne 1 ]; then
echo -e "${RED}error number, expect greater than 1, get ${res}${NOC}"
exit 1
fi
i=$((i + 1))
done
nowChain33Balance=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
diff=$(echo "$preChain33Balance - $nowChain33Balance" | bc)
diff=$(echo "$diff / 100000000" | bc)
check_number "${diff}" "${#privateKeys[@]}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function loop_send_lock_ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
preChain33Balance=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
# 先往每个ETH地址中导入token
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
ethTxHash=$(${CLIA} ethereum transfer -m 10 -k "${ethDeployKey}" -r "${ethAddress[i]}" -t "${ethereumBycERC20TokenAddr}" | jq -r ".msg")
echo ${i} "burn chain33 tx hash:" "${ethTxHash}"
i=$((i + 1))
done
sleep 2
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
preEthBalance[i]=$(${CLIA} ethereum balance -o "${ethAddress[i]}" -t "${ethereumBycERC20TokenAddr}" | jq -r ".balance")
ethTxHash=$(${CLIA} ethereum lock -m 1 -k "${privateKeys[i]}" -r "${chain33ReceiverAddr}" -t "${ethereumBycERC20TokenAddr}" | jq -r ".msg")
echo ${i} "lock ycc tx hash:" "${ethTxHash}"
i=$((i + 1))
done
eth_block_wait $((maturityDegree + 2))
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
nowEthBalance=$(${CLIA} ethereum balance -o "${ethAddress[i]}" -t "${ethereumBycERC20TokenAddr}" | jq -r ".balance")
res=$(echo "${preEthBalance[i]} - $nowEthBalance" | bc)
echo ${i} "preBalance" "${preEthBalance[i]}" "nowBalance" "${nowEthBalance}" "diff" "${res}"
check_number "${res}" 1
i=$((i + 1))
done
nowChain33Balance=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
diff=$((nowChain33Balance - preChain33Balance))
diff=$(echo "$diff / 100000000" | bc)
check_number "${diff}" "${#privateKeys[@]}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function loop_send_burn_ycc() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
preChain33Balance=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
preEthBalance[i]=$(${CLIA} ethereum balance -o "${ethAddress[i]}" -t "${ethereumBycERC20TokenAddr}" | jq -r ".balance")
ethTxHash=$(${CLIA} chain33 burn -m 1 -k "${chain33ReceiverAddrKey}" -r "${ethAddress[i]}" -t "${chain33BycBridgeTokenAddr}" | jq -r ".msg")
echo ${i} "burn chain33 tx hash:" "${ethTxHash}"
i=$((i + 1))
done
eth_block_wait $((maturityDegree + 2))
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
nowEthBalance=$(${CLIA} ethereum balance -o "${ethAddress[i]}" -t "${ethereumBycERC20TokenAddr}" | jq -r ".balance")
res=$((nowEthBalance - preEthBalance[i]))
echo ${i} "preBalance" "${preEthBalance[i]}" "nowBalance" "${nowEthBalance}" "diff" ${res}
check_number "${res}" 1
i=$((i + 1))
done
nowChain33Balance=$(${Chain33Cli} evm query -a "${chain33BycBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
diff=$(echo "$preChain33Balance - $nowChain33Balance" | bc)
diff=$(echo "$diff / 100000000" | bc)
check_number "${diff}" "${#privateKeys[@]}"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function perf_test_main() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
if [[ ${1} != "" ]]; then
maturityDegree=${1}
echo -e "${GRE}maturityDegree is ${maturityDegree} ${NOC}"
fi
StartChain33
start_trufflesuite
AllRelayerStart
loop_send_lock_bty
loop_send_burn_bty
loop_send_lock_eth
loop_send_burn_eth
loop_send_lock_ycc
loop_send_burn_ycc
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
perf_test_main 10
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