Commit 04f37a0d authored by QM's avatar QM

uptdata test.go

parent 4d38b10e
...@@ -144,5 +144,5 @@ func bindOrResumePush(cfg *relayerTypes.SyncTxReceiptConfig) { ...@@ -144,5 +144,5 @@ func bindOrResumePush(cfg *relayerTypes.SyncTxReceiptConfig) {
panic("bindOrResumePush client failed due to:" + string(res.Msg)) panic("bindOrResumePush client failed due to:" + string(res.Msg))
} }
log.Info("bindOrResumePush", "Succeed to AddSubscribeTxReceipt for rpc address:", cfg.Chain33Host) log.Info("bindOrResumePush", "Succeed to AddSubscribeTxReceipt for rpc address:", cfg.Chain33Host)
fmt.Println("Succeed to AddSubscribeTxReceipt") fmt.Println("Succeed to AddPushSubscribe")
} }
...@@ -4,20 +4,20 @@ import ( ...@@ -4,20 +4,20 @@ import (
"context" "context"
"encoding/hex" "encoding/hex"
"flag" "flag"
"fmt"
"github.com/33cn/chain33/client/mocks"
"github.com/33cn/chain33/util/testnode"
//"github.com/ethereum/go-ethereum/core/types"
"github.com/influxdata/influxdb/pkg/testing/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"math/big" "math/big"
"os" "os"
"os/signal"
"sync"
"syscall"
"testing" "testing"
"time" "time"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/33cn/chain33/client/mocks"
"github.com/33cn/chain33/util/testnode"
"github.com/stretchr/testify/mock"
dbm "github.com/33cn/chain33/common/db" dbm "github.com/33cn/chain33/common/db"
_ "github.com/33cn/chain33/system" _ "github.com/33cn/chain33/system"
chain33Types "github.com/33cn/chain33/types" chain33Types "github.com/33cn/chain33/types"
...@@ -32,7 +32,6 @@ import ( ...@@ -32,7 +32,6 @@ import (
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/stretchr/testify/suite"
) )
var ( var (
...@@ -49,318 +48,339 @@ var ( ...@@ -49,318 +48,339 @@ var (
ethValidatorAddrKeyB = "a5f3063552f4483cfc20ac4f40f45b798791379862219de9e915c64722c1d400" ethValidatorAddrKeyB = "a5f3063552f4483cfc20ac4f40f45b798791379862219de9e915c64722c1d400"
ethValidatorAddrKeyC = "bbf5e65539e9af0eb0cfac30bad475111054b09c11d668fc0731d54ea777471e" ethValidatorAddrKeyC = "bbf5e65539e9af0eb0cfac30bad475111054b09c11d668fc0731d54ea777471e"
ethValidatorAddrKeyD = "c9fa31d7984edf81b8ef3b40c761f1847f6fcd5711ab2462da97dc458f1f896b" ethValidatorAddrKeyD = "c9fa31d7984edf81b8ef3b40c761f1847f6fcd5711ab2462da97dc458f1f896b"
)
type suiteEthRelayer struct {
suite.Suite
ethRelayer *Relayer4Ethereum ethRelayer *Relayer4Ethereum
sim *ethinterface.SimExtend sim *ethinterface.SimExtend
x2EthContracts *ethtxs.X2EthContracts x2EthContracts *ethtxs.X2EthContracts
x2EthDeployInfo *ethtxs.X2EthDeployInfo x2EthDeployInfo *ethtxs.X2EthDeployInfo
para *ethtxs.DeployPara para *ethtxs.DeployPara
backend bind.ContractBackend )
}
func TestRunSuiteX2Ethereum(t *testing.T) {
var tx chain33Types.Transaction
var ret chain33Types.Reply
ret.IsOk = true
mockapi := &mocks.QueueProtocolAPI{} func init() {
// 这里对需要mock的方法打桩,Close是必须的,其它方法根据需要 deployContracts()
mockapi.On("Close").Return() ethRelayer = newEthRelayer()
mockapi.On("CreateTransaction", mock.Anything).Return(&tx, nil) _ = ethRelayer.ImportChain33PrivateKey(passphrase, chain33PrivateKeyStr)
mockapi.On("SendTx", mock.Anything).Return(&ret, nil) time.Sleep(time.Second)
mockapi.On("SendTransaction", mock.Anything).Return(&ret, nil) }
mockapi.On("GetConfig", mock.Anything).Return(chainTestCfg, nil)
mock33 := testnode.New("", mockapi) func Test_GetValidatorAddr(t *testing.T) {
defer mock33.Close() _, _, err := ethRelayer.NewAccount("123")
rpcCfg := mock33.GetCfg().RPC assert.NoError(t, err)
// 这里必须设置监听端口,默认的是无效值
rpcCfg.JrpcBindAddr = "127.0.0.1:8801"
mock33.GetRPC().Listen()
log := new(suiteEthRelayer) privateKey, addr, err := ethRelayer.GetAccount("123")
suite.Run(t, log) assert.NoError(t, err)
} assert.NotEqual(t, privateKey, chain33PrivateKeyStr)
func (r *suiteEthRelayer) SetupSuite() { privateKey, addr, err = ethRelayer.GetAccount(passphrase)
r.deployContracts() assert.NoError(t, err)
r.ethRelayer = r.newEthRelayer() assert.Equal(t, privateKey, chain33PrivateKeyStr)
assert.Equal(t, addr, chain33AccountAddr)
_, err := r.ethRelayer.DeployContrcts() validators, err := ethRelayer.GetValidatorAddr()
r.Error(err) assert.NoError(t, err)
assert.Equal(t, validators.Chain33Validator, chain33AccountAddr)
} }
func (r *suiteEthRelayer) Test_1_ImportPrivateKey() { func Test_IsValidatorActive(t *testing.T) {
validators, err := r.ethRelayer.GetValidatorAddr() ethRelayer.x2EthContracts = x2EthContracts
r.Error(err) ethRelayer.x2EthDeployInfo = x2EthDeployInfo
r.Empty(validators)
_, _, err = r.ethRelayer.NewAccount("123") fmt.Println("ethRelayer.x2EthContracts.Valset", ethRelayer.x2EthContracts.Valset)
r.NoError(err)
err = r.ethRelayer.ImportChain33PrivateKey(passphrase, chain33PrivateKeyStr) is, err := ethRelayer.IsValidatorActive("0x92c8b16afd6d423652559c6e266cbe1c29bfd84f")
r.NoError(err) assert.Equal(t, is, true)
assert.NoError(t, err)
privateKey, addr, err := r.ethRelayer.GetAccount("123") is, err = ethRelayer.IsValidatorActive("0x0C05bA5c230fDaA503b53702aF1962e08D0C60BF")
r.NoError(err) assert.Equal(t, is, false)
r.NotEqual(privateKey, chain33PrivateKeyStr) assert.NoError(t, err)
privateKey, addr, err = r.ethRelayer.GetAccount(passphrase) is, err = ethRelayer.IsValidatorActive("123")
r.NoError(err) require.Error(t, err)
r.Equal(privateKey, chain33PrivateKeyStr)
r.Equal(addr, chain33AccountAddr)
validators, err = r.ethRelayer.GetValidatorAddr()
r.NoError(err)
r.Equal(validators.Chain33Validator, chain33AccountAddr)
} }
func (r *suiteEthRelayer) Test_2_IsValidatorActive() { func Test_ShowAddr(t *testing.T) {
r.ethRelayer.x2EthContracts = r.x2EthContracts ethRelayer.prePareSubscribeEvent()
r.ethRelayer.x2EthDeployInfo = r.x2EthDeployInfo
is, err := r.ethRelayer.IsValidatorActive("0x92c8b16afd6d423652559c6e266cbe1c29bfd84f") addr, err := ethRelayer.ShowBridgeBankAddr()
r.Equal(is, true) assert.NoError(t, err)
r.NoError(err) assert.Equal(t, addr, x2EthDeployInfo.BridgeBank.Address.String())
is, err = r.ethRelayer.IsValidatorActive("0x0C05bA5c230fDaA503b53702aF1962e08D0C60BF") addr, err = ethRelayer.ShowBridgeRegistryAddr()
r.Equal(is, false) assert.NoError(t, err)
r.NoError(err) assert.Equal(t, addr, x2EthDeployInfo.BridgeRegistry.Address.String())
is, err = r.ethRelayer.IsValidatorActive("123") addr, err = ethRelayer.ShowOperator()
r.Error(err) assert.NoError(t, err)
assert.Equal(t, addr, para.Operator.String())
} }
func (r *suiteEthRelayer) Test_3_Token() { func Test_CreateBridgeToken(t *testing.T) {
r.isChain33KeyImport() balance, err := ethRelayer.GetBalance("", para.InitValidators[0].String())
r.ethRelayer.prePareSubscribeEvent() assert.NoError(t, err)
assert.Equal(t, balance, "10000000000")
addr, err := r.ethRelayer.ShowBridgeBankAddr()
r.NoError(err)
r.Equal(addr, r.x2EthDeployInfo.BridgeBank.Address.String())
addr, err = r.ethRelayer.ShowBridgeRegistryAddr() tokenAddrbty, err := ethRelayer.CreateBridgeToken("BTY")
r.NoError(err) assert.NoError(t, err)
r.Equal(addr, r.x2EthDeployInfo.BridgeRegistry.Address.String()) require.NotEmpty(t, tokenAddrbty)
sim.Commit()
addr, err = r.ethRelayer.ShowOperator() addr, err := ethRelayer.ShowTokenAddrBySymbol("BTY")
r.NoError(err) assert.NoError(t, err)
r.Equal(addr, r.para.Operator.String()) assert.Equal(t, addr, tokenAddrbty)
balance, err := r.ethRelayer.GetBalance("", r.para.InitValidators[0].String()) decimals, err := ethRelayer.GetDecimals(tokenAddrbty)
r.NoError(err) assert.NoError(t, err)
r.Equal(balance, "10000000000") assert.Equal(t, decimals, uint8(8))
tokenAddrbty, err := r.ethRelayer.CreateBridgeToken("bty") _, err = ethRelayer.Burn(ethValidatorAddrKeyA, tokenAddrbty, chain33AccountAddr, "10")
r.NoError(err) require.Error(t, err)
r.NotEmpty(tokenAddrbty)
r.sim.Commit()
addr, err = r.ethRelayer.ShowTokenAddrBySymbol("bty") _, err = ethRelayer.BurnAsync(ethValidatorAddrKeyA, tokenAddrbty, chain33AccountAddr, "10")
r.NoError(err) require.Error(t, err)
r.Equal(addr, tokenAddrbty) }
tokenErc20Addr, err := r.ethRelayer.CreateERC20Token("testcc") func Test_CreateERC20Token(t *testing.T) {
r.NoError(err) tokenErc20Addr, err := ethRelayer.CreateERC20Token("testcc")
r.NotEmpty(tokenErc20Addr) assert.NoError(t, err)
r.sim.Commit() require.NotEmpty(t, tokenErc20Addr)
sim.Commit()
_, err = r.ethRelayer.MintERC20Token(tokenErc20Addr, r.para.Deployer.String(), "20000000000000") _, err = ethRelayer.MintERC20Token(tokenErc20Addr, para.Deployer.String(), "20000000000000")
r.NoError(err) assert.NoError(t, err)
r.sim.Commit() sim.Commit()
balance, err = r.ethRelayer.ShowDepositStatics(tokenErc20Addr) balance, err := ethRelayer.ShowDepositStatics(tokenErc20Addr)
r.NoError(err) assert.NoError(t, err)
r.Equal(balance, "20000000000000") assert.Equal(t, balance, "20000000000000")
//claimID := crypto.Keccak256Hash(big.NewInt(50).Bytes()) //claimID := crypto.Keccak256Hash(big.NewInt(50).Bytes())
//ret, err = r.ethRelayer.IsProphecyPending(claimID) //ret, err = ethRelayer.IsProphecyPending(claimID)
//r.NoError(err) //assert.NoError(t, err)
//r.Equal(ret, false) //assert.Equal(t,ret, false)
decimals, err := r.ethRelayer.GetDecimals(tokenAddrbty) txhash, err := ethRelayer.TransferToken(tokenErc20Addr, hexutil.Encode(crypto.FromECDSA(para.DeployPrivateKey)), ethRelayer.deployInfo.ValidatorsAddr[0], "100")
r.NoError(err) assert.NoError(t, err)
r.Equal(decimals, uint8(8)) sim.Commit()
_, err = r.ethRelayer.Burn(ethValidatorAddrKeyA, tokenAddrbty, chain33AccountAddr, "10") _, err = ethRelayer.ShowTxReceipt(txhash)
r.Error(err) assert.NoError(t, err)
_, err = r.ethRelayer.BurnAsync(ethValidatorAddrKeyA, tokenAddrbty, chain33AccountAddr, "10") balance, err = ethRelayer.GetBalance(tokenErc20Addr, ethRelayer.deployInfo.ValidatorsAddr[0])
r.Error(err) assert.NoError(t, err)
assert.Equal(t, balance, "100")
txhash, err := r.ethRelayer.TransferToken(tokenErc20Addr, hexutil.Encode(crypto.FromECDSA(r.para.DeployPrivateKey)), r.ethRelayer.deployInfo.ValidatorsAddr[0], "100") balance, err = ethRelayer.GetBalance(tokenErc20Addr, para.Deployer.String())
r.NoError(err) assert.NoError(t, err)
r.sim.Commit() assert.Equal(t, balance, "19999999999900")
_, err = r.ethRelayer.ShowTxReceipt(txhash) tx1 := ethRelayer.QueryTxhashRelay2Eth()
r.NoError(err) require.Empty(t, tx1)
balance, err = r.ethRelayer.GetBalance(tokenErc20Addr, r.ethRelayer.deployInfo.ValidatorsAddr[0]) tx2 := ethRelayer.QueryTxhashRelay2Chain33()
r.NoError(err) require.Empty(t, tx2)
r.Equal(balance, "100") }
balance, err = r.ethRelayer.GetBalance(tokenErc20Addr, r.para.Deployer.String())
r.NoError(err)
r.Equal(balance, "19999999999900")
tx1 := r.ethRelayer.QueryTxhashRelay2Eth() func Test_LockEth(t *testing.T) {
r.Empty(tx1) var tx chain33Types.Transaction
var ret chain33Types.Reply
ret.IsOk = true
tx2 := r.ethRelayer.QueryTxhashRelay2Chain33() mockapi := &mocks.QueueProtocolAPI{}
r.Empty(tx2) // 这里对需要mock的方法打桩,Close是必须的,其它方法根据需要
} mockapi.On("Close").Return()
mockapi.On("AddPushSubscribe", mock.Anything).Return(&ret, nil)
mockapi.On("CreateTransaction", mock.Anything).Return(&tx, nil)
mockapi.On("SendTx", mock.Anything).Return(&ret, nil)
mockapi.On("SendTransaction", mock.Anything).Return(&ret, nil)
mockapi.On("GetConfig", mock.Anything).Return(chainTestCfg, nil)
func (r *suiteEthRelayer) Test_4_LockEth() { mock33 := testnode.New("", mockapi)
r.isChain33KeyImport() defer mock33.Close()
rpcCfg := mock33.GetCfg().RPC
// 这里必须设置监听端口,默认的是无效值
rpcCfg.JrpcBindAddr = "127.0.0.1:8801"
mock33.GetRPC().Listen()
ctx := context.Background() ctx := context.Background()
bridgeBankBalance, err := r.sim.BalanceAt(ctx, r.x2EthDeployInfo.BridgeBank.Address, nil) bridgeBankBalance, err := sim.BalanceAt(ctx, x2EthDeployInfo.BridgeBank.Address, nil)
r.NoError(err) assert.NoError(t, err)
r.Equal(bridgeBankBalance.Int64(), int64(0)) assert.Equal(t, bridgeBankBalance.Int64(), int64(0))
userOneAuth, err := ethtxs.PrepareAuth(r.sim, r.para.ValidatorPriKey[0], r.para.InitValidators[0]) userOneAuth, err := ethtxs.PrepareAuth(sim, para.ValidatorPriKey[0], para.InitValidators[0])
r.NoError(err) assert.NoError(t, err)
//lock 50 eth //lock 50 eth
chain33Sender := []byte("14KEKbYtKKQm4wMthSK9J4La4nAiidGozt") chain33Sender := []byte("14KEKbYtKKQm4wMthSK9J4La4nAiidGozt")
ethAmount := big.NewInt(50) ethAmount := big.NewInt(50)
userOneAuth.Value = ethAmount userOneAuth.Value = ethAmount
_, err = r.x2EthContracts.BridgeBank.Lock(userOneAuth, chain33Sender, common.Address{}, ethAmount) _, err = x2EthContracts.BridgeBank.Lock(userOneAuth, chain33Sender, common.Address{}, ethAmount)
r.NoError(err) assert.NoError(t, err)
r.sim.Commit() sim.Commit()
bridgeBankBalance, err = r.sim.BalanceAt(ctx, r.x2EthDeployInfo.BridgeBank.Address, nil) bridgeBankBalance, err = sim.BalanceAt(ctx, x2EthDeployInfo.BridgeBank.Address, nil)
r.NoError(err) assert.NoError(t, err)
r.Equal(bridgeBankBalance.Int64(), ethAmount.Int64()) assert.Equal(t, bridgeBankBalance.Int64(), ethAmount.Int64())
for i := 0; i < 11; i++ { for i := 0; i < 11; i++ {
r.sim.Commit() sim.Commit()
} }
time.Sleep(time.Duration(r.ethRelayer.fetchHeightPeriodMs) * time.Millisecond) time.Sleep(time.Duration(ethRelayer.fetchHeightPeriodMs) * time.Millisecond)
balance, err := ethRelayer.ShowLockStatics("")
assert.NoError(t, err)
assert.Equal(t, balance, "50")
balance, err := r.ethRelayer.ShowLockStatics("") time.Sleep(time.Second)
r.NoError(err)
r.Equal(balance, "50")
} }
//func (r *suiteEthRelayer) Test_5_LockErc20() { //func Test_LockErc20(t *testing.T) {
// r.isChain33KeyImport() // var tx chain33Types.Transaction
// var ret chain33Types.Reply
// ret.IsOk = true
// //
// tokenErc20Addr, err := r.ethRelayer.CreateERC20Token("testc") // mockapi := &mocks.QueueProtocolAPI{}
// r.NoError(err) // // 这里对需要mock的方法打桩,Close是必须的,其它方法根据需要
// r.NotEmpty(tokenErc20Addr) // mockapi.On("Close").Return()
// r.sim.Commit() // mockapi.On("AddPushSubscribe", mock.Anything).Return(&ret, nil)
// mockapi.On("CreateTransaction", mock.Anything).Return(&tx, nil)
// mockapi.On("SendTx", mock.Anything).Return(&ret, nil)
// mockapi.On("SendTransaction", mock.Anything).Return(&ret, nil)
// mockapi.On("GetConfig", mock.Anything).Return(chainTestCfg, nil)
// //
// _, err = r.ethRelayer.MintERC20Token(tokenErc20Addr, r.para.Deployer.String(), "10000000000000") // mock33 := testnode.New("", mockapi)
// r.NoError(err) // defer mock33.Close()
// r.sim.Commit() // rpcCfg := mock33.GetCfg().RPC
// // 这里必须设置监听端口,默认的是无效值
// rpcCfg.JrpcBindAddr = "127.0.0.1:8801"
// mock33.GetRPC().Listen()
// //
// balance, err := r.ethRelayer.ShowDepositStatics(tokenErc20Addr) // tokenErc20Addr, err := ethRelayer.CreateERC20Token("testc")
// r.NoError(err) // assert.NoError(t, err)
// r.Equal(balance, "10000000000000") // require.NotEmpty(t, tokenErc20Addr)
// sim.Commit()
// //
// chain33Receiver := "14KEKbYtKKQm4wMthSK9J4La4nAiidGozt" // fmt.Println("tokenErc20Addr**************", tokenErc20Addr)
// _, err = r.ethRelayer.LockEthErc20Asset(hexutil.Encode(crypto.FromECDSA(r.para.DeployPrivateKey)), tokenErc20Addr, "100", chain33Receiver)
// r.NoError(err)
// r.sim.Commit()
// //
// balance, err = r.ethRelayer.GetBalance(tokenErc20Addr, r.para.Deployer.String()) // _, err = ethRelayer.MintERC20Token(tokenErc20Addr, para.Deployer.String(), "10000000000000")
// r.NoError(err) // assert.NoError(t, err)
// r.Equal(balance, "9999999999900") // sim.Commit()
// //
// _, err = r.ethRelayer.ApproveAllowance(hexutil.Encode(crypto.FromECDSA(r.para.DeployPrivateKey)), tokenErc20Addr, "500") // balance, err := ethRelayer.ShowDepositStatics(tokenErc20Addr)
// r.NoError(err) // assert.NoError(t, err)
// r.sim.Commit() // assert.Equal(t, balance, "10000000000000")
// //
// _, err = r.ethRelayer.LockEthErc20AssetAsync(hexutil.Encode(crypto.FromECDSA(r.para.DeployPrivateKey)), tokenErc20Addr, "100", chain33Receiver) // chain33Receiver := "14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
// r.NoError(err) // _, err = ethRelayer.LockEthErc20Asset(hexutil.Encode(crypto.FromECDSA(para.DeployPrivateKey)), tokenErc20Addr, "100", chain33Receiver)
// r.sim.Commit() // assert.NoError(t, err)
// sim.Commit()
// //
// balance, err = r.ethRelayer.GetBalance(tokenErc20Addr, r.para.Deployer.String()) // balance, err = ethRelayer.GetBalance(tokenErc20Addr, para.Deployer.String())
// r.NoError(err) // assert.NoError(t, err)
// r.Equal(balance, "9999999999800") // assert.Equal(t, balance, "9999999999900")
// //
// //ret, err := r.ethRelayer.ApproveAllowance(hexutil.Encode(crypto.FromECDSA(r.para.DeployPrivateKey)), tokenErc20Addr, "20000000000000") // _, err = ethRelayer.ApproveAllowance(hexutil.Encode(crypto.FromECDSA(para.DeployPrivateKey)), tokenErc20Addr, "500")
// //fmt.Println("?????", ret, err) // assert.NoError(t, err)
// //r.Error(err) // sim.Commit()
// //
// //ctx := context.Background() // _, err = ethRelayer.LockEthErc20AssetAsync(hexutil.Encode(crypto.FromECDSA(para.DeployPrivateKey)), tokenErc20Addr, "100", chain33Receiver)
// //bridgeBankBalance, err := r.sim.BalanceAt(ctx, r.x2EthDeployInfo.BridgeBank.Address, nil) // assert.NoError(t, err)
// //r.NoError(err) // sim.Commit()
// //r.Equal(bridgeBankBalance.Int64(), int64(0)) //
// // // balance, err = ethRelayer.GetBalance(tokenErc20Addr, para.Deployer.String())
// //userOneAuth, err := ethtxs.PrepareAuth(r.sim, r.para.DeployPrivateKey, r.para.Deployer) // assert.NoError(t, err)
// //r.NoError(err) // assert.Equal(t, balance, "9999999999800")
// //
// //allowAmount := int64(100)
// //erc20TokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenErc20Addr), r.ethRelayer.clientSpec)
// //r.NoError(err)
// //
// //_, err = erc20TokenInstance.Approve(userOneAuth, r.ethRelayer.x2EthDeployInfo.BridgeBank.Address, big.NewInt(allowAmount))
// //r.NoError(err)
// //r.sim.Commit()
// //
// ////lock 100 testc
// //chain33Receiver := []byte("14KEKbYtKKQm4wMthSK9J4La4nAiidGozt")
// //lockAmount := big.NewInt(100)
// //userOneAuth, err = ethtxs.PrepareAuth(r.sim, r.para.DeployPrivateKey, r.para.Deployer)
// //r.NoError(err)
// //
// //_, err = r.x2EthContracts.BridgeBank.Lock(userOneAuth, chain33Receiver, common.HexToAddress(tokenErc20Addr), lockAmount)
// //r.NoError(err)
// //r.sim.Commit()
// // // //
// //balance, err = r.ethRelayer.ShowLockStatics(tokenErc20Addr) // //for i := 0; i < 11; i++ {
// //r.NoError(err) // // sim.Commit()
// //r.Equal(balance, "100") // //}
// //time.Sleep(time.Duration(ethRelayer.fetchHeightPeriodMs) * time.Millisecond)
//}
//func Test_BurnBty(t *testing.T) {
// tokenAddrbty, err := ethRelayer.CreateBridgeToken("bty")
// assert.NoError(t, err)
// require.NotEmpty(t, tokenAddrbty)
// sim.Commit()
//
// chain33Sender := []byte("14KEKbYtKKQm4wMthSK9J4La4nAiidGozt")
// amount := int64(100)
// ethReceiver := para.InitValidators[2]
// claimID := crypto.Keccak256Hash(chain33Sender, ethReceiver.Bytes(), big.NewInt(amount).Bytes())
//
// authOracle, err := ethtxs.PrepareAuth(ethRelayer.clientSpec, para.ValidatorPriKey[0], para.InitValidators[0])
// require.Nil(t, err)
// signature, err := ethtxs.SignClaim4Eth(claimID, para.ValidatorPriKey[0])
// require.Nil(t, err)
//
// _, err = x2EthContracts.Oracle.NewOracleClaim(
// authOracle,
// events.ClaimTypeLock,
// chain33Sender,
// ethReceiver,
// common.HexToAddress(tokenAddrbty),
// "bty",
// big.NewInt(amount),
// claimID,
// signature)
// require.Nil(t, err)
// sim.Commit()
//
// balanceNew, err := ethRelayer.GetBalance(tokenAddrbty, ethReceiver.String())
// require.Nil(t, err)
// require.Equal(t, balanceNew, "100")
//
// _, err = ethRelayer.Burn(hexutil.Encode(crypto.FromECDSA(para.ValidatorPriKey[2])), tokenAddrbty, chain33AccountAddr, "10")
// require.NoError(t, err)
// sim.Commit()
//
// balanceNew, err = ethRelayer.GetBalance(tokenAddrbty, ethReceiver.String())
// require.Nil(t, err)
// require.Equal(t, balanceNew, "90")
// //
// for i := 0; i < 11; i++ { // _, err = ethRelayer.ApproveAllowance(hexutil.Encode(crypto.FromECDSA(para.ValidatorPriKey[2])), tokenAddrbty, "10")
// r.sim.Commit() // assert.NoError(t, err)
// } // sim.Commit()
// time.Sleep(time.Duration(r.ethRelayer.fetchHeightPeriodMs) * time.Millisecond) //
// _, err = ethRelayer.BurnAsync(hexutil.Encode(crypto.FromECDSA(para.ValidatorPriKey[2])), tokenAddrbty, chain33AccountAddr, "10")
// require.NoError(t, err)
// sim.Commit()
//
// balanceNew, err = ethRelayer.GetBalance(tokenAddrbty, ethReceiver.String())
// require.Nil(t, err)
// require.Equal(t, balanceNew, "80")
//} //}
func (r *suiteEthRelayer) Test_6_RestorePrivateKeys() { func Test_RestorePrivateKeys(t *testing.T) {
go func() { go func() {
for range r.ethRelayer.unlockchan { for range ethRelayer.unlockchan {
} }
}() }()
temp := r.ethRelayer.privateKey4Chain33 temp := ethRelayer.privateKey4Chain33
err := r.ethRelayer.RestorePrivateKeys("123") err := ethRelayer.RestorePrivateKeys("123")
r.NotEqual(hex.EncodeToString(temp.Bytes()), hex.EncodeToString(r.ethRelayer.privateKey4Chain33.Bytes())) assert.NotEqual(t, hex.EncodeToString(temp.Bytes()), hex.EncodeToString(ethRelayer.privateKey4Chain33.Bytes()))
r.NoError(err) assert.NoError(t, err)
err = r.ethRelayer.RestorePrivateKeys(passphrase) err = ethRelayer.RestorePrivateKeys(passphrase)
r.Equal(hex.EncodeToString(temp.Bytes()), hex.EncodeToString(r.ethRelayer.privateKey4Chain33.Bytes())) assert.Equal(t, hex.EncodeToString(temp.Bytes()), hex.EncodeToString(ethRelayer.privateKey4Chain33.Bytes()))
r.NoError(err) assert.NoError(t, err)
err = r.ethRelayer.StoreAccountWithNewPassphase("new123", passphrase) err = ethRelayer.StoreAccountWithNewPassphase("new123", passphrase)
r.NoError(err) assert.NoError(t, err)
err = r.ethRelayer.RestorePrivateKeys("new123") err = ethRelayer.RestorePrivateKeys("new123")
r.Equal(hex.EncodeToString(temp.Bytes()), hex.EncodeToString(r.ethRelayer.privateKey4Chain33.Bytes())) assert.Equal(t, hex.EncodeToString(temp.Bytes()), hex.EncodeToString(ethRelayer.privateKey4Chain33.Bytes()))
r.NoError(err) assert.NoError(t, err)
time.Sleep(time.Second) time.Sleep(time.Second)
} }
func (r *suiteEthRelayer) isChain33KeyImport() { func newEthRelayer() *Relayer4Ethereum {
_, err := r.ethRelayer.GetValidatorAddr()
if err != nil {
err = r.ethRelayer.ImportChain33PrivateKey(passphrase, chain33PrivateKeyStr)
r.NoError(err)
}
}
func (r *suiteEthRelayer) newEthRelayer() *Relayer4Ethereum {
cfg := initCfg(*configPath) cfg := initCfg(*configPath)
cfg.SyncTxConfig.Chain33Host = "http://127.0.0.1:8801" cfg.SyncTxConfig.Chain33Host = "http://127.0.0.1:8801"
cfg.BridgeRegistry = r.x2EthDeployInfo.BridgeRegistry.Address.String() cfg.BridgeRegistry = x2EthDeployInfo.BridgeRegistry.Address.String()
cfg.SyncTxConfig.PushBind = "127.0.0.1:60000" cfg.SyncTxConfig.PushBind = "127.0.0.1:60000"
cfg.SyncTxConfig.FetchHeightPeriodMs = 50 cfg.SyncTxConfig.FetchHeightPeriodMs = 50
cfg.SyncTxConfig.Dbdriver = "memdb" cfg.SyncTxConfig.Dbdriver = "memdb"
...@@ -373,48 +393,37 @@ func (r *suiteEthRelayer) newEthRelayer() *Relayer4Ethereum { ...@@ -373,48 +393,37 @@ func (r *suiteEthRelayer) newEthRelayer() *Relayer4Ethereum {
db: db, db: db,
unlockchan: make(chan int, 2), unlockchan: make(chan int, 2),
rpcURL2Chain33: cfg.SyncTxConfig.Chain33Host, rpcURL2Chain33: cfg.SyncTxConfig.Chain33Host,
bridgeRegistryAddr: r.x2EthDeployInfo.BridgeRegistry.Address, bridgeRegistryAddr: x2EthDeployInfo.BridgeRegistry.Address,
maturityDegree: cfg.EthMaturityDegree, maturityDegree: cfg.EthMaturityDegree,
fetchHeightPeriodMs: cfg.EthBlockFetchPeriod, fetchHeightPeriodMs: cfg.EthBlockFetchPeriod,
deployInfo: cfg.Deploy, deployInfo: cfg.Deploy,
} }
_ = relayer.setBridgeRegistryAddr(cfg.BridgeRegistry) //_ = relayer.setBridgeRegistryAddr(cfg.BridgeRegistry)
registrAddrInDB, err := relayer.getBridgeRegistryAddr() //registrAddrInDB, err := relayer.getBridgeRegistryAddr()
r.NoError(err) //assert.NoError(t, err)
r.Equal(registrAddrInDB, cfg.BridgeRegistry) //assert.Equal(t, registrAddrInDB, cfg.BridgeRegistry)
relayer.eventLogIndex = relayer.getLastBridgeBankProcessedHeight() relayer.eventLogIndex = relayer.getLastBridgeBankProcessedHeight()
relayer.initBridgeBankTx() relayer.initBridgeBankTx()
relayer.clientSpec = r.sim relayer.clientSpec = sim
relayer.clientChainID = big.NewInt(1) relayer.clientChainID = big.NewInt(1)
deployPrivateKey, err := crypto.ToECDSA(common.FromHex(relayer.deployInfo.DeployerPrivateKey)) deployPrivateKey, _ := crypto.ToECDSA(common.FromHex(relayer.deployInfo.DeployerPrivateKey))
deployerAddr := crypto.PubkeyToAddress(deployPrivateKey.PublicKey) deployerAddr := crypto.PubkeyToAddress(deployPrivateKey.PublicKey)
relayer.operatorInfo = &ethtxs.OperatorInfo{ relayer.operatorInfo = &ethtxs.OperatorInfo{
PrivateKey: deployPrivateKey, PrivateKey: deployPrivateKey,
Address: deployerAddr, Address: deployerAddr,
} }
relayer.deployPara = r.para relayer.deployPara = para
relayer.x2EthContracts = r.x2EthContracts relayer.x2EthContracts = x2EthContracts
relayer.x2EthDeployInfo = r.x2EthDeployInfo relayer.x2EthDeployInfo = x2EthDeployInfo
go relayer.proc() go relayer.proc()
var wg sync.WaitGroup
ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGTERM)
go func() {
<-ch
//cancel()
wg.Wait()
os.Exit(0)
}()
return relayer return relayer
} }
func (r *suiteEthRelayer) deployContracts() { func deployContracts() {
ethValidatorAddrKeys := make([]string, 0) ethValidatorAddrKeys := make([]string, 0)
ethValidatorAddrKeys = append(ethValidatorAddrKeys, ethValidatorAddrKeyA) ethValidatorAddrKeys = append(ethValidatorAddrKeys, ethValidatorAddrKeyA)
ethValidatorAddrKeys = append(ethValidatorAddrKeys, ethValidatorAddrKeyB) ethValidatorAddrKeys = append(ethValidatorAddrKeys, ethValidatorAddrKeyB)
...@@ -422,24 +431,25 @@ func (r *suiteEthRelayer) deployContracts() { ...@@ -422,24 +431,25 @@ func (r *suiteEthRelayer) deployContracts() {
ethValidatorAddrKeys = append(ethValidatorAddrKeys, ethValidatorAddrKeyD) ethValidatorAddrKeys = append(ethValidatorAddrKeys, ethValidatorAddrKeyD)
ctx := context.Background() ctx := context.Background()
r.backend, r.para = setup.PrepareTestEnvironment(deployerPrivateKey, ethValidatorAddrKeys) var backend bind.ContractBackend
r.sim = new(ethinterface.SimExtend) backend, para = setup.PrepareTestEnvironment(deployerPrivateKey, ethValidatorAddrKeys)
r.sim.SimulatedBackend = r.backend.(*backends.SimulatedBackend) sim = new(ethinterface.SimExtend)
sim.SimulatedBackend = backend.(*backends.SimulatedBackend)
balance, _ := r.sim.BalanceAt(ctx, r.para.Deployer, nil) //balance, _ := sim.BalanceAt(ctx, para.Deployer, nil)
r.Equal(balance.Int64(), int64(10000000000*10000)) //assert.Equal(t, balance.Int64(), int64(10000000000*10000))
callMsg := ethereum.CallMsg{ callMsg := ethereum.CallMsg{
From: r.para.Deployer, From: para.Deployer,
Data: common.FromHex(generated.BridgeBankBin), Data: common.FromHex(generated.BridgeBankBin),
} }
_, err := r.sim.EstimateGas(ctx, callMsg) _, _ = sim.EstimateGas(ctx, callMsg)
r.NoError(err) //assert.NoError(t, err)
r.x2EthContracts, r.x2EthDeployInfo, err = ethtxs.DeployAndInit(r.sim, r.para) x2EthContracts, x2EthDeployInfo, _ = ethtxs.DeployAndInit(sim, para)
r.NoError(err) //assert.NoError(t, err)
r.sim.Commit() sim.Commit()
} }
func initCfg(path string) *relayerTypes.RelayerConfig { func initCfg(path string) *relayerTypes.RelayerConfig {
......
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