Commit fb4b7cd8 authored by QM's avatar QM

updata chain33 relayer unit test

parent e1ff11e0
...@@ -5,14 +5,11 @@ import ( ...@@ -5,14 +5,11 @@ import (
"encoding/hex" "encoding/hex"
"flag" "flag"
"fmt" "fmt"
"math/big"
"os" "os"
"testing" "testing"
"time" "time"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
dbm "github.com/33cn/chain33/common/db" dbm "github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
"github.com/33cn/chain33/util/testnode" "github.com/33cn/chain33/util/testnode"
...@@ -20,16 +17,20 @@ import ( ...@@ -20,16 +17,20 @@ import (
"github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/ethcontract/test/setup" "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/ethcontract/test/setup"
"github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/ethinterface" "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/ethinterface"
"github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/ethtxs" "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/ethtxs"
relayerTx "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/ethtxs"
"github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/events" "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/events"
syncTx "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/relayer/chain33/transceiver/sync" syncTx "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/relayer/chain33/transceiver/sync"
ebTypes "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/types" ebTypes "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/types"
relayerTypes "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/types" relayerTypes "github.com/33cn/plugin/plugin/dapp/x2ethereum/ebrelayer/types"
tml "github.com/BurntSushi/toml" tml "github.com/BurntSushi/toml"
"github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
//"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/stretchr/testify/suite" ethTypes "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
// 需要显示引用系统插件,以加载系统内置合约 // 需要显示引用系统插件,以加载系统内置合约
"github.com/33cn/chain33/client/mocks" "github.com/33cn/chain33/client/mocks"
...@@ -103,171 +104,171 @@ func Test_ImportPrivateKey(t *testing.T) { ...@@ -103,171 +104,171 @@ func Test_ImportPrivateKey(t *testing.T) {
assert.Equal(t, key, privateKeyStr) assert.Equal(t, key, privateKeyStr)
} }
//func Test_Lockbty(t *testing.T) { func Test_Lockbty(t *testing.T) {
// mock33 := newMock33("127.0.0.1:8803") mock33 := newMock33("127.0.0.1:8803")
// defer mock33.Close() defer mock33.Close()
// para, sim, x2EthContracts, x2EthDeployInfo, err := setup.DeployContracts() para, sim, x2EthContracts, x2EthDeployInfo, err := setup.DeployContracts()
// require.NoError(t, err) require.NoError(t, err)
// chain33Relayer := newChain33Relayer(sim, x2EthDeployInfo, "127.0.0.1:60001", "http://127.0.0.1:8803", t) chain33Relayer := newChain33Relayer(sim, x2EthDeployInfo, "127.0.0.1:60001", "http://127.0.0.1:8803", t)
// _, err = chain33Relayer.ImportPrivateKey(passphrase, privateKeyStr) _, err = chain33Relayer.ImportPrivateKey(passphrase, privateKeyStr)
// assert.NoError(t, err) assert.NoError(t, err)
//
// //Test_1_ImportPrivateKey() //Test_1_ImportPrivateKey()
// ctx := context.Background() ctx := context.Background()
//
// //2nd:订阅事件 //2nd:订阅事件
// eventName := "LogNewBridgeToken" eventName := "LogNewBridgeToken"
// bridgeBankABI := ethtxs.LoadABI(ethtxs.BridgeBankABI) bridgeBankABI := ethtxs.LoadABI(ethtxs.BridgeBankABI)
// logNewBridgeTokenSig := bridgeBankABI.Events[eventName].ID().Hex() logNewBridgeTokenSig := bridgeBankABI.Events[eventName].ID().Hex()
// query := ethereum.FilterQuery{ query := ethereum.FilterQuery{
// Addresses: []common.Address{x2EthDeployInfo.BridgeBank.Address}, Addresses: []common.Address{x2EthDeployInfo.BridgeBank.Address},
// } }
// // We will check logs for new events // We will check logs for new events
// logs := make(chan ethTypes.Log) logs := make(chan ethTypes.Log)
// // Filter by contract and event, write results to logs // Filter by contract and event, write results to logs
// sub, err := sim.SubscribeFilterLogs(ctx, query, logs) sub, err := sim.SubscribeFilterLogs(ctx, query, logs)
// //require.Nil(t, err) //require.Nil(t, err)
//
// opts := &bind.CallOpts{ opts := &bind.CallOpts{
// Pending: true, Pending: true,
// From: para.Operator, From: para.Operator,
// Context: ctx, Context: ctx,
// } }
//
// tokenCount, err := x2EthContracts.BridgeBank.BridgeTokenCount(opts) tokenCount, err := x2EthContracts.BridgeBank.BridgeTokenCount(opts)
// require.Nil(t, err) require.Nil(t, err)
// assert.Equal(t, tokenCount.Int64(), int64(0)) assert.Equal(t, tokenCount.Int64(), int64(0))
//
// //3rd:创建token //3rd:创建token
// symbol := "BTY" symbol := "BTY"
// auth, err := ethtxs.PrepareAuth(sim, para.DeployPrivateKey, para.Operator) auth, err := ethtxs.PrepareAuth(sim, para.DeployPrivateKey, para.Operator)
// require.Nil(t, err) require.Nil(t, err)
// _, err = x2EthContracts.BridgeBank.BridgeBankTransactor.CreateNewBridgeToken(auth, symbol) _, err = x2EthContracts.BridgeBank.BridgeBankTransactor.CreateNewBridgeToken(auth, symbol)
// require.Nil(t, err) require.Nil(t, err)
// sim.Commit() sim.Commit()
//
// logEvent := &events.LogNewBridgeToken{} logEvent := &events.LogNewBridgeToken{}
// select { select {
// // Handle any errors // Handle any errors
// case err := <-sub.Err(): case err := <-sub.Err():
// t.Fatalf("sub error:%s", err.Error()) t.Fatalf("sub error:%s", err.Error())
// // vLog is raw event data // vLog is raw event data
// case vLog := <-logs: case vLog := <-logs:
// // Check if the event is a 'LogLock' event // Check if the event is a 'LogLock' event
// if vLog.Topics[0].Hex() == logNewBridgeTokenSig { if vLog.Topics[0].Hex() == logNewBridgeTokenSig {
// err = bridgeBankABI.Unpack(logEvent, eventName, vLog.Data) err = bridgeBankABI.Unpack(logEvent, eventName, vLog.Data)
// require.Nil(t, err) require.Nil(t, err)
// require.Equal(t, symbol, logEvent.Symbol) require.Equal(t, symbol, logEvent.Symbol)
//
// //tokenCount正确加1 //tokenCount正确加1
// tokenCount, err = x2EthContracts.BridgeBank.BridgeTokenCount(opts) tokenCount, err = x2EthContracts.BridgeBank.BridgeTokenCount(opts)
// require.Nil(t, err) require.Nil(t, err)
// require.Equal(t, tokenCount.Int64(), int64(1)) require.Equal(t, tokenCount.Int64(), int64(1))
// break break
// } }
// } }
//
// ///////////newOracleClaim/////////////////////////// ///////////newOracleClaim///////////////////////////
// balance, _ := sim.BalanceAt(ctx, para.InitValidators[0], nil) balance, _ := sim.BalanceAt(ctx, para.InitValidators[0], nil)
// fmt.Println("InitValidators[0] addr,", para.InitValidators[0].String(), "balance =", balance.String()) fmt.Println("InitValidators[0] addr,", para.InitValidators[0].String(), "balance =", balance.String())
//
// chain33Sender := []byte("14KEKbYtKKQm4wMthSK9J4La4nAiidGozt") chain33Sender := []byte("14KEKbYtKKQm4wMthSK9J4La4nAiidGozt")
// amount := int64(99) amount := int64(99)
// ethReceiver := para.InitValidators[2] ethReceiver := para.InitValidators[2]
// claimID := crypto.Keccak256Hash(chain33Sender, ethReceiver.Bytes(), logEvent.Token.Bytes(), big.NewInt(amount).Bytes()) claimID := crypto.Keccak256Hash(chain33Sender, ethReceiver.Bytes(), logEvent.Token.Bytes(), big.NewInt(amount).Bytes())
//
// authOracle, err := ethtxs.PrepareAuth(sim, para.ValidatorPriKey[0], para.InitValidators[0]) authOracle, err := ethtxs.PrepareAuth(sim, para.ValidatorPriKey[0], para.InitValidators[0])
// require.Nil(t, err) require.Nil(t, err)
//
// signature, err := ethtxs.SignClaim4Eth(claimID, para.ValidatorPriKey[0]) signature, err := ethtxs.SignClaim4Eth(claimID, para.ValidatorPriKey[0])
// require.Nil(t, err) require.Nil(t, err)
//
// bridgeToken, err := generated.NewBridgeToken(logEvent.Token, sim) bridgeToken, err := generated.NewBridgeToken(logEvent.Token, sim)
// require.Nil(t, err) require.Nil(t, err)
// opts = &bind.CallOpts{ opts = &bind.CallOpts{
// Pending: true, Pending: true,
// Context: ctx, Context: ctx,
// } }
//
// balance, err = bridgeToken.BalanceOf(opts, ethReceiver) balance, err = bridgeToken.BalanceOf(opts, ethReceiver)
// require.Nil(t, err) require.Nil(t, err)
// require.Equal(t, balance.Int64(), int64(0)) require.Equal(t, balance.Int64(), int64(0))
//
// tx, err := x2EthContracts.Oracle.NewOracleClaim( tx, err := x2EthContracts.Oracle.NewOracleClaim(
// authOracle, authOracle,
// events.ClaimTypeLock, events.ClaimTypeLock,
// chain33Sender, chain33Sender,
// ethReceiver, ethReceiver,
// logEvent.Token, logEvent.Token,
// logEvent.Symbol, logEvent.Symbol,
// big.NewInt(amount), big.NewInt(amount),
// claimID, claimID,
// signature) signature)
// require.Nil(t, err) require.Nil(t, err)
//
// sim.Commit() sim.Commit()
// balance, err = bridgeToken.BalanceOf(opts, ethReceiver) balance, err = bridgeToken.BalanceOf(opts, ethReceiver)
// require.Nil(t, err) require.Nil(t, err)
// require.Equal(t, balance.Int64(), amount) require.Equal(t, balance.Int64(), amount)
// //t.Logf("The minted amount is:%d", balance.Int64()) //t.Logf("The minted amount is:%d", balance.Int64())
//
// txhash := tx.Hash().Hex() txhash := tx.Hash().Hex()
//
// chain33Relayer.rwLock.Lock() chain33Relayer.rwLock.Lock()
// chain33Relayer.totalTx4Chain33ToEth = 2 chain33Relayer.totalTx4Chain33ToEth = 2
// chain33Relayer.rwLock.Unlock() chain33Relayer.rwLock.Unlock()
// _ = chain33Relayer.setLastestRelay2EthTxhash(relayerTx.EthTxPending.String(), txhash, 3) _ = chain33Relayer.setLastestRelay2EthTxhash(relayerTx.EthTxPending.String(), txhash, 3)
//
// time.Sleep(200 * time.Millisecond) time.Sleep(200 * time.Millisecond)
//
// chain33Relayer.rwLock.Lock() chain33Relayer.rwLock.Lock()
// chain33Relayer.totalTx4Chain33ToEth = 9 chain33Relayer.totalTx4Chain33ToEth = 9
// chain33Relayer.totalTx4Chain33ToEth = 11 chain33Relayer.totalTx4Chain33ToEth = 11
// chain33Relayer.rwLock.Unlock() chain33Relayer.rwLock.Unlock()
// _ = chain33Relayer.setLastestRelay2EthTxhash(relayerTx.EthTxPending.String(), "", 11) _ = chain33Relayer.setLastestRelay2EthTxhash(relayerTx.EthTxPending.String(), "", 11)
//
// time.Sleep(200 * time.Millisecond) time.Sleep(200 * time.Millisecond)
//} }
//
//func Test_RestorePrivateKeys(t *testing.T) { func Test_RestorePrivateKeys(t *testing.T) {
// mock33 := newMock33("127.0.0.1:8804") mock33 := newMock33("127.0.0.1:8804")
// defer mock33.Close() defer mock33.Close()
// _, sim, _, x2EthDeployInfo, err := setup.DeployContracts() _, sim, _, x2EthDeployInfo, err := setup.DeployContracts()
// require.NoError(t, err) require.NoError(t, err)
// chain33Relayer := newChain33Relayer(sim, x2EthDeployInfo, "127.0.0.1:60003", "http://127.0.0.1:8804", t) chain33Relayer := newChain33Relayer(sim, x2EthDeployInfo, "127.0.0.1:60003", "http://127.0.0.1:8804", t)
// _, err = chain33Relayer.ImportPrivateKey(passphrase, privateKeyStr) _, err = chain33Relayer.ImportPrivateKey(passphrase, privateKeyStr)
// assert.NoError(t, err) assert.NoError(t, err)
//
// go func() { go func() {
// for range chain33Relayer.unlock { for range chain33Relayer.unlock {
// } }
// }() }()
// temp := chain33Relayer.ethSender temp := chain33Relayer.ethSender
//
// err = chain33Relayer.RestorePrivateKeys("123") err = chain33Relayer.RestorePrivateKeys("123")
// assert.NotEqual(t, hex.EncodeToString(temp.Bytes()), hex.EncodeToString(chain33Relayer.ethSender.Bytes())) assert.NotEqual(t, hex.EncodeToString(temp.Bytes()), hex.EncodeToString(chain33Relayer.ethSender.Bytes()))
// assert.NoError(t, err) assert.NoError(t, err)
//
// err = chain33Relayer.RestorePrivateKeys(passphrase) err = chain33Relayer.RestorePrivateKeys(passphrase)
// assert.Equal(t, hex.EncodeToString(temp.Bytes()), hex.EncodeToString(chain33Relayer.ethSender.Bytes())) assert.Equal(t, hex.EncodeToString(temp.Bytes()), hex.EncodeToString(chain33Relayer.ethSender.Bytes()))
// assert.NoError(t, err) assert.NoError(t, err)
//
// err = chain33Relayer.StoreAccountWithNewPassphase("new123", passphrase) err = chain33Relayer.StoreAccountWithNewPassphase("new123", passphrase)
// assert.NoError(t, err) assert.NoError(t, err)
//
// err = chain33Relayer.RestorePrivateKeys("new123") err = chain33Relayer.RestorePrivateKeys("new123")
// assert.Equal(t, hex.EncodeToString(temp.Bytes()), hex.EncodeToString(chain33Relayer.ethSender.Bytes())) assert.Equal(t, hex.EncodeToString(temp.Bytes()), hex.EncodeToString(chain33Relayer.ethSender.Bytes()))
// assert.NoError(t, err) assert.NoError(t, err)
//
// time.Sleep(time.Second) time.Sleep(time.Second)
//
//} }
func newChain33Relayer(sim *ethinterface.SimExtend, x2EthDeployInfo *ethtxs.X2EthDeployInfo, pushBind, chain33Host string, t *testing.T) *Relayer4Chain33 { func newChain33Relayer(sim *ethinterface.SimExtend, x2EthDeployInfo *ethtxs.X2EthDeployInfo, pushBind, chain33Host string, t *testing.T) *Relayer4Chain33 {
cfg := initCfg(*configPath) cfg := initCfg(*configPath)
cfg.SyncTxConfig.Chain33Host = chain33Host //"http://127.0.0.1:8801" cfg.SyncTxConfig.Chain33Host = chain33Host
cfg.BridgeRegistry = x2EthDeployInfo.BridgeRegistry.Address.String() cfg.BridgeRegistry = x2EthDeployInfo.BridgeRegistry.Address.String()
cfg.SyncTxConfig.PushBind = pushBind // "127.0.0.1:60000" cfg.SyncTxConfig.PushBind = pushBind
cfg.SyncTxConfig.FetchHeightPeriodMs = 50 cfg.SyncTxConfig.FetchHeightPeriodMs = 50
cfg.SyncTxConfig.Dbdriver = "memdb" cfg.SyncTxConfig.Dbdriver = "memdb"
...@@ -275,7 +276,7 @@ func newChain33Relayer(sim *ethinterface.SimExtend, x2EthDeployInfo *ethtxs.X2Et ...@@ -275,7 +276,7 @@ func newChain33Relayer(sim *ethinterface.SimExtend, x2EthDeployInfo *ethtxs.X2Et
ctx, _ := context.WithCancel(context.Background()) ctx, _ := context.WithCancel(context.Background())
relayer := &Relayer4Chain33{ relayer := &Relayer4Chain33{
rpcLaddr: chain33Host, //cfg.SyncTxConfig.Chain33Host, rpcLaddr: chain33Host,
fetchHeightPeriodMs: cfg.SyncTxConfig.FetchHeightPeriodMs, fetchHeightPeriodMs: cfg.SyncTxConfig.FetchHeightPeriodMs,
unlock: make(chan int), unlock: make(chan int),
db: db, db: db,
...@@ -291,10 +292,10 @@ func newChain33Relayer(sim *ethinterface.SimExtend, x2EthDeployInfo *ethtxs.X2Et ...@@ -291,10 +292,10 @@ func newChain33Relayer(sim *ethinterface.SimExtend, x2EthDeployInfo *ethtxs.X2Et
assert.Equal(t, relayer.statusCheckedIndex, int64(1)) assert.Equal(t, relayer.statusCheckedIndex, int64(1))
syncCfg := &ebTypes.SyncTxReceiptConfig{ syncCfg := &ebTypes.SyncTxReceiptConfig{
Chain33Host: cfg.SyncTxConfig.Chain33Host, Chain33Host: chain33Host,
PushHost: cfg.SyncTxConfig.PushHost, PushHost: cfg.SyncTxConfig.PushHost,
PushName: cfg.SyncTxConfig.PushName, PushName: cfg.SyncTxConfig.PushName,
PushBind: pushBind, //cfg.SyncTxConfig.PushBind, PushBind: pushBind,
StartSyncHeight: cfg.SyncTxConfig.StartSyncHeight, StartSyncHeight: cfg.SyncTxConfig.StartSyncHeight,
StartSyncSequence: cfg.SyncTxConfig.StartSyncSequence, StartSyncSequence: cfg.SyncTxConfig.StartSyncSequence,
StartSyncHash: cfg.SyncTxConfig.StartSyncHash, StartSyncHash: cfg.SyncTxConfig.StartSyncHash,
......
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