aboutsummaryrefslogtreecommitdiffstats
path: root/consensus
diff options
context:
space:
mode:
Diffstat (limited to 'consensus')
-rw-r--r--consensus/clique/clique.go6
-rw-r--r--consensus/consensus.go5
-rw-r--r--consensus/ethash/consensus.go6
3 files changed, 17 insertions, 0 deletions
diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go
index 3c36545c4..8619bd1d8 100644
--- a/consensus/clique/clique.go
+++ b/consensus/clique/clique.go
@@ -220,6 +220,12 @@ func New(config *params.CliqueConfig, db ethdb.Database) *Clique {
}
}
+// Author implements consensus.Engine, returning the Ethereum address recovered
+// from the signature in the header's extra-data section.
+func (c *Clique) Author(header *types.Header) (common.Address, error) {
+ return ecrecover(header)
+}
+
// VerifyHeader checks whether a header conforms to the consensus rules.
func (c *Clique) VerifyHeader(chain consensus.ChainReader, header *types.Header, seal bool) error {
return c.verifyHeader(chain, header, nil)
diff --git a/consensus/consensus.go b/consensus/consensus.go
index c199e627f..8cbd32c88 100644
--- a/consensus/consensus.go
+++ b/consensus/consensus.go
@@ -49,6 +49,11 @@ type ChainReader interface {
// Engine is an algorithm agnostic consensus engine.
type Engine interface {
+ // Author retrieves the Ethereum address of the account that minted the given
+ // block, which may be different from the header's coinbase if a consensus
+ // engine is based on signatures.
+ Author(header *types.Header) (common.Address, error)
+
// VerifyHeader checks whether a header conforms to the consensus rules of a
// given engine. Verifying the seal may be done optionally here, or explicitly
// via the VerifySeal method.
diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go
index f4f8f4b17..4b6e779d5 100644
--- a/consensus/ethash/consensus.go
+++ b/consensus/ethash/consensus.go
@@ -59,6 +59,12 @@ var (
errInvalidPoW = errors.New("invalid proof-of-work")
)
+// Author implements consensus.Engine, returning the header's coinbase as the
+// proof-of-work verified author of the block.
+func (ethash *Ethash) Author(header *types.Header) (common.Address, error) {
+ return header.Coinbase, nil
+}
+
// VerifyHeader checks whether a header conforms to the consensus rules of the
// stock Ethereum ethash engine.
func (ethash *Ethash) VerifyHeader(chain consensus.ChainReader, header *types.Header, seal bool) error {