Commit 343a51e3 authored by QM's avatar QM Committed by vipwzw

add boss4x offline create_file

parent bc3473ec
...@@ -34,6 +34,8 @@ cp ./build/* "${OUT_DIR}" ...@@ -34,6 +34,8 @@ cp ./build/* "${OUT_DIR}"
cp ./build/abi/* "${OUT_DIR}" cp ./build/abi/* "${OUT_DIR}"
cp ../../cross2eth/cmd/build/public/* "${OUT_DIR}" cp ../../cross2eth/cmd/build/public/* "${OUT_DIR}"
cp ../../cross2eth/cmd/build/abi/* "${OUT_DIR}" cp ../../cross2eth/cmd/build/abi/* "${OUT_DIR}"
cp ../../cross2eth/boss4x/chain33/deploy_chain33.toml "${OUT_DIR}"
cp ../../cross2eth/boss4x/ethereum/deploy_ethereum.toml "${OUT_DIR}"
OUT_TESTDIR="${1}/dapptest/$strapp" OUT_TESTDIR="${1}/dapptest/$strapp"
mkdir -p "${OUT_TESTDIR}" mkdir -p "${OUT_TESTDIR}"
......
...@@ -230,7 +230,7 @@ function get_evm_cli() { ...@@ -230,7 +230,7 @@ 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. --chainID ${chain33ID} --chainEthId 0" 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} --chainEthId 1337"
EvmxgoBoss4xCLI="./evmxgoboss4x --rpc_laddr http://${docker_chain33_ip}:8901 --paraName user.p.para. --chainID ${chain33ID}" EvmxgoBoss4xCLI="./evmxgoboss4x --rpc_laddr http://${docker_chain33_ip}:8901 --paraName user.p.para. --chainID ${chain33ID}"
} }
} }
......
# 验证人地址,至少配置3个以上,即大于等于3个
validatorsAddr=["1N6HstkyLFS8QCeVfdvYxx1xoryXoJtvvZ", "155ooMPBTF8QQsGAknkK7ei5D78rwDEFe6", "13zBdQwuyDh7cKN79oT2odkxYuDbgQiXFv", "113ZzVamKfAtGt9dq45fX1mNsEoDiN95HG"]
# 验证人权重
initPowers=[25, 25, 25, 25]
# 离线多签地址
multisignAddrs=["168Sn1DXnLrZHTcAM9stD6t2P49fNuJfJ9", "13KTf57aCkVVJYNJBXBBveiA5V811SrLcT", "1JQwQWsShTHC4zxHzbUfYQK4kRBriUQdEe", "1NHuKqoKe3hyv52PF8XBAyaTmJWAqA2Jbb"]
\ No newline at end of file
...@@ -2,14 +2,14 @@ package offline ...@@ -2,14 +2,14 @@ package offline
import ( import (
"fmt" "fmt"
"strconv"
"strings" "strings"
"time" "time"
ebTypes "github.com/33cn/plugin/plugin/dapp/cross2eth/ebrelayer/types"
"github.com/33cn/chain33/common/address" "github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/system/crypto/secp256k1" "github.com/33cn/chain33/system/crypto/secp256k1"
"github.com/33cn/plugin/plugin/dapp/cross2eth/contracts/contracts4chain33/generated" "github.com/33cn/plugin/plugin/dapp/cross2eth/contracts/contracts4chain33/generated"
ebTypes "github.com/33cn/plugin/plugin/dapp/cross2eth/ebrelayer/types"
"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"
...@@ -21,6 +21,71 @@ import ( ...@@ -21,6 +21,71 @@ import (
./boss4x chain33 offline send -f deployCrossX2Chain33.txt ./boss4x chain33 offline send -f deployCrossX2Chain33.txt
*/ */
type DeployChain33ConfigInfo struct {
ValidatorsAddr []string `toml:"validatorsAddr"`
InitPowers []int64 `toml:"initPowers"`
Symbol string `toml:"symbol"`
MultisignAddrs []string `toml:"multisignAddrs"`
}
func CreateContractsWithFileCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "create_file",
Short: "create and sign all the offline cross to ethereum contracts(inclue valset,ethereumBridge,bridgeBank,oracle,bridgeRegistry,mulSign)",
Run: createContractsWithFile,
}
addCreateContractsWithFileFlags(cmd)
return cmd
}
func addCreateContractsWithFileFlags(cmd *cobra.Command) {
cmd.Flags().StringP("key", "k", "", "the deployer private key")
_ = cmd.MarkFlagRequired("key")
cmd.Flags().StringP("note", "n", "", "transaction note info (optional)")
cmd.Flags().Float64P("fee", "f", 0, "contract gas fee (optional)")
cmd.Flags().StringP("conf", "f", "", "config file")
_ = cmd.MarkFlagRequired("conf")
}
func createContractsWithFile(cmd *cobra.Command, _ []string) {
cfgpath, _ := cmd.Flags().GetString("conf")
var deployCfg DeployChain33ConfigInfo
InitCfg(cfgpath, &deployCfg)
if len(deployCfg.InitPowers) != len(deployCfg.ValidatorsAddr) {
panic("not same number for validator address and power")
}
if len(deployCfg.ValidatorsAddr) < 3 {
panic("the number of validator must be not less than 3")
}
validators := strings.Join(deployCfg.ValidatorsAddr, ",")
var stringPowers []string
for _, v := range deployCfg.InitPowers {
stringPowers = append(stringPowers, strconv.FormatInt(v, 10))
}
initPowers := strings.Join(stringPowers, ",")
privateKeyStr, _ := cmd.Flags().GetString("key")
var driver secp256k1.Driver
privateKeySli := common.FromHex(privateKeyStr)
privateKey, err := driver.PrivKeyFromBytes(privateKeySli)
if nil != err {
fmt.Println("Failed to do PrivKeyFromBytes")
return
}
fromAddr := address.PubKeyToAddress(privateKey.PubKey().Bytes())
from := common.Address{
Addr: fromAddr,
}
valsetParameter := fromAddr.String() + ",[" + validators + "],[" + initPowers + "]"
multisignAddrs := strings.Join(deployCfg.MultisignAddrs, ",")
txCreateInfo := getTxInfo(cmd)
createChain33DeployTxs(txCreateInfo, valsetParameter, multisignAddrs, from)
}
func CreateCrossBridgeCmd() *cobra.Command { func CreateCrossBridgeCmd() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "create", Use: "create",
...@@ -44,8 +109,9 @@ func addCreateCrossBridgeFlags(cmd *cobra.Command) { ...@@ -44,8 +109,9 @@ func addCreateCrossBridgeFlags(cmd *cobra.Command) {
func createCrossBridge(cmd *cobra.Command, args []string) { func createCrossBridge(cmd *cobra.Command, args []string) {
_ = args _ = args
var txs []*utils.Chain33OfflineTx
privateKeyStr, _ := cmd.Flags().GetString("key") privateKeyStr, _ := cmd.Flags().GetString("key")
multisignAddrs, _ := cmd.Flags().GetString("multisignAddrs")
valsetParameter, _ := cmd.Flags().GetString("valset")
var driver secp256k1.Driver var driver secp256k1.Driver
privateKeySli := common.FromHex(privateKeyStr) privateKeySli := common.FromHex(privateKeyStr)
privateKey, err := driver.PrivKeyFromBytes(privateKeySli) privateKey, err := driver.PrivKeyFromBytes(privateKeySli)
...@@ -58,11 +124,18 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -58,11 +124,18 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
Addr: fromAddr, Addr: fromAddr,
} }
txCreateInfo := getTxInfo(cmd)
createChain33DeployTxs(txCreateInfo, valsetParameter, multisignAddrs, from)
}
func createChain33DeployTxs(txCreateInfo *utils.TxCreateInfo, valsetParameter, multisignAddrs string, from common.Address) {
var txs []*utils.Chain33OfflineTx
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 // 0
valsetTx, err := createValsetTxAndSign(cmd, from) valsetTx, err := createValsetTxAndSign(txCreateInfo, valsetParameter, 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())
return return
...@@ -72,7 +145,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -72,7 +145,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 // 1
ethereumBridgeTx, err := createEthereumBridgeAndSign(cmd, from, valsetTx.ContractAddr) ethereumBridgeTx, err := createEthereumBridgeAndSign(txCreateInfo, 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())
return return
...@@ -82,7 +155,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -82,7 +155,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 // 2
oracleTx, err := createOracleTxAndSign(cmd, from, valsetTx.ContractAddr, ethereumBridgeTx.ContractAddr) oracleTx, err := createOracleTxAndSign(txCreateInfo, 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())
return return
...@@ -92,7 +165,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -92,7 +165,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 // 3
bridgeBankTx, err := createBridgeBankTxAndSign(cmd, from, valsetTx.ContractAddr, ethereumBridgeTx.ContractAddr) bridgeBankTx, err := createBridgeBankTxAndSign(txCreateInfo, 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())
return return
...@@ -102,7 +175,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -102,7 +175,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 // 4
setBridgeBank2EthBridgeTx, err := setBridgeBank2EthBridgeTxAndSign(cmd, ethereumBridgeTx.ContractAddr, bridgeBankTx.ContractAddr) setBridgeBank2EthBridgeTx, err := setBridgeBank2EthBridgeTxAndSign(txCreateInfo, 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())
return return
...@@ -112,7 +185,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -112,7 +185,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 // 5
setOracle2EthBridgeTx, err := setOracle2EthBridgeTxAndSign(cmd, ethereumBridgeTx.ContractAddr, oracleTx.ContractAddr) setOracle2EthBridgeTx, err := setOracle2EthBridgeTxAndSign(txCreateInfo, 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())
return return
...@@ -122,7 +195,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -122,7 +195,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 // 6
createBridgeRegistryTx, err := createBridgeRegistryTxAndSign(cmd, from, ethereumBridgeTx.ContractAddr, valsetTx.ContractAddr, bridgeBankTx.ContractAddr, oracleTx.ContractAddr) createBridgeRegistryTx, err := createBridgeRegistryTxAndSign(txCreateInfo, 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())
return return
...@@ -132,7 +205,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -132,7 +205,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 // 7
createMulSign2chain33Tx, err := createMulSignAndSign(cmd, from) createMulSign2chain33Tx, err := createMulSignAndSign(txCreateInfo, 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())
return return
...@@ -142,7 +215,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -142,7 +215,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
fmt.Printf("%d: Going to save multisign contract config offline account \n", i) fmt.Printf("%d: Going to save multisign contract config offline account \n", i)
i += 1 i += 1
// 8 // 8
configMultisignOfflineSaveAccountTx, err := configMultisignOfflineSaveAccount(cmd, createMulSign2chain33Tx.ContractAddr, bridgeBankTx.ContractAddr) configMultisignOfflineSaveAccountTx, err := configMultisignOfflineSaveAccount(txCreateInfo, createMulSign2chain33Tx.ContractAddr, bridgeBankTx.ContractAddr)
if nil != err { if nil != err {
fmt.Println("Failed to configMultisignOfflineSaveAccountTx due to cause:", err.Error()) fmt.Println("Failed to configMultisignOfflineSaveAccountTx due to cause:", err.Error())
return return
...@@ -152,7 +225,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -152,7 +225,7 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
fmt.Printf("%d: Going to Setup multisignAddrs to contract \n", i) fmt.Printf("%d: Going to Setup multisignAddrs to contract \n", i)
i += 1 i += 1
// 9 // 9
multisignSetupTx, err := multisignSetup(cmd, createMulSign2chain33Tx.ContractAddr) multisignSetupTx, err := multisignSetup(txCreateInfo, multisignAddrs, createMulSign2chain33Tx.ContractAddr)
if nil != err { if nil != err {
fmt.Println("Failed to configMultisignOfflineSaveAccountTx due to cause:", err.Error()) fmt.Println("Failed to configMultisignOfflineSaveAccountTx due to cause:", err.Error())
return return
...@@ -163,9 +236,9 @@ func createCrossBridge(cmd *cobra.Command, args []string) { ...@@ -163,9 +236,9 @@ func createCrossBridge(cmd *cobra.Command, args []string) {
utils.WriteToFileInJson(crossXfileName, txs) utils.WriteToFileInJson(crossXfileName, txs)
} }
func createBridgeRegistryTxAndSign(cmd *cobra.Command, from common.Address, ethereumBridge, valset, bridgeBank, oracle string) (*utils.Chain33OfflineTx, error) { func createBridgeRegistryTxAndSign(txCreateInfo *utils.TxCreateInfo, from common.Address, ethereumBridge, valset, bridgeBank, oracle string) (*utils.Chain33OfflineTx, error) {
createPara := fmt.Sprintf("%s,%s,%s,%s", ethereumBridge, bridgeBank, oracle, valset) createPara := fmt.Sprintf("%s,%s,%s,%s", ethereumBridge, bridgeBank, oracle, valset)
content, txHash, err := utils.CreateContractAndSign(getTxInfo(cmd), generated.BridgeRegistryBin, generated.BridgeRegistryABI, createPara, "BridgeRegistry") content, txHash, err := utils.CreateContractAndSign(txCreateInfo, generated.BridgeRegistryBin, generated.BridgeRegistryABI, createPara, "BridgeRegistry")
if nil != err { if nil != err {
return nil, err return nil, err
} }
...@@ -181,7 +254,7 @@ func createBridgeRegistryTxAndSign(cmd *cobra.Command, from common.Address, ethe ...@@ -181,7 +254,7 @@ func createBridgeRegistryTxAndSign(cmd *cobra.Command, from common.Address, ethe
return bridgeRegistryTx, nil return bridgeRegistryTx, nil
} }
func setOracle2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, oracle string) (*utils.Chain33OfflineTx, error) { func setOracle2EthBridgeTxAndSign(txCreateInfo *utils.TxCreateInfo, ethbridge, oracle string) (*utils.Chain33OfflineTx, error) {
parameter := fmt.Sprintf("setOracle(%s)", oracle) parameter := fmt.Sprintf("setOracle(%s)", oracle)
_, packData, err := evmAbi.Pack(parameter, generated.EthereumBridgeABI, false) _, packData, err := evmAbi.Pack(parameter, generated.EthereumBridgeABI, false)
if nil != err { if nil != err {
...@@ -189,23 +262,23 @@ func setOracle2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, oracle string) ...@@ -189,23 +262,23 @@ func setOracle2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, oracle string)
return nil, err return nil, err
} }
return createOfflineTx(cmd, packData, ethbridge, "setOracle2EthBridge", time.Second*5) return createOfflineTx(txCreateInfo, packData, ethbridge, "setOracle2EthBridge", time.Second*5)
} }
func setBridgeBank2EthBridgeTxAndSign(cmd *cobra.Command, ethbridge, bridgebank string) (*utils.Chain33OfflineTx, error) { func setBridgeBank2EthBridgeTxAndSign(txCreateInfo *utils.TxCreateInfo, ethbridge, bridgebank string) (*utils.Chain33OfflineTx, error) {
parameter := fmt.Sprintf("setBridgeBank(%s)", bridgebank) parameter := fmt.Sprintf("setBridgeBank(%s)", bridgebank)
_, packData, err := evmAbi.Pack(parameter, generated.EthereumBridgeABI, false) _, packData, err := evmAbi.Pack(parameter, generated.EthereumBridgeABI, false)
if nil != err { if nil != err {
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
} }
return createOfflineTx(cmd, packData, ethbridge, "setBridgeBank2EthBridge", time.Second*5) return createOfflineTx(txCreateInfo, packData, ethbridge, "setBridgeBank2EthBridge", time.Second*5)
} }
func createBridgeBankTxAndSign(cmd *cobra.Command, from common.Address, oracle, ethereumBridge string) (*utils.Chain33OfflineTx, error) { func createBridgeBankTxAndSign(txCreateInfo *utils.TxCreateInfo, from common.Address, oracle, ethereumBridge string) (*utils.Chain33OfflineTx, error) {
operator := from.String() operator := from.String()
createPara := fmt.Sprintf("%s,%s,%s", operator, oracle, ethereumBridge) createPara := fmt.Sprintf("%s,%s,%s", operator, oracle, ethereumBridge)
content, txHash, err := utils.CreateContractAndSign(getTxInfo(cmd), generated.BridgeBankBin, generated.BridgeBankABI, createPara, "bridgeBank") content, txHash, err := utils.CreateContractAndSign(txCreateInfo, generated.BridgeBankBin, generated.BridgeBankABI, createPara, "bridgeBank")
if nil != err { if nil != err {
return nil, err return nil, err
} }
...@@ -221,10 +294,10 @@ func createBridgeBankTxAndSign(cmd *cobra.Command, from common.Address, oracle, ...@@ -221,10 +294,10 @@ func createBridgeBankTxAndSign(cmd *cobra.Command, from common.Address, oracle,
return bridgeBankTx, nil return bridgeBankTx, nil
} }
func createOracleTxAndSign(cmd *cobra.Command, from common.Address, valset, ethereumBridge string) (*utils.Chain33OfflineTx, error) { func createOracleTxAndSign(txCreateInfo *utils.TxCreateInfo, from common.Address, valset, ethereumBridge string) (*utils.Chain33OfflineTx, error) {
operator := from.String() operator := from.String()
createPara := fmt.Sprintf("%s,%s,%s", operator, valset, ethereumBridge) createPara := fmt.Sprintf("%s,%s,%s", operator, valset, ethereumBridge)
content, txHash, err := utils.CreateContractAndSign(getTxInfo(cmd), generated.OracleBin, generated.OracleABI, createPara, "oralce") content, txHash, err := utils.CreateContractAndSign(txCreateInfo, generated.OracleBin, generated.OracleABI, createPara, "oralce")
if nil != err { if nil != err {
return nil, err return nil, err
} }
...@@ -240,10 +313,9 @@ func createOracleTxAndSign(cmd *cobra.Command, from common.Address, valset, ethe ...@@ -240,10 +313,9 @@ func createOracleTxAndSign(cmd *cobra.Command, from common.Address, valset, ethe
return oracleTx, nil return oracleTx, nil
} }
func createValsetTxAndSign(cmd *cobra.Command, from common.Address) (*utils.Chain33OfflineTx, error) { func createValsetTxAndSign(txCreateInfo *utils.TxCreateInfo, valsetParameter string, from common.Address) (*utils.Chain33OfflineTx, error) {
contructParameter, _ := cmd.Flags().GetString("valset") createPara := valsetParameter
createPara := contructParameter content, txHash, err := utils.CreateContractAndSign(txCreateInfo, generated.ValsetBin, generated.ValsetABI, createPara, "valset")
content, txHash, err := utils.CreateContractAndSign(getTxInfo(cmd), generated.ValsetBin, generated.ValsetABI, createPara, "valset")
if nil != err { if nil != err {
return nil, err return nil, err
} }
...@@ -259,10 +331,10 @@ func createValsetTxAndSign(cmd *cobra.Command, from common.Address) (*utils.Chai ...@@ -259,10 +331,10 @@ func createValsetTxAndSign(cmd *cobra.Command, from common.Address) (*utils.Chai
return valsetTx, nil return valsetTx, nil
} }
func createEthereumBridgeAndSign(cmd *cobra.Command, from common.Address, valset string) (*utils.Chain33OfflineTx, error) { func createEthereumBridgeAndSign(txCreateInfo *utils.TxCreateInfo, from common.Address, valset string) (*utils.Chain33OfflineTx, error) {
operator := from.String() operator := from.String()
createPara := fmt.Sprintf("%s,%s", operator, valset) createPara := fmt.Sprintf("%s,%s", operator, valset)
content, txHash, err := utils.CreateContractAndSign(getTxInfo(cmd), generated.EthereumBridgeBin, generated.EthereumBridgeABI, createPara, "EthereumBridge") content, txHash, err := utils.CreateContractAndSign(txCreateInfo, generated.EthereumBridgeBin, generated.EthereumBridgeABI, createPara, "EthereumBridge")
if nil != err { if nil != err {
return nil, err return nil, err
} }
...@@ -278,8 +350,8 @@ func createEthereumBridgeAndSign(cmd *cobra.Command, from common.Address, valset ...@@ -278,8 +350,8 @@ func createEthereumBridgeAndSign(cmd *cobra.Command, from common.Address, valset
return ethereumBridgeTx, nil return ethereumBridgeTx, nil
} }
func createMulSignAndSign(cmd *cobra.Command, from common.Address) (*utils.Chain33OfflineTx, error) { func createMulSignAndSign(txCreateInfo *utils.TxCreateInfo, from common.Address) (*utils.Chain33OfflineTx, error) {
content, txHash, err := utils.CreateContractAndSign(getTxInfo(cmd), generated.GnosisSafeBin, generated.GnosisSafeABI, "", "mulSign2chain33") content, txHash, err := utils.CreateContractAndSign(txCreateInfo, generated.GnosisSafeBin, generated.GnosisSafeABI, "", "mulSign2chain33")
if nil != err { if nil != err {
return nil, err return nil, err
} }
...@@ -295,18 +367,17 @@ func createMulSignAndSign(cmd *cobra.Command, from common.Address) (*utils.Chain ...@@ -295,18 +367,17 @@ 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) { func configMultisignOfflineSaveAccount(txCreateInfo *utils.TxCreateInfo, multisignContract, bridgebank string) (*utils.Chain33OfflineTx, error) {
parameter := fmt.Sprintf("configOfflineSaveAccount(%s)", multisignContract) parameter := fmt.Sprintf("configOfflineSaveAccount(%s)", multisignContract)
_, packData, err := evmAbi.Pack(parameter, generated.BridgeBankABI, false) _, packData, err := evmAbi.Pack(parameter, generated.BridgeBankABI, false)
if nil != err { if nil != err {
fmt.Println("configOfflineSaveAccount", "Failed to do abi.Pack due to:", err.Error()) fmt.Println("configOfflineSaveAccount", "Failed to do abi.Pack due to:", err.Error())
return nil, err return nil, err
} }
return createOfflineTx(cmd, packData, bridgebank, "configOfflineSaveAccount", time.Second*5) return createOfflineTx(txCreateInfo, packData, bridgebank, "configOfflineSaveAccount", time.Second*5)
} }
func multisignSetup(cmd *cobra.Command, multisignContract string) (*utils.Chain33OfflineTx, error) { func multisignSetup(txCreateInfo *utils.TxCreateInfo, multisignAddrs string, multisignContract string) (*utils.Chain33OfflineTx, error) {
multisignAddrs, _ := cmd.Flags().GetString("multisignAddrs")
owners := strings.Split(multisignAddrs, ",") owners := strings.Split(multisignAddrs, ",")
BTYAddrChain33 := ebTypes.BTYAddrChain33 BTYAddrChain33 := ebTypes.BTYAddrChain33
...@@ -323,5 +394,5 @@ func multisignSetup(cmd *cobra.Command, multisignContract string) (*utils.Chain3 ...@@ -323,5 +394,5 @@ func multisignSetup(cmd *cobra.Command, multisignContract string) (*utils.Chain3
return nil, err return nil, err
} }
return createOfflineTx(cmd, packData, multisignContract, "multisign_setup", time.Second*5) return createOfflineTx(txCreateInfo, packData, multisignContract, "multisign_setup", time.Second*5)
} }
...@@ -3,6 +3,7 @@ package offline ...@@ -3,6 +3,7 @@ package offline
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
tml "github.com/BurntSushi/toml"
"io/ioutil" "io/ioutil"
"os" "os"
"time" "time"
...@@ -22,6 +23,7 @@ func Boss4xOfflineCmd() *cobra.Command { ...@@ -22,6 +23,7 @@ func Boss4xOfflineCmd() *cobra.Command {
} }
cmd.AddCommand( cmd.AddCommand(
CreateCrossBridgeCmd(), CreateCrossBridgeCmd(),
CreateContractsWithFileCmd(),
SendSignTxs2Chain33Cmd(), SendSignTxs2Chain33Cmd(),
CreateERC20Cmd(), CreateERC20Cmd(),
ApproveErc20Cmd(), ApproveErc20Cmd(),
...@@ -107,9 +109,9 @@ func paraseFile(file string, result interface{}) error { ...@@ -107,9 +109,9 @@ func paraseFile(file string, result interface{}) error {
return json.Unmarshal(b, result) return json.Unmarshal(b, result)
} }
func createOfflineTx(cmd *cobra.Command, para []byte, contractAddr, name string, interval time.Duration) (*utils.Chain33OfflineTx, error) { func createOfflineTx(txCreateInfo *utils.TxCreateInfo, 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(txCreateInfo, action, contractAddr)
if nil != err { if nil != err {
return nil, err return nil, err
} }
...@@ -126,7 +128,7 @@ func createOfflineTx(cmd *cobra.Command, para []byte, contractAddr, name string, ...@@ -126,7 +128,7 @@ func createOfflineTx(cmd *cobra.Command, para []byte, contractAddr, name string,
} }
func callContractAndSignWrite(cmd *cobra.Command, para []byte, contractAddr, name string) { func callContractAndSignWrite(cmd *cobra.Command, para []byte, contractAddr, name string) {
Tx, err := createOfflineTx(cmd, para, contractAddr, name, 0) Tx, err := createOfflineTx(getTxInfo(cmd), para, contractAddr, name, 0)
if nil != err { if nil != err {
fmt.Println("CallContractAndSign", "Failed", err.Error(), "name", name) fmt.Println("CallContractAndSign", "Failed", err.Error(), "name", name)
return return
...@@ -145,3 +147,11 @@ func callContractAndSignWrite(cmd *cobra.Command, para []byte, contractAddr, nam ...@@ -145,3 +147,11 @@ func callContractAndSignWrite(cmd *cobra.Command, para []byte, contractAddr, nam
fmt.Printf("Write all the txs to file: %s \n", fileName) fmt.Printf("Write all the txs to file: %s \n", fileName)
utils.WriteToFileInJson(fileName, txs) utils.WriteToFileInJson(fileName, txs)
} }
func InitCfg(filepath string, cfg interface{}) {
if _, err := tml.DecodeFile(filepath, cfg); err != nil {
fmt.Println(err)
os.Exit(-1)
}
return
}
...@@ -108,7 +108,6 @@ func DeployContrcts(cmd *cobra.Command, args []string) { ...@@ -108,7 +108,6 @@ func DeployContrcts(cmd *cobra.Command, args []string) {
} }
func InitCfg(filepath string, cfg interface{}) { func InitCfg(filepath string, cfg interface{}) {
if _, err := tml.DecodeFile(filepath, cfg); err != nil { if _, err := tml.DecodeFile(filepath, cfg); err != nil {
fmt.Println(err) fmt.Println(err)
os.Exit(-1) os.Exit(-1)
......
...@@ -3,7 +3,7 @@ operatorAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a" ...@@ -3,7 +3,7 @@ operatorAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
# 验证人地址,至少配置3个以上,即大于等于3个 # 验证人地址,至少配置3个以上,即大于等于3个
validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"] validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
# 验证人权重 # 验证人权重
initPowers=[96, 1, 1, 1] initPowers=[25, 25, 25, 25]
# 主链symbol # 主链symbol
symbol="ETH" symbol="ETH"
# 离线多签地址 # 离线多签地址
......
...@@ -505,7 +505,7 @@ func CreateWithFileCmd() *cobra.Command { ...@@ -505,7 +505,7 @@ func CreateWithFileCmd() *cobra.Command {
} }
func addCreateWithFileFlags(cmd *cobra.Command) { func addCreateWithFileFlags(cmd *cobra.Command) {
cmd.Flags().StringP("conf", "c", "", "config file") cmd.Flags().StringP("conf", "f", "", "config file")
_ = cmd.MarkFlagRequired("conf") _ = cmd.MarkFlagRequired("conf")
} }
......
...@@ -50,7 +50,7 @@ tx is written to file: deploytxs.txt ...@@ -50,7 +50,7 @@ tx is written to file: deploytxs.txt
把交易信息写入文件中 把交易信息写入文件中
``` ```
##### 文件部署 ##### 文件部署
把要部署需要的数据写入 deploy.toml 配置文件 把要部署需要的数据写入 deploy_ethereum.toml 配置文件
```toml ```toml
# 合约部署人 # 合约部署人
operatorAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a" operatorAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
...@@ -65,7 +65,7 @@ multisignAddrs=["0x4c85848a7E2985B76f06a7Ed338FCB3aF94a7DCf", "0x6F163E6daf0090D ...@@ -65,7 +65,7 @@ multisignAddrs=["0x4c85848a7E2985B76f06a7Ed338FCB3aF94a7DCf", "0x6F163E6daf0090D
``` ```
命令: 命令:
```shell ```shell
./boss4x ethereum offline create_file -c deploy.toml ./boss4x ethereum offline create_file -c deploy_ethereum.toml
``` ```
* 离线签名交易 * 离线签名交易
......
...@@ -30,6 +30,8 @@ cp ../ebrelayer/relayer.toml "${OUT_DIR}/relayer.toml" ...@@ -30,6 +30,8 @@ cp ../ebrelayer/relayer.toml "${OUT_DIR}/relayer.toml"
cp ./build/* "${OUT_DIR}" cp ./build/* "${OUT_DIR}"
cp ./build/abi/* "${OUT_DIR}" cp ./build/abi/* "${OUT_DIR}"
cp ./build/public/* "${OUT_DIR}" cp ./build/public/* "${OUT_DIR}"
cp ../../cross2eth/boss4x/chain33/deploy_chain33.toml "${OUT_DIR}"
cp ../../cross2eth/boss4x/ethereum/deploy_ethereum.toml "${OUT_DIR}"
OUT_TESTDIR="${1}/dapptest/$strapp" OUT_TESTDIR="${1}/dapptest/$strapp"
mkdir -p "${OUT_TESTDIR}" mkdir -p "${OUT_TESTDIR}"
......
...@@ -854,7 +854,7 @@ function get_cli() { ...@@ -854,7 +854,7 @@ 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. --chainID ${chain33ID} --chainEthId 0" 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} --chainEthId 1337"
} }
} }
......
...@@ -53,7 +53,6 @@ CLIA="./ebcli_A" ...@@ -53,7 +53,6 @@ CLIA="./ebcli_A"
CLIB="./ebcli_B" CLIB="./ebcli_B"
CLIC="./ebcli_C" CLIC="./ebcli_C"
CLID="./ebcli_D" CLID="./ebcli_D"
chain33ID=0
function kill_ebrelayerC() { function kill_ebrelayerC() {
kill_ebrelayer ./relayer_C/ebrelayer kill_ebrelayer ./relayer_C/ebrelayer
......
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