From 1c68a9849d5f493ab62e18a125158f6288c1e363 Mon Sep 17 00:00:00 2001 From: Determinant Date: Sat, 27 Jun 2020 22:46:31 -0400 Subject: check the coinbase in ParseBlock --- plugin/evm/vm.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'plugin/evm') diff --git a/plugin/evm/vm.go b/plugin/evm/vm.go index 4fa2267..93e2fe2 100644 --- a/plugin/evm/vm.go +++ b/plugin/evm/vm.go @@ -25,6 +25,7 @@ import ( "github.com/ava-labs/go-ethereum/rlp" "github.com/ava-labs/go-ethereum/rpc" + "github.com/ava-labs/gecko/api/admin" "github.com/ava-labs/gecko/cache" "github.com/ava-labs/gecko/database" "github.com/ava-labs/gecko/ids" @@ -32,7 +33,6 @@ import ( "github.com/ava-labs/gecko/snow/choices" "github.com/ava-labs/gecko/snow/consensus/snowman" "github.com/ava-labs/gecko/utils/timer" - "github.com/ava-labs/gecko/api/admin" commonEng "github.com/ava-labs/gecko/snow/engine/common" ) @@ -59,6 +59,7 @@ var ( errUnknownBlock = errors.New("unknown block") errBlockFrequency = errors.New("too frequent block issuance") errUnsupportedFXs = errors.New("unsupported feature extensions") + errInvalidBlock = errors.New("invalid block") ) func maxDuration(x, y time.Duration) time.Duration { @@ -303,6 +304,10 @@ func (vm *VM) ParseBlock(b []byte) (snowman.Block, error) { if err := rlp.DecodeBytes(b, ethBlock); err != nil { return nil, err } + // Coinbase must be zero on C-Chain + if bytes.Compare(ethBlock.Coinbase(), coreth.ZeroAddr) != 0 { + return nil, errInvalidBlock + } block := &Block{ id: ids.NewID(ethBlock.Hash()), ethBlock: ethBlock, -- cgit v1.2.3-70-g09d2