diff options
author | Martin Holst Swende <martin@swende.se> | 2019-04-30 21:42:36 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2019-04-30 21:42:36 +0800 |
commit | 4c90efdf57ce87edf0d855c8cec10525875a6ab1 (patch) | |
tree | bc733d1328110c7570c1fad86834e9e3ad1cfcdf /consensus | |
parent | befca7e8b0eac00499155c0b9d25814615f0fe24 (diff) | |
download | go-tangerine-4c90efdf57ce87edf0d855c8cec10525875a6ab1.tar go-tangerine-4c90efdf57ce87edf0d855c8cec10525875a6ab1.tar.gz go-tangerine-4c90efdf57ce87edf0d855c8cec10525875a6ab1.tar.bz2 go-tangerine-4c90efdf57ce87edf0d855c8cec10525875a6ab1.tar.lz go-tangerine-4c90efdf57ce87edf0d855c8cec10525875a6ab1.tar.xz go-tangerine-4c90efdf57ce87edf0d855c8cec10525875a6ab1.tar.zst go-tangerine-4c90efdf57ce87edf0d855c8cec10525875a6ab1.zip |
consensus,core,miner: avoid overhead of creating a new block (#19301)
* consensus,core,miner: avoid overhead of creating a new block
* consensus: nitpick dot
* consensus: fix some comment formatting nits
Diffstat (limited to 'consensus')
-rw-r--r-- | consensus/clique/clique.go | 12 | ||||
-rw-r--r-- | consensus/consensus.go | 11 | ||||
-rw-r--r-- | consensus/ethash/consensus.go | 12 |
3 files changed, 30 insertions, 5 deletions
diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index 6bdee6dd5..4caa9dc74 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -548,8 +548,16 @@ func (c *Clique) Prepare(chain consensus.ChainReader, header *types.Header) erro } // Finalize implements consensus.Engine, ensuring no uncles are set, nor block -// rewards given, and returns the final block. -func (c *Clique) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { +// rewards given. +func (c *Clique) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) { + // No block rewards in PoA, so the state remains as is and uncles are dropped + header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) + header.UncleHash = types.CalcUncleHash(nil) +} + +// FinalizeAndAssemble implements consensus.Engine, ensuring no uncles are set, +// nor block rewards given, and returns the final block. +func (c *Clique) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { // No block rewards in PoA, so the state remains as is and uncles are dropped header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) header.UncleHash = types.CalcUncleHash(nil) diff --git a/consensus/consensus.go b/consensus/consensus.go index 487b07be7..f753af550 100644 --- a/consensus/consensus.go +++ b/consensus/consensus.go @@ -80,10 +80,19 @@ type Engine interface { Prepare(chain ChainReader, header *types.Header) error // Finalize runs any post-transaction state modifications (e.g. block rewards) - // and assembles the final block. + // but does not assemble the block. + // // Note: The block header and state database might be updated to reflect any // consensus rules that happen at finalization (e.g. block rewards). Finalize(chain ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, + uncles []*types.Header) + + // FinalizeAndAssemble runs any post-transaction state modifications (e.g. block + // rewards) and assembles the final block. + // + // Note: The block header and state database might be updated to reflect any + // consensus rules that happen at finalization (e.g. block rewards). + FinalizeAndAssemble(chain ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) // Seal generates a new sealing request for the given input block and pushes diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index 4d909146f..d271518f4 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -561,8 +561,16 @@ func (ethash *Ethash) Prepare(chain consensus.ChainReader, header *types.Header) } // Finalize implements consensus.Engine, accumulating the block and uncle rewards, -// setting the final state and assembling the block. -func (ethash *Ethash) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { +// setting the final state on the header +func (ethash *Ethash) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) { + // Accumulate any block and uncle rewards and commit the final state root + accumulateRewards(chain.Config(), state, header, uncles) + header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) +} + +// FinalizeAndAssemble implements consensus.Engine, accumulating the block and +// uncle rewards, setting the final state and assembling the block. +func (ethash *Ethash) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { // Accumulate any block and uncle rewards and commit the final state root accumulateRewards(chain.Config(), state, header, uncles) header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) |