Skip to content

[MEL] - Implement a Transaction and Receipt Recorder for MEL Validation#4198

Merged
ganeshvanahalli merged 14 commits intomasterfrom
mel-txandreceipt-recorder
Jan 20, 2026
Merged

[MEL] - Implement a Transaction and Receipt Recorder for MEL Validation#4198
ganeshvanahalli merged 14 commits intomasterfrom
mel-txandreceipt-recorder

Conversation

@ganeshvanahalli
Copy link
Copy Markdown
Contributor

@ganeshvanahalli ganeshvanahalli commented Jan 5, 2026

This PR introduces recorder structs to record preimages for transactions and receipts needed for MEL validation.

Resolves NIT-4254
Resolves NIT-4263

@ganeshvanahalli ganeshvanahalli marked this pull request as ready for review January 5, 2026 16:43
@codecov
Copy link
Copy Markdown

codecov Bot commented Jan 5, 2026

Codecov Report

❌ Patch coverage is 0% with 227 lines in your changes missing coverage. Please review.
✅ Project coverage is 32.97%. Comparing base (39386ac) to head (73a1e94).
⚠️ Report is 3 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #4198      +/-   ##
==========================================
+ Coverage   32.90%   32.97%   +0.06%     
==========================================
  Files         462      465       +3     
  Lines       56057    56270     +213     
==========================================
+ Hits        18446    18553     +107     
- Misses      34398    34476      +78     
- Partials     3213     3241      +28     

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jan 5, 2026

❌ 4 Tests Failed:

Tests completed Failed Passed Skipped
3915 4 3911 0
View the top 3 failed tests by shortest run time
TestVersion30
Stack Traces | 6.620s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
INFO [01-20|05:46:49.209] HTTP server stopped                      endpoint=127.0.0.1:37769
TRACE[01-20|05:46:49.212] P2P networking is spinning down
    precompile_inclusion_test.go:94: goroutine 610284 [running]:
        runtime/debug.Stack()
        	/opt/hostedtoolcache/go/1.25.5/x64/src/runtime/debug/stack.go:26 +0x5e
        github.com/offchainlabs/nitro/util/testhelpers.RequireImpl({0x4072970, 0xc097d90a80}, {0x402f9c0, 0xc09e7e6ed0}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x55
        github.com/offchainlabs/nitro/system_tests.Require(0xc097d90a80, {0x402f9c0, 0xc09e7e6ed0}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/system_tests/common_test.go:2041 +0x5d
        github.com/offchainlabs/nitro/system_tests.testPrecompiles(0xc097d90a80, 0x1e, {0xc0a0ee5db0, 0x6, 0xc023ca1be0?})
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:94 +0x371
        github.com/offchainlabs/nitro/system_tests.TestVersion30(0xc097d90a80?)
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:67 +0x798
        testing.tRunner(0xc097d90a80, 0x3cb4200)
        	/opt/hostedtoolcache/go/1.25.5/x64/src/testing/testing.go:1934 +0xea
        created by testing.(*T).Run in goroutine 1
        	/opt/hostedtoolcache/go/1.25.5/x64/src/testing/testing.go:1997 +0x465
        
    precompile_inclusion_test.go:94: �[31;1m [] execution aborted (timeout = 5s) �[0;0m
--- FAIL: TestVersion30 (6.62s)
TestVersion40
Stack Traces | 7.020s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
�[90mcreate: deployed to 0xA02062aa4Cb0872315ACA3eA6dBF077d90B2DAC1�[0;0m
�[90mink price=15246�[0;0m
    precompile_inclusion_test.go:94: goroutine 610285 [running]:
        runtime/debug.Stack()
        	/opt/hostedtoolcache/go/1.25.5/x64/src/runtime/debug/stack.go:26 +0x5e
        github.com/offchainlabs/nitro/util/testhelpers.RequireImpl({0x4072970, 0xc097d90c40}, {0x402f9c0, 0xc090edcc90}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x55
        github.com/offchainlabs/nitro/system_tests.Require(0xc097d90c40, {0x402f9c0, 0xc090edcc90}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/system_tests/common_test.go:2041 +0x5d
        github.com/offchainlabs/nitro/system_tests.testPrecompiles(0xc097d90c40, 0x28, {0xc0ce747df8, 0x5, 0x39?})
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:94 +0x371
        github.com/offchainlabs/nitro/system_tests.TestVersion40(0xc097d90c40?)
        	/home/runner/work/nitro/nitro/system_tests/precompile_inclusion_test.go:71 +0x64b
        testing.tRunner(0xc097d90c40, 0x3cb4208)
        	/opt/hostedtoolcache/go/1.25.5/x64/src/testing/testing.go:1934 +0xea
        created by testing.(*T).Run in goroutine 1
        	/opt/hostedtoolcache/go/1.25.5/x64/src/testing/testing.go:1997 +0x465
        
    precompile_inclusion_test.go:94: �[31;1m [] execution aborted (timeout = 5s) �[0;0m
--- FAIL: TestVersion40 (7.02s)
TestBatchPosterActuallyPostsBlobsToL1
Stack Traces | 52.420s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
        	/opt/hostedtoolcache/go/1.25.5/x64/src/runtime/debug/stack.go:26 +0x5e
        github.com/offchainlabs/nitro/util/testhelpers.RequireImpl({0x43673b0, 0xc00057a540}, {0x4323400, 0xc0d7434f60}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x9f
        github.com/offchainlabs/nitro/system_tests.Require(0xc00057a540, {0x4323400, 0xc0d7434f60}, {0x0, 0x0, 0x0})
        	/home/runner/work/nitro/nitro/system_tests/common_test.go:2041 +0x5d
        github.com/offchainlabs/nitro/system_tests.TestBatchPosterActuallyPostsBlobsToL1(0xc00057a540)
        	/home/runner/work/nitro/nitro/system_tests/batch_poster_test.go:893 +0x8aa
        testing.tRunner(0xc00057a540, 0x3fa5e68)
        	/opt/hostedtoolcache/go/1.25.5/x64/src/testing/testing.go:1934 +0xea
        created by testing.(*T).Run in goroutine 1
        	/opt/hostedtoolcache/go/1.25.5/x64/src/testing/testing.go:1997 +0x465
        
    batch_poster_test.go:893: �[31;1m [] accumulator not found: no metadata for batch 2 �[0;0m
ERROR[01-20|05:50:07.424] Failed to connect to sequencer's url specified in --node.seq-coordinator.my-url myUrl=/home/runner/work/nitro/nitro/target/tmp/deadbeefbee/1883242758/0.ipc err="dial tcp: missing address"
�[90mposted new batch 13�[0;0m
ERROR[01-20|05:50:07.650] Failed to connect to sequencer's url specified in --node.seq-coordinator.my-url myUrl=/home/runner/work/nitro/nitro/target/tmp/deadbeefbee/2511922527/1.ipc err="dial tcp: missing address"
ERROR[01-20|05:50:07.787] Failed to connect to sequencer's url specified in --node.seq-coordinator.my-url myUrl=/home/runner/work/nitro/nitro/target/tmp/deadbeefbee/200491260/2.ipc err="dial tcp: missing address"
ERROR[01-20|05:50:08.138] Failed to connect to sequencer's url specified in --node.seq-coordinator.my-url myUrl=/home/runner/work/nitro/nitro/target/tmp/deadbeefbee/2565905962/3.ipc err="dial tcp: missing address"
--- FAIL: TestBatchPosterActuallyPostsBlobsToL1 (52.42s)
ERROR[01-20|05:50:08.274] Failed to connect to sequencer's url specified in --node.seq-coordinator.my-url myUrl=/home/runner/work/nitro/nitro/target/tmp/deadbeefbee/4259413348/4.ipc err="dial tcp: missing address"

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

Copy link
Copy Markdown
Contributor

@rauljordan rauljordan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks really great so far, nice job! after comments are resolved can approve and pass over to a design approver

Comment thread arbnode/mel/recording/receipt_recorder.go
Comment thread arbnode/mel/recording/receipt_recorder.go
Comment thread arbnode/mel/recording/receipt_recorder.go
Comment thread arbnode/mel/recording/receipt_recorder.go Outdated
Comment thread arbnode/mel/recording/receipt_recorder.go
Comment thread arbnode/mel/recording/tx_recorder.go
Comment thread arbnode/mel/recording/tx_recorder.go
rauljordan
rauljordan previously approved these changes Jan 7, 2026
Copy link
Copy Markdown
Contributor

@rauljordan rauljordan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really solid PR. Great job!

@ganeshvanahalli ganeshvanahalli assigned eljobe and unassigned magicxyyz Jan 9, 2026
@rauljordan rauljordan requested a review from eljobe January 9, 2026 16:02

// RecordingDAPReaderSource is used for recording preimages related to sequencer batches stored by da providers, given a
// DAPReaderSource is used for recording preimages related to sequencer batches stored by da providers, given a
// DapReaderSource it implements GetReader method to return a daprovider.Reader interface that records preimgaes. It takes
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo: DapReaderSource -> DAPReaderSource

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i updated the description

Comment thread arbnode/mel/recording/receipt_recorder.go Outdated
@ganeshvanahalli ganeshvanahalli added this pull request to the merge queue Jan 20, 2026
Merged via the queue into master with commit b30b464 Jan 20, 2026
24 checks passed
@ganeshvanahalli ganeshvanahalli deleted the mel-txandreceipt-recorder branch January 20, 2026 10:11
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.

4 participants