diff --git a/core/vm/evm.go b/core/vm/evm.go index eac394b362..2d26282b03 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -235,7 +235,7 @@ func NewEVM(blockCtx BlockContext, txCtx TxContext, statedb StateDB, chainConfig // Parse the predicate results from the extra field and store them in the // block context. - predicateBytes := header.PredicateBytesFromExtra(blockCtx.Extra) + predicateBytes := header.PredicateBytesFromExtra(evm.chainRules.AvalancheRules, blockCtx.Extra) if len(predicateBytes) == 0 { return evm } diff --git a/plugin/evm/block.go b/plugin/evm/block.go index d30a943fa8..042ff22703 100644 --- a/plugin/evm/block.go +++ b/plugin/evm/block.go @@ -382,7 +382,7 @@ func (b *Block) verifyPredicates(predicateContext *precompileconfig.PredicateCon return fmt.Errorf("failed to marshal predicate results: %w", err) } extraData := b.ethBlock.Extra() - headerPredicateResultsBytes := header.PredicateBytesFromExtra(extraData) + headerPredicateResultsBytes := header.PredicateBytesFromExtra(rules.AvalancheRules, extraData) if !bytes.Equal(headerPredicateResultsBytes, predicateResultsBytes) { return fmt.Errorf("%w (remote: %x local: %x)", errInvalidHeaderPredicateResults, headerPredicateResultsBytes, predicateResultsBytes) } diff --git a/plugin/evm/header/extra.go b/plugin/evm/header/extra.go index e4db0b6c6f..79736f41d0 100644 --- a/plugin/evm/header/extra.go +++ b/plugin/evm/header/extra.go @@ -79,7 +79,7 @@ func VerifyExtra(rules params.AvalancheRules, extra []byte) error { // PredicateBytesFromExtra returns the predicate result bytes from the header's // extra data. If the extra data is not long enough, an empty slice is returned. -func PredicateBytesFromExtra(extra []byte) []byte { +func PredicateBytesFromExtra(_ params.AvalancheRules, extra []byte) []byte { // Prior to Durango, the VM enforces the extra data is smaller than or equal // to this size. // After Durango, the VM pre-verifies the extra data past the dynamic fee diff --git a/plugin/evm/header/extra_test.go b/plugin/evm/header/extra_test.go index c00fe31430..887aa9dbe2 100644 --- a/plugin/evm/header/extra_test.go +++ b/plugin/evm/header/extra_test.go @@ -331,6 +331,7 @@ func TestVerifyExtra(t *testing.T) { func TestPredicateBytesFromExtra(t *testing.T) { tests := []struct { name string + rules params.AvalancheRules extra []byte expected []byte }{ @@ -359,7 +360,7 @@ func TestPredicateBytesFromExtra(t *testing.T) { } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - got := PredicateBytesFromExtra(test.extra) + got := PredicateBytesFromExtra(test.rules, test.extra) require.Equal(t, test.expected, got) }) } diff --git a/plugin/evm/vm_warp_test.go b/plugin/evm/vm_warp_test.go index 26696986bd..abcb8b058c 100644 --- a/plugin/evm/vm_warp_test.go +++ b/plugin/evm/vm_warp_test.go @@ -653,7 +653,8 @@ func testReceiveWarpMessage( // Require the block was built with a successful predicate result ethBlock := block2.(*chain.BlockWrapper).Block.(*Block).ethBlock - headerPredicateResultsBytes := customheader.PredicateBytesFromExtra(ethBlock.Extra()) + rules := vm.chainConfig.GetAvalancheRules(ethBlock.Time()) + headerPredicateResultsBytes := customheader.PredicateBytesFromExtra(rules, ethBlock.Extra()) results, err := predicate.ParseResults(headerPredicateResultsBytes) require.NoError(err)