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

delete ethereum multisign_setup set_offline_addr

parent c8ca1c7e
#合约部署人员私钥,用于部署合约时签名使用
deployerPrivateKey="8656d2bc732a8a816a461ba5e2d8aac7c7f85c26a813df30d5327210465eb230"
#验证人地址,至少配置3个以上,即大于等于3个
# 合约部署人
operatorAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
# 验证人地址,至少配置3个以上,即大于等于3个
validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
#验证人权重
# 验证人权重
initPowers=[96, 1, 1, 1]
# 主链symbol
symbol="ETH"
# 离线多签地址
multisignAddrs=["0x4c85848a7E2985B76f06a7Ed338FCB3aF94a7DCf", "0x6F163E6daf0090D897AD7016484f10e0cE844994", "0xbc333839E37bc7fAAD0137aBaE2275030555101f", "0x495953A743ef169EC5D4aC7b5F786BF2Bd56aFd5"]
\ No newline at end of file
......@@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"fmt"
ebTypes "github.com/33cn/plugin/plugin/dapp/cross2eth/ebrelayer/types"
"math/big"
"strconv"
"strings"
......@@ -141,11 +142,15 @@ func addCreateFlags(cmd *cobra.Command) {
_ = cmd.MarkFlagRequired("owner")
cmd.Flags().StringP("symbol", "s", "", "symbol")
_ = cmd.MarkFlagRequired("symbol")
cmd.Flags().StringP("multisignAddrs", "m", "", "multisignAddrs, as: 'addr,addr,addr,addr'")
_ = cmd.MarkFlagRequired("multisignAddrs")
}
func createTx(cmd *cobra.Command, _ []string) {
url, _ := cmd.Flags().GetString("rpc_laddr_ethereum")
validatorsAddrs, _ := cmd.Flags().GetString("validatorsAddrs")
multisignAddrs, _ := cmd.Flags().GetString("multisignAddrs")
multisignAddrsArray := strings.Split(multisignAddrs, ",")
initpowers, _ := cmd.Flags().GetString("initPowers")
owner, _ := cmd.Flags().GetString("owner")
deployerAddr := common.HexToAddress(owner)
......@@ -163,7 +168,7 @@ func createTx(cmd *cobra.Command, _ []string) {
return
}
var validators []common.Address
var validators, multisigns []common.Address
var initPowers []*big.Int
for _, v := range validatorsAddrsArray {
validators = append(validators, common.HexToAddress(v))
......@@ -177,13 +182,17 @@ func createTx(cmd *cobra.Command, _ []string) {
initPowers = append(initPowers, big.NewInt(vint64))
}
err := createDeployTxs(url, deployerAddr, validators, initPowers, symbol)
for _, v := range multisignAddrsArray {
multisigns = append(multisigns, common.HexToAddress(v))
}
err := createDeployTxs(url, deployerAddr, validators, multisigns, initPowers, symbol)
if err != nil {
panic(err)
}
}
func createDeployTxs(url string, deployerAddr common.Address, validators []common.Address, initPowers []*big.Int, symbol string) error {
func createDeployTxs(url string, deployerAddr common.Address, validators, multisigns []common.Address, initPowers []*big.Int, symbol string) error {
client, err := ethclient.Dial(url)
if err != nil {
return err
......@@ -269,6 +278,22 @@ func createDeployTxs(url string, deployerAddr common.Address, validators []commo
packData = common.FromHex(gnosis.GnosisSafeBin)
mulSignAddr := crypto.CreateAddress(deployerAddr, startNonce)
infos = append(infos, &DeployInfo{PackData: packData, ContractorAddr: mulSignAddr, Name: "mulSignAddr", Nonce: startNonce, To: nil})
startNonce += 1
//step10 multisign configOfflineSaveAccount
packData, err = offlineSaveAccount(mulSignAddr)
if err != nil {
return err
}
infos = append(infos, &DeployInfo{PackData: packData, ContractorAddr: common.Address{}, Name: "configOfflineSaveAccount", Nonce: startNonce, To: &bridgeBankAddr})
//step11 multisignSetup
packData, err = multisignSetup(multisigns)
if err != nil {
return err
}
infos = append(infos, &DeployInfo{PackData: packData, ContractorAddr: common.Address{}, Name: "multisignSetup", Nonce: startNonce, To: &mulSignAddr})
startNonce += 1
return NewTxWrite(infos, deployerAddr, url, "deploytxs.txt")
}
......@@ -438,6 +463,36 @@ func setSymbol(symbol string) ([]byte, error) {
return abiData, nil
}
//step 10
func offlineSaveAccount(multisignContract common.Address) ([]byte, error) {
bridgeAbi, err := abi.JSON(strings.NewReader(generated.BridgeBankABI))
if err != nil {
return nil, err
}
abiData, err := bridgeAbi.Pack("configOfflineSaveAccount", multisignContract)
if err != nil {
return nil, err
}
return abiData, nil
}
//step 11
func multisignSetup(multisigns []common.Address) ([]byte, error) {
AddressZero := common.HexToAddress(ebTypes.EthNilAddr)
gnoAbi, err := abi.JSON(strings.NewReader(gnosis.GnosisSafeABI))
if err != nil {
return nil, err
}
abiData, err := gnoAbi.Pack("setup", multisigns, big.NewInt(int64(len(multisigns))), AddressZero, []byte{'0', 'x'},
AddressZero, AddressZero, big.NewInt(int64(0)), AddressZero)
if err != nil {
return nil, err
}
return abiData, nil
}
func CreateWithFileCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "create_file", //first step
......@@ -458,13 +513,6 @@ func createWithFileTx(cmd *cobra.Command, _ []string) {
cfgpath, _ := cmd.Flags().GetString("conf")
var deployCfg DeployConfigInfo
InitCfg(cfgpath, &deployCfg)
deployPrivateKey, err := crypto.ToECDSA(common.FromHex(deployCfg.DeployerPrivateKey))
if err != nil {
fmt.Println("crypto.ToECDSA Err:", err)
return
}
deployerAddr := crypto.PubkeyToAddress(deployPrivateKey.PublicKey)
if len(deployCfg.InitPowers) != len(deployCfg.ValidatorsAddr) {
panic("not same number for validator address and power")
}
......@@ -473,14 +521,18 @@ func createWithFileTx(cmd *cobra.Command, _ []string) {
panic("the number of validator must be not less than 3")
}
var validators []common.Address
var validators, multisigns []common.Address
var initPowers []*big.Int
for i, addr := range deployCfg.ValidatorsAddr {
validators = append(validators, common.HexToAddress(addr))
initPowers = append(initPowers, big.NewInt(deployCfg.InitPowers[i]))
}
err = createDeployTxs(url, deployerAddr, validators, initPowers, deployCfg.Symbol)
for _, addr := range deployCfg.MultisignAddrs {
multisigns = append(multisigns, common.HexToAddress(addr))
}
err := createDeployTxs(url, common.HexToAddress(deployCfg.OperatorAddr), validators, multisigns, initPowers, deployCfg.Symbol)
if err != nil {
fmt.Println("createDeployTxs Err:", err)
return
......
......@@ -26,16 +26,21 @@
交易7: 设置 symbol
交易8: 部署合约: BridgeRegistry
交易9: 部署合约: MulSign
交易10: 设置 bridgebank 合约地址可以转到多签合约地址
交易11: 设置离线多签地址信息
```
##### 命令部署
```
命令:
./boss4x ethereum offline create -s "ETH" -p "25,25,25,25" -o "${ethDeployAddr}" -v "${ethValidatorAddra},${ethValidatorAddrb},${ethValidatorAddrc},${ethValidatorAddrd}"
./boss4x ethereum offline create -s "ETH" -p "25,25,25,25" -o "${ethDeployAddr}" -v "${ethValidatorAddra},${ethValidatorAddrb},${ethValidatorAddrc},${ethValidatorAddrd}" -m "${ethMultisignA},${ethMultisignB},${ethMultisignC},${ethMultisignD}"
参数说明:
-p, --initPowers string 验证者权重, as: '25,25,25,25'
-m, --multisignAddrs string 离线多签地址, as: 'addr,addr,addr,addr'
-o, --owner string 部署者地址
-s, --symbol string symbol
-v, --validatorsAddrs string 验证者地址, as: 'addr,addr,addr,addr'
--rpc_laddr_ethereum string ethereum url 地址 (默认 "http://localhost:7545")
输出:
......@@ -43,6 +48,24 @@ tx is written to file: deploytxs.txt
把交易信息写入文件中
```
##### 文件部署
把要部署需要的数据写入 deploy.toml 配置文件
```toml
# 合约部署人
operatorAddr="0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a"
# 验证人地址,至少配置3个以上,即大于等于3个
validatorsAddr=["0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a", "0x0df9a824699bc5878232c9e612fe1a5346a5a368", "0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1", "0xd9dab021e74ecf475788ed7b61356056b2095830"]
# 验证人权重
initPowers=[96, 1, 1, 1]
# 主链symbol
symbol="ETH"
# 离线多签地址
multisignAddrs=["0x4c85848a7E2985B76f06a7Ed338FCB3aF94a7DCf", "0x6F163E6daf0090D897AD7016484f10e0cE844994", "0xbc333839E37bc7fAAD0137aBaE2275030555101f", "0x495953A743ef169EC5D4aC7b5F786BF2Bd56aFd5"]
```
命令:
```shell
./boss4x ethereum offline create_file -c deploy.toml
```
* 离线签名交易
```
......@@ -57,7 +80,6 @@ tx is written to file: deploytxs.txt
```
./boss4x ethereum offline send -f deploysigntxs.txt
```
***
* 输出
```
......@@ -66,38 +88,6 @@ tx is written to file: deploytxs.txt
交易9: 部署合约: MulSign
```
#### 设置离线多签地址信息
* 在线创建交易
```
命令:
./boss4x ethereum offline multisign_setup -m "${multisignEthAddr}" -d "${ethDeployAddr}" -o "${ethMultisignA},${ethMultisignB},${ethMultisignC},${ethMultisignD}"
参数说明:
-d, --deployAddr string 部署者地址
-m, --multisign string 离线多签合约地址
-o, --owner string 多签的地址, 用','分隔
输出
tx is written to file: multisign_setup.txt
```
***
#### 设置 bridgebank 合约地址可以转到多签合约地址
* 在线创建交易
```
命令:
./boss4x ethereum offline set_offline_addr -a "${multisignEthAddr}" -c "${ethBridgeBank}" -d "${ethDeployAddr}"
参数说明:
-a, --address string 离线多签地址
-c, --contract string bridgebank 合约地址
-d, --deployAddr string 部署合约地址
输出
tx is written to file: set_offline_addr.txt
```
***
#### 设置 symbol 允许被 lock
......
......@@ -35,8 +35,8 @@ func DeployOfflineContractsCmd() *cobra.Command {
CreateWithFileCmd(),
DeployERC20Cmd(),
DeployTetherUSDTCmd(),
CreateCfgAccountTxCmd(), // set_offline_addr 设置离线多签地址
SetupCmd(),
//CreateCfgAccountTxCmd(), // set_offline_addr 设置离线多签地址
//SetupCmd(),
ConfigLockedTokenOfflineSaveCmd(),
CreateAddToken2LockListTxCmd(),
CreateBridgeTokenTxCmd(),
......@@ -64,10 +64,11 @@ type DeployInfo struct {
}
type DeployConfigInfo struct {
DeployerPrivateKey string `toml:"deployerPrivateKey"`
ValidatorsAddr []string `toml:"validatorsAddr"`
InitPowers []int64 `toml:"initPowers"`
Symbol string `toml:"symbol"`
OperatorAddr string `toml:"operatorAddr"`
ValidatorsAddr []string `toml:"validatorsAddr"`
InitPowers []int64 `toml:"initPowers"`
Symbol string `toml:"symbol"`
MultisignAddrs []string `toml:"multisignAddrs"`
}
func CreateTxInfoAndWrite(abiData []byte, deployAddr, contract, name, url string) {
......
......@@ -775,16 +775,12 @@ function StartDockerRelayerDeploy() {
# 部署合约 设置 bridgeRegistry 地址
InitAndOfflineDeploy
# 设置 ethereum symbol
# ${Boss4xCLI} ethereum offline set_symbol -s "ETH" -c "${ethBridgeBank}" -d "${ethDeployAddr}"
# ethereum_offline_sign_send "set_symbol.txt"
# 设置离线多签数据
Chain33Cli=${MainCli}
initMultisignChain33Addr
Chain33Cli=${Para8901Cli}
offline_setupChain33Multisign
offline_setupEthMultisign
# offline_setupEthMultisign
Chain33Cli=${MainCli}
transferChain33MultisignFee
Chain33Cli=${Para8901Cli}
......@@ -807,23 +803,13 @@ function StartDockerRelayerDeploy() {
# InitTokenAddr
offline_create_bridge_token_eth_BTY
offline_create_bridge_token_chain33_ETH "ETH"
# offline_deploy_erc20_eth_BYC
# offline_create_bridge_token_chain33_BYC
# offline_deploy_erc20_chain33_YCC
# offline_create_bridge_token_eth_YCC
# offline_deploy_erc20_chain33_ZBC
# offline_create_bridge_token_eth_ZBC
# offline_deploy_erc20_eth_USDT
offline_deploy_erc20_create_tether_usdt_USDT
offline_create_bridge_token_chain33_USDT
# shellcheck disable=SC2086
{
docker cp "${chain33EthBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33EthBridgeTokenAddr}.abi
# docker cp "${chain33BycBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33BycBridgeTokenAddr}.abi
docker cp "${chain33USDTBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33USDTBridgeTokenAddr}.abi
# docker cp "${chain33YccERC20TokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${chain33YccERC20TokenAddr}.abi
# docker cp "${ethereumYccBridgeTokenAddr}.abi" "${dockerNamePrefix}_ebrelayera_1":/root/${ethereumYccBridgeTokenAddr}.abi
}
# 重启,因为relayerA的验证人地址和部署人的地址是一样的,所以需要重新启动relayer,更新nonce
......
......@@ -70,7 +70,7 @@ function InitAndOfflineDeploy() {
# 在 Eth 上部署合约
# shellcheck disable=SC2154
${Boss4xCLI} ethereum offline create -s "ETH" -p "25,25,25,25" -o "${ethDeployAddr}" -v "${ethValidatorAddra},${ethValidatorAddrb},${ethValidatorAddrc},${ethValidatorAddrd}"
${Boss4xCLI} ethereum offline create -s "ETH" -p "25,25,25,25" -o "${ethDeployAddr}" -v "${ethValidatorAddra},${ethValidatorAddrb},${ethValidatorAddrc},${ethValidatorAddrd}" -m "${ethMultisignA},${ethMultisignB},${ethMultisignC},${ethMultisignD}"
${Boss4xCLI} ethereum offline sign -k "${ethDeployKey}"
result=$(${Boss4xCLI} ethereum offline send -f "deploysigntxs.txt")
for i in {0..7}; do
......@@ -289,17 +289,17 @@ function offline_setupChain33Multisign() {
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
function offline_setupEthMultisign() {
echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
echo -e "${GRE}=========== 设置 ETH 离线钱包合约 ===========${NOC}"
# shellcheck disable=SC2154
${Boss4xCLI} ethereum offline multisign_setup -m "${multisignEthAddr}" -d "${ethDeployAddr}" -o "${ethMultisignA},${ethMultisignB},${ethMultisignC},${ethMultisignD}"
ethereum_offline_sign_send "multisign_setup.txt"
${Boss4xCLI} ethereum offline set_offline_addr -a "${multisignEthAddr}" -c "${ethBridgeBank}" -d "${ethDeployAddr}"
ethereum_offline_sign_send "set_offline_addr.txt"
echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
}
#function offline_setupEthMultisign() {
# echo -e "${GRE}=========== $FUNCNAME begin ===========${NOC}"
# echo -e "${GRE}=========== 设置 ETH 离线钱包合约 ===========${NOC}"
# # shellcheck disable=SC2154
# ${Boss4xCLI} ethereum offline multisign_setup -m "${multisignEthAddr}" -d "${ethDeployAddr}" -o "${ethMultisignA},${ethMultisignB},${ethMultisignC},${ethMultisignD}"
# ethereum_offline_sign_send "multisign_setup.txt"
#
# ${Boss4xCLI} ethereum offline set_offline_addr -a "${multisignEthAddr}" -c "${ethBridgeBank}" -d "${ethDeployAddr}"
# ethereum_offline_sign_send "set_offline_addr.txt"
# echo -e "${GRE}=========== $FUNCNAME end ===========${NOC}"
#}
function offline_transfer_multisign_Eth_test() {
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