Commit fc3dafc5 authored by whisker's avatar whisker

fix refactor bug

parent b1a0fb3e
......@@ -206,14 +206,14 @@ function EthImportKey() {
function TestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# token4chain33 在 以太坊 上先有 bty
tokenSymbol="bty"
tokenSymbol="coins.bty"
result=$(${CLIA} relayer ethereum token4chain33 -s "${tokenSymbol}")
tokenAddrBty=$(cli_ret "${result}" "token4chain33" ".addr")
#tokenAddrBty="0xE79142B3171019fcfcA838f0792edB08d4F2a94F"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
# chain33 lock bty
......@@ -226,14 +226,14 @@ function TestChain33ToEthAssets() {
eth_block_wait $((maturityDegree + 3)) https://ropsten-rpc.linkpool.io/
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} relayer ethereum burn -m 5 -k "${ethReceiverAddrKey1}" -r "${chain33SenderAddr}" -t "${tokenAddrBty}")
cli_ret "${result}" "burn"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
# eth 等待 10 个区块
......@@ -305,23 +305,23 @@ function TestETH2Chain33Erc20() {
result=$(${CLIA} relayer ethereum mint -m 1000 -o "${ethReceiverAddr1}" -t "${tokenAddr}")
cli_ret "${result}" "mint"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "1000"
result=$(${CLIA} relayer ethereum bridgeBankAddr)
bridgeBankAddr=$(cli_ret "${result}" "bridgeBankAddr" ".addr")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
# lock 100
result=$(${CLIA} relayer ethereum lock -m 100 -k "${ethReceiverAddrKey1}" -r "${chain33Validator1}" -t "${tokenAddr}")
cli_ret "${result}" "lock"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "900"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
# eth 等待 10 个区块
......@@ -340,10 +340,10 @@ function TestETH2Chain33Erc20() {
eth_block_wait 2 https://ropsten-rpc.linkpool.io/
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
......@@ -352,7 +352,7 @@ function TestETH2Chain33Erc20() {
function TestChain33ToEthAssetsKill() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
tokenSymbol="bty"
tokenSymbol="coins.bty"
if [ "${tokenAddrBty}" == "" ]; then
# token4chain33 在 以太坊 上先有 bty
result=$(${CLIA} relayer ethereum token4chain33 -s "${tokenSymbol}")
......@@ -361,7 +361,7 @@ function TestChain33ToEthAssetsKill() {
# tokenAddrBty="0xE79142B3171019fcfcA838f0792edB08d4F2a94F"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
......@@ -374,19 +374,19 @@ function TestChain33ToEthAssetsKill() {
eth_block_wait $((maturityDegree + 3)) https://ropsten-rpc.linkpool.io/
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
start_ebrelayerC
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "1.41"
# eth burn
result=$(${CLIA} relayer ethereum burn -m 1.41 -k "${ethReceiverAddrKey2}" -r "${chain33Validator1}" -t "${tokenAddrBty}")
cli_ret "${result}" "burn"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
# eth 等待 10 个区块
......@@ -477,13 +477,13 @@ function TestETH2Chain33Erc20Kill() {
result=$(${CLIA} relayer ethereum mint -m 1000 -o "${ethReceiverAddr1}" -t "${tokenAddr}")
cli_ret "${result}" "mint"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "1000"
result=$(${CLIA} relayer ethereum bridgeBankAddr)
bridgeBankAddr=$(cli_ret "${result}" "bridgeBankAddr" ".addr")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
......@@ -493,10 +493,10 @@ function TestETH2Chain33Erc20Kill() {
result=$(${CLIA} relayer ethereum lock -m 100 -k "${ethReceiverAddrKey1}" -r "${chain33Validator1}" -t "${tokenAddr}")
cli_ret "${result}" "lock"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "900"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
# eth 等待 10 个区块
......@@ -526,10 +526,10 @@ function TestETH2Chain33Erc20Kill() {
start_ebrelayerC
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
......
......@@ -221,14 +221,14 @@ function InitChain33Vilators() {
function TestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# token4chain33 在 以太坊 上先有 bty
result=$(${CLIA} relayer ethereum token4chain33 -s bty)
result=$(${CLIA} relayer ethereum token4chain33 -s coins.bty)
tokenAddrBty=$(cli_ret "${result}" "token4chain33" ".addr")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
# chain33 lock bty
hash=$(${Chain33Cli} send x2ethereum lock -a 5 -t bty -r ${ethReceiverAddr1} -q ${tokenAddrBty} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
hash=$(${Chain33Cli} send x2ethereum lock -a 5 -t coins.bty -r ${ethReceiverAddr1} -q ${tokenAddrBty} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
block_wait "${Chain33Cli}" $((maturityDegree + 2))
check_tx "${Chain33Cli}" "${hash}"
......@@ -237,14 +237,14 @@ function TestChain33ToEthAssets() {
eth_block_wait $((maturityDegree + 2))
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} relayer ethereum burn -m 5 -k "${ethReceiverAddrKey1}" -r "${chain33SenderAddr}" -t "${tokenAddrBty}")
cli_ret "${result}" "burn"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
# eth 等待 10 个区块
......@@ -315,23 +315,23 @@ function TestETH2Chain33Erc20() {
result=$(${CLIA} relayer ethereum mint -m 1000 -o "${ethReceiverAddr1}" -t "${tokenAddr}")
cli_ret "${result}" "mint"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "1000"
result=$(${CLIA} relayer ethereum bridgeBankAddr)
bridgeBankAddr=$(cli_ret "${result}" "bridgeBankAddr" ".addr")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
# lock 100
result=$(${CLIA} relayer ethereum lock -m 100 -k "${ethReceiverAddrKey1}" -r "${chain33Validator1}" -t "${tokenAddr}")
cli_ret "${result}" "lock"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "900"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
# eth 等待 10 个区块
......@@ -350,10 +350,10 @@ function TestETH2Chain33Erc20() {
eth_block_wait 2
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
......@@ -364,11 +364,11 @@ function TestChain33ToEthAssetsKill() {
if [ "${tokenAddrBty}" == "" ]; then
# token4chain33 在 以太坊 上先有 bty
result=$(${CLIA} relayer ethereum token4chain33 -s bty)
result=$(${CLIA} relayer ethereum token4chain33 -s coins.bty)
tokenAddrBty=$(cli_ret "${result}" "token4chain33" ".addr")
fi
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
......@@ -381,19 +381,19 @@ function TestChain33ToEthAssetsKill() {
eth_block_wait $((maturityDegree + 2))
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
start_ebrelayerC
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} relayer ethereum burn -m 5 -k "${ethReceiverAddrKey2}" -r "${chain33Validator1}" -t "${tokenAddrBty}")
cli_ret "${result}" "burn"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddrBty}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
# eth 等待 10 个区块
......@@ -484,13 +484,13 @@ function TestETH2Chain33Erc20Kill() {
result=$(${CLIA} relayer ethereum mint -m 1000 -o "${ethReceiverAddr1}" -t "${tokenAddr}")
cli_ret "${result}" "mint"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "1000"
result=$(${CLIA} relayer ethereum bridgeBankAddr)
bridgeBankAddr=$(cli_ret "${result}" "bridgeBankAddr" ".addr")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
......@@ -500,10 +500,10 @@ function TestETH2Chain33Erc20Kill() {
result=$(${CLIA} relayer ethereum lock -m 100 -k "${ethReceiverAddrKey1}" -r "${chain33Validator1}" -t "${tokenAddr}")
cli_ret "${result}" "lock"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "900"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
# eth 等待 10 个区块
......@@ -533,10 +533,10 @@ function TestETH2Chain33Erc20Kill() {
start_ebrelayerC
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
......
......@@ -104,8 +104,8 @@ loop_send_lock_bty() {
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
preEthBalance[$i]=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "${tokenAddrBty}" | jq -r ".balance")
ethTxHash=$(${Chain33_CLI} send x2ethereum lock -q "${tokenAddrBty}" -a 1 -r ${ethAddress[i]} -t bty -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
preEthBalance[$i]=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "coins.bty" | jq -r ".balance")
ethTxHash=$(${Chain33_CLI} send x2ethereum lock -q "${tokenAddrBty}" -a 1 -r ${ethAddress[i]} -t coins.bty -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
echo ${i} "lock chain33 tx hash:" ${ethTxHash}
let i++
done
......@@ -114,7 +114,7 @@ loop_send_lock_bty() {
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
nowEthBalance=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "${tokenAddrBty}" | jq -r ".balance")
nowEthBalance=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "coins.bty" | jq -r ".balance")
res=$((nowEthBalance - preEthBalance[i]))
echo ${i} "preBalance" ${preEthBalance[i]} "nowBalance" ${nowEthBalance} "diff" ${res}
check_number "${res}" 1
......@@ -136,7 +136,7 @@ loop_send_burn_bty() {
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
preEthBalance[$i]=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "${tokenAddrBty}" | jq -r ".balance")
preEthBalance[$i]=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "coins.bty" | jq -r ".balance")
approveTxHash=$(${CLIA} relayer ethereum approve -m 1 -k "${privateKeys[i]}" -t "${tokenAddrBty}")
ethTxHash=$(${CLIA} relayer ethereum burn-async -m 1 -k "${privateKeys[i]}" -r 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv -t "${tokenAddrBty}")
echo ${i} "burn-async tx hash:" ${ethTxHash}
......@@ -147,7 +147,7 @@ loop_send_burn_bty() {
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
nowEthBalance=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "${tokenAddrBty}" | jq -r ".balance")
nowEthBalance=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "coins.bty" | jq -r ".balance")
res=$((preEthBalance[i] - nowEthBalance))
echo ${i} "preBalance" ${preEthBalance[i]} "nowBalance" ${nowEthBalance} "diff" ${res}
check_number "${res}" 1
......@@ -167,7 +167,7 @@ loop_send_lock_erc20() {
preChain33Balance=$(${Chain33_CLI} x2ethereum balance -s 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv -t testc | jq ".res" | jq ".[]" | jq ".balance" | sed 's/\"//g')
i=0
preEthBalance=$(${CLIA} relayer ethereum balance -o "${Ethsender}" -t "${tokenAddr}" | jq -r ".balance")
preEthBalance=$(${CLIA} relayer ethereum balance -o "${Ethsender}" -t "testc" | jq -r ".balance")
approveTxHash=$(${CLIA} relayer ethereum approve -m 10 -k "${privateKeys[5]}" -t "${tokenAddr}")
echo ${i} "lock-async erc20 approve tx hash:" ${approveTxHash}
......@@ -180,7 +180,7 @@ loop_send_lock_erc20() {
eth_block_wait $((maturityDegree + 2))
nowEthBalance=$(${CLIA} relayer ethereum balance -o "${Ethsender}" -t "${tokenAddr}" | jq -r ".balance")
nowEthBalance=$(${CLIA} relayer ethereum balance -o "${Ethsender}" -t "testc" | jq -r ".balance")
res=$((preEthBalance - nowEthBalance))
echo ${i} "preBalance" ${preEthBalance} "nowBalance" ${nowEthBalance} "diff" ${res}
check_number "${diff}" 7
......@@ -200,7 +200,7 @@ loop_send_burn_erc20() {
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
preEthBalance[i]=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "${tokenAddr}" | jq -r ".balance")
preEthBalance[i]=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "testc" | jq -r ".balance")
ethTxHash=$(${Chain33_CLI} send x2ethereum burn -a 1 -r ${ethAddress[i]} -t testc -q "${tokenAddr}" -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
echo ${i} "burn chain33 tx hash:" ${ethTxHash}
let i++
......@@ -210,7 +210,7 @@ loop_send_burn_erc20() {
i=0
while [[ i -lt ${#privateKeys[@]} ]]; do
nowEthBalance=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "${tokenAddr}" | jq -r ".balance")
nowEthBalance=$(${CLIA} relayer ethereum balance -o "${ethAddress[i]}" -t "testc" | jq -r ".balance")
res=$((nowEthBalance - preEthBalance[i]))
echo ${i} "preBalance" ${preEthBalance[i]} "nowBalance" ${nowEthBalance} "diff" ${res}
check_number "${res}" 1
......
......@@ -143,9 +143,6 @@ func CreateRawWithdrawEthTxCmd() *cobra.Command {
addEth2Chain33Flags(cmd)
cmd.Flags().StringP("exec", "e", "", "exec name token or coins")
_ = cmd.MarkFlagRequired("exec")
return cmd
}
......@@ -203,7 +200,7 @@ func CreateRawWithdrawChain33TxCmd() *cobra.Command {
func addChain33ToEthFlags(cmd *cobra.Command) {
cmd.Flags().StringP("contract", "q", "", "token contract address,nil for ETH")
cmd.Flags().StringP("symbol", "t", "", "token symbol in chain33")
cmd.Flags().StringP("symbol", "t", "", "token symbol in chain33,coins.bty etc.")
_ = cmd.MarkFlagRequired("symbol")
cmd.Flags().StringP("receiver", "r", "", "ethereum receiver address")
......@@ -221,16 +218,16 @@ func burn(cmd *cobra.Command, args []string) {
amount, _ := cmd.Flags().GetFloat64("amount")
nodeAddr, _ := cmd.Flags().GetString("node_addr")
if contract == "" {
contract = "0x0000000000000000000000000000000000000000"
}
decimal, err := utils.GetDecimalsFromNode(contract, nodeAddr)
if err != nil {
fmt.Println("get decimal error")
return
}
if contract == "" {
contract = "0x0000000000000000000000000000000000000000"
}
params := &types3.Chain33ToEth{
TokenContract: contract,
EthereumReceiver: receiver,
......@@ -254,9 +251,6 @@ func CreateRawChain33ToEthTxCmd() *cobra.Command {
addChain33ToEthFlags(cmd)
cmd.Flags().StringP("exec", "e", "", "exec name token or coins")
_ = cmd.MarkFlagRequired("exec")
return cmd
}
......
......@@ -26,7 +26,6 @@ func queryCmd() *cobra.Command {
queryConsensusCmd(),
queryTotalPowerCmd(),
querySymbolTotalAmountByTxTypeCmd(),
queryRelayerBalanceCmd(),
)
return cmd
}
......
......@@ -49,6 +49,7 @@ func EthereumRelayerCmd() *cobra.Command {
ShowBridgeRegistryAddrCmd(),
StaticsCmd(),
TransferTokenCmd(),
GetToken2addressCmd(),
)
return cmd
......@@ -683,17 +684,17 @@ func GetBalanceCmd() *cobra.Command {
func GetBalanceFlags(cmd *cobra.Command) {
cmd.Flags().StringP("owner", "o", "", "owner address")
_ = cmd.MarkFlagRequired("owner")
cmd.Flags().StringP("tokenAddr", "t", "", "token address, optional, nil for Eth")
cmd.Flags().StringP("token", "t", "", "token symbol,nil for Eth")
}
func GetBalance(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
owner, _ := cmd.Flags().GetString("owner")
tokenAddr, _ := cmd.Flags().GetString("tokenAddr")
token, _ := cmd.Flags().GetString("token")
para := ebTypes.BalanceAddr{
Owner: owner,
TokenAddr: tokenAddr,
TokenAddr: token,
}
var res ebTypes.ReplyBalance
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.GetBalance", para, &res)
......@@ -772,3 +773,31 @@ func TransferToken(cmd *cobra.Command, args []string) {
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.TransferToken", para, &res)
ctx.Run()
}
func GetToken2addressCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "tokenaddr",
Short: "get token address by symbol",
Run: GetToken2address,
}
GetToken2addressFlags(cmd)
return cmd
}
func GetToken2addressFlags(cmd *cobra.Command) {
cmd.Flags().StringP("token", "t", "", "token symbol")
_ = cmd.MarkFlagRequired("token")
}
func GetToken2address(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
tokenSymbol, _ := cmd.Flags().GetString("token")
para := ebTypes.TokenStatics{
TokenAddr: tokenSymbol,
}
var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowTokenAddrBySymbol", para, &res)
ctx.Run()
}
......@@ -99,7 +99,7 @@ func ParseBurnLockTxReceipt(claimType events.Event, receipt *chain33Types.Receip
chain33Sender = []byte(chain33ToEth.Chain33Sender)
ethereumReceiver = common.HexToAddress(chain33ToEth.EthereumReceiver)
tokenContractAddress = common.HexToAddress(chain33ToEth.TokenContract)
symbol = chain33ToEth.EthSymbol
symbol = chain33ToEth.IssuerDotSymbol
chain33ToEth.Amount = types.TrimZeroAndDot(chain33ToEth.Amount)
amount = big.NewInt(1)
amount, _ = amount.SetString(chain33ToEth.Amount, 10)
......
......@@ -135,3 +135,15 @@ func GetDepositFunds(client *ethclient.Client, tokenAddrStr string) (string, err
}
return supply.String(), nil
}
func GetToken2address(bridgeBank *generated.BridgeBank, tokenSymbol string) (string, error) {
opts := &bind.CallOpts{
Pending: true,
Context: context.Background(),
}
tokenAddr, err := bridgeBank.GetToken2address(opts, tokenSymbol)
if nil != err {
return "", err
}
return tokenAddr.String(), nil
}
......@@ -27,8 +27,7 @@ func RelayLockToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
EthereumChainID: claim.EthereumChainID,
BridgeContractAddress: claim.BridgeBrankAddr,
Nonce: claim.Nonce,
LocalCoinSymbol: claim.Symbol,
LocalCoinExec: X2Eth,
IssuerDotSymbol: claim.Symbol,
TokenContractAddress: claim.TokenAddr,
EthereumSender: claim.EthereumSender,
Chain33Receiver: claim.Chain33Receiver,
......@@ -84,8 +83,7 @@ func RelayBurnToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
EthereumChainID: claim.EthereumChainID,
BridgeContractAddress: claim.BridgeBrankAddr,
Nonce: claim.Nonce,
LocalCoinSymbol: claim.Symbol,
LocalCoinExec: X2Eth,
IssuerDotSymbol: claim.Symbol,
TokenContractAddress: claim.TokenAddr,
EthereumSender: claim.EthereumSender,
Chain33Receiver: claim.Chain33Receiver,
......
......@@ -32,7 +32,7 @@ func RelayOracleClaimToEthereum(oracleInstance *generated.Oracle, client *ethcli
}
auth.GasLimit = GasLimit
claimID := crypto.Keccak256Hash(chain33TxHash, claim.Chain33Sender, claim.EthereumReceiver.Bytes(), claim.TokenContractAddress.Bytes(), claim.Amount.Bytes())
claimID := crypto.Keccak256Hash(chain33TxHash, claim.Chain33Sender, claim.EthereumReceiver.Bytes(), []byte(claim.Symbol), claim.Amount.Bytes())
// Sign the hash using the active validator's private key
signature, err := SignClaim4Eth(claimID, privateKey)
......
......@@ -9,8 +9,8 @@ import (
const (
X2Eth = "x2ethereum"
BurnAction = "WithdrawChain33"
LockAction = "Chain33ToEth"
BurnAction = "Chain33ToEthBurn"
LockAction = "Chain33ToEthLock"
)
// OracleClaim : contains data required to make an OracleClaim
......
......@@ -31,7 +31,7 @@ const (
// String : returns the event type as a string
func (d Event) String() string {
return [...]string{"unknown-x2ethereum", "WithdrawChain33-burn", "Chain33ToEth-lock", "LogLock", "LogChain33TokenBurn", "LogNewProphecyClaim"}[d]
return [...]string{"unknown-x2ethereum", "Chain33ToEthBurn", "Chain33ToEthLock", "LogLock", "LogChain33TokenBurn", "LogNewProphecyClaim"}[d]
}
// Chain33MsgAttributeKey : enum containing supported attribute keys
......
......@@ -257,6 +257,10 @@ func (ethRelayer *EthereumRelayer) ShowDepositStatics(tokenAddr string) (string,
return ethtxs.GetDepositFunds(ethRelayer.client, tokenAddr)
}
func (ethRelayer *EthereumRelayer) ShowTokenAddrBySymbol(tokenSymbol string) (string, error) {
return ethtxs.GetToken2address(ethRelayer.x2EthContracts.BridgeBank, tokenSymbol)
}
func (ethRelayer *EthereumRelayer) IsProphecyPending(claimID [32]byte) (bool, error) {
return ethtxs.IsProphecyPending(claimID, ethRelayer.ethValidator, ethRelayer.x2EthContracts.Chain33Bridge)
}
......
......@@ -5,6 +5,7 @@ import (
"fmt"
"math/big"
"strconv"
"strings"
"sync"
"sync/atomic"
......@@ -507,16 +508,25 @@ func (manager *RelayerManager) IsProphecyPending(claimID [32]byte, result *inter
func (manager *RelayerManager) GetBalance(balanceAddr relayerTypes.BalanceAddr, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
balance, err := manager.ethRelayer.GetBalance(balanceAddr.TokenAddr, balanceAddr.Owner)
var addr string
var err error
if balanceAddr.TokenAddr != "" {
addr, err = manager.ethRelayer.ShowTokenAddrBySymbol(balanceAddr.TokenAddr)
if nil != err {
return err
}
}
balance, err := manager.ethRelayer.GetBalance(addr, balanceAddr.Owner)
if nil != err {
return err
}
var d int64
if balanceAddr.TokenAddr == "" || balanceAddr.TokenAddr == "0x0000000000000000000000000000000000000000" {
if balanceAddr.TokenAddr == "" || strings.ToLower(balanceAddr.TokenAddr) == "eth" {
d = 18
} else {
d, err = manager.GetDecimals(balanceAddr.TokenAddr)
d, err = manager.GetDecimals(addr)
if err != nil {
return errors.New("get decimals error")
}
......@@ -601,6 +611,21 @@ func (manager *RelayerManager) ShowDepositStatics(token relayerTypes.TokenStatic
return nil
}
func (manager *RelayerManager) ShowTokenAddrBySymbol(token relayerTypes.TokenStatics, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
addr, err := manager.ethRelayer.ShowTokenAddrBySymbol(token.TokenAddr)
if nil != err {
return err
}
*result = relayerTypes.ReplyAddr{
IsOK: true,
Addr: addr,
}
return nil
}
func (manager *RelayerManager) ShowTxReceipt(txhash string, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
......
......@@ -5,9 +5,8 @@ package types
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.
......
......@@ -5,9 +5,8 @@ package types
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.
......
......@@ -20,7 +20,7 @@ import (
// Eth2Chain33类型的交易是Ethereum侧锁定一定金额的eth或者erc20到合约中
// 然后relayer端订阅到该消息后向chain33发送该类型消息
// 本端在验证该类型的请求合理后铸币,并生成相同数额的token
func (x *x2ethereum) Exec_Eth2Chain33_lock(payload *x2eTy.Eth2Chain33, tx *types.Transaction, index int) (*types.Receipt, error) {
func (x *x2ethereum) Exec_Eth2Chain33Lock(payload *x2eTy.Eth2Chain33, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(x, tx, int32(index))
if action == nil {
return nil, errors.New("Create Action Error")
......@@ -33,7 +33,7 @@ func (x *x2ethereum) Exec_Eth2Chain33_lock(payload *x2eTy.Eth2Chain33, tx *types
//---------------- Chain33(eth/erc20)------> Ethereum -------------------//
// WithdrawChain33类型的交易是将Eth端因Chain33端锁定所生成的token返还给Chain33端(Burn)
func (x *x2ethereum) Exec_Chain33ToEth_burn(payload *x2eTy.Chain33ToEth, tx *types.Transaction, index int) (*types.Receipt, error) {
func (x *x2ethereum) Exec_Chain33ToEthBurn(payload *x2eTy.Chain33ToEth, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(x, tx, int32(index))
if action == nil {
return nil, errors.New("Create Action Error")
......@@ -44,7 +44,7 @@ func (x *x2ethereum) Exec_Chain33ToEth_burn(payload *x2eTy.Chain33ToEth, tx *typ
//---------------- Chain33(eth/erc20) --> Ethereum-------------------//
// 将因ethereum端锁定的eth或者erc20而在chain33端生成的token返还
func (x *x2ethereum) Exec_Eth2Chain33_burn(payload *x2eTy.Eth2Chain33, tx *types.Transaction, index int) (*types.Receipt, error) {
func (x *x2ethereum) Exec_Eth2Chain33Burn(payload *x2eTy.Eth2Chain33, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(x, tx, int32(index))
if action == nil {
return nil, errors.New("Create Action Error")
......@@ -57,7 +57,7 @@ func (x *x2ethereum) Exec_Eth2Chain33_burn(payload *x2eTy.Eth2Chain33, tx *types
// Chain33ToEth类型的交易是Chain33侧在本端发出申请
// 在本端锁定一定数额的token,然后在ethereum端生成相同数额的token
func (x *x2ethereum) Exec_Chain33ToEth_lock(payload *x2eTy.Chain33ToEth, tx *types.Transaction, index int) (*types.Receipt, error) {
func (x *x2ethereum) Exec_Chain33ToEthLock(payload *x2eTy.Chain33ToEth, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(x, tx, int32(index))
if action == nil {
return nil, errors.New("Create Action Error")
......@@ -156,10 +156,15 @@ func (x *x2ethereum) Exec_SetConsensusThreshold(payload *x2eTy.MsgConsensusThres
func checkTxSignBySpecificAddr(tx *types.Transaction, addrs []string) error {
signAddr := address.PubKeyToAddr(tx.Signature.Pubkey)
var exist bool
for _, addr := range addrs {
if signAddr == addr {
exist = true
continue
}
}
if !exist {
return x2eTy.ErrInvalidAdminAddress
}
......
......@@ -12,7 +12,7 @@ import (
* 非关键数据,本地存储(localDB), 用于辅助查询,效率高
*/
func (x *x2ethereum) ExecLocal_Eth2Chain33_lock(payload *x2eTy.Eth2Chain33, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (x *x2ethereum) ExecLocal_Eth2Chain33Lock(payload *x2eTy.Eth2Chain33, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
set, err := x.execLocal(receiptData)
if err != nil {
return set, err
......@@ -20,7 +20,7 @@ func (x *x2ethereum) ExecLocal_Eth2Chain33_lock(payload *x2eTy.Eth2Chain33, tx *
return x.addAutoRollBack(tx, set.KV), nil
}
func (x *x2ethereum) ExecLocal_Eth2Chain33_burn(payload *x2eTy.Eth2Chain33, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (x *x2ethereum) ExecLocal_Eth2Chain33Burn(payload *x2eTy.Eth2Chain33, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
set, err := x.execLocal(receiptData)
if err != nil {
return set, err
......@@ -28,7 +28,7 @@ func (x *x2ethereum) ExecLocal_Eth2Chain33_burn(payload *x2eTy.Eth2Chain33, tx *
return x.addAutoRollBack(tx, set.KV), nil
}
func (x *x2ethereum) ExecLocal_Chain33ToEth_burn(payload *x2eTy.Chain33ToEth, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (x *x2ethereum) ExecLocal_Chain33ToEthBurn(payload *x2eTy.Chain33ToEth, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
set, err := x.execLocal(receiptData)
if err != nil {
return set, err
......@@ -36,7 +36,7 @@ func (x *x2ethereum) ExecLocal_Chain33ToEth_burn(payload *x2eTy.Chain33ToEth, tx
return x.addAutoRollBack(tx, set.KV), nil
}
func (x *x2ethereum) ExecLocal_Chain33ToEth_lock(payload *x2eTy.Chain33ToEth, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (x *x2ethereum) ExecLocal_Chain33ToEthLock(payload *x2eTy.Chain33ToEth, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
set, err := x.execLocal(receiptData)
if err != nil {
return set, err
......
......@@ -5,7 +5,6 @@ import (
"strings"
"github.com/33cn/chain33/account"
"github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/types"
x2eTy "github.com/33cn/plugin/plugin/dapp/x2Ethereum/types"
)
......@@ -166,7 +165,7 @@ func (x *x2ethereum) Query_GetRelayerBalance(in *x2eTy.QueryRelayerBalance) (typ
return nil, err
}
acc := accDB.LoadExecAccount(in.Address, address.ExecAddress(x2eTy.X2ethereumX))
acc := accDB.LoadAccount(in.Address)
res := new(x2eTy.ReceiptQueryRelayerBalanceForOneToken)
res.TokenAddr = in.TokenAddr
res.TokenSymbol = in.TokenSymbol
......@@ -191,7 +190,7 @@ func (x *x2ethereum) Query_GetRelayerBalance(in *x2eTy.QueryRelayerBalance) (typ
return nil, err
}
acc := accDB.LoadExecAccount(in.Address, address.ExecAddress(x2eTy.X2ethereumX))
acc := accDB.LoadAccount(in.Address)
res := new(x2eTy.ReceiptQueryRelayerBalanceForOneToken)
res.TokenAddr = addr
res.TokenSymbol = in.TokenSymbol
......
......@@ -72,13 +72,12 @@ func (a *action) procEth2Chain33_lock(ethBridgeClaim *x2eTy.Eth2Chain33) (*types
if status.Text == x2eTy.EthBridgeStatus_SuccessStatusText {
// mavl-x2ethereum-eth+tokenAddress
// 这里为了区分相同tokensymbol不同tokenAddress做了级联处理
_, symbol, _ := x2eTy.DivideDot(ethBridgeClaim.IssuerDotSymbol)
accDB, err := account.NewAccountDB(a.api.GetConfig(), x2eTy.X2ethereumX, strings.ToLower(symbol+ethBridgeClaim.TokenContractAddress), a.db)
accDB, err := account.NewAccountDB(a.api.GetConfig(), x2eTy.X2ethereumX, strings.ToLower(ethBridgeClaim.IssuerDotSymbol+ethBridgeClaim.TokenContractAddress), a.db)
if err != nil {
return nil, errors.Wrapf(err, "relay procMsgEth2Chain33,exec=%s,sym=%s", x2eTy.X2ethereumX, symbol)
return nil, errors.Wrapf(err, "relay procMsgEth2Chain33,exec=%s,sym=%s", x2eTy.X2ethereumX, ethBridgeClaim.IssuerDotSymbol)
}
r, err := a.oracle.ProcessSuccessfulClaimForLock(status.FinalClaim, a.execaddr, symbol, accDB)
r, err := a.oracle.ProcessSuccessfulClaimForLock(status.FinalClaim, a.execaddr, accDB)
if err != nil {
return nil, err
}
......@@ -122,10 +121,9 @@ func (a *action) procChain33ToEth_burn(msgBurn *x2eTy.Chain33ToEth) (*types.Rece
return nil, err
}
_, symbol, _ := x2eTy.DivideDot(msgBurn.IssuerDotSymbol)
accDB, err := account.NewAccountDB(a.api.GetConfig(), x2eTy.X2ethereumX, strings.ToLower(symbol+msgBurn.TokenContract), a.db)
accDB, err := account.NewAccountDB(a.api.GetConfig(), x2eTy.X2ethereumX, strings.ToLower(msgBurn.IssuerDotSymbol+msgBurn.TokenContract), a.db)
if err != nil {
return nil, errors.Wrapf(err, "relay procMsgBurn,exec=%s,sym=%s", x2eTy.X2ethereumX, symbol)
return nil, errors.Wrapf(err, "relay procMsgBurn,exec=%s,sym=%s", x2eTy.X2ethereumX, msgBurn.IssuerDotSymbol)
}
r, err := a.oracle.ProcessBurn(a.fromaddr, a.execaddr, msgBurn.Amount, msgBurn.TokenContract, msgBurn.Decimals, accDB)
if err != nil {
......@@ -162,7 +160,7 @@ func (a *action) procChain33ToEth_lock(msgLock *x2eTy.Chain33ToEth) (*types.Rece
var accDB *account.DB
exec, symbol, _ := x2eTy.DivideDot(msgLock.IssuerDotSymbol)
if exec == "coins" {
accDB := account.NewCoinsAccount(a.api.GetConfig())
accDB = account.NewCoinsAccount(a.api.GetConfig())
accDB.SetDB(a.db)
} else {
accDB, err = account.NewAccountDB(a.api.GetConfig(), exec, strings.ToLower(symbol), a.db)
......@@ -233,7 +231,7 @@ func (a *action) procEth2Chain33_burn(withdrawEth *x2eTy.Eth2Chain33) (*types.Re
var accDB *account.DB
exec, symbol, _ := x2eTy.DivideDot(withdrawEth.IssuerDotSymbol)
if exec == "coins" {
accDB := account.NewCoinsAccount(a.api.GetConfig())
accDB = account.NewCoinsAccount(a.api.GetConfig())
accDB.SetDB(a.db)
} else {
accDB, err = account.NewAccountDB(a.api.GetConfig(), exec, strings.ToLower(symbol), a.db)
......
......@@ -27,7 +27,7 @@ func NewOracle(db dbm.KV, consensusThreshold int64) *Oracle {
}
// 处理经过审核的关于Lock的claim
func (o *Oracle) ProcessSuccessfulClaimForLock(claim, execAddr, tokenSymbol string, accDB *account.DB) (*types.Receipt, error) {
func (o *Oracle) ProcessSuccessfulClaimForLock(claim, execAddr string, accDB *account.DB) (*types.Receipt, error) {
var receipt *types.Receipt
oracleClaim, err := CreateOracleClaimFromOracleString(claim)
if err != nil {
......
......@@ -12,17 +12,17 @@ enum EthBridgeStatus {
message X2ethereumAction {
oneof value {
Eth2Chain33 eth2Chain33 = 1;
Eth2Chain33 withdrawEth = 2;
Chain33ToEth withdrawChain33 = 3;
Chain33ToEth chain33ToEth = 4;
Eth2Chain33 eth2Chain33Lock = 1;
Eth2Chain33 eth2Chain33Burn = 2;
Chain33ToEth chain33ToEthBurn = 3;
Chain33ToEth chain33ToEthLock = 4;
MsgValidator addValidator = 5;
MsgValidator removeValidator = 6;
MsgValidator modifyPower = 7;
MsgConsensusThreshold setConsensusThreshold = 8;
AssetsTransfer transfer = 9;
AssetsTransferToExec transferToExec = 10;
AssetsWithdraw withdraw = 11;
AssetsWithdraw withdrawFromExec = 11;
}
int32 ty = 12;
}
......
......@@ -200,14 +200,14 @@ function InitChain33Vilators() {
function TestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# token4chain33 在 以太坊 上先有 bty
result=$(${CLIA} relayer ethereum token4chain33 -s bty)
result=$(${CLIA} relayer ethereum token4chain33 -s coins.bty)
tokenAddr=$(cli_ret "${result}" "token4chain33" ".addr")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
# chain33 lock bty
hash=$(${Chain33Cli} send x2ethereum lock -a 5 -t bty -r ${ethReceiverAddr1} -q ${tokenAddr} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
hash=$(${Chain33Cli} send x2ethereum lock -a 5 -t coins.bty -r ${ethReceiverAddr1} -q ${tokenAddr} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
block_wait "${Chain33Cli}" $((maturityDegree + 2))
check_tx "${Chain33Cli}" "${hash}"
......@@ -216,14 +216,14 @@ function TestChain33ToEthAssets() {
eth_block_wait $((maturityDegree + 2))
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} relayer ethereum burn -m 5 -k "${ethReceiverAddrKey1}" -r "${chain33SenderAddr}" -t "${tokenAddr}")
cli_ret "${result}" "burn"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
# eth 等待 10 个区块
......@@ -294,6 +294,176 @@ function TestETH2Chain33Erc20() {
result=$(${CLIA} relayer ethereum mint -m 1000 -o "${ethReceiverAddr1}" -t "${tokenAddr}")
cli_ret "${result}" "mint"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "1000"
result=$(${CLIA} relayer ethereum bridgeBankAddr)
bridgeBankAddr=$(cli_ret "${result}" "bridgeBankAddr" ".addr")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
# lock 100
result=$(${CLIA} relayer ethereum lock -m 100 -k "${ethReceiverAddrKey1}" -r "${chain33Validator1}" -t "${tokenAddr}")
cli_ret "${result}" "lock"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "900"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
# eth 等待 10 个区块
eth_block_wait $((maturityDegree + 2))
result=$(${Chain33Cli} x2ethereum balance -s "${chain33Validator1}" -t "${tokenSymbol}" -a "${tokenAddr}" | jq ".res" | jq ".[]")
balance_ret "${result}" "100"
# chain33 burn 100
hash=$(${Chain33Cli} send x2ethereum burn -a 100 -t "${tokenSymbol}" -r ${ethReceiverAddr2} -q ${tokenAddr} -k "${chain33Validator1}")
block_wait "${Chain33Cli}" $((maturityDegree + 2))
check_tx "${Chain33Cli}" "${hash}"
result=$(${Chain33Cli} x2ethereum balance -s "${chain33Validator1}" -t "${tokenSymbol}" -a "${tokenAddr}" | jq ".res" | jq ".[]")
balance_ret "${result}" "0"
eth_block_wait 2
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function TestChain33ToEthAssetsKill() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
if [ "${tokenAddrBty}" == "" ]; then
# token4chain33 在 以太坊 上先有 bty
result=$(${CLIA} relayer ethereum token4chain33 -s bty)
tokenAddrBty=$(cli_ret "${result}" "token4chain33" ".addr")
fi
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddrBty}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
kill_ebrelayerD
# chain33 lock bty
hash=$(${Chain33Cli} send x2ethereum lock -a 5 -t bty -r ${ethReceiverAddr2} -q ${tokenAddrBty} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
block_wait "${Chain33Cli}" $((maturityDegree + 2))
check_tx "${Chain33Cli}" "${hash}"
eth_block_wait $((maturityDegree + 2))
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddrBty}")
cli_ret "${result}" "balance" ".balance" "0"
start_ebrelayerC
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddrBty}")
cli_ret "${result}" "balance" ".balance" "5"
# eth burn
result=$(${CLIA} relayer ethereum burn -m 5 -k "${ethReceiverAddrKey2}" -r "${chain33Validator1}" -t "${tokenAddrBty}")
cli_ret "${result}" "burn"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddrBty}")
cli_ret "${result}" "balance" ".balance" "0"
# eth 等待 10 个区块
eth_block_wait $((maturityDegree + 2))
result=$(${Chain33Cli} account balance -a "${chain33Validator1}" -e x2ethereum)
balance_ret "${result}" "0"
start_ebrelayerD
result=$(${Chain33Cli} account balance -a "${chain33Validator1}" -e x2ethereum)
balance_ret "${result}" "5"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
# eth to chain33
# 在以太坊上锁定资产,然后在 chain33 上铸币,针对 eth 资产
function TestETH2Chain33AssetsKill() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
${CLIA} relayer unlock -p 123456hzj
result=$(${CLIA} relayer ethereum bridgeBankAddr)
bridgeBankAddr=$(cli_ret "${result}" "bridgeBankAddr" ".addr")
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
kill_ebrelayerD
# eth lock 0.1
result=$(${CLIA} relayer ethereum lock -m 0.1 -k "${ethReceiverAddrKey1}" -r 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
cli_ret "${result}" "lock"
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}")
cli_ret "${result}" "balance" ".balance" "0.1"
# eth 等待 10 个区块
eth_block_wait $((maturityDegree + 2))
result=$(${Chain33Cli} x2ethereum balance -s 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv -t eth | jq ".res" | jq ".[]")
balance_ret "${result}" "0"
start_ebrelayerC
start_ebrelayerD
result=$(${Chain33Cli} x2ethereum balance -s 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv -t eth | jq ".res" | jq ".[]")
balance_ret "${result}" "0.1"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}")
balance=$(cli_ret "${result}" "balance" ".balance")
kill_ebrelayerC
kill_ebrelayerD
hash=$(${Chain33Cli} send x2ethereum burn -a 0.1 -t eth -r ${ethReceiverAddr2} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
block_wait "${Chain33Cli}" $((maturityDegree + 2))
check_tx "${Chain33Cli}" "${hash}"
result=$(${Chain33Cli} x2ethereum balance -s 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv -t eth | jq ".res" | jq ".[]")
balance_ret "${result}" "0"
eth_block_wait 2
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}")
cli_ret "${result}" "balance" ".balance" "0.1"
start_ebrelayerC
start_ebrelayerD
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}")
cli_ret "${result}" "balance" ".balance" $(echo "${balance}+0.1" | bc)
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function TestETH2Chain33Erc20Kill() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
${CLIA} relayer unlock -p 123456hzj
# token4erc20 在 chain33 上先有 token,同时 mint
tokenSymbol="testcc"
result=$(${CLIA} relayer ethereum token4erc20 -s "${tokenSymbol}")
tokenAddr=$(cli_ret "${result}" "token4erc20" ".addr")
# 先铸币 1000
result=$(${CLIA} relayer ethereum mint -m 1000 -o "${ethReceiverAddr1}" -t "${tokenAddr}")
cli_ret "${result}" "mint"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
cli_ret "${result}" "balance" ".balance" "1000"
......@@ -303,6 +473,9 @@ function TestETH2Chain33Erc20() {
result=$(${CLIA} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
cli_ret "${result}" "balance" ".balance" "0"
kill_ebrelayerC
kill_ebrelayerD
# lock 100
result=$(${CLIA} relayer ethereum lock -m 100 -k "${ethReceiverAddrKey1}" -r "${chain33Validator1}" -t "${tokenAddr}")
cli_ret "${result}" "lock"
......@@ -317,8 +490,17 @@ function TestETH2Chain33Erc20() {
eth_block_wait $((maturityDegree + 2))
result=$(${Chain33Cli} x2ethereum balance -s "${chain33Validator1}" -t "${tokenSymbol}" -a "${tokenAddr}" | jq ".res" | jq ".[]")
balance_ret "${result}" "0"
start_ebrelayerC
start_ebrelayerD
result=$(${Chain33Cli} x2ethereum balance -s "${chain33Validator1}" -t "${tokenSymbol}" -a "${tokenAddr}" | jq ".res" | jq ".[]")
balance_ret "${result}" "100"
kill_ebrelayerC
kill_ebrelayerD
# chain33 burn 100
hash=$(${Chain33Cli} send x2ethereum burn -a 100 -t "${tokenSymbol}" -r ${ethReceiverAddr2} -q ${tokenAddr} -k "${chain33Validator1}")
block_wait "${Chain33Cli}" $((maturityDegree + 2))
......@@ -329,6 +511,8 @@ function TestETH2Chain33Erc20() {
eth_block_wait 2
start_ebrelayerC
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
cli_ret "${result}" "balance" ".balance" "100"
......@@ -353,6 +537,12 @@ function main() {
TestChain33ToEthAssets
TestETH2Chain33Assets
TestETH2Chain33Erc20
# kill relayer and start relayer
# TestChain33ToEthAssetsKill
# TestETH2Chain33AssetsKill
# TestETH2Chain33Erc20Kill
echo -e "${GRE}===========allTest $FUNCNAME end ===========${NOC}"
}
......
......@@ -67,13 +67,13 @@ TestETH2Chain33Erc20() {
result=$(${CLI} relayer ethereum mint -m 1000 -o "${ethReceiverAddr1}" -t "${tokenAddr}")
cli_ret "${result}" "mint"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "1000"
result=$(${CLI} relayer ethereum bridgeBankAddr)
bridgeBankAddr=$(cli_ret "${result}" "bridgeBankAddr" ".addr")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 2 chain33 lock 前先审批一下
......@@ -85,10 +85,10 @@ TestETH2Chain33Erc20() {
result=$(${CLI} relayer ethereum lock -m 100 -k "${ethReceiverAddrKey1}" -r "${chain33SenderAddr}" -t "${tokenAddr}")
cli_ret "${result}" "lock"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "900"
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
# ETH 2 chain33 withdraw 40
......@@ -98,10 +98,10 @@ TestETH2Chain33Erc20() {
walitProphecyFinish "${ethReceiverAddr2}" "${tokenAddr}" 40
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "40"
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "60"
# burn 60
......@@ -110,10 +110,10 @@ TestETH2Chain33Erc20() {
walitProphecyFinish "${ethReceiverAddr2}" "${tokenAddr}" 100
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "100"
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
echo "=========== $FUNCNAME end ==========="
......@@ -132,13 +132,13 @@ TestETH2Chain33Erc20_err() {
result=$(${CLI} relayer ethereum mint -m 1000 -o "${ethReceiverAddr1}" -t "${tokenAddr}")
cli_ret "${result}" "mint"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "1000"
result=$(${CLI} relayer ethereum bridgeBankAddr)
bridgeBankAddr=$(cli_ret "${result}" "bridgeBankAddr" ".addr")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
# ETH 2 chain33 lock 前先审批一下
......@@ -149,7 +149,7 @@ TestETH2Chain33Erc20_err() {
result=$(${CLI} relayer ethereum lock -m 200 -k "${ethReceiverAddrKey1}" -r "${chain33SenderAddr}" -t "${tokenAddr}")
cli_ret_err "${result}"
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
# lock 1100 err
......@@ -158,7 +158,7 @@ TestETH2Chain33Erc20_err() {
result=$(${CLI} relayer ethereum lock -m 1100 -k "${ethReceiverAddrKey1}" -r "${chain33SenderAddr}" -t "${tokenAddr}")
cli_ret_err "${result}"
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
result=$(${CLI} relayer ethereum approve -m 300 -k "${ethReceiverAddrKey1}" -t "${tokenAddr}")
......@@ -169,10 +169,10 @@ TestETH2Chain33Erc20_err() {
result=$(${CLI} relayer ethereum lock -m 300 -k "${ethReceiverAddrKey1}" -r "${chain33SenderAddr}" -t "${tokenAddr}")
cli_ret "${result}" "lock"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "700"
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "300"
# -c 1 burn 500
......@@ -181,10 +181,10 @@ TestETH2Chain33Erc20_err() {
sleep 15
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "0"
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${bridgeBankAddr}" -t "${tokenSymbol}")
cli_ret "${result}" "balance" ".balance" "300"
echo "=========== $FUNCNAME end ==========="
......@@ -283,10 +283,10 @@ TestChain33ToEthAssets() {
echo "=========== $FUNCNAME begin ==========="
result=$(${CLI} relayer unlock -p 123456hzj)
# token4chain33 在 以太坊 上先有 bty
result=$(${CLI} relayer ethereum token4chain33 -s bty)
result=$(${CLI} relayer ethereum token4chain33 -s coins.bty)
tokenAddr=$(cli_ret "${result}" "token4chain33" ".addr")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
# -c 2 chain33 lock 100
......@@ -295,26 +295,26 @@ TestChain33ToEthAssets() {
walitProphecyFinish "${ethReceiverAddr1}" "${tokenAddr}" "100"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "100"
# transfer 10
result=$(${CLI} relayer ethereum transfer -m 10 -k "${ethReceiverAddrKey1}" -r "${ethReceiverAddr2}" -t "${tokenAddr}")
cli_ret "${result}" "transfer"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "90"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "10"
result=$(${CLI} relayer ethereum transfer -m 10 -k "${ethReceiverAddrKey2}" -r "${ethReceiverAddr3}" -t "${tokenAddr}")
cli_ret "${result}" "transfer"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr2}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr3}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr3}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "10"
result=$(${CLI} relayer ethereum transfer -m 10 -k "${ethReceiverAddrKey2}" -r "${ethReceiverAddr3}" -t "${tokenAddr}")
......@@ -327,7 +327,7 @@ TestChain33ToEthAssets() {
result=$(${CLI} relayer ethereum burn -m 90 -k "${ethReceiverAddrKey1}" -r "${chain33SenderAddr}" -t "${tokenAddr}")
cli_ret "${result}" "burn"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
# brun 10 err
......
......@@ -112,23 +112,23 @@ function ImportCBDKey() {
TestChain33ToEth() {
echo "=========== $FUNCNAME begin ==========="
# token4chain33 在 以太坊 上先有 bty
result=$(${CLIA} relayer ethereum token4chain33 -s bty)
result=$(${CLIA} relayer ethereum token4chain33 -s coins.bty)
tokenAddr=$(cli_ret "${result}" "token4chain33" ".addr")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
for name in A B C D; do
CLI="../build/ebcli_$name"
# -c 2 chain33 lock 100
result=$(${CLI} relayer ethereum prophecy -i "${prophecyTx0}" -m 100 -a "${chain33SenderAddr}" -c 2 -r "${ethReceiverAddr1}" -s bty -t "${tokenAddr}")
result=$(${CLI} relayer ethereum prophecy -i "${prophecyTx0}" -m 100 -a "${chain33SenderAddr}" -c 2 -r "${ethReceiverAddr1}" -s coins.bty -t "${tokenAddr}")
cli_ret "${result}" "prophecy -m 1"
if [[ ${name} == "A" || ${name} == "B" ]]; then
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
elif [[ ${name} == "C" || ${name} == "D" ]]; then
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "100"
fi
done
......@@ -137,10 +137,10 @@ TestChain33ToEth() {
result=$(${CLIA} relayer ethereum transfer -m 10 -k "${ethReceiverAddrKey1}" -r "${ethReceiverAddr2}" -t "${tokenAddr}")
cli_ret "${result}" "transfer"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "90"
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "${tokenAddr}")
result=$(${CLIA} relayer ethereum balance -o "${ethReceiverAddr2}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "10"
# burn 90
......
......@@ -153,15 +153,15 @@ function InitChain33Vilators() {
function TestChain33ToEthAssets() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# token4chain33 在 以太坊 上先有 bty
result=$(${CLI} relayer ethereum token4chain33 -s bty)
result=$(${CLI} relayer ethereum token4chain33 -s coins.bty)
tokenAddr=$(cli_ret "${result}" "token4chain33" ".addr")
# tokenAddr="0x9C3D40A44a2F61Ef8D46fa8C7A731C08FB16cCEF"
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "${tokenAddr}")
result=$(${CLI} relayer ethereum balance -o "${ethReceiverAddr1}" -t "coins.bty")
cli_ret "${result}" "balance" ".balance" "0"
# chain33 lock bty
hash=$(${Chain33Cli} send x2ethereum lock -a 5 -t bty -r ${ethReceiverAddr1} -q ${tokenAddr} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
hash=$(${Chain33Cli} send x2ethereum lock -a 5 -t coins.bty -r ${ethReceiverAddr1} -q ${tokenAddr} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
block_wait "${Chain33Cli}" $((maturityDegree + 2))
check_tx "${Chain33Cli}" "${hash}"
......
......@@ -46,10 +46,10 @@ const (
TyTransferToExecAction
TyWithdrawFromExecAction
NameEth2Chain33Action = "Eth2Chain33_lock"
NameWithdrawEthAction = "Eth2Chain33_burn"
NameWithdrawChain33Action = "Chain33ToEth_burn"
NameChain33ToEthAction = "Chain33ToEth_lock"
NameEth2Chain33Action = "Eth2Chain33Lock"
NameWithdrawEthAction = "Eth2Chain33Burn"
NameWithdrawChain33Action = "Chain33ToEthBurn"
NameChain33ToEthAction = "Chain33ToEthLock"
NameAddValidatorAction = "AddValidator"
NameRemoveValidatorAction = "RemoveValidator"
NameModifyPowerAction = "ModifyPower"
......
......@@ -109,14 +109,14 @@ func (x x2ethereumType) ActionName(tx *types.Transaction) string {
// GetActionName get action name
func (action *X2EthereumAction) GetActionName() string {
if action.Ty == TyEth2Chain33Action && action.GetEth2Chain33() != nil {
return "Eth2Chain33_lock"
} else if action.Ty == TyWithdrawEthAction && action.GetWithdrawEth() != nil {
return "Eth2Chain33_burn"
} else if action.Ty == TyWithdrawChain33Action && action.GetWithdrawChain33() != nil {
return "Chain33ToEth_burn"
} else if action.Ty == TyChain33ToEthAction && action.GetChain33ToEth() != nil {
return "Chain33ToEth_lock"
if action.Ty == TyEth2Chain33Action && action.GetEth2Chain33Lock() != nil {
return "Eth2Chain33Lock"
} else if action.Ty == TyWithdrawEthAction && action.GetEth2Chain33Burn() != nil {
return "Eth2Chain33Burn"
} else if action.Ty == TyWithdrawChain33Action && action.GetChain33ToEthBurn() != nil {
return "Chain33ToEthBurn"
} else if action.Ty == TyChain33ToEthAction && action.GetChain33ToEthLock() != nil {
return "Chain33ToEthLock"
} else if action.Ty == TyAddValidatorAction && action.GetAddValidator() != nil {
return "AddValidator"
} else if action.Ty == TyRemoveValidatorAction && action.GetRemoveValidator() != nil {
......@@ -129,7 +129,7 @@ func (action *X2EthereumAction) GetActionName() string {
return "Transfer"
} else if action.Ty == TyTransferToExecAction && action.GetTransferToExec() != nil {
return "TransferToExec"
} else if action.Ty == TyWithdrawFromExecAction && action.GetWithdraw() != nil {
} else if action.Ty == TyWithdrawFromExecAction && action.GetWithdrawFromExec() != nil {
return "WithdrawFromExec"
}
return "unknown-x2ethereum"
......
......@@ -53,17 +53,17 @@ func (EthBridgeStatus) EnumDescriptor() ([]byte, []int) {
type X2EthereumAction struct {
// Types that are valid to be assigned to Value:
// *X2EthereumAction_Eth2Chain33
// *X2EthereumAction_WithdrawEth
// *X2EthereumAction_WithdrawChain33
// *X2EthereumAction_Chain33ToEth
// *X2EthereumAction_Eth2Chain33Lock
// *X2EthereumAction_Eth2Chain33Burn
// *X2EthereumAction_Chain33ToEthBurn
// *X2EthereumAction_Chain33ToEthLock
// *X2EthereumAction_AddValidator
// *X2EthereumAction_RemoveValidator
// *X2EthereumAction_ModifyPower
// *X2EthereumAction_SetConsensusThreshold
// *X2EthereumAction_Transfer
// *X2EthereumAction_TransferToExec
// *X2EthereumAction_Withdraw
// *X2EthereumAction_WithdrawFromExec
Value isX2EthereumAction_Value `protobuf_oneof:"value"`
Ty int32 `protobuf:"varint,12,opt,name=ty,proto3" json:"ty,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
......@@ -100,20 +100,20 @@ type isX2EthereumAction_Value interface {
isX2EthereumAction_Value()
}
type X2EthereumAction_Eth2Chain33 struct {
Eth2Chain33 *Eth2Chain33 `protobuf:"bytes,1,opt,name=eth2Chain33,proto3,oneof"`
type X2EthereumAction_Eth2Chain33Lock struct {
Eth2Chain33Lock *Eth2Chain33 `protobuf:"bytes,1,opt,name=eth2Chain33Lock,proto3,oneof"`
}
type X2EthereumAction_WithdrawEth struct {
WithdrawEth *Eth2Chain33 `protobuf:"bytes,2,opt,name=withdrawEth,proto3,oneof"`
type X2EthereumAction_Eth2Chain33Burn struct {
Eth2Chain33Burn *Eth2Chain33 `protobuf:"bytes,2,opt,name=eth2Chain33Burn,proto3,oneof"`
}
type X2EthereumAction_WithdrawChain33 struct {
WithdrawChain33 *Chain33ToEth `protobuf:"bytes,3,opt,name=withdrawChain33,proto3,oneof"`
type X2EthereumAction_Chain33ToEthBurn struct {
Chain33ToEthBurn *Chain33ToEth `protobuf:"bytes,3,opt,name=chain33ToEthBurn,proto3,oneof"`
}
type X2EthereumAction_Chain33ToEth struct {
Chain33ToEth *Chain33ToEth `protobuf:"bytes,4,opt,name=chain33ToEth,proto3,oneof"`
type X2EthereumAction_Chain33ToEthLock struct {
Chain33ToEthLock *Chain33ToEth `protobuf:"bytes,4,opt,name=chain33ToEthLock,proto3,oneof"`
}
type X2EthereumAction_AddValidator struct {
......@@ -140,17 +140,17 @@ type X2EthereumAction_TransferToExec struct {
TransferToExec *types.AssetsTransferToExec `protobuf:"bytes,10,opt,name=transferToExec,proto3,oneof"`
}
type X2EthereumAction_Withdraw struct {
Withdraw *types.AssetsWithdraw `protobuf:"bytes,11,opt,name=withdraw,proto3,oneof"`
type X2EthereumAction_WithdrawFromExec struct {
WithdrawFromExec *types.AssetsWithdraw `protobuf:"bytes,11,opt,name=withdrawFromExec,proto3,oneof"`
}
func (*X2EthereumAction_Eth2Chain33) isX2EthereumAction_Value() {}
func (*X2EthereumAction_Eth2Chain33Lock) isX2EthereumAction_Value() {}
func (*X2EthereumAction_WithdrawEth) isX2EthereumAction_Value() {}
func (*X2EthereumAction_Eth2Chain33Burn) isX2EthereumAction_Value() {}
func (*X2EthereumAction_WithdrawChain33) isX2EthereumAction_Value() {}
func (*X2EthereumAction_Chain33ToEthBurn) isX2EthereumAction_Value() {}
func (*X2EthereumAction_Chain33ToEth) isX2EthereumAction_Value() {}
func (*X2EthereumAction_Chain33ToEthLock) isX2EthereumAction_Value() {}
func (*X2EthereumAction_AddValidator) isX2EthereumAction_Value() {}
......@@ -164,7 +164,7 @@ func (*X2EthereumAction_Transfer) isX2EthereumAction_Value() {}
func (*X2EthereumAction_TransferToExec) isX2EthereumAction_Value() {}
func (*X2EthereumAction_Withdraw) isX2EthereumAction_Value() {}
func (*X2EthereumAction_WithdrawFromExec) isX2EthereumAction_Value() {}
func (m *X2EthereumAction) GetValue() isX2EthereumAction_Value {
if m != nil {
......@@ -173,30 +173,30 @@ func (m *X2EthereumAction) GetValue() isX2EthereumAction_Value {
return nil
}
func (m *X2EthereumAction) GetEth2Chain33() *Eth2Chain33 {
if x, ok := m.GetValue().(*X2EthereumAction_Eth2Chain33); ok {
return x.Eth2Chain33
func (m *X2EthereumAction) GetEth2Chain33Lock() *Eth2Chain33 {
if x, ok := m.GetValue().(*X2EthereumAction_Eth2Chain33Lock); ok {
return x.Eth2Chain33Lock
}
return nil
}
func (m *X2EthereumAction) GetWithdrawEth() *Eth2Chain33 {
if x, ok := m.GetValue().(*X2EthereumAction_WithdrawEth); ok {
return x.WithdrawEth
func (m *X2EthereumAction) GetEth2Chain33Burn() *Eth2Chain33 {
if x, ok := m.GetValue().(*X2EthereumAction_Eth2Chain33Burn); ok {
return x.Eth2Chain33Burn
}
return nil
}
func (m *X2EthereumAction) GetWithdrawChain33() *Chain33ToEth {
if x, ok := m.GetValue().(*X2EthereumAction_WithdrawChain33); ok {
return x.WithdrawChain33
func (m *X2EthereumAction) GetChain33ToEthBurn() *Chain33ToEth {
if x, ok := m.GetValue().(*X2EthereumAction_Chain33ToEthBurn); ok {
return x.Chain33ToEthBurn
}
return nil
}
func (m *X2EthereumAction) GetChain33ToEth() *Chain33ToEth {
if x, ok := m.GetValue().(*X2EthereumAction_Chain33ToEth); ok {
return x.Chain33ToEth
func (m *X2EthereumAction) GetChain33ToEthLock() *Chain33ToEth {
if x, ok := m.GetValue().(*X2EthereumAction_Chain33ToEthLock); ok {
return x.Chain33ToEthLock
}
return nil
}
......@@ -243,9 +243,9 @@ func (m *X2EthereumAction) GetTransferToExec() *types.AssetsTransferToExec {
return nil
}
func (m *X2EthereumAction) GetWithdraw() *types.AssetsWithdraw {
if x, ok := m.GetValue().(*X2EthereumAction_Withdraw); ok {
return x.Withdraw
func (m *X2EthereumAction) GetWithdrawFromExec() *types.AssetsWithdraw {
if x, ok := m.GetValue().(*X2EthereumAction_WithdrawFromExec); ok {
return x.WithdrawFromExec
}
return nil
}
......@@ -260,17 +260,17 @@ func (m *X2EthereumAction) GetTy() int32 {
// XXX_OneofWrappers is for the internal use of the proto package.
func (*X2EthereumAction) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*X2EthereumAction_Eth2Chain33)(nil),
(*X2EthereumAction_WithdrawEth)(nil),
(*X2EthereumAction_WithdrawChain33)(nil),
(*X2EthereumAction_Chain33ToEth)(nil),
(*X2EthereumAction_Eth2Chain33Lock)(nil),
(*X2EthereumAction_Eth2Chain33Burn)(nil),
(*X2EthereumAction_Chain33ToEthBurn)(nil),
(*X2EthereumAction_Chain33ToEthLock)(nil),
(*X2EthereumAction_AddValidator)(nil),
(*X2EthereumAction_RemoveValidator)(nil),
(*X2EthereumAction_ModifyPower)(nil),
(*X2EthereumAction_SetConsensusThreshold)(nil),
(*X2EthereumAction_Transfer)(nil),
(*X2EthereumAction_TransferToExec)(nil),
(*X2EthereumAction_Withdraw)(nil),
(*X2EthereumAction_WithdrawFromExec)(nil),
}
}
......@@ -1929,93 +1929,94 @@ func init() {
}
var fileDescriptor_1dd1834a817ceb21 = []byte{
// 1368 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcb, 0x6e, 0xdb, 0x46,
0x17, 0x36, 0x45, 0xc9, 0x8e, 0x8e, 0x64, 0x5b, 0x99, 0x44, 0xfe, 0x09, 0xff, 0x69, 0x22, 0x10,
0xbd, 0x18, 0x69, 0x6b, 0x14, 0x76, 0x7a, 0xc9, 0x26, 0x8d, 0x2f, 0x4a, 0x65, 0xa0, 0x69, 0xdc,
0x91, 0xd2, 0x0b, 0x90, 0xcd, 0x98, 0x9c, 0x98, 0x44, 0x29, 0x52, 0x18, 0x8e, 0x6c, 0x69, 0xd9,
0x37, 0xe8, 0xab, 0x64, 0xdb, 0x45, 0x5f, 0xa2, 0x8b, 0xbe, 0x40, 0x77, 0x7d, 0x85, 0x2e, 0x8a,
0x19, 0x0e, 0xc9, 0x21, 0x45, 0x2b, 0x81, 0xd1, 0x4d, 0xba, 0xf3, 0x7c, 0xe7, 0x3b, 0xf7, 0xc3,
0x33, 0x63, 0x41, 0x67, 0xb6, 0x47, 0xb9, 0x47, 0x19, 0x9d, 0x8e, 0x77, 0x27, 0x2c, 0xe2, 0x11,
0x6a, 0xf0, 0xf9, 0x84, 0xc6, 0xdb, 0x37, 0x39, 0x23, 0x61, 0x4c, 0x1c, 0xee, 0x47, 0x61, 0x22,
0xd9, 0x5e, 0x27, 0x8e, 0x13, 0x4d, 0x43, 0x9e, 0x1c, 0xed, 0xdf, 0x1b, 0xd0, 0xf9, 0x21, 0xd3,
0x3e, 0x90, 0x4c, 0xf4, 0x19, 0xb4, 0x28, 0xf7, 0xf6, 0x8e, 0x3c, 0xe2, 0x87, 0xfb, 0xfb, 0x96,
0xd1, 0x33, 0x76, 0x5a, 0x7b, 0x68, 0x57, 0xda, 0xdc, 0xed, 0xe7, 0x92, 0xc1, 0x0a, 0xd6, 0x89,
0x42, 0xef, 0xd2, 0xe7, 0x9e, 0xcb, 0xc8, 0x65, 0x9f, 0x7b, 0x56, 0x6d, 0x99, 0x9e, 0x46, 0x44,
0x5f, 0xc2, 0x66, 0x7a, 0x4c, 0x7d, 0x9a, 0x52, 0xf7, 0x96, 0xd2, 0x55, 0xe8, 0x28, 0xea, 0x73,
0x6f, 0xb0, 0x82, 0xcb, 0x6c, 0xf4, 0x10, 0xda, 0x8e, 0x46, 0xb1, 0xea, 0xcb, 0xb4, 0x0b, 0x54,
0xa1, 0x4a, 0x5c, 0xf7, 0x3b, 0x12, 0xf8, 0x2e, 0xe1, 0x11, 0xb3, 0x1a, 0x05, 0xd5, 0xa7, 0xf1,
0x79, 0x26, 0x12, 0xaa, 0x3a, 0x55, 0x84, 0xcd, 0xe8, 0x38, 0xba, 0xa0, 0xb9, 0xf6, 0xea, 0x32,
0xed, 0x32, 0x1b, 0x7d, 0x0e, 0xad, 0x71, 0xe4, 0xfa, 0x2f, 0xe7, 0xa7, 0xd1, 0x25, 0x65, 0xd6,
0xda, 0x32, 0x65, 0x9d, 0x89, 0x46, 0xd0, 0x8d, 0x29, 0x3f, 0x8a, 0xc2, 0x98, 0x86, 0xf1, 0x34,
0x1e, 0x79, 0x8c, 0xc6, 0x5e, 0x14, 0xb8, 0xd6, 0x0d, 0x69, 0xe2, 0x4e, 0x6e, 0x62, 0x91, 0x33,
0x58, 0xc1, 0xd5, 0xca, 0x68, 0x1f, 0x6e, 0xc8, 0x79, 0x79, 0x49, 0x99, 0xd5, 0x94, 0x86, 0xba,
0xca, 0xd0, 0x41, 0x1c, 0x53, 0x1e, 0x8f, 0x94, 0x70, 0xb0, 0x82, 0x33, 0x22, 0xea, 0xc3, 0x46,
0xfa, 0xf7, 0x28, 0xea, 0xcf, 0xa8, 0x63, 0x81, 0x54, 0xfd, 0x7f, 0xa5, 0x6a, 0x42, 0x19, 0xac,
0xe0, 0x92, 0x92, 0xf0, 0x9d, 0x36, 0xd5, 0x6a, 0x55, 0xf8, 0xfe, 0x5e, 0x09, 0x85, 0xef, 0x94,
0x88, 0x36, 0xa0, 0xc6, 0xe7, 0x56, 0xbb, 0x67, 0xec, 0x34, 0x70, 0x8d, 0xcf, 0x0f, 0xd7, 0xa0,
0x71, 0x41, 0x82, 0x29, 0xb5, 0xbf, 0x82, 0x6e, 0x65, 0xee, 0x68, 0x17, 0x90, 0xb3, 0x58, 0x35,
0x31, 0xe0, 0x26, 0xae, 0x90, 0xd8, 0x8f, 0xa0, 0xad, 0xf7, 0x01, 0x59, 0xb0, 0x46, 0x5c, 0x97,
0xd1, 0x38, 0x96, 0x4a, 0x4d, 0x9c, 0x1e, 0xd1, 0x6d, 0x68, 0x4c, 0x64, 0x17, 0x6b, 0xd2, 0x58,
0x72, 0xb0, 0x5f, 0x99, 0xd0, 0xd2, 0x06, 0x1f, 0xed, 0xc0, 0x66, 0x5f, 0x7d, 0x6b, 0x12, 0x3a,
0x39, 0x56, 0xce, 0xcb, 0x30, 0x7a, 0x00, 0xdd, 0x43, 0xe6, 0xbb, 0xe7, 0xf4, 0x28, 0x0a, 0x39,
0x23, 0x0e, 0x3f, 0x50, 0x7e, 0x6b, 0xd2, 0x6f, 0xb5, 0x50, 0x44, 0xf1, 0x4d, 0x14, 0x3a, 0x54,
0x7e, 0x3f, 0x26, 0x4e, 0x0e, 0xc2, 0xeb, 0x49, 0x1c, 0x4f, 0x29, 0x3b, 0x8e, 0xf8, 0x70, 0x3e,
0x3e, 0x8b, 0x02, 0xf9, 0x85, 0x34, 0x71, 0x19, 0x46, 0x7b, 0x70, 0x7b, 0x14, 0xfd, 0x44, 0xc3,
0xb2, 0xd3, 0x55, 0x49, 0xaf, 0x94, 0xa1, 0xf7, 0x61, 0x23, 0x0d, 0x7e, 0x48, 0x43, 0x57, 0x0d,
0x72, 0x13, 0x97, 0x50, 0x11, 0x85, 0x2a, 0x03, 0xa6, 0x0e, 0xf5, 0x2f, 0x28, 0x93, 0xe3, 0xda,
0xc4, 0x65, 0x18, 0xdd, 0x87, 0x4e, 0x56, 0xf2, 0x34, 0x82, 0xa6, 0xa4, 0x2e, 0xe0, 0x68, 0x0b,
0x56, 0x0f, 0xc6, 0x62, 0xa1, 0xc9, 0xb9, 0x6b, 0x62, 0x75, 0x42, 0x77, 0xa0, 0x79, 0x14, 0x10,
0x7f, 0x3c, 0x9a, 0x4f, 0xa8, 0x9c, 0x28, 0x13, 0xe7, 0x00, 0xda, 0x86, 0x1b, 0xc7, 0xd4, 0xf1,
0xc7, 0x24, 0x88, 0xe5, 0xfc, 0x98, 0x38, 0x3b, 0xdb, 0xbf, 0x18, 0x80, 0x9e, 0x31, 0xe2, 0x04,
0x54, 0xf2, 0x45, 0xba, 0x34, 0xe4, 0x55, 0xe1, 0x1b, 0xd5, 0xe1, 0xe7, 0x21, 0xd5, 0xae, 0x0e,
0xc9, 0x5c, 0x16, 0x52, 0xbd, 0x14, 0xd2, 0x9f, 0x06, 0xb4, 0xf5, 0x2d, 0x86, 0xde, 0x85, 0xf5,
0x42, 0x2f, 0x54, 0x28, 0x45, 0x50, 0xb0, 0x94, 0x96, 0x6a, 0x4c, 0x12, 0x4f, 0x11, 0x14, 0xd5,
0x4e, 0x3b, 0x95, 0x65, 0x66, 0x26, 0xd5, 0x2e, 0xe3, 0x5a, 0x6a, 0xf5, 0x42, 0x6a, 0x15, 0x13,
0xd6, 0xa8, 0x9e, 0x30, 0x3d, 0xcd, 0xb5, 0x52, 0x9a, 0x7f, 0x9b, 0x80, 0xa4, 0xab, 0x09, 0x7f,
0x9b, 0x3e, 0x1a, 0x1b, 0xda, 0xb2, 0xee, 0xa9, 0xb3, 0x24, 0xf3, 0x02, 0xf6, 0x56, 0x7e, 0x24,
0x16, 0xac, 0xcd, 0x46, 0xb3, 0x01, 0x89, 0x3d, 0xf9, 0x8d, 0xb4, 0x71, 0x7a, 0x94, 0x92, 0x01,
0xf5, 0xcf, 0x3d, 0x6e, 0xad, 0xf7, 0x8c, 0x9d, 0x3a, 0x4e, 0x8f, 0xe8, 0x2e, 0xc0, 0x29, 0x8b,
0x26, 0x1e, 0x75, 0xe6, 0x27, 0xc7, 0xd6, 0x86, 0xf4, 0xa6, 0x21, 0x85, 0xf6, 0x6f, 0x96, 0xda,
0xff, 0x97, 0x01, 0xb7, 0x54, 0xfb, 0xff, 0x83, 0xc3, 0xbe, 0x5a, 0xca, 0xf6, 0x02, 0x3a, 0x2a,
0xd9, 0x6b, 0x5f, 0x2f, 0x7a, 0x87, 0xcc, 0x2b, 0x3b, 0x54, 0x2f, 0x74, 0xc8, 0xfe, 0xcd, 0x80,
0x3b, 0xca, 0xf1, 0xb0, 0xf2, 0x19, 0xf0, 0x00, 0xba, 0x13, 0x46, 0x8f, 0xae, 0xba, 0x26, 0xab,
0x85, 0x42, 0x2b, 0x8c, 0x2e, 0x2b, 0xb4, 0x92, 0x80, 0xab, 0x85, 0xd7, 0x4a, 0x60, 0x07, 0xb6,
0xbe, 0x9d, 0x52, 0x36, 0xef, 0x73, 0x2f, 0x1d, 0xac, 0x53, 0xc2, 0xc8, 0x38, 0x16, 0xef, 0x01,
0xb5, 0x1b, 0x9a, 0xb8, 0x76, 0x72, 0x6c, 0xff, 0x61, 0xe8, 0xfb, 0x24, 0x25, 0x97, 0x69, 0xe8,
0x63, 0x58, 0x1d, 0x72, 0xc2, 0xa7, 0xb1, 0x7a, 0xb1, 0xa6, 0x2f, 0x8f, 0x54, 0x21, 0x11, 0x62,
0x45, 0x42, 0x8f, 0x61, 0x53, 0x7e, 0x23, 0x59, 0xdb, 0x62, 0xcb, 0xec, 0x99, 0x3b, 0xad, 0xbd,
0xad, 0xf4, 0xbd, 0x59, 0x94, 0xe2, 0x32, 0x5d, 0x58, 0xc8, 0x4e, 0x52, 0x26, 0x36, 0xbe, 0x6e,
0xa1, 0x24, 0xc5, 0x65, 0xba, 0xfd, 0xe3, 0x42, 0x0c, 0x62, 0x42, 0x1c, 0x01, 0xa9, 0xc4, 0x92,
0x03, 0xfa, 0x04, 0xe0, 0x22, 0x8f, 0x33, 0xc9, 0xaf, 0xa3, 0xbc, 0x0c, 0x39, 0xf3, 0xc3, 0xf3,
0xa7, 0x64, 0x82, 0x35, 0x8e, 0xdd, 0x5f, 0x08, 0x4e, 0xac, 0x89, 0x8c, 0xa0, 0xcc, 0xe7, 0x40,
0xee, 0xb8, 0xa6, 0x39, 0xb6, 0x3f, 0x84, 0x66, 0x66, 0x5f, 0x6c, 0x05, 0x2d, 0x0a, 0xa3, 0x67,
0x8a, 0xad, 0xa0, 0xf9, 0x3c, 0x86, 0xf5, 0xcc, 0xe7, 0xd7, 0x7e, 0xcc, 0xd1, 0xfe, 0x82, 0x42,
0xf5, 0xc3, 0xb8, 0x60, 0xe5, 0x05, 0x6c, 0x14, 0x5b, 0x86, 0xee, 0x43, 0x7d, 0x44, 0x67, 0xc9,
0xc2, 0xd8, 0xc8, 0xaa, 0xdb, 0xe7, 0x5e, 0x72, 0x11, 0xa8, 0xc6, 0x4a, 0x8e, 0x88, 0xf1, 0x89,
0x1f, 0x92, 0xe0, 0x48, 0xcb, 0x45, 0x43, 0xec, 0x4f, 0xa1, 0x2b, 0xc7, 0x2e, 0x2f, 0xb9, 0x9a,
0xba, 0xa5, 0xd5, 0xb1, 0x03, 0xe8, 0xaa, 0x11, 0x2c, 0x6a, 0x5f, 0x2b, 0x45, 0x11, 0x24, 0x8f,
0x38, 0x09, 0x4e, 0xb5, 0x5d, 0xa0, 0x21, 0xf6, 0xff, 0x54, 0x90, 0xa3, 0x0c, 0x4a, 0x82, 0xb4,
0xbf, 0x80, 0x2d, 0x3d, 0x8c, 0x5c, 0x5e, 0x32, 0x69, 0x2c, 0x98, 0xbc, 0x07, 0xef, 0x48, 0x95,
0xc5, 0xaf, 0x57, 0x99, 0x3e, 0x85, 0xbb, 0xba, 0xe9, 0x7f, 0xe1, 0xd5, 0xfd, 0xca, 0x80, 0x7b,
0xd2, 0x56, 0xb2, 0x46, 0x93, 0xff, 0x00, 0x0e, 0xe7, 0xa3, 0x99, 0xb8, 0x96, 0x54, 0xd5, 0x7b,
0xd0, 0xe2, 0x62, 0xff, 0xab, 0x05, 0x9c, 0xd4, 0x5d, 0x87, 0x44, 0x5f, 0x5c, 0x9f, 0x51, 0xf9,
0x2f, 0xad, 0x2a, 0x55, 0x0e, 0x88, 0xe5, 0xce, 0x67, 0xd9, 0x4b, 0xac, 0x89, 0xd5, 0x49, 0x68,
0xf1, 0xf4, 0xe2, 0x56, 0x7b, 0x3f, 0x07, 0xc4, 0x56, 0x72, 0x93, 0x05, 0x2e, 0x57, 0xbe, 0x89,
0xd3, 0xa3, 0xfd, 0x1c, 0x2c, 0xbd, 0x0a, 0x7a, 0xe4, 0xe8, 0x21, 0x98, 0x8c, 0xa6, 0x3d, 0xfe,
0x40, 0xf5, 0xf8, 0x2a, 0x76, 0x9a, 0x27, 0x16, 0x3a, 0xf6, 0xaf, 0x06, 0xf4, 0x5e, 0xc7, 0x7c,
0x83, 0x5a, 0x48, 0x06, 0x27, 0x41, 0xe1, 0x5d, 0xaa, 0x43, 0xcb, 0xea, 0x91, 0x57, 0xb1, 0x5e,
0xae, 0x62, 0xa1, 0x5a, 0x8d, 0x52, 0xb5, 0xec, 0x08, 0x6e, 0xc9, 0xa0, 0x31, 0x0d, 0xc8, 0x9c,
0xb2, 0x43, 0x12, 0x10, 0xf1, 0xb2, 0x7a, 0x7d, 0xb8, 0xda, 0x3d, 0x58, 0x2b, 0xde, 0x83, 0x05,
0x87, 0x66, 0xd9, 0xe1, 0x0b, 0xd8, 0xd6, 0x8b, 0x55, 0xf2, 0xfb, 0x48, 0x6f, 0xc3, 0x47, 0x15,
0x6d, 0x28, 0xf2, 0x9f, 0x44, 0xec, 0x59, 0x48, 0xe5, 0x23, 0x23, 0xe9, 0xc5, 0xcf, 0x06, 0xbc,
0xf7, 0x46, 0x74, 0x11, 0xff, 0x59, 0x82, 0xa6, 0xf7, 0xf8, 0x59, 0x75, 0xee, 0xb5, 0xca, 0xb1,
0x5d, 0x92, 0xe1, 0xe3, 0x2c, 0x43, 0xe9, 0x69, 0x14, 0x15, 0x5e, 0x99, 0x36, 0xb4, 0xb9, 0xfe,
0x12, 0x4d, 0x36, 0x6d, 0x01, 0xbb, 0xff, 0x5c, 0xbe, 0xa6, 0xf5, 0x05, 0x88, 0xba, 0x70, 0xf3,
0x94, 0x86, 0xae, 0x1f, 0x9e, 0x27, 0x80, 0xd8, 0x87, 0x9d, 0x15, 0x01, 0x0f, 0xa7, 0x8e, 0x43,
0xe3, 0x58, 0x83, 0x0d, 0x74, 0x1b, 0x3a, 0x4f, 0x88, 0x1f, 0x50, 0x57, 0x43, 0x6b, 0x7b, 0x6d,
0x80, 0xfc, 0x57, 0xa8, 0xb3, 0x55, 0xf9, 0xeb, 0xd2, 0xfe, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff,
0xa6, 0x2d, 0xf8, 0xf1, 0x9a, 0x12, 0x00, 0x00,
// 1379 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcd, 0x6e, 0xdb, 0x46,
0x10, 0x16, 0x45, 0xc9, 0x8e, 0xc6, 0xb2, 0xad, 0x6c, 0x22, 0x97, 0x70, 0xd3, 0x44, 0x20, 0xfa,
0x63, 0xa4, 0xad, 0x51, 0xd8, 0x29, 0xda, 0x5c, 0xd2, 0xd8, 0xb2, 0x5c, 0x19, 0x48, 0x1a, 0x77,
0xcd, 0xf4, 0x07, 0xc8, 0x65, 0x4d, 0x6e, 0x2c, 0x22, 0x14, 0x29, 0x2c, 0x57, 0xb6, 0x74, 0xec,
0x1b, 0xf4, 0x55, 0x72, 0xed, 0xa1, 0xaf, 0xd1, 0x17, 0xe8, 0xad, 0xaf, 0xd0, 0x02, 0xc5, 0x2e,
0x97, 0xe4, 0x92, 0xa2, 0x1d, 0x23, 0xe8, 0x25, 0xbd, 0x69, 0x67, 0xbe, 0xf9, 0x9f, 0x9d, 0x1d,
0x0a, 0x3a, 0xb3, 0x1d, 0xca, 0x47, 0x94, 0xd1, 0xe9, 0x78, 0x7b, 0xc2, 0x22, 0x1e, 0xa1, 0x26,
0x9f, 0x4f, 0x68, 0xbc, 0x79, 0x93, 0x33, 0x12, 0xc6, 0xc4, 0xe5, 0x7e, 0x14, 0x26, 0x9c, 0xcd,
0x55, 0xe2, 0xba, 0xd1, 0x34, 0xe4, 0xc9, 0xd1, 0xfe, 0xa7, 0x09, 0x9d, 0x9f, 0x32, 0xe9, 0x3d,
0x89, 0x44, 0x8f, 0x60, 0x9d, 0xf2, 0xd1, 0x4e, 0x7f, 0x44, 0xfc, 0x70, 0x77, 0xf7, 0x49, 0xe4,
0xbe, 0xb2, 0x8c, 0x9e, 0xb1, 0xb5, 0xb2, 0x83, 0xb6, 0xa5, 0xde, 0xed, 0x41, 0xce, 0x1d, 0xd6,
0x70, 0x19, 0x5c, 0x92, 0xdf, 0x9f, 0xb2, 0xd0, 0xaa, 0x5f, 0x53, 0x5e, 0x80, 0xd1, 0x1e, 0x74,
0xdc, 0xe4, 0xe8, 0x44, 0x03, 0x3e, 0x92, 0x0a, 0x4c, 0xa9, 0xe0, 0x96, 0x52, 0xd0, 0xd7, 0xd8,
0xc3, 0x1a, 0x5e, 0x80, 0x97, 0x55, 0xc8, 0x18, 0x1a, 0xd7, 0x56, 0x21, 0xa3, 0x78, 0x08, 0x6d,
0xe2, 0x79, 0x3f, 0x90, 0xc0, 0xf7, 0x08, 0x8f, 0x98, 0xd5, 0x2c, 0x88, 0x3f, 0x8d, 0xcf, 0x32,
0xd6, 0xb0, 0x86, 0x0b, 0x50, 0xf4, 0x0d, 0xac, 0x33, 0x3a, 0x8e, 0xce, 0x69, 0x2e, 0xbd, 0x74,
0x95, 0x74, 0x19, 0x8d, 0xbe, 0x82, 0x95, 0x71, 0xe4, 0xf9, 0x2f, 0xe7, 0xc7, 0xd1, 0x05, 0x65,
0xd6, 0xf2, 0x55, 0xc2, 0x3a, 0x12, 0x39, 0xd0, 0x8d, 0x29, 0xef, 0x47, 0x61, 0x4c, 0xc3, 0x78,
0x1a, 0x3b, 0x23, 0x46, 0xe3, 0x51, 0x14, 0x78, 0xd6, 0x0d, 0xa9, 0xe2, 0x4e, 0xae, 0x62, 0x11,
0x33, 0xac, 0xe1, 0x6a, 0x61, 0xb4, 0x0b, 0x37, 0x64, 0x27, 0xbd, 0xa4, 0xcc, 0x6a, 0x49, 0x45,
0x5d, 0xa5, 0x68, 0x2f, 0x8e, 0x29, 0x8f, 0x1d, 0xc5, 0x1c, 0xd6, 0x70, 0x06, 0x44, 0x03, 0x58,
0x4b, 0x7f, 0x3b, 0xd1, 0x60, 0x46, 0x5d, 0x0b, 0xa4, 0xe8, 0xfb, 0x95, 0xa2, 0x09, 0x64, 0x58,
0xc3, 0x25, 0x21, 0xd4, 0x87, 0xce, 0x85, 0xcf, 0x47, 0x1e, 0x23, 0x17, 0x87, 0x2c, 0x1a, 0x4b,
0x45, 0x2b, 0x15, 0x3e, 0xfc, 0xa8, 0x40, 0xa2, 0x96, 0x65, 0x01, 0xb4, 0x06, 0x75, 0x3e, 0xb7,
0xda, 0x3d, 0x63, 0xab, 0x89, 0xeb, 0x7c, 0xbe, 0xbf, 0x0c, 0xcd, 0x73, 0x12, 0x4c, 0xa9, 0xfd,
0x2d, 0x74, 0x2b, 0x73, 0x81, 0xb6, 0x01, 0xb9, 0x8b, 0x59, 0x14, 0xd7, 0xc0, 0xc4, 0x15, 0x1c,
0xfb, 0x11, 0xb4, 0xf5, 0xba, 0x20, 0x0b, 0x96, 0x89, 0xe7, 0x31, 0x1a, 0xc7, 0x52, 0xa8, 0x85,
0xd3, 0x23, 0xba, 0x0d, 0xcd, 0x89, 0xac, 0x6a, 0x5d, 0x2a, 0x4b, 0x0e, 0xf6, 0x6b, 0x13, 0x56,
0xb4, 0x6b, 0x81, 0xb6, 0x60, 0x7d, 0xa0, 0x6e, 0xa5, 0x24, 0x1d, 0x1d, 0x28, 0xe3, 0x65, 0x32,
0x7a, 0x00, 0xdd, 0x7d, 0xe6, 0x7b, 0x67, 0xb4, 0x1f, 0x85, 0x9c, 0x11, 0x97, 0xef, 0x29, 0xbb,
0x75, 0x69, 0xb7, 0x9a, 0x29, 0xbc, 0xf8, 0x2e, 0x0a, 0x5d, 0x2a, 0x2f, 0x96, 0x89, 0x93, 0x83,
0xb0, 0x7a, 0x14, 0xc7, 0x53, 0xca, 0x0e, 0x22, 0x7e, 0x32, 0x1f, 0x9f, 0x46, 0x81, 0xbc, 0x35,
0x2d, 0x5c, 0x26, 0xa3, 0x1d, 0xb8, 0xed, 0x44, 0xaf, 0x68, 0x58, 0x36, 0xba, 0x24, 0xe1, 0x95,
0x3c, 0xf4, 0x31, 0xac, 0xa5, 0xce, 0x9f, 0xd0, 0xd0, 0x53, 0x8d, 0xdd, 0xc2, 0x25, 0xaa, 0xf0,
0x42, 0xa5, 0x01, 0x53, 0x97, 0xfa, 0xe7, 0x94, 0xc9, 0xf6, 0x6d, 0xe1, 0x32, 0x19, 0xdd, 0x87,
0x4e, 0x96, 0xf2, 0xd4, 0x83, 0x96, 0x84, 0x2e, 0xd0, 0xd1, 0x06, 0x2c, 0xed, 0x8d, 0xc5, 0xe8,
0x93, 0x7d, 0xd8, 0xc2, 0xea, 0x84, 0xee, 0x40, 0xab, 0x1f, 0x10, 0x7f, 0xec, 0xcc, 0x27, 0x54,
0x76, 0x96, 0x89, 0x73, 0x02, 0xda, 0x84, 0x1b, 0x07, 0xd4, 0xf5, 0xc7, 0x24, 0x88, 0x65, 0xff,
0x98, 0x38, 0x3b, 0xdb, 0xbf, 0x1a, 0x80, 0x9e, 0x31, 0xe2, 0x06, 0x54, 0xe2, 0x45, 0xb8, 0x34,
0xe4, 0x55, 0xee, 0x1b, 0xd5, 0xee, 0xe7, 0x2e, 0xd5, 0x2f, 0x77, 0xc9, 0xbc, 0xca, 0xa5, 0x46,
0xc9, 0xa5, 0x3f, 0x0d, 0x68, 0xeb, 0x93, 0x0d, 0x7d, 0x08, 0xab, 0x85, 0x5a, 0x28, 0x57, 0x8a,
0x44, 0x81, 0x52, 0x52, 0xaa, 0x30, 0x89, 0x3f, 0x45, 0xa2, 0xc8, 0x76, 0x5a, 0xa9, 0x2c, 0x32,
0x33, 0xc9, 0x76, 0x99, 0xae, 0x85, 0xd6, 0x28, 0x84, 0x56, 0xd1, 0x61, 0xcd, 0xea, 0x0e, 0xd3,
0xc3, 0x5c, 0x2e, 0x85, 0xf9, 0xb7, 0x09, 0x48, 0x9a, 0x9a, 0xf0, 0x77, 0xe9, 0xd2, 0xd8, 0xd0,
0x96, 0x79, 0x4f, 0x8d, 0x25, 0x91, 0x17, 0x68, 0xef, 0xe4, 0x25, 0xb1, 0x60, 0x79, 0xe6, 0xcc,
0x86, 0x24, 0x1e, 0xc9, 0x3b, 0xd2, 0xc6, 0xe9, 0x51, 0x72, 0x86, 0xd4, 0x3f, 0x1b, 0x71, 0x6b,
0xb5, 0x67, 0x6c, 0x35, 0x70, 0x7a, 0x44, 0x77, 0x01, 0x8e, 0x59, 0x34, 0x19, 0x51, 0x77, 0x7e,
0x74, 0x60, 0xad, 0x49, 0x6b, 0x1a, 0xa5, 0x50, 0xfe, 0xf5, 0x52, 0xf9, 0xff, 0x32, 0xe0, 0x96,
0x2a, 0xff, 0xff, 0xb0, 0xd9, 0x97, 0x4a, 0xd1, 0x9e, 0x43, 0x47, 0x05, 0xfb, 0xd6, 0xcf, 0x8b,
0x5e, 0x21, 0xf3, 0xd2, 0x0a, 0x35, 0x0a, 0x15, 0xb2, 0x7f, 0x37, 0xe0, 0x8e, 0x32, 0x7c, 0x52,
0xb9, 0x16, 0x3c, 0x80, 0xee, 0x84, 0xd1, 0xfe, 0x65, 0xcf, 0x64, 0x35, 0x53, 0x48, 0x85, 0xd1,
0x45, 0x85, 0x54, 0xe2, 0x70, 0x35, 0xf3, 0xad, 0x02, 0xd8, 0x82, 0x8d, 0xef, 0xa7, 0x94, 0xcd,
0x07, 0x7c, 0x94, 0x36, 0xd6, 0x31, 0x61, 0x64, 0x1c, 0x8b, 0x7d, 0x40, 0xcd, 0x86, 0x16, 0xae,
0x1f, 0x1d, 0xd8, 0x7f, 0x18, 0xfa, 0x3c, 0x49, 0xc1, 0x65, 0x18, 0xfa, 0x1c, 0x96, 0x4e, 0x38,
0xe1, 0xd3, 0x58, 0xed, 0xb3, 0xe9, 0x06, 0x92, 0x0a, 0x24, 0x4c, 0xac, 0x40, 0xe8, 0x31, 0xac,
0xcb, 0x3b, 0x92, 0x95, 0x2d, 0xb6, 0xcc, 0x9e, 0xb9, 0xb5, 0xb2, 0xb3, 0x91, 0xee, 0xa0, 0x45,
0x2e, 0x2e, 0xc3, 0x85, 0x86, 0xec, 0x24, 0x79, 0x62, 0xe2, 0xeb, 0x1a, 0x4a, 0x5c, 0x5c, 0x86,
0xdb, 0x3f, 0x2f, 0xf8, 0x20, 0x3a, 0xc4, 0x15, 0x24, 0x15, 0x58, 0x72, 0x40, 0x5f, 0x00, 0x9c,
0xe7, 0x7e, 0x26, 0xf1, 0x75, 0x94, 0x95, 0x13, 0xce, 0xfc, 0xf0, 0xec, 0x29, 0x99, 0x60, 0x0d,
0x63, 0x0f, 0x16, 0x9c, 0x13, 0x63, 0x22, 0x03, 0x28, 0xf5, 0x39, 0x21, 0x37, 0x5c, 0xd7, 0x0c,
0xdb, 0x9f, 0x42, 0x2b, 0xd3, 0x2f, 0xa6, 0x82, 0xe6, 0x85, 0xd1, 0x33, 0xc5, 0x54, 0xd0, 0x6c,
0x1e, 0xc0, 0x6a, 0x66, 0xf3, 0x89, 0x1f, 0x73, 0xb4, 0xbb, 0x20, 0x50, 0xbd, 0x28, 0x17, 0xb4,
0xbc, 0x80, 0xb5, 0x62, 0xc9, 0xd0, 0x7d, 0x68, 0x38, 0x74, 0x96, 0x0c, 0x8c, 0xb5, 0x2c, 0xbb,
0xe2, 0x6b, 0x42, 0x3e, 0x04, 0xaa, 0xb0, 0x12, 0x23, 0x7c, 0x3c, 0xf4, 0x43, 0x12, 0xf4, 0xb5,
0x58, 0x34, 0x8a, 0xfd, 0x25, 0x74, 0x65, 0xdb, 0xe5, 0x29, 0x57, 0x5d, 0x77, 0x65, 0x76, 0xec,
0x00, 0xba, 0xaa, 0x05, 0x8b, 0xd2, 0x6f, 0x15, 0xa2, 0x70, 0x92, 0x47, 0x9c, 0x04, 0xc7, 0xda,
0x2c, 0xd0, 0x28, 0xf6, 0x7b, 0xca, 0x49, 0x27, 0x23, 0x25, 0x4e, 0xda, 0x5f, 0xc3, 0x86, 0xee,
0x46, 0xce, 0x2f, 0xa9, 0x34, 0x16, 0x54, 0xde, 0x83, 0x0f, 0xa4, 0xc8, 0xe2, 0xed, 0x55, 0xaa,
0x8f, 0xe1, 0xae, 0xae, 0xfa, 0x3f, 0xd8, 0xba, 0x5f, 0x1b, 0x70, 0x4f, 0xea, 0x4a, 0xc6, 0x68,
0xf2, 0x25, 0xb0, 0x3f, 0x77, 0x66, 0xe2, 0x59, 0x52, 0x59, 0xef, 0xc1, 0x0a, 0x17, 0xf3, 0x5f,
0x0d, 0xe0, 0x24, 0xef, 0x3a, 0x49, 0xd4, 0xc5, 0xf3, 0x19, 0x95, 0x1f, 0xbf, 0x2a, 0x55, 0x39,
0x41, 0x0c, 0x77, 0x3e, 0xcb, 0x36, 0xb1, 0x16, 0x56, 0x27, 0x21, 0xc5, 0xd3, 0x87, 0x5b, 0xcd,
0xfd, 0x9c, 0x20, 0xa6, 0x92, 0x97, 0x0c, 0x70, 0x39, 0xf2, 0x4d, 0x9c, 0x1e, 0xed, 0xe7, 0x60,
0xe9, 0x59, 0xd0, 0x3d, 0x47, 0x0f, 0xc1, 0x64, 0x34, 0xad, 0xf1, 0x27, 0xaa, 0xc6, 0x97, 0xa1,
0xd3, 0x38, 0xb1, 0x90, 0xb1, 0x7f, 0x33, 0xa0, 0xf7, 0x26, 0xe4, 0x35, 0x72, 0x21, 0x11, 0x9c,
0x04, 0x85, 0xbd, 0x54, 0x27, 0x5d, 0x95, 0x8f, 0x3c, 0x8b, 0x8d, 0x72, 0x16, 0x0b, 0xd9, 0x6a,
0x96, 0xb2, 0x65, 0x47, 0x70, 0x4b, 0x3a, 0x8d, 0x69, 0x40, 0xe6, 0x94, 0xed, 0x93, 0x80, 0x88,
0xcd, 0xea, 0xcd, 0xee, 0x6a, 0xef, 0x60, 0xbd, 0xf8, 0x0e, 0x16, 0x0c, 0x9a, 0x65, 0x83, 0x2f,
0x60, 0x53, 0x4f, 0x56, 0xc9, 0xee, 0x23, 0xbd, 0x0c, 0x9f, 0x55, 0x94, 0xa1, 0x88, 0x3f, 0x8c,
0xd8, 0xb3, 0x90, 0xca, 0x25, 0x23, 0xa9, 0xc5, 0x2f, 0x06, 0x7c, 0x74, 0x2d, 0xb8, 0xf0, 0xff,
0x34, 0xa1, 0xa6, 0xef, 0xf8, 0x69, 0x75, 0xec, 0xf5, 0xca, 0xb6, 0xbd, 0x22, 0xc2, 0xc7, 0x59,
0x84, 0xd2, 0x92, 0x13, 0x15, 0xb6, 0x4c, 0x1b, 0xda, 0x5c, 0xdf, 0x44, 0x93, 0x49, 0x5b, 0xa0,
0xdd, 0x7f, 0x2e, 0xb7, 0x69, 0x7d, 0x00, 0xa2, 0x2e, 0xdc, 0x3c, 0xa6, 0xa1, 0xe7, 0x87, 0x67,
0x09, 0x41, 0xcc, 0xc3, 0x4e, 0x4d, 0x90, 0x4f, 0xa6, 0xae, 0x4b, 0xe3, 0x58, 0x23, 0x1b, 0xe8,
0x36, 0x74, 0x0e, 0x89, 0x1f, 0x50, 0x4f, 0xa3, 0xd6, 0x77, 0xda, 0x00, 0xf9, 0xff, 0x55, 0xa7,
0x4b, 0xf2, 0x7f, 0xa8, 0xdd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x3a, 0xa6, 0xbf, 0xaf, 0xc4,
0x12, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
......
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