Skip to content

Conversation

Tristan-Wilson
Copy link
Member

@Tristan-Wilson Tristan-Wilson commented Oct 15, 2025

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.

Copy link

❌ 5 Tests Failed:

Tests completed Failed Passed Skipped
2142 5 2137 0
View the top 3 failed tests by shortest run time
TestTimeboostTxsTimeoutByBlock
Stack Traces | 1.300s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
WARN [10-15|10:12:16.591] Served eth_sendRawTransaction            reqid=57    duration=1.778274ms   err="nonce too low: address 0x26E554a8acF9003b83495c7f45F06edCB803d4e3, tx: 6 state: 7"
TRACE[10-15|10:12:16.591] Handled RPC response                     reqid=57    duration="1.813µs"
    timeboost_test.go:1622: goroutine 1464177 [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({0x40824d0, 0xc019dca8c0}, {0x4040700, 0xc05d16f7d0}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x55
        github.com/offchainlabs/nitro/system_tests.Require(0xc019dca8c0, {0x4040700, 0xc05d16f7d0}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/system_tests/common_test.go:1723 +0x5d
        github.com/offchainlabs/nitro/system_tests.setupExpressLaneAuction(0xc019dca8c0, {0xc0a38e5e30, 0x61}, {0x4060248, 0xc0eed191d0}, 0x0, 0x5)
        	/home/runner/work/nitro/nitro/system_tests/timeboost_test.go:1622 +0x171a
        github.com/offchainlabs/nitro/system_tests.TestTimeboostTxsTimeoutByBlock(0xc019dca8c0)
        	/home/runner/work/nitro/nitro/system_tests/timeboost_test.go:62 +0xa5
        testing.tRunner(0xc019dca8c0, 0x3cca9e0)
        	/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
        
    timeboost_test.go:1622: �[31;1m [] nonce too low: address 0x26E554a8acF9003b83495c7f45F06edCB803d4e3, tx: 6 state: 7 �[0;0m
--- FAIL: TestTimeboostTxsTimeoutByBlock (1.30s)
TestVersion30
Stack Traces | 6.480s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
yay!! we validated block 9 in 121.61ms�[0;0m
�[38;5;48;1myay!! we validated block 10 in 110.28ms�[0;0m
    precompile_inclusion_test.go:90: goroutine 455001 [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({0x40824d0, 0xc0a1dc21c0}, {0x4040700, 0xc0cea830e0}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x55
        github.com/offchainlabs/nitro/system_tests.Require(0xc0a1dc21c0, {0x4040700, 0xc0cea830e0}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/system_tests/common_test.go:1723 +0x5d
        github.com/offchainlabs/nitro/system_tests.testPrecompiles(0xc0a1dc21c0, 0x1e, {0xc070d5bdb0, 0x6, 0x3?})
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:90 +0x371
        github.com/offchainlabs/nitro/system_tests.TestVersion30(0xc0a1dc21c0?)
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:67 +0x798
        testing.tRunner(0xc0a1dc21c0, 0x3ccaa40)
        	/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: TestVersion30 (6.48s)
TestVersion40
Stack Traces | 6.500s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
INFO [10-15|10:13:54.493] HTTP server stopped                      endpoint=127.0.0.1:41173
TRACE[10-15|10:13:54.493] P2P networking is spinning down
    precompile_inclusion_test.go:90: goroutine 455002 [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({0x40824d0, 0xc0a1dc2380}, {0x4040700, 0xc0d5447e00}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x55
        github.com/offchainlabs/nitro/system_tests.Require(0xc0a1dc2380, {0x4040700, 0xc0d5447e00}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/system_tests/common_test.go:1723 +0x5d
        github.com/offchainlabs/nitro/system_tests.testPrecompiles(0xc0a1dc2380, 0x28, {0xc09b629df8, 0x5, 0x39?})
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:90 +0x371
        github.com/offchainlabs/nitro/system_tests.TestVersion40(0xc0a1dc2380?)
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:71 +0x64b
        testing.tRunner(0xc0a1dc2380, 0x3ccaa48)
        	/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 (6.50s)

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

Merged via the queue into master with commit 58d1e1e Oct 15, 2025
25 checks passed
@Tristan-Wilson Tristan-Wilson deleted the fix-empty-blob-tx-replacement-schedule branch October 15, 2025 10:44
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.

3 participants