aboutsummaryrefslogtreecommitdiffstats
path: root/consensus
diff options
context:
space:
mode:
authorMartin Holst Swende <martin@swende.se>2019-04-30 21:42:36 +0800
committerPéter Szilágyi <peterke@gmail.com>2019-04-30 21:42:36 +0800
commit4c90efdf57ce87edf0d855c8cec10525875a6ab1 (patch)
treebc733d1328110c7570c1fad86834e9e3ad1cfcdf /consensus
parentbefca7e8b0eac00499155c0b9d25814615f0fe24 (diff)
downloadgo-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.go12
-rw-r--r--consensus/consensus.go11
-rw-r--r--consensus/ethash/consensus.go12
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))