diff --git a/core/state_transition.go b/core/state_transition.go index b51dcc375..60aad1d2b 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -368,12 +368,18 @@ func (st *StateTransition) TransitionDb() (*ExecutionResult, error) { return nil, err } if st.gas < gas { - return nil, fmt.Errorf("%w: have %d, want %d", ErrIntrinsicGas, st.gas, gas) + // Allow L1 message transactions to be included in the block but fail during execution, + // instead of rejecting them outright at this point. + if st.msg.IsL1MessageTx() { + gas = st.gas + } else { + return nil, fmt.Errorf("%w: have %d, want %d", ErrIntrinsicGas, st.gas, gas) + } } st.gas -= gas // Check clause 6 - if msg.Value().Sign() > 0 && !st.evm.Context.CanTransfer(st.state, msg.From(), msg.Value()) { + if msg.Value().Sign() > 0 && !msg.IsL1MessageTx() && !st.evm.Context.CanTransfer(st.state, msg.From(), msg.Value()) { return nil, fmt.Errorf("%w: address %v", ErrInsufficientFundsForTransfer, msg.From().Hex()) }