Skip to content

Conversation

Tristan-Wilson
Copy link
Member

Backport of #3838

The DataPoster was panicking with an out of bounds access into the BlobTxReplacementTimes slice when used by Validators. In a recent change we set all blob related parameters in the DataPosterConfig to nil/empty when used from a Validator context, since blob txs should never be used by the Validator to post its assertions. The line fixed in this commit was trying to schedule the next iteration of the tx replacement loop to be at least the minimum of the lowest blob or normal tx replacement time, even if there were no BlobTxReplacementTimes.

This PR also adds basic configuration validation that BlobTxReplacementTimes is nonempty when blob txs are enabled, and that ReplacementTimes is always nonempty.

As some background, we use a sparser blob tx replacement schedule because replacing blob txs is more expensive due to requiring a larger escalation of price (2x vs 1.1x increase). This is an intentional implementation detail included by execution clients to limit spammy potentially large replacement txs.

@eljobe eljobe merged commit 28ae8ba into v3.8.x-release Oct 15, 2025
15 checks passed
@eljobe eljobe deleted the v3.8.x-release-fix-empty-blob-tx-replacement-schedule branch October 15, 2025 10:57
Copy link

❌ 5 Tests Failed:

Tests completed Failed Passed Skipped
2141 5 2136 0
View the top 3 failed tests by shortest run time
TestValidationInputsAtWithWasmTarget
Stack Traces | 2.770s run time
=== RUN   TestValidationInputsAtWithWasmTarget
=== PAUSE TestValidationInputsAtWithWasmTarget
=== CONT  TestValidationInputsAtWithWasmTarget
    validation_inputs_at_test.go:70: goroutine 1585645 [running]:
        runtime/debug.Stack()
        	/opt/hostedtoolcache/go/1.25.3/x64/src/runtime/debug/stack.go:26 +0x5e
        github.com/offchainlabs/nitro/util/testhelpers.RequireImpl({0x4081430, 0xc0166b7180}, {0x403f1e0, 0xc23d569540}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x55
        github.com/offchainlabs/nitro/system_tests.Require(0xc0166b7180, {0x403f1e0, 0xc23d569540}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/system_tests/common_test.go:1723 +0x5d
        github.com/offchainlabs/nitro/system_tests.TestValidationInputsAtWithWasmTarget(0xc0166b7180)
        	/home/runner/work/nitro/nitro/system_tests/validation_inputs_at_test.go:70 +0x970
        testing.tRunner(0xc0166b7180, 0x3cc9a68)
        	/opt/hostedtoolcache/go/1.25.3/x64/src/testing/testing.go:1934 +0xea
        created by testing.(*T).Run in goroutine 1
        	/opt/hostedtoolcache/go/1.25.3/x64/src/testing/testing.go:1997 +0x465
        
    validation_inputs_at_test.go:70: �[31;1m [] failed calculating position for validation: batch not found on L1 yet �[0;0m
ERROR[10-15|10:52:26.026] Dangling trie nodes after full cleanup
--- FAIL: TestValidationInputsAtWithWasmTarget (2.77s)
TestVersion40
Stack Traces | 7.040s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
=== PAUSE TestVersion40
=== CONT  TestVersion40
    precompile_inclusion_test.go:90: goroutine 520604 [running]:
        runtime/debug.Stack()
        	/opt/hostedtoolcache/go/1.25.3/x64/src/runtime/debug/stack.go:26 +0x5e
        github.com/offchainlabs/nitro/util/testhelpers.RequireImpl({0x4081430, 0xc040fc2000}, {0x403f660, 0xc14004e270}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x55
        github.com/offchainlabs/nitro/system_tests.Require(0xc040fc2000, {0x403f660, 0xc14004e270}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/system_tests/common_test.go:1723 +0x5d
        github.com/offchainlabs/nitro/system_tests.testPrecompiles(0xc040fc2000, 0x28, {0xc0cdc8fdf8, 0x5, 0x39?})
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:90 +0x371
        github.com/offchainlabs/nitro/system_tests.TestVersion40(0xc040fc2000?)
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:71 +0x64b
        testing.tRunner(0xc040fc2000, 0x3cc9a88)
        	/opt/hostedtoolcache/go/1.25.3/x64/src/testing/testing.go:1934 +0xea
        created by testing.(*T).Run in goroutine 1
        	/opt/hostedtoolcache/go/1.25.3/x64/src/testing/testing.go:1997 +0x465
        
    precompile_inclusion_test.go:90: �[31;1m [] execution aborted (timeout = 5s) �[0;0m
--- FAIL: TestVersion40 (7.04s)
TestArbOSVersion50
Stack Traces | 7.120s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
=== PAUSE TestArbOSVersion50
=== CONT  TestArbOSVersion50
    precompile_inclusion_test.go:90: goroutine 520605 [running]:
        runtime/debug.Stack()
        	/opt/hostedtoolcache/go/1.25.3/x64/src/runtime/debug/stack.go:26 +0x5e
        github.com/offchainlabs/nitro/util/testhelpers.RequireImpl({0x4081430, 0xc040fc21c0}, {0x403f660, 0xc0f9b17650}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x55
        github.com/offchainlabs/nitro/system_tests.Require(0xc040fc21c0, {0x403f660, 0xc0f9b17650}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/system_tests/common_test.go:1723 +0x5d
        github.com/offchainlabs/nitro/system_tests.testPrecompiles(0xc040fc21c0, 0x32, {0xc0ff7cde88, 0x3, 0x5be7b20?})
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:90 +0x371
        github.com/offchainlabs/nitro/system_tests.TestArbOSVersion50(0xc040fc21c0?)
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:75 +0x3ef
        testing.tRunner(0xc040fc21c0, 0x3cc8968)
        	/opt/hostedtoolcache/go/1.25.3/x64/src/testing/testing.go:1934 +0xea
        created by testing.(*T).Run in goroutine 1
        	/opt/hostedtoolcache/go/1.25.3/x64/src/testing/testing.go:1997 +0x465
        
    precompile_inclusion_test.go:90: �[31;1m [] execution aborted (timeout = 5s) �[0;0m
--- FAIL: TestArbOSVersion50 (7.12s)

📣 Thoughts on this report? Let Codecov know! | Powered by Codecov

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants