Commit fdc41a69 authored by QM's avatar QM Committed by vipwzw

delete chain33 multisign_setup set_offline_addr

parent 5d77e6fb
...@@ -110,7 +110,7 @@ function configbridgevmxgoAddr() { ...@@ -110,7 +110,7 @@ function configbridgevmxgoAddr() {
function DeployEvmxgo() { function DeployEvmxgo() {
# 在 chain33 上部署合约 # 在 chain33 上部署合约
# shellcheck disable=SC2154 # shellcheck disable=SC2154
${EvmxgoBoss4xCLI} chain33 offline create -f 1 -k "${chain33DeployKey}" -n "deploy crossx to chain33" -r "${chain33DeployAddr}, [${chain33Validatora}, ${chain33Validatorb}, ${chain33Validatorc}, ${chain33Validatord}], [96, 1, 1, 1]" --chainID "${chain33ID}" ${EvmxgoBoss4xCLI} chain33 offline create -f 1 -k "${chain33DeployKey}" -n "deploy crossx to chain33" -r "${chain33DeployAddr}, [${chain33Validatora}, ${chain33Validatorb}, ${chain33Validatorc}, ${chain33Validatord}], [96, 1, 1, 1]"
result=$(${EvmxgoBoss4xCLI} chain33 offline send -f "deployBridgevmxgo2Chain33.txt") result=$(${EvmxgoBoss4xCLI} chain33 offline send -f "deployBridgevmxgo2Chain33.txt")
for i in {0..6}; do for i in {0..6}; do
...@@ -124,10 +124,10 @@ function DeployEvmxgo() { ...@@ -124,10 +124,10 @@ function DeployEvmxgo() {
XgoChain33BridgeBank=$(${Chain33Cli} evm query -c "${chain33DeployAddr}" -b "bridgeBank()" -a "${XgoBridgeRegistryOnChain33}") XgoChain33BridgeBank=$(${Chain33Cli} evm query -c "${chain33DeployAddr}" -b "bridgeBank()" -a "${XgoBridgeRegistryOnChain33}")
cp XgoChain33BridgeBank.abi "${XgoChain33BridgeBank}.abi" cp XgoChain33BridgeBank.abi "${XgoChain33BridgeBank}.abi"
${EvmxgoBoss4xCLI} chain33 offline create_add_lock_list -s ETH -t "${chain33EthBridgeTokenAddr}" -c "${XgoChain33BridgeBank}" -k "${chain33DeployKey}" -f 1 --chainID "${chain33ID}" ${EvmxgoBoss4xCLI} chain33 offline create_add_lock_list -s ETH -t "${chain33EthBridgeTokenAddr}" -c "${XgoChain33BridgeBank}" -k "${chain33DeployKey}" -f 1
chain33_offline_send_evm "create_add_lock_list.txt" chain33_offline_send_evm "create_add_lock_list.txt"
${EvmxgoBoss4xCLI} chain33 offline create_add_lock_list -s USDT -t "${chain33USDTBridgeTokenAddr}" -c "${XgoChain33BridgeBank}" -k "${chain33DeployKey}" -f 1 --chainID "${chain33ID}" ${EvmxgoBoss4xCLI} chain33 offline create_add_lock_list -s USDT -t "${chain33USDTBridgeTokenAddr}" -c "${XgoChain33BridgeBank}" -k "${chain33DeployKey}" -f 1
chain33_offline_send_evm "create_add_lock_list.txt" chain33_offline_send_evm "create_add_lock_list.txt"
updateConfig "ETH" "${chain33EthBridgeTokenAddr}" updateConfig "ETH" "${chain33EthBridgeTokenAddr}"
...@@ -161,10 +161,10 @@ function TestETH2EVMToChain33() { ...@@ -161,10 +161,10 @@ function TestETH2EVMToChain33() {
# 结果是 11 * le8 # 结果是 11 * le8
# is_equal "${result}" "4700000000" # is_equal "${result}" "4700000000"
${EvmxgoBoss4xCLI} chain33 offline approve_erc20 -a 330000000000 -s "${XgoChain33BridgeBank}" -c "${chain33EthBridgeTokenAddr}" -k "${chain33ReceiverAddrKey}" -f 1 --chainID "${chain33ID}" ${EvmxgoBoss4xCLI} chain33 offline approve_erc20 -a 330000000000 -s "${XgoChain33BridgeBank}" -c "${chain33EthBridgeTokenAddr}" -k "${chain33ReceiverAddrKey}" -f 1
chain33_offline_send_evm "approve_erc20.txt" chain33_offline_send_evm "approve_erc20.txt"
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33ReceiverAddr}" -e "${XgoChain33BridgeBank}" -p "lock(${chain33TestAddr2}, ${chain33EthBridgeTokenAddr}, 500000000)" --chainID "${chain33ID}") hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33ReceiverAddr}" -e "${XgoChain33BridgeBank}" -p "lock(${chain33TestAddr2}, ${chain33EthBridgeTokenAddr}, 500000000)")
check_tx "${Chain33Cli}" "${hash}" check_tx "${Chain33Cli}" "${hash}"
result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})") result=$(${Chain33Cli} evm query -a "${chain33EthBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
...@@ -196,10 +196,10 @@ function Testethereum2EVMToChain33_usdt() { ...@@ -196,10 +196,10 @@ function Testethereum2EVMToChain33_usdt() {
result=$(${Chain33Cli} evm query -a "${chain33USDTBridgeTokenAddr}" -c "${chain33TestAddr1}" -b "balanceOf(${chain33ReceiverAddr})") result=$(${Chain33Cli} evm query -a "${chain33USDTBridgeTokenAddr}" -c "${chain33TestAddr1}" -b "balanceOf(${chain33ReceiverAddr})")
# is_equal "${result}" "700000000" # is_equal "${result}" "700000000"
${EvmxgoBoss4xCLI} chain33 offline approve_erc20 -a 330000000000 -s "${XgoChain33BridgeBank}" -c "${chain33USDTBridgeTokenAddr}" -k "${chain33ReceiverAddrKey}" -f 1 --chainID "${chain33ID}" ${EvmxgoBoss4xCLI} chain33 offline approve_erc20 -a 330000000000 -s "${XgoChain33BridgeBank}" -c "${chain33USDTBridgeTokenAddr}" -k "${chain33ReceiverAddrKey}" -f 1
chain33_offline_send_evm "approve_erc20.txt" chain33_offline_send_evm "approve_erc20.txt"
hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33ReceiverAddr}" -e "${XgoChain33BridgeBank}" -p "lock(${chain33TestAddr2}, ${chain33USDTBridgeTokenAddr}, 500000000)" --chainID "${chain33ID}") hash=$(${Chain33Cli} send evm call -f 1 -k "${chain33ReceiverAddr}" -e "${XgoChain33BridgeBank}" -p "lock(${chain33TestAddr2}, ${chain33USDTBridgeTokenAddr}, 500000000)")
check_tx "${Chain33Cli}" "${hash}" check_tx "${Chain33Cli}" "${hash}"
result=$(${Chain33Cli} evm query -a "${chain33USDTBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})") result=$(${Chain33Cli} evm query -a "${chain33USDTBridgeTokenAddr}" -c "${chain33DeployAddr}" -b "balanceOf(${chain33ReceiverAddr})")
...@@ -224,8 +224,8 @@ function get_evm_cli() { ...@@ -224,8 +224,8 @@ function get_evm_cli() {
CLID="docker exec ${dockerNamePrefix}_ebrelayerd_1 /root/ebcli_A" CLID="docker exec ${dockerNamePrefix}_ebrelayerd_1 /root/ebcli_A"
docker_ganachetest_ip=$(get_docker_addr "${dockerNamePrefix}_ganachetest_1") 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." 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. --chainID ${chain33ID}"
EvmxgoBoss4xCLI="./evmxgoboss4x --rpc_laddr http://${docker_chain33_ip}:8901 --paraName user.p.para." EvmxgoBoss4xCLI="./evmxgoboss4x --rpc_laddr http://${docker_chain33_ip}:8901 --paraName user.p.para. --chainID ${chain33ID}"
} }
} }
...@@ -245,8 +245,6 @@ function AllRelayerMainTest() { ...@@ -245,8 +245,6 @@ function AllRelayerMainTest() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}" echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
set +e set +e
get_evm_cli
if [[ ${1} != "" ]]; then if [[ ${1} != "" ]]; then
maturityDegree=${1} maturityDegree=${1}
echo -e "${GRE}maturityDegree is ${maturityDegree} ${NOC}" echo -e "${GRE}maturityDegree is ${maturityDegree} ${NOC}"
...@@ -257,6 +255,8 @@ function AllRelayerMainTest() { ...@@ -257,6 +255,8 @@ function AllRelayerMainTest() {
chain33ID="${2}" chain33ID="${2}"
fi fi
get_evm_cli
# init # init
Chain33Cli=${MainCli} Chain33Cli=${MainCli}
InitChain33Validator InitChain33Validator
......
...@@ -2,6 +2,8 @@ package offline ...@@ -2,6 +2,8 @@ package offline
import ( import (
"fmt" "fmt"
ebTypes "github.com/33cn/plugin/plugin/dapp/cross2eth/ebrelayer/types"
"strings"
"time" "time"
"github.com/33cn/chain33/common/address" "github.com/33cn/chain33/common/address"
...@@ -10,7 +12,6 @@ import ( ...@@ -10,7 +12,6 @@ import (
"github.com/33cn/plugin/plugin/dapp/dex/utils" "github.com/33cn/plugin/plugin/dapp/dex/utils"
evmAbi "github.com/33cn/plugin/plugin/dapp/evm/executor/abi" evmAbi "github.com/33cn/plugin/plugin/dapp/evm/executor/abi"
"github.com/33cn/plugin/plugin/dapp/evm/executor/vm/common" "github.com/33cn/plugin/plugin/dapp/evm/executor/vm/common"
evmtypes "github.com/33cn/plugin/plugin/dapp/evm/types"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
...@@ -36,6 +37,8 @@ func addCreateCrossBridgeFlags(cmd *cobra.Command) { ...@@ -36,6 +37,8 @@ func addCreateCrossBridgeFlags(cmd *cobra.Command) {
cmd.Flags().Float64P("fee", "f", 0, "contract gas fee (optional)") cmd.Flags().Float64P("fee", "f", 0, "contract gas fee (optional)")
cmd.Flags().StringP("valset", "r", "", "contruct parameter for valset, as: 'addr, [addr, addr, addr, addr], [25, 25, 25, 25]'") cmd.Flags().StringP("valset", "r", "", "contruct parameter for valset, as: 'addr, [addr, addr, addr, addr], [25, 25, 25, 25]'")
_ = cmd.MarkFlagRequired("valset") _ = cmd.MarkFlagRequired("valset")
cmd.Flags().StringP("multisignAddrs", "m", "", "multisign address")
_ = cmd.MarkFlagRequired("multisignAddrs")
} }
func createCrossBridge(cmd *cobra.Command, args []string) { func createCrossBridge(cmd *cobra.Command, args []string) {
...@@ -57,6 +60,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -57,6 +60,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
i := 1 i := 1
fmt.Printf("%d: Going to create Valset\n", i) fmt.Printf("%d: Going to create Valset\n", i)
i += 1 i += 1
// 0
valsetTx, err := createValsetTxAndSign(cmd, from) valsetTx, err := createValsetTxAndSign(cmd, from)
if nil != err { if nil != err {
fmt.Println("Failed to createValsetTxAndSign due to cause:", err.Error()) fmt.Println("Failed to createValsetTxAndSign due to cause:", err.Error())
...@@ -66,6 +70,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -66,6 +70,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
fmt.Printf("%d: Going to create EthereumBridge\n", i) fmt.Printf("%d: Going to create EthereumBridge\n", i)
i += 1 i += 1
// 1
ethereumBridgeTx, err := createEthereumBridgeAndSign(cmd, from, valsetTx.ContractAddr) ethereumBridgeTx, err := createEthereumBridgeAndSign(cmd, from, valsetTx.ContractAddr)
if nil != err { if nil != err {
fmt.Println("Failed to createEthereumBridgeAndSign due to cause:", err.Error()) fmt.Println("Failed to createEthereumBridgeAndSign due to cause:", err.Error())
...@@ -75,6 +80,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -75,6 +80,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
fmt.Printf("%d: Going to create Oracle\n", i) fmt.Printf("%d: Going to create Oracle\n", i)
i += 1 i += 1
// 2
oracleTx, err := createOracleTxAndSign(cmd, from, valsetTx.ContractAddr, ethereumBridgeTx.ContractAddr) oracleTx, err := createOracleTxAndSign(cmd, from, valsetTx.ContractAddr, ethereumBridgeTx.ContractAddr)
if nil != err { if nil != err {
fmt.Println("Failed to createOracleTxAndSign due to cause:", err.Error()) fmt.Println("Failed to createOracleTxAndSign due to cause:", err.Error())
...@@ -84,6 +90,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -84,6 +90,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
fmt.Printf("%d: Going to create BridgeBank\n", i) fmt.Printf("%d: Going to create BridgeBank\n", i)
i += 1 i += 1
// 3
bridgeBankTx, err := createBridgeBankTxAndSign(cmd, from, valsetTx.ContractAddr, ethereumBridgeTx.ContractAddr) bridgeBankTx, err := createBridgeBankTxAndSign(cmd, from, valsetTx.ContractAddr, ethereumBridgeTx.ContractAddr)
if nil != err { if nil != err {
fmt.Println("Failed to createBridgeBankTxAndSign due to cause:", err.Error()) fmt.Println("Failed to createBridgeBankTxAndSign due to cause:", err.Error())
...@@ -93,6 +100,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -93,6 +100,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
fmt.Printf("%d: Going to set BridgeBank to EthBridge \n", i) fmt.Printf("%d: Going to set BridgeBank to EthBridge \n", i)
i += 1 i += 1
// 4
setBridgeBank2EthBridgeTx, err := setBridgeBank2EthBridgeTxAndSign(cmd, ethereumBridgeTx.ContractAddr, bridgeBankTx.ContractAddr) setBridgeBank2EthBridgeTx, err := setBridgeBank2EthBridgeTxAndSign(cmd, ethereumBridgeTx.ContractAddr, bridgeBankTx.ContractAddr)
if nil != err { if nil != err {
fmt.Println("Failed to setBridgeBank2EthBridgeTxAndSign due to cause:", err.Error()) fmt.Println("Failed to setBridgeBank2EthBridgeTxAndSign due to cause:", err.Error())
...@@ -102,6 +110,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -102,6 +110,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
fmt.Printf("%d: Going to set Oracle to EthBridge \n", i) fmt.Printf("%d: Going to set Oracle to EthBridge \n", i)
i += 1 i += 1
// 5
setOracle2EthBridgeTx, err := setOracle2EthBridgeTxAndSign(cmd, ethereumBridgeTx.ContractAddr, oracleTx.ContractAddr) setOracle2EthBridgeTx, err := setOracle2EthBridgeTxAndSign(cmd, ethereumBridgeTx.ContractAddr, oracleTx.ContractAddr)
if nil != err { if nil != err {
fmt.Println("Failed to setOracle2EthBridgeTxAndSign due to cause:", err.Error()) fmt.Println("Failed to setOracle2EthBridgeTxAndSign due to cause:", err.Error())
...@@ -111,6 +120,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -111,6 +120,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
fmt.Printf("%d: Going to create BridgeRegistry \n", i) fmt.Printf("%d: Going to create BridgeRegistry \n", i)
i += 1 i += 1
// 6
createBridgeRegistryTx, err := createBridgeRegistryTxAndSign(cmd, from, ethereumBridgeTx.ContractAddr, valsetTx.ContractAddr, bridgeBankTx.ContractAddr, oracleTx.ContractAddr) createBridgeRegistryTx, err := createBridgeRegistryTxAndSign(cmd, from, ethereumBridgeTx.ContractAddr, valsetTx.ContractAddr, bridgeBankTx.ContractAddr, oracleTx.ContractAddr)
if nil != err { if nil != err {
fmt.Println("Failed to createBridgeRegistryTxAndSign due to cause:", err.Error()) fmt.Println("Failed to createBridgeRegistryTxAndSign due to cause:", err.Error())
...@@ -120,6 +130,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -120,6 +130,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
fmt.Printf("%d: Going to create MulSign2chain33 \n", i) fmt.Printf("%d: Going to create MulSign2chain33 \n", i)
i += 1 i += 1
// 7
createMulSign2chain33Tx, err := createMulSignAndSign(cmd, from) createMulSign2chain33Tx, err := createMulSignAndSign(cmd, from)
if nil != err { if nil != err {
fmt.Println("Failed to createMulSign2chain33Tx due to cause:", err.Error()) fmt.Println("Failed to createMulSign2chain33Tx due to cause:", err.Error())
...@@ -127,6 +138,26 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -127,6 +138,26 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
} }
txs = append(txs, createMulSign2chain33Tx) txs = append(txs, createMulSign2chain33Tx)
fmt.Printf("%d: Going to save multisign contract config offline account \n", i)
i += 1
// 8
configMultisignOfflineSaveAccountTx, err := configMultisignOfflineSaveAccount(cmd, createMulSign2chain33Tx.ContractAddr, bridgeBankTx.ContractAddr)
if nil != err {
fmt.Println("Failed to configMultisignOfflineSaveAccountTx due to cause:", err.Error())
return
}
txs = append(txs, configMultisignOfflineSaveAccountTx)
fmt.Printf("%d: Going to Setup multisignAddrs to contract \n", i)
i += 1
// 9
multisignSetupTx, err := multisignSetup(cmd, createMulSign2chain33Tx.ContractAddr)
if nil != err {
fmt.Println("Failed to configMultisignOfflineSaveAccountTx due to cause:", err.Error())
return
}
txs = append(txs, multisignSetupTx)
fmt.Printf("%d: Write all the txs to file: %s \n", i, crossXfileName) fmt.Printf("%d: Write all the txs to file: %s \n", i, crossXfileName)
utils.WriteToFileInJson(crossXfileName, txs) utils.WriteToFileInJson(crossXfileName, txs)
} }
...@@ -156,20 +187,8 @@ func setOracle2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, oracle string) ...@@ -156,20 +187,8 @@ func setOracle2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, oracle string)
fmt.Println("setOracle2EthBridge", "Failed to do abi.Pack due to:", err.Error()) fmt.Println("setOracle2EthBridge", "Failed to do abi.Pack due to:", err.Error())
return nil, err return nil, err
} }
action := &evmtypes.EVMContractAction{Amount: 0, GasLimit: 0, GasPrice: 0, Note: "setOracle2EthBridge", Para: packData, ContractAddr: ethbridge}
content, txHash, err := utils.CallContractAndSign(getTxInfo(cmd), action, ethbridge)
if nil != err {
return nil, err
}
setOracle2EthBridgeTx := &utils.Chain33OfflineTx{ return createOfflineTx(cmd, packData, ethbridge, "setOracle2EthBridge", time.Second*5)
ContractAddr: ethbridge,
TxHash: common.Bytes2Hex(txHash),
SignedRawTx: content,
OperationName: "setOracle2EthBridge",
Interval: time.Second * 5,
}
return setOracle2EthBridgeTx, nil
} }
func setBridgeBank2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, bridgebank string) (*utils.Chain33OfflineTx, error) { func setBridgeBank2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, bridgebank string) (*utils.Chain33OfflineTx, error) {
...@@ -179,20 +198,7 @@ func setBridgeBank2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, bridgebank ...@@ -179,20 +198,7 @@ func setBridgeBank2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, bridgebank
fmt.Println("setBridgeBank2EthBridge", "Failed to do abi.Pack due to:", err.Error()) fmt.Println("setBridgeBank2EthBridge", "Failed to do abi.Pack due to:", err.Error())
return nil, err return nil, err
} }
action := &evmtypes.EVMContractAction{Amount: 0, GasLimit: 0, GasPrice: 0, Note: "setBridgeBank2EthBridge", Para: packData, ContractAddr: ethbridge} return createOfflineTx(cmd, packData, ethbridge, "setBridgeBank2EthBridge", time.Second*5)
content, txHash, err := utils.CallContractAndSign(getTxInfo(cmd), action, ethbridge)
if nil != err {
return nil, err
}
setBridgeBank2EthBridgeTx := &utils.Chain33OfflineTx{
ContractAddr: ethbridge,
TxHash: common.Bytes2Hex(txHash),
SignedRawTx: content,
OperationName: "setBridgeBank2EthBridge",
Interval: time.Second * 5,
}
return setBridgeBank2EthBridgeTx, nil
} }
func createBridgeBankTxAndSign(cmd *cobra.Command, from common.Address, oracle, ethereumBridge string) (*utils.Chain33OfflineTx, error) { func createBridgeBankTxAndSign(cmd *cobra.Command, from common.Address, oracle, ethereumBridge string) (*utils.Chain33OfflineTx, error) {
...@@ -287,3 +293,34 @@ func createMulSignAndSign(cmd *cobra.Command, from common.Address) (*utils.Chain ...@@ -287,3 +293,34 @@ func createMulSignAndSign(cmd *cobra.Command, from common.Address) (*utils.Chain
} }
return mulSign2chain33Tx, nil return mulSign2chain33Tx, nil
} }
func configMultisignOfflineSaveAccount(cmd *cobra.Command, multisignContract, bridgebank string) (*utils.Chain33OfflineTx, error) {
parameter := fmt.Sprintf("configOfflineSaveAccount(%s)", multisignContract)
_, packData, err := evmAbi.Pack(parameter, generated.BridgeBankABI, false)
if nil != err {
fmt.Println("configOfflineSaveAccount", "Failed to do abi.Pack due to:", err.Error())
return nil, err
}
return createOfflineTx(cmd, packData, bridgebank, "configOfflineSaveAccount", time.Second*5)
}
func multisignSetup(cmd *cobra.Command, multisignContract string) (*utils.Chain33OfflineTx, error) {
multisignAddrs, _ := cmd.Flags().GetString("multisignAddrs")
owners := strings.Split(multisignAddrs, ",")
BTYAddrChain33 := ebTypes.BTYAddrChain33
parameter := "setup(["
parameter += fmt.Sprintf("%s", owners[0])
for _, owner := range owners[1:] {
parameter += fmt.Sprintf(",%s", owner)
}
parameter += "], "
parameter += fmt.Sprintf("%d, %s, 0102, %s, %s, 0, %s)", len(owners), BTYAddrChain33, BTYAddrChain33, BTYAddrChain33, BTYAddrChain33)
_, packData, err := evmAbi.Pack(parameter, generated.GnosisSafeABI, false)
if nil != err {
fmt.Println("multisign_setup", "Failed to do abi.Pack due to:", err.Error())
return nil, err
}
return createOfflineTx(cmd, packData, multisignContract, "multisign_setup", time.Second*5)
}
...@@ -4,6 +4,16 @@ ...@@ -4,6 +4,16 @@
#### 基础步骤 #### 基础步骤
* 离线创建交易并签名 `./boss4x chain33 offline create ...` * 离线创建交易并签名 `./boss4x chain33 offline create ...`
* 在线发送签名后文件 `./boss4x chain33 offline send -f XXX.txt` * 在线发送签名后文件 `./boss4x chain33 offline send -f XXX.txt`
拼凑 boss4x 命令
./boss4x --rpc_laddr http://${chain33_ip}:8901 --rpc_laddr_ethereum --paraName user.p.para. --chainID 0
```
--chainID int32 chain id, default to 0
--expire string transaction expire time (optional) (default "120m")
--paraName string para chain name,Eg:user.p.fzm.
--rpc_laddr string http url (default "https://localhost:8801")
```
*** ***
#### 离线部署 chain33 跨链合约 #### 离线部署 chain33 跨链合约
...@@ -17,15 +27,18 @@ ...@@ -17,15 +27,18 @@
交易6: 在合约chain33Bridge中设置Oracle合约地址 交易6: 在合约chain33Bridge中设置Oracle合约地址
交易7: 部署合约: BridgeRegistry 交易7: 部署合约: BridgeRegistry
交易8: 部署合约: MulSign 交易8: 部署合约: MulSign
交易9: 设置 bridgebank 合约地址可以转到多签合约地址
交易10: 设置离线多签地址信息
命令: 命令:
./boss4x chain33 offline create -f 1 -k 0x027ca96466c71c7e7c5d73b7e1f43cb889b3bd65ebd2413eefd31c6709c262ae -n 'deploy crossx to chain33' -r '1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ, [1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ, 155ooMPBTF8QQsGAknkK7ei5D78rwDEFe6, 13zBdQwuyDh7cKN79oT2odkxYuDbgQiXFv, 113ZzVamKfAtGt9dq45fX1mNsEoDiN95HG], [25, 25, 25, 25]' --chainID 33 ./boss4x chain33 offline create -f 1 -k "${chain33DeployKey}" -n "deploy crossx to chain33" -r "${chain33DeployAddr}, [${chain33Validatora}, ${chain33Validatorb}, ${chain33Validatorc}, ${chain33Validatord}], [25, 25, 25, 25]" -m "${chain33MultisignA},${chain33MultisignB},${chain33MultisignC},${chain33MultisignD}"
参数说明: 参数说明:
-f, --fee float 交易费设置,因为只是少量几笔交易,且部署交易消耗gas较多,直接设置1个代币即可 -f, --fee float 交易费设置,因为只是少量几笔交易,且部署交易消耗gas较多,直接设置1个代币即可
-k, --key string 部署人的私钥,用于对交易签名 -k, --key string 部署人的私钥,用于对交易签名
-n, --note string 备注信息 -m, --multisignAddrs string 离线多签地址, as: 'addr,addr,addr,addr'
-r, --valset string 构造函数参数,严格按照该格式输入'addr, [addr, addr, addr, addr], [25, 25, 25, 25]',其中第一个地址为部署人私钥对应地址,后面4个地址为不同验证人的地址,4个数字为不同验证人的权重 -n, --note string 备注信息
-r, --valset string 构造函数参数,严格按照该格式输入'addr, [addr, addr, addr, addr], [25, 25, 25, 25]',其中第一个地址为部署人私钥对应地址,后面4个地址为不同验证人的地址,4个数字为不同验证人的权重
--rpc_laddr string chain33 url 地址 (默认 "https://localhost:8801") --rpc_laddr string chain33 url 地址 (默认 "https://localhost:8801")
--chainID int32 平行链的chainID, 默认: 0(代表主链) --chainID int32 平行链的chainID, 默认: 0(代表主链)
...@@ -39,6 +52,7 @@ ...@@ -39,6 +52,7 @@
./boss4x chain33 offline send -f deployCrossX2Chain33.txt ./boss4x chain33 offline send -f deployCrossX2Chain33.txt
``` ```
*** ***
#### 离线部署 ERC20 跨链合约 #### 离线部署 ERC20 跨链合约
* 离线创建交易 * 离线创建交易
``` ```
...@@ -120,38 +134,6 @@ ...@@ -120,38 +134,6 @@
*** ***
#### 设置离线多签地址信息
* 离线创建交易
```
命令:
./boss4x chain33 offline multisign_setup -m 1GrhufvPtnBCtfxDrFGcCoihmYMHJafuPn -o 168Sn1DXnLrZHTcAM9stD6t2P49fNuJfJ9,13KTf57aCkVVJYNJBXBBveiA5V811SrLcT,1JQwQWsShTHC4zxHzbUfYQK4kRBriUQdEe,1NHuKqoKe3hyv52PF8XBAyaTmJWAqA2Jbb -k 0x027ca96466c71c7e7c5d73b7e1f43cb889b3bd65ebd2413eefd31c6709c262ae --chainID 33
参数说明:
-k, --key string 部署人私钥
-m, --multisign string 离线多签合约地址
-o, --owner string 多签的地址, 用','分隔
执行之后会将交易写入到文件:
multisign_setup.txt
```
***
#### 设置离线多签地址
* 离线创建交易
```
命令:
./boss4x chain33 offline set_offline_addr -a 16skyHQA4YPPnhrDSSpZnexDzasS8BNx1R -c 1QD5pHMKZ9QWiNb9AsH3G1aG3Hashye83o -k 0x027ca96466c71c7e7c5d73b7e1f43cb889b3bd65ebd2413eefd31c6709c262ae --chainID 33
参数说明:
-a, --address string 离线多签地址
-c, --contract string bridgebank 合约地址
-f, --fee float 交易费
-k, --key string 部署者私钥
-n, --note string 备注
执行之后会将交易写入到文件:
chain33_set_offline_addr.txt
```
*** ***
#### 离线多签设置 #### 离线多签设置
......
...@@ -5,6 +5,7 @@ import ( ...@@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
"time"
"github.com/33cn/plugin/plugin/dapp/dex/utils" "github.com/33cn/plugin/plugin/dapp/dex/utils"
evmtypes "github.com/33cn/plugin/plugin/dapp/evm/types" evmtypes "github.com/33cn/plugin/plugin/dapp/evm/types"
...@@ -26,8 +27,8 @@ func Boss4xOfflineCmd() *cobra.Command { ...@@ -26,8 +27,8 @@ func Boss4xOfflineCmd() *cobra.Command {
ApproveErc20Cmd(), ApproveErc20Cmd(),
AddToken2LockListCmd(), AddToken2LockListCmd(),
CreateNewBridgeTokenCmd(), CreateNewBridgeTokenCmd(),
SetupCmd(), //SetupCmd(),
ConfigOfflineSaveAccountCmd(), //ConfigOfflineSaveAccountCmd(),
ConfigLockedTokenOfflineSaveCmd(), ConfigLockedTokenOfflineSaveCmd(),
CreateMultisignTransferCmd(), CreateMultisignTransferCmd(),
MultisignTransferCmd(), MultisignTransferCmd(),
...@@ -106,12 +107,11 @@ func paraseFile(file string, result interface{}) error { ...@@ -106,12 +107,11 @@ func paraseFile(file string, result interface{}) error {
return json.Unmarshal(b, result) return json.Unmarshal(b, result)
} }
func callContractAndSignWrite(cmd *cobra.Command, para []byte, contractAddr, name string) { func createOfflineTx(cmd *cobra.Command, para []byte, contractAddr, name string, interval time.Duration) (*utils.Chain33OfflineTx, error) {
action := &evmtypes.EVMContractAction{Amount: 0, GasLimit: 0, GasPrice: 0, Note: name, Para: para, ContractAddr: contractAddr} action := &evmtypes.EVMContractAction{Amount: 0, GasLimit: 0, GasPrice: 0, Note: name, Para: para, ContractAddr: contractAddr}
content, txHash, err := utils.CallContractAndSign(getTxInfo(cmd), action, contractAddr) content, txHash, err := utils.CallContractAndSign(getTxInfo(cmd), action, contractAddr)
if nil != err { if nil != err {
fmt.Println("CallContractAndSign", "Failed", err.Error()) return nil, err
return
} }
Tx := &utils.Chain33OfflineTx{ Tx := &utils.Chain33OfflineTx{
...@@ -119,6 +119,17 @@ func callContractAndSignWrite(cmd *cobra.Command, para []byte, contractAddr, nam ...@@ -119,6 +119,17 @@ func callContractAndSignWrite(cmd *cobra.Command, para []byte, contractAddr, nam
TxHash: common.Bytes2Hex(txHash), TxHash: common.Bytes2Hex(txHash),
SignedRawTx: content, SignedRawTx: content,
OperationName: name, OperationName: name,
Interval: interval,
}
return Tx, nil
}
func callContractAndSignWrite(cmd *cobra.Command, para []byte, contractAddr, name string) {
Tx, err := createOfflineTx(cmd, para, contractAddr, name, 0)
if nil != err {
fmt.Println("CallContractAndSign", "Failed", err.Error(), "name", name)
return
} }
_, err = json.MarshalIndent(Tx, "", " ") _, err = json.MarshalIndent(Tx, "", " ")
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
* 在线发送签名后文件 `./boss4x ethereum offline send -f deploysigntxs.txt` 默认签名后的文件名称都是 deploysigntxs.txt * 在线发送签名后文件 `./boss4x ethereum offline send -f deploysigntxs.txt` 默认签名后的文件名称都是 deploysigntxs.txt
拼凑 boss4x 命令 拼凑 boss4x 命令
./boss4x --rpc_laddr_ethereum http://139.9.219.183:8545 --chainEthId 1 ./boss4x --rpc_laddr_ethereum http://139.9.219.183:8545 --chainEthId 1
``` ```
--chainEthId int chainId, 如果是Bsc, chainId为56, 如果是ethereum, chainId为1, 查询链接:https://chainlist.org/ --chainEthId int chainId, 如果是Bsc, chainId为56, 如果是ethereum, chainId为1, 查询链接:https://chainlist.org/
......
...@@ -12,8 +12,6 @@ function AllRelayerMainTest() { ...@@ -12,8 +12,6 @@ function AllRelayerMainTest() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}" echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
set +e set +e
get_cli
if [[ ${1} != "" ]]; then if [[ ${1} != "" ]]; then
maturityDegree=${1} maturityDegree=${1}
echo -e "${GRE}maturityDegree is ${maturityDegree} ${NOC}" echo -e "${GRE}maturityDegree is ${maturityDegree} ${NOC}"
...@@ -25,16 +23,16 @@ function AllRelayerMainTest() { ...@@ -25,16 +23,16 @@ function AllRelayerMainTest() {
chain33ID="${2}" chain33ID="${2}"
fi fi
get_cli
# init # init
# shellcheck disable=SC2154 # shellcheck disable=SC2154
# shellcheck disable=SC2034
Chain33Cli=${MainCli} Chain33Cli=${MainCli}
InitChain33Validator InitChain33Validator
# para add # para add
initPara initPara
# shellcheck disable=SC2154
# shellcheck disable=SC2034
Chain33Cli=${Para8901Cli}
StartDockerRelayerDeploy StartDockerRelayerDeploy
test_all test_all
......
...@@ -766,41 +766,22 @@ function up_relayer_toml() { ...@@ -766,41 +766,22 @@ function up_relayer_toml() {
function StartDockerRelayerDeploy() { function StartDockerRelayerDeploy() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}" echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# 修改 relayer.toml
up_relayer_toml
# 启动 ebrelayer
start_docker_ebrelayerA
# 部署合约 设置 bridgeRegistry 地址 # 部署合约 设置 bridgeRegistry 地址
InitAndOfflineDeploy OfflineDeploy
# 设置离线多签数据 # 向离线多签地址打点手续费
Chain33Cli=${MainCli} Chain33Cli=${MainCli}
initMultisignChain33Addr initMultisignChain33Addr
Chain33Cli=${Para8901Cli}
offline_setupChain33Multisign
# offline_setupEthMultisign
Chain33Cli=${MainCli}
transferChain33MultisignFee transferChain33MultisignFee
Chain33Cli=${Para8901Cli} Chain33Cli=${Para8901Cli}
# shellcheck disable=SC2086 # 修改 relayer.toml
{ up_relayer_toml
docker cp "${BridgeRegistryOnChain33}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${BridgeRegistryOnChain33}.abi # 启动 ebrelayer
docker cp "${chain33BridgeBank}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33BridgeBank}.abi start_docker_ebrelayerA
docker cp "${BridgeRegistryOnEth}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${BridgeRegistryOnEth}.abi InitRelayerA
docker cp "${ethBridgeBank}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${ethBridgeBank}.abi
}
# 重启
restart_ebrelayerA
# start ebrelayer B C D
updata_toml_start_bcd
# 设置 token 地址 # 设置 token 地址
# InitTokenAddr
offline_create_bridge_token_eth_BTY offline_create_bridge_token_eth_BTY
offline_create_bridge_token_chain33_ETH "ETH" offline_create_bridge_token_chain33_ETH "ETH"
offline_deploy_erc20_create_tether_usdt_USDT offline_deploy_erc20_create_tether_usdt_USDT
...@@ -808,12 +789,16 @@ function StartDockerRelayerDeploy() { ...@@ -808,12 +789,16 @@ function StartDockerRelayerDeploy() {
# shellcheck disable=SC2086 # shellcheck disable=SC2086
{ {
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
docker cp "${chain33EthBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33EthBridgeTokenAddr}.abi docker cp "${chain33EthBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33EthBridgeTokenAddr}.abi
docker cp "${chain33USDTBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33USDTBridgeTokenAddr}.abi docker cp "${chain33USDTBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33USDTBridgeTokenAddr}.abi
} }
# 重启,因为relayerA的验证人地址和部署人的地址是一样的,所以需要重新启动relayer,更新nonce # start ebrelayer B C D
restart_ebrelayerA updata_toml_start_bcd
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}" echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
} }
...@@ -869,8 +854,8 @@ function get_cli() { ...@@ -869,8 +854,8 @@ function get_cli() {
CLID="docker exec ${dockerNamePrefix}_ebrelayerd_1 /root/ebcli_A" CLID="docker exec ${dockerNamePrefix}_ebrelayerd_1 /root/ebcli_A"
docker_ganachetest_ip=$(get_docker_addr "${dockerNamePrefix}_ganachetest_1") 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." 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. --chainID ${chain33ID}"
echo "${Boss4xCLI}"
} }
} }
......
...@@ -31,42 +31,20 @@ function ethereum_offline_sign_send() { ...@@ -31,42 +31,20 @@ function ethereum_offline_sign_send() {
check_eth_tx "${hash}" check_eth_tx "${hash}"
} }
# shellcheck disable=SC2120 function OfflineDeploy() {
function InitAndOfflineDeploy() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}" 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"
# shellcheck disable=SC2154
result=$(${CLIA} ethereum import_privatekey -k "${ethValidatorAddrKeya}")
cli_ret "${result}" "ethereum import_privatekey"
# 在 chain33 上部署合约 # 在 chain33 上部署合约
# shellcheck disable=SC2154 # shellcheck disable=SC2154
${Boss4xCLI} chain33 offline create -f 1 -k "${chain33DeployKey}" -n "deploy crossx to chain33" -r "${chain33DeployAddr}, [${chain33Validatora}, ${chain33Validatorb}, ${chain33Validatorc}, ${chain33Validatord}], [25, 25, 25, 25]" --chainID "${chain33ID}" ${Boss4xCLI} chain33 offline create -f 1 -k "${chain33DeployKey}" -n "deploy crossx to chain33" -r "${chain33DeployAddr}, [${chain33Validatora}, ${chain33Validatorb}, ${chain33Validatorc}, ${chain33Validatord}], [25, 25, 25, 25]" -m "${chain33MultisignA},${chain33MultisignB},${chain33MultisignC},${chain33MultisignD}" --chainID "${chain33ID}"
result=$(${Boss4xCLI} chain33 offline send -f "deployCrossX2Chain33.txt") result=$(${Boss4xCLI} chain33 offline send -f "deployCrossX2Chain33.txt")
for i in {0..7}; do for i in {0..9}; do
hash=$(echo "${result}" | jq -r ".[$i].TxHash") hash=$(echo "${result}" | jq -r ".[$i].TxHash")
check_tx "${Chain33Cli}" "${hash}" check_tx "${Chain33Cli}" "${hash}"
done done
BridgeRegistryOnChain33=$(echo "${result}" | jq -r ".[6].ContractAddr") BridgeRegistryOnChain33=$(echo "${result}" | jq -r ".[6].ContractAddr")
# shellcheck disable=SC2034 # shellcheck disable=SC2034
multisignChain33Addr=$(echo "${result}" | jq -r ".[7].ContractAddr") 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 上部署合约 # 在 Eth 上部署合约
# shellcheck disable=SC2154 # shellcheck disable=SC2154
...@@ -81,11 +59,6 @@ function InitAndOfflineDeploy() { ...@@ -81,11 +59,6 @@ function InitAndOfflineDeploy() {
BridgeRegistryOnEth=$(echo "${result}" | jq -r ".[7].ContractAddr") BridgeRegistryOnEth=$(echo "${result}" | jq -r ".[7].ContractAddr")
# shellcheck disable=SC2034 # shellcheck disable=SC2034
multisignEthAddr=$(echo "${result}" | jq -r ".[8].ContractAddr") multisignEthAddr=$(echo "${result}" | jq -r ".[8].ContractAddr")
${CLIA} ethereum multisign set_multiSign -a "${multisignEthAddr}"
# 拷贝 BridgeRegistry.abi 和 BridgeBank.abi
cp BridgeRegistry.abi "${BridgeRegistryOnEth}.abi"
cp EthBridgeBank.abi "${ethBridgeBank}.abi"
# 修改 relayer.toml 字段 # 修改 relayer.toml 字段
updata_relayer "BridgeRegistryOnChain33" "${BridgeRegistryOnChain33}" "./relayer.toml" updata_relayer "BridgeRegistryOnChain33" "${BridgeRegistryOnChain33}" "./relayer.toml"
...@@ -98,6 +71,39 @@ function InitAndOfflineDeploy() { ...@@ -98,6 +71,39 @@ function InitAndOfflineDeploy() {
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}" echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
} }
# shellcheck disable=SC2120
function InitRelayerA() {
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"
# shellcheck disable=SC2154
result=$(${CLIA} ethereum import_privatekey -k "${ethValidatorAddrKeya}")
cli_ret "${result}" "ethereum import_privatekey"
${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"
${CLIA} ethereum multisign set_multiSign -a "${multisignEthAddr}"
# 拷贝 BridgeRegistry.abi 和 BridgeBank.abi
cp BridgeRegistry.abi "${BridgeRegistryOnEth}.abi"
cp EthBridgeBank.abi "${ethBridgeBank}.abi"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_deploy_erc20_eth_BYC() { function offline_deploy_erc20_eth_BYC() {
# eth 上 铸币 BYC # eth 上 铸币 BYC
echo -e "${GRE}======= 在 ethereum 上创建 ERC20 BYC ======${NOC}" echo -e "${GRE}======= 在 ethereum 上创建 ERC20 BYC ======${NOC}"
...@@ -277,17 +283,17 @@ function offline_create_bridge_token_eth_ZBC() { ...@@ -277,17 +283,17 @@ function offline_create_bridge_token_eth_ZBC() {
cp BridgeToken.abi "${ethereumZbcBridgeTokenAddr}.abi" cp BridgeToken.abi "${ethereumZbcBridgeTokenAddr}.abi"
} }
function offline_setupChain33Multisign() { #function offline_setupChain33Multisign() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}" # echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== 设置 chain33 离线钱包合约 ===========${NOC}" # echo -e "${GRE}=========== 设置 chain33 离线钱包合约 ===========${NOC}"
# shellcheck disable=SC2154 # # shellcheck disable=SC2154
${Boss4xCLI} chain33 offline multisign_setup -m "${multisignChain33Addr}" -o "${chain33MultisignA},${chain33MultisignB},${chain33MultisignC},${chain33MultisignD}" -k "${chain33DeployKey}" --chainID "${chain33ID}" # ${Boss4xCLI} chain33 offline multisign_setup -m "${multisignChain33Addr}" -o "${chain33MultisignA},${chain33MultisignB},${chain33MultisignC},${chain33MultisignD}" -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "multisign_setup.txt" # chain33_offline_send "multisign_setup.txt"
#
${Boss4xCLI} chain33 offline set_offline_addr -a "${multisignChain33Addr}" -c "${chain33BridgeBank}" -k "${chain33DeployKey}" --chainID "${chain33ID}" # ${Boss4xCLI} chain33 offline set_offline_addr -a "${multisignChain33Addr}" -c "${chain33BridgeBank}" -k "${chain33DeployKey}" --chainID "${chain33ID}"
chain33_offline_send "chain33_set_offline_addr.txt" # chain33_offline_send "chain33_set_offline_addr.txt"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}" # echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
} #}
#function offline_setupEthMultisign() { #function offline_setupEthMultisign() {
# echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}" # echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
......
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