diff --git a/op-node/rollup/derive/span_batch_tx.go b/op-node/rollup/derive/span_batch_tx.go index 81c9f24e0b6a7..876fbd9347f27 100644 --- a/op-node/rollup/derive/span_batch_tx.go +++ b/op-node/rollup/derive/span_batch_tx.go @@ -188,6 +188,10 @@ func (tx *spanBatchTx) convertToFullTx(nonce, gas uint64, to *common.Address, ch S: S, } case types.SetCodeTxType: + if to == nil { + return nil, fmt.Errorf("to address is required for SetCodeTx") + } + setCodeTxInner := tx.inner.(*spanBatchSetCodeTxData) inner = &types.SetCodeTx{ ChainID: uint256.MustFromBig(chainID), diff --git a/op-node/rollup/derive/span_batch_tx_test.go b/op-node/rollup/derive/span_batch_tx_test.go index cd405bf09f04e..d215a0f2c6be0 100644 --- a/op-node/rollup/derive/span_batch_tx_test.go +++ b/op-node/rollup/derive/span_batch_tx_test.go @@ -144,3 +144,11 @@ func TestSpanBatchTxDecodeInvalid(t *testing.T) { err = sbtx.UnmarshalBinary(invalidLegacyTxDecoded) require.ErrorContains(t, err, "failed to decode spanBatchLegacyTxData") } + +func TestSpanBatchTxSetCodeInvalidTo(t *testing.T) { + // invalid to for setcode tx + var sbtx spanBatchTx + sbtx.inner = &spanBatchSetCodeTxData{} + _, err := sbtx.convertToFullTx(0, 0, nil, nil, nil, nil, nil) + require.ErrorContains(t, err, "to address is required for SetCodeTx") +}