From 52f01ed3884b62ab9a1bf112720a82512a898b93 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Sun, 8 Apr 2018 00:08:11 +0200 Subject: [PATCH] core: reuse signer between transactions --- core/chain_makers.go | 4 +++- core/state_processor.go | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/core/chain_makers.go b/core/chain_makers.go index fcba90bb87..5f7822f79c 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -98,7 +98,9 @@ func (b *BlockGen) AddTxWithChain(bc *BlockChain, tx *types.Transaction) { b.SetCoinbase(common.Address{}) } b.statedb.Prepare(tx.Hash(), common.Hash{}, len(b.txs)) - receipt, _, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, vm.Config{}) + signer := types.MakeSigner(b.config, b.header.Number) + + receipt, _, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, vm.Config{}, &signer) if err != nil { panic(err) } diff --git a/core/state_processor.go b/core/state_processor.go index c57d429fa3..f46a0306dc 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -65,11 +65,12 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg if p.config.DAOForkSupport && p.config.DAOForkBlock != nil && p.config.DAOForkBlock.Cmp(block.Number()) == 0 { misc.ApplyDAOHardFork(statedb) } + signer := types.MakeSigner(p.config, header.Number) // Iterate over and process the individual transactions receipts = make([]*types.Receipt, len(block.Transactions())) for i, tx := range block.Transactions() { statedb.Prepare(tx.Hash(), block.Hash(), i) - receipt, _, err := ApplyTransaction(p.config, p.bc, nil, gp, statedb, header, tx, usedGas, cfg) + receipt, _, err := ApplyTransaction(p.config, p.bc, nil, gp, statedb, header, tx, usedGas, cfg, &signer) if err != nil { return nil, nil, 0, err } @@ -86,8 +87,8 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg // and uses the input parameters for its environment. It returns the receipt // for the transaction, gas used and an error if the transaction failed, // indicating the block was invalid. -func ApplyTransaction(config *params.ChainConfig, bc *BlockChain, author *common.Address, gp *GasPool, statedb *state.StateDB, header *types.Header, tx *types.Transaction, usedGas *uint64, cfg vm.Config) (*types.Receipt, uint64, error) { - msg, err := tx.AsMessage(types.MakeSigner(config, header.Number)) +func ApplyTransaction(config *params.ChainConfig, bc *BlockChain, author *common.Address, gp *GasPool, statedb *state.StateDB, header *types.Header, tx *types.Transaction, usedGas *uint64, cfg vm.Config, signer *types.Signer) (*types.Receipt, uint64, error) { + msg, err := tx.AsMessage(*signer) if err != nil { return nil, 0, err }