From d502c6b2e4430b76d0d17d14b1fa5780416e04a1 Mon Sep 17 00:00:00 2001 From: dinhln89 Date: Thu, 21 Jun 2018 11:24:06 +0700 Subject: [PATCH 1/5] Fixed move method getBlockSingers by blockNumber to utils of contact package. --- contracts/{tomo.go => utils.go} | 35 +++++++++++++++++++++++++++++++++ eth/backend.go | 23 +++------------------- 2 files changed, 38 insertions(+), 20 deletions(-) rename contracts/{tomo.go => utils.go} (54%) diff --git a/contracts/tomo.go b/contracts/utils.go similarity index 54% rename from contracts/tomo.go rename to contracts/utils.go index 7e1007e79b..e40e1da0be 100644 --- a/contracts/tomo.go +++ b/contracts/utils.go @@ -2,10 +2,14 @@ package contracts import ( "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/blocksigner/contract" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/params" "math/big" ) @@ -14,6 +18,18 @@ const ( HexSignMethod = "2fb1b25f" ) +// Get ethClient over IPC of current node. +func GetEthClient(ctx *node.ServiceContext) (*ethclient.Client, error) { + conf := ctx.GetConfig() + client, err := ethclient.Dial(conf.IPCEndpoint()) + if err != nil { + log.Error("Fail to connect RPC", "error", err) + return nil, err + } + + return client, nil +} + // Send tx sign for block number to smart contract blockSigner. func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, manager *accounts.Manager, block *types.Block) { // Find active account. @@ -41,3 +57,22 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m // Add tx signed to local tx pool. pool.AddLocal(txSigned) } + +// Get signers signed for blockNumber from blockSigner contract. +func GetSignersFromContract(ctx *node.ServiceContext, blockNumber uint64) ([]common.Address, error) { + client, err := GetEthClient(ctx) + if err != nil { + log.Error("Fail to connect IPC from blockSigner", "error", err) + return nil, err + } + addr := common.HexToAddress(common.BlockSigners) + blockSigner, err := contract.NewBlockSigner(addr, client) + if err != nil { + log.Error("Fail get block signers", "error", err) + return nil, err + } + opts := new(bind.CallOpts) + addrs, err := blockSigner.GetSigners(opts, new(big.Int).SetUint64(blockNumber)) + + return addrs, nil +} diff --git a/eth/backend.go b/eth/backend.go index b497cd560c..70732aeb3a 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -27,13 +27,12 @@ import ( "encoding/json" "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/contracts/blocksigner/contract" + "github.com/ethereum/go-ethereum/contracts" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/bloombits" "github.com/ethereum/go-ethereum/core/state" @@ -42,7 +41,6 @@ import ( "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/eth/filters" "github.com/ethereum/go-ethereum/eth/gasprice" - "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/internal/ethapi" @@ -199,21 +197,6 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { number := header.Number.Uint64() rCheckpoint := chain.Config().Clique.RewardCheckpoint - - // Call to smart contract signer. - config := ctx.GetConfig() - client, err := ethclient.Dial(config.IPCEndpoint()) - if err != nil { - log.Error("Fail to connect RPC", "error", err) - return err - } - addr := common.HexToAddress(common.BlockSigners) - blockSigner, err := contract.NewBlockSigner(addr, client) - if err != nil { - log.Error("Fail get block signer", "error", err) - return err - } - opts := new(bind.CallOpts) prevCheckpoint := number - rCheckpoint if number > 0 && prevCheckpoint > 0 { @@ -225,9 +208,9 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { for i := startBlockNumber; i <= endBlockNumber; i++ { // Get signers in blockSigner smartcontract. - addrs, err := blockSigner.GetSigners(opts, new(big.Int).SetUint64(i)) + addrs, err := contracts.GetSignersFromContract(ctx, i) if err != nil { - log.Error("Fail to get signers from smartcontract.", "error", err) + log.Error("Fail to get signers from smartcontract.", "error", err, "blockNumber", i) return err } // Filter duplicate address. From 150e81c3e8059988977c19996c9ed734fd11176b Mon Sep 17 00:00:00 2001 From: dinhln89 Date: Thu, 21 Jun 2018 14:02:34 +0700 Subject: [PATCH 2/5] Refine code using log error when create tx sign. --- contracts/utils.go | 12 +++++++++--- eth/fetcher/fetcher.go | 4 +++- miner/worker.go | 4 +++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/contracts/utils.go b/contracts/utils.go index e40e1da0be..a1581fc477 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -31,7 +31,7 @@ func GetEthClient(ctx *node.ServiceContext) (*ethclient.Client, error) { } // Send tx sign for block number to smart contract blockSigner. -func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, manager *accounts.Manager, block *types.Block) { +func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, manager *accounts.Manager, block *types.Block) error { // Find active account. account := accounts.Account{} var wallet accounts.Wallet @@ -51,11 +51,13 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m txSigned, err := wallet.SignTx(account, tx, chainConfig.ChainId) if err != nil { log.Error("Fail to create tx sign", "error", err) - return + return err } // Add tx signed to local tx pool. pool.AddLocal(txSigned) + + return nil } // Get signers signed for blockNumber from blockSigner contract. @@ -68,11 +70,15 @@ func GetSignersFromContract(ctx *node.ServiceContext, blockNumber uint64) ([]com addr := common.HexToAddress(common.BlockSigners) blockSigner, err := contract.NewBlockSigner(addr, client) if err != nil { - log.Error("Fail get block signers", "error", err) + log.Error("Fail get instance of blockSigner", "error", err) return nil, err } opts := new(bind.CallOpts) addrs, err := blockSigner.GetSigners(opts, new(big.Int).SetUint64(blockNumber)) + if err != nil { + log.Error("Fail get block signers", "error", err) + return nil, err + } return addrs, nil } diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index d546a43250..732705abde 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -742,6 +742,8 @@ func (f *Fetcher) forgetBlock(hash common.Hash) { // Create tx for sign to smartcontract after import block into chain. func (f *Fetcher) HookCreateTxSign(chainConfig *params.ChainConfig, pool *core.TxPool, manager *accounts.Manager) { f.importedHook = func(block *types.Block) { - contracts.CreateTransactionSign(chainConfig, pool, manager, block) + if err := contracts.CreateTransactionSign(chainConfig, pool, manager, block); err != nil { + log.Error("Fail to create tx sign for imported block", "error", err) + } } } diff --git a/miner/worker.go b/miner/worker.go index 9588252538..b9c588054b 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -342,7 +342,9 @@ func (self *worker) wait() { if self.config.Clique != nil { // Send tx sign to smart contract blockSigners. - contracts.CreateTransactionSign(self.config, self.eth.TxPool(), self.eth.AccountManager(), block) + if err := contracts.CreateTransactionSign(self.config, self.eth.TxPool(), self.eth.AccountManager(), block); err != nil { + log.Error("Fail to create tx sign for signer", "error", "err") + } } } } From 6da42b251d2da98a19ee9a7a6275a6c22f6e2229 Mon Sep 17 00:00:00 2001 From: dinhln89 Date: Fri, 22 Jun 2018 16:32:59 +0700 Subject: [PATCH 3/5] Add unit test for send tx sign for block signer. --- contracts/utils.go | 22 +++++++------- contracts/utils_test.go | 63 +++++++++++++++++++++++++++++++++++++++++ eth/backend.go | 7 ++++- 3 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 contracts/utils_test.go diff --git a/contracts/utils.go b/contracts/utils.go index a1581fc477..74dbacb5d7 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -43,11 +43,8 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m } // Create and send tx to smart contract for sign validate block. - blockHex := common.LeftPadBytes(block.Number().Bytes(), 32) - data := common.Hex2Bytes(HexSignMethod) - inputData := append(data, blockHex...) nonce := pool.State().GetNonce(account.Address) - tx := types.NewTransaction(nonce, common.HexToAddress(common.BlockSigners), big.NewInt(0), 100000, big.NewInt(0), inputData) + tx := CreateTxSign(block.Number(), nonce, common.HexToAddress(common.BlockSigners)) txSigned, err := wallet.SignTx(account, tx, chainConfig.ChainId) if err != nil { log.Error("Fail to create tx sign", "error", err) @@ -60,13 +57,18 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m return nil } +// Create tx sign. +func CreateTxSign(blockNumber *big.Int, nonce uint64, blockSigner common.Address) *types.Transaction { + blockHex := common.LeftPadBytes(blockNumber.Bytes(), 32) + data := common.Hex2Bytes(HexSignMethod) + inputData := append(data, blockHex...) + tx := types.NewTransaction(nonce, blockSigner, big.NewInt(0), 100000, big.NewInt(0), inputData) + + return tx +} + // Get signers signed for blockNumber from blockSigner contract. -func GetSignersFromContract(ctx *node.ServiceContext, blockNumber uint64) ([]common.Address, error) { - client, err := GetEthClient(ctx) - if err != nil { - log.Error("Fail to connect IPC from blockSigner", "error", err) - return nil, err - } +func GetSignersFromContract(client bind.ContractBackend, blockNumber uint64) ([]common.Address, error) { addr := common.HexToAddress(common.BlockSigners) blockSigner, err := contract.NewBlockSigner(addr, client) if err != nil { diff --git a/contracts/utils_test.go b/contracts/utils_test.go new file mode 100644 index 0000000000..094daa8d7f --- /dev/null +++ b/contracts/utils_test.go @@ -0,0 +1,63 @@ +package contracts + +import ( + "context" + "crypto/ecdsa" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/blocksigner" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "math/big" + "math/rand" + "testing" +) + +func TestSendTxSign(t *testing.T) { + acc1Key, _ := crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") + acc2Key, _ := crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") + acc3Key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + acc1Addr := crypto.PubkeyToAddress(acc1Key.PublicKey) + acc2Addr := crypto.PubkeyToAddress(acc2Key.PublicKey) + acc3Addr := crypto.PubkeyToAddress(acc3Key.PublicKey) + accounts := []common.Address{acc2Addr, acc3Addr} + keys := []*ecdsa.PrivateKey{acc2Key, acc3Key} + + signer := types.HomesteadSigner{} + genesis := core.GenesisAlloc{acc1Addr: {Balance: big.NewInt(1000000000)}} + backend := backends.NewSimulatedBackend(genesis) + ctx := context.Background() + + transactOpts := bind.NewKeyedTransactor(acc1Key) + addrBlockSigner, blockSigner, err := blocksigner.DeployBlockSigner(transactOpts, backend) + if err != nil { + t.Fatalf("Can't deploy block signer: %v", err) + } + backend.Commit() + + nonces := make(map[*ecdsa.PrivateKey]int) + oldBlock := make([]common.Address, 100) + + for i := uint64(0); i < 100; i++ { + rand := rand.Intn(len(keys)) + accKey := keys[rand] + tx, _ := types.SignTx(CreateTxSign(new(big.Int).SetUint64(i), uint64(nonces[accKey]), addrBlockSigner), signer, accKey) + backend.SendTransaction(ctx, tx) + backend.Commit() + nonces[accKey]++ + oldBlock[i] = accounts[rand] + } + + for i := uint64(0); i < 100; i++ { + signers, err := blockSigner.GetSigners(new(big.Int).SetUint64(i)) + if err != nil { + t.Fatalf("Can't get signers: %v", err) + } + + if signers[0].String() != oldBlock[i].String() { + t.Errorf("Tx sign for block signer not match %v - %v", signers[0].String(), oldBlock[i].String()) + } + } +} diff --git a/eth/backend.go b/eth/backend.go index 70732aeb3a..02bd4497d8 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -208,7 +208,12 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { for i := startBlockNumber; i <= endBlockNumber; i++ { // Get signers in blockSigner smartcontract. - addrs, err := contracts.GetSignersFromContract(ctx, i) + client, err := contracts.GetEthClient(ctx) + if err != nil { + log.Error("Fail to connect IPC from blockSigner", "error", err) + return err + } + addrs, err := contracts.GetSignersFromContract(client, i) if err != nil { log.Error("Fail to get signers from smartcontract.", "error", err, "blockNumber", i) return err From 881d01c26595529bddc5a7cb62cc0bcff760b004 Mon Sep 17 00:00:00 2001 From: dinhln89 Date: Mon, 25 Jun 2018 14:00:29 +0700 Subject: [PATCH 4/5] Fixed unit test for create tx sign using smart contract code from genesis block. --- contracts/utils_test.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/contracts/utils_test.go b/contracts/utils_test.go index 094daa8d7f..64cb87ca11 100644 --- a/contracts/utils_test.go +++ b/contracts/utils_test.go @@ -26,12 +26,23 @@ func TestSendTxSign(t *testing.T) { keys := []*ecdsa.PrivateKey{acc2Key, acc3Key} signer := types.HomesteadSigner{} - genesis := core.GenesisAlloc{acc1Addr: {Balance: big.NewInt(1000000000)}} + genesis := core.GenesisAlloc{ + acc1Addr: {Balance: big.NewInt(1000000000)}, + common.StringToAddress("0x0000000000000000000000000000000000000088"): { + Balance: big.NewInt(0), + Code: []byte("0x6080604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168062a95501146100f557806302aa9be21461017857806306a49fce146101c557806328265294146102315780632d15cc0414610288578063302b6872146103205780633477ee2e1461039757806351cff8d91461040457806358e7525f146104475780636dd7d8ea1461049e578063a3ec7965146104d4578063ae6e43f51461055d578063d09f1ab4146105a0578063d51b9e93146105cb578063d55b7dff14610626578063d6f0948c14610651578063da67b5991461069f575b600080fd5b34801561010157600080fd5b50610136600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061075b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018457600080fd5b506101c3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107c6565b005b3480156101d157600080fd5b506101da610aed565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b505050509050019250505060405180910390f35b34801561023d57600080fd5b50610272600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b7b565b6040518082815260200191505060405180910390f35b34801561029457600080fd5b506102c9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bc6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561030c5780820151818401526020810190506102f1565b505050509050019250505060405180910390f35b34801561032c57600080fd5b50610381600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c93565b6040518082815260200191505060405180910390f35b3480156103a357600080fd5b506103c260048036038101908080359060200190929190505050610d1c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041057600080fd5b50610445600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d5a565b005b34801561045357600080fd5b50610488600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111c7565b6040518082815260200191505060405180910390f35b6104d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611212565b005b3480156104e057600080fd5b5061055b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506115e7565b005b34801561056957600080fd5b5061059e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117e2565b005b3480156105ac57600080fd5b506105b5611b57565b6040518082815260200191505060405180910390f35b3480156105d757600080fd5b5061060c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b5c565b604051808215151515815260200191505060405180910390f35b34801561063257600080fd5b5061063b611bb4565b6040518082815260200191505060405180910390f35b61069d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050611bc2565b005b3480156106ab57600080fd5b506106e0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f1e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610720578082015181840152602081019050610705565b50505050905090810190601f16801561074d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8181806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561085557600080fd5b6108a9836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461200190919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555061097f836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461200190919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610a47573d6000803e3d6000fd5b507faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2338585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b60606002805480602002602001604051908101604052809291908181526020018280548015610b7157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b27575b5050505050905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050919050565b6060600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610c8757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610c3d575b50505050509050919050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600281815481101515610d2b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000813373ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610df857600080fd5b826000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16151515610e5457600080fd5b8360008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154111515610ea557600080fd5b6000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401544310151515610ef557600080fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350610fca846000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461200190919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555060008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611120573d6000803e3d6000fd5b507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb338686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549050919050565b806000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16151561126d57600080fd5b6112c1346000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461201a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555060008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561143157600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000203390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b6114c2346000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc338334604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b813373ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561168357600080fd5b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010190805190602001906116d8929190612038565b507f63f303264cd4b7a198f0163f96e0b6b1f972f9b73359a70c44241b862879d8a4338484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117a1578082015181840152602081019050611786565b50505050905090810190601f1680156117ce5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050565b6000813373ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561188057600080fd5b826000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615156118db57600080fd5b60008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160035403600381905550600092505b600280549050831015611a0e578373ffffffffffffffffffffffffffffffffffffffff1660028481548110151561197957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a01576002838154811015156119cf57fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055611a0e565b8280600101935050611946565b611a756064611a67436000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015461201a90919063ffffffff16565b61201a90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055507f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d33385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150505050565b606381565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050919050565b690a968163f0a57b40000081565b690a968163f0a57b4000003410151515611bdb57600080fd5b826000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16151515611c3757600080fd5b60028490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060a0604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200160011515815260200134815260200160008152506000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019080519060200190611db29291906120b8565b5060408201518160020160006101000a81548160ff0219169083151502179055506060820151816003015560808201518160040155905050346000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600354016003819055507f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1338534604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b60606000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ff55780601f10611fca57610100808354040283529160200191611ff5565b820191906000526020600020905b815481529060010190602001808311611fd857829003601f168201915b50505050509050919050565b600082821115151561200f57fe5b818303905092915050565b600080828401905083811015151561202e57fe5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061207957805160ff19168380011785556120a7565b828001600101855582156120a7579182015b828111156120a657825182559160200191906001019061208b565b5b5090506120b49190612138565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120f957805160ff1916838001178555612127565b82800160010185558215612127579182015b8281111561212657825182559160200191906001019061210b565b5b5090506121349190612138565b5090565b61215a91905b8082111561215657600081600090555060010161213e565b5090565b905600a165627a7a723058201712346c8b2cb36d3df286a126442509f385076691ee1a10ee645a918d5dc4fb0029"), + }, + common.StringToAddress("0x0000000000000000000000000000000000000089"): { + Balance: big.NewInt(0), + Code: []byte("0x60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632fb1b25f14610051578063dfceceae14610074575b600080fd5b341561005c57600080fd5b61007260048080359060200190919050506100ec565b005b341561007f57600080fd5b61009560048080359060200190919050506101ff565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156100d85780820151818401526020810190506100bd565b505050509050019250505060405180910390f35b8043101515156100fb57600080fd5b6101106107bc826102a590919063ffffffff16565b431115151561011e57600080fd5b600080828152602001908152602001600020805480600101828161014291906102c3565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f9a10b6124411386407c4a174729b856d293832181c352e98b5cb316b96cd30593382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b6102076102ef565b60008083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561029957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161024f575b50505050509050919050565b60008082840190508381101515156102b957fe5b8091505092915050565b8154818355818115116102ea578183600052602060002091820191016102e99190610303565b5b505050565b602060405190810160405280600081525090565b61032591905b80821115610321576000816000905550600101610309565b5090565b905600a165627a7a72305820e4f5f28ef49e5e1400682161384764ac3a649da41197155ca70912ee01c79ed30029"), + }, + } backend := backends.NewSimulatedBackend(genesis) ctx := context.Background() transactOpts := bind.NewKeyedTransactor(acc1Key) - addrBlockSigner, blockSigner, err := blocksigner.DeployBlockSigner(transactOpts, backend) + blockSignerAddr := common.StringToAddress(common.BlockSigners) + blockSigner, err := blocksigner.NewBlockSigner(transactOpts, blockSignerAddr, backend) if err != nil { t.Fatalf("Can't deploy block signer: %v", err) } @@ -43,7 +54,7 @@ func TestSendTxSign(t *testing.T) { for i := uint64(0); i < 100; i++ { rand := rand.Intn(len(keys)) accKey := keys[rand] - tx, _ := types.SignTx(CreateTxSign(new(big.Int).SetUint64(i), uint64(nonces[accKey]), addrBlockSigner), signer, accKey) + tx, _ := types.SignTx(CreateTxSign(new(big.Int).SetUint64(i), uint64(nonces[accKey]), blockSignerAddr), signer, accKey) backend.SendTransaction(ctx, tx) backend.Commit() nonces[accKey]++ From c182b6ceb2dd14cb64c1f1a6a591b8889e5b182d Mon Sep 17 00:00:00 2001 From: dinhln89 Date: Mon, 25 Jun 2018 15:02:08 +0700 Subject: [PATCH 5/5] Fixed add unit test tx sign for validators. --- contracts/utils_test.go | 42 +++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/contracts/utils_test.go b/contracts/utils_test.go index 64cb87ca11..c5bca88b09 100644 --- a/contracts/utils_test.go +++ b/contracts/utils_test.go @@ -26,39 +26,41 @@ func TestSendTxSign(t *testing.T) { keys := []*ecdsa.PrivateKey{acc2Key, acc3Key} signer := types.HomesteadSigner{} - genesis := core.GenesisAlloc{ - acc1Addr: {Balance: big.NewInt(1000000000)}, - common.StringToAddress("0x0000000000000000000000000000000000000088"): { - Balance: big.NewInt(0), - Code: []byte("0x6080604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168062a95501146100f557806302aa9be21461017857806306a49fce146101c557806328265294146102315780632d15cc0414610288578063302b6872146103205780633477ee2e1461039757806351cff8d91461040457806358e7525f146104475780636dd7d8ea1461049e578063a3ec7965146104d4578063ae6e43f51461055d578063d09f1ab4146105a0578063d51b9e93146105cb578063d55b7dff14610626578063d6f0948c14610651578063da67b5991461069f575b600080fd5b34801561010157600080fd5b50610136600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061075b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018457600080fd5b506101c3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107c6565b005b3480156101d157600080fd5b506101da610aed565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b505050509050019250505060405180910390f35b34801561023d57600080fd5b50610272600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b7b565b6040518082815260200191505060405180910390f35b34801561029457600080fd5b506102c9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bc6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561030c5780820151818401526020810190506102f1565b505050509050019250505060405180910390f35b34801561032c57600080fd5b50610381600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c93565b6040518082815260200191505060405180910390f35b3480156103a357600080fd5b506103c260048036038101908080359060200190929190505050610d1c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041057600080fd5b50610445600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d5a565b005b34801561045357600080fd5b50610488600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111c7565b6040518082815260200191505060405180910390f35b6104d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611212565b005b3480156104e057600080fd5b5061055b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506115e7565b005b34801561056957600080fd5b5061059e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117e2565b005b3480156105ac57600080fd5b506105b5611b57565b6040518082815260200191505060405180910390f35b3480156105d757600080fd5b5061060c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b5c565b604051808215151515815260200191505060405180910390f35b34801561063257600080fd5b5061063b611bb4565b6040518082815260200191505060405180910390f35b61069d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050611bc2565b005b3480156106ab57600080fd5b506106e0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f1e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610720578082015181840152602081019050610705565b50505050905090810190601f16801561074d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8181806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561085557600080fd5b6108a9836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461200190919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555061097f836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461200190919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610a47573d6000803e3d6000fd5b507faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2338585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b60606002805480602002602001604051908101604052809291908181526020018280548015610b7157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b27575b5050505050905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050919050565b6060600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610c8757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610c3d575b50505050509050919050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600281815481101515610d2b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000813373ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610df857600080fd5b826000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16151515610e5457600080fd5b8360008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154111515610ea557600080fd5b6000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401544310151515610ef557600080fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350610fca846000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461200190919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555060008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611120573d6000803e3d6000fd5b507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb338686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549050919050565b806000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16151561126d57600080fd5b6112c1346000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461201a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555060008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561143157600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000203390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b6114c2346000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc338334604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b813373ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561168357600080fd5b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010190805190602001906116d8929190612038565b507f63f303264cd4b7a198f0163f96e0b6b1f972f9b73359a70c44241b862879d8a4338484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117a1578082015181840152602081019050611786565b50505050905090810190601f1680156117ce5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050565b6000813373ffffffffffffffffffffffffffffffffffffffff166000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561188057600080fd5b826000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615156118db57600080fd5b60008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160035403600381905550600092505b600280549050831015611a0e578373ffffffffffffffffffffffffffffffffffffffff1660028481548110151561197957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a01576002838154811015156119cf57fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055611a0e565b8280600101935050611946565b611a756064611a67436000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015461201a90919063ffffffff16565b61201a90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055507f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d33385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150505050565b606381565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050919050565b690a968163f0a57b40000081565b690a968163f0a57b4000003410151515611bdb57600080fd5b826000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16151515611c3757600080fd5b60028490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060a0604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200160011515815260200134815260200160008152506000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019080519060200190611db29291906120b8565b5060408201518160020160006101000a81548160ff0219169083151502179055506060820151816003015560808201518160040155905050346000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600354016003819055507f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1338534604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b60606000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ff55780601f10611fca57610100808354040283529160200191611ff5565b820191906000526020600020905b815481529060010190602001808311611fd857829003601f168201915b50505050509050919050565b600082821115151561200f57fe5b818303905092915050565b600080828401905083811015151561202e57fe5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061207957805160ff19168380011785556120a7565b828001600101855582156120a7579182015b828111156120a657825182559160200191906001019061208b565b5b5090506120b49190612138565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120f957805160ff1916838001178555612127565b82800160010185558215612127579182015b8281111561212657825182559160200191906001019061210b565b5b5090506121349190612138565b5090565b61215a91905b8082111561215657600081600090555060010161213e565b5090565b905600a165627a7a723058201712346c8b2cb36d3df286a126442509f385076691ee1a10ee645a918d5dc4fb0029"), - }, - common.StringToAddress("0x0000000000000000000000000000000000000089"): { - Balance: big.NewInt(0), - Code: []byte("0x60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632fb1b25f14610051578063dfceceae14610074575b600080fd5b341561005c57600080fd5b61007260048080359060200190919050506100ec565b005b341561007f57600080fd5b61009560048080359060200190919050506101ff565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156100d85780820151818401526020810190506100bd565b505050509050019250505060405180910390f35b8043101515156100fb57600080fd5b6101106107bc826102a590919063ffffffff16565b431115151561011e57600080fd5b600080828152602001908152602001600020805480600101828161014291906102c3565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f9a10b6124411386407c4a174729b856d293832181c352e98b5cb316b96cd30593382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b6102076102ef565b60008083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561029957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161024f575b50505050509050919050565b60008082840190508381101515156102b957fe5b8091505092915050565b8154818355818115116102ea578183600052602060002091820191016102e99190610303565b5b505050565b602060405190810160405280600081525090565b61032591905b80821115610321576000816000905550600101610309565b5090565b905600a165627a7a72305820e4f5f28ef49e5e1400682161384764ac3a649da41197155ca70912ee01c79ed30029"), - }, - } + genesis := core.GenesisAlloc{acc1Addr: {Balance: big.NewInt(1000000000)}} backend := backends.NewSimulatedBackend(genesis) + backend.Commit() ctx := context.Background() transactOpts := bind.NewKeyedTransactor(acc1Key) - blockSignerAddr := common.StringToAddress(common.BlockSigners) - blockSigner, err := blocksigner.NewBlockSigner(transactOpts, blockSignerAddr, backend) + blockSignerAddr, blockSigner, err := blocksigner.DeployBlockSigner(transactOpts, backend) if err != nil { - t.Fatalf("Can't deploy block signer: %v", err) + t.Fatalf("Can't get block signer: %v", err) } backend.Commit() nonces := make(map[*ecdsa.PrivateKey]int) oldBlock := make([]common.Address, 100) - for i := uint64(0); i < 100; i++ { - rand := rand.Intn(len(keys)) - accKey := keys[rand] + signTx := func(ctx context.Context, backend *backends.SimulatedBackend, signer types.HomesteadSigner, nonces map[*ecdsa.PrivateKey]int, accKey *ecdsa.PrivateKey, i uint64) { tx, _ := types.SignTx(CreateTxSign(new(big.Int).SetUint64(i), uint64(nonces[accKey]), blockSignerAddr), signer, accKey) backend.SendTransaction(ctx, tx) backend.Commit() nonces[accKey]++ - oldBlock[i] = accounts[rand] + } + + // Tx sign for signer. + for i := uint64(0); i < 100; i++ { + randIndex := rand.Intn(len(keys)) + accKey := keys[randIndex] + signTx(ctx, backend, signer, nonces, accKey, i) + oldBlock[i] = accounts[randIndex] + + // Tx sign for validators. + for _, key := range keys { + if key != accKey { + signTx(ctx, backend, signer, nonces, key, i) + } + } } for i := uint64(0); i < 100; i++ { @@ -70,5 +72,9 @@ func TestSendTxSign(t *testing.T) { if signers[0].String() != oldBlock[i].String() { t.Errorf("Tx sign for block signer not match %v - %v", signers[0].String(), oldBlock[i].String()) } + + if len(signers) != len(keys) { + t.Error("Tx sign for block validators not match") + } } }