diff --git a/core/state_processor_test.go b/core/state_processor_test.go index 2f841eb64a..b8fa4c4154 100644 --- a/core/state_processor_test.go +++ b/core/state_processor_test.go @@ -97,6 +97,7 @@ func TestStateProcessorErrors(t *testing.T) { } var mkBlobTx = func(nonce uint64, to common.Address, gasLimit uint64, gasTipCap, gasFeeCap, blobGasFeeCap *big.Int, hashes []common.Hash) *types.Transaction { tx, err := types.SignTx(types.NewTx(&types.BlobTx{ + ChainID: new(uint256.Int), Nonce: nonce, GasTipCap: uint256.MustFromBig(gasTipCap), GasFeeCap: uint256.MustFromBig(gasFeeCap), @@ -113,6 +114,7 @@ func TestStateProcessorErrors(t *testing.T) { } var mkSetCodeTx = func(nonce uint64, to common.Address, gasLimit uint64, gasTipCap, gasFeeCap *big.Int, authlist []types.SetCodeAuthorization) *types.Transaction { tx, err := types.SignTx(types.NewTx(&types.SetCodeTx{ + ChainID: new(uint256.Int), Nonce: nonce, GasTipCap: uint256.MustFromBig(gasTipCap), GasFeeCap: uint256.MustFromBig(gasFeeCap), diff --git a/core/types/transaction_signing.go b/core/types/transaction_signing.go index a23d94f904..400d4a11f2 100644 --- a/core/types/transaction_signing.go +++ b/core/types/transaction_signing.go @@ -219,7 +219,10 @@ func (s pragueSigner) SignatureValues(tx *Transaction, sig []byte) (R, S, V *big } // Check that chain ID of tx matches the signer. We also accept ID zero here, // because it indicates that the chain ID was not specified in the tx. - if tx.ChainId().Sign() != 0 && tx.ChainId().Cmp(s.chainId) != 0 { + if txdata.ChainID == nil { + return nil, nil, nil, fmt.Errorf("%w: chainID not set", ErrInvalidChainId) + } + if txdata.ChainID.Sign() != 0 && txdata.ChainID.CmpBig(s.chainId) != 0 { return nil, nil, nil, fmt.Errorf("%w: have %d want %d", ErrInvalidChainId, txdata.ChainID, s.chainId) } R, S, _ = decodeSignature(sig) @@ -287,7 +290,10 @@ func (s cancunSigner) SignatureValues(tx *Transaction, sig []byte) (R, S, V *big } // Check that chain ID of tx matches the signer. We also accept ID zero here, // because it indicates that the chain ID was not specified in the tx. - if tx.ChainId().Sign() != 0 && tx.ChainId().Cmp(s.chainId) != 0 { + if txdata.ChainID == nil { + return nil, nil, nil, fmt.Errorf("%w: chainID not set", ErrInvalidChainId) + } + if txdata.ChainID.Sign() != 0 && txdata.ChainID.CmpBig(s.chainId) != 0 { return nil, nil, nil, fmt.Errorf("%w: have %d want %d", ErrInvalidChainId, txdata.ChainID, s.chainId) } R, S, _ = decodeSignature(sig)