Skip to content

[MEL] - Enable Block Validation with MEL Support#4338

Merged
ganeshvanahalli merged 39 commits intomel-validator-createvalidationentryfrom
raul/mel-block-validator-enabled
Feb 13, 2026
Merged

[MEL] - Enable Block Validation with MEL Support#4338
ganeshvanahalli merged 39 commits intomel-validator-createvalidationentryfrom
raul/mel-block-validator-enabled

Conversation

@rauljordan
Copy link
Copy Markdown
Contributor

@rauljordan rauljordan commented Feb 5, 2026

This PR completes the new, unified replay binary used by Nitro that can perform both message extraction and block execution. It also ties MEL into the block validator so that the block validator can operate over messages extracted by MEL. With MEL-enabled, the block validator's responsibility becomes quite simple: it simply asks for the latest MEL state that was validated, and schedules an Arbitrator execution run over a message. This PR adds a new MEL-Enabled Validation Entry Creator which contains the logic to deal with MEL in the block validator. This requires very few other changes to the block validator.

We also add a system test that does the following:

  1. Posts some simple transfers as a blob transaction to the parent chain
  2. Post some delayed messages
  3. Awaits for native extraction of those messages
  4. Runs validation over the extraction
  5. Runs validation of execution in a for loop over all the messages extracted in step (4)

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 5, 2026

❌ 59 Tests Failed:

Tests completed Failed Passed Skipped
4188 59 4129 0
View the top 3 failed tests by shortest run time
TestSetLatestSnapshotUrl
Stack Traces | 0.010s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
    init_test.go:301: running test case latest file with http url
    init_test.go:355: goroutine 228 [running]:
        runtime/debug.Stack()
        	/opt/hostedtoolcache/go/1.25.6/x64/src/runtime/debug/stack.go:26 +0x5e
        github.com/offchainlabs/nitro/util/testhelpers.RequireImpl({0x301d550, 0xc000401a40}, {0x2fef900, 0x45554c0}, {0xc000710660, 0x1, 0x1})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x9f
        github.com/offchainlabs/nitro/cmd/nitro.Require(0xc000401a40, {0x2fef900, 0x45554c0}, {0xc000710660, 0x1, 0x1})
        	/home/runner/work/nitro/nitro/cmd/nitro/config_test.go:324 +0x5d
        github.com/offchainlabs/nitro/cmd/nitro.startFileServer.func2()
        	/home/runner/work/nitro/nitro/cmd/nitro/init_test.go:355 +0xa5
        created by github.com/offchainlabs/nitro/cmd/nitro.startFileServer in goroutine 220
        	/home/runner/work/nitro/nitro/cmd/nitro/init_test.go:352 +0x285
        
    init_test.go:355: �[31;1m [failed to shutdown server] context canceled �[0;0m
INFO [02-13|16:45:42.257] Set latest snapshot url                  url=http://some.domain.com/arb1/2024/21/archive.tar.gz
    init_test.go:301: running test case latest file with https url
INFO [02-13|16:45:42.259] Set latest snapshot url                  url=https://some.domain.com/arb1/2024/21/archive.tar.gz
    init_test.go:301: running test case chain and contents with upper case
INFO [02-13|16:45:42.260] Set latest snapshot url                  url=http://127.0.0.1:38861/arb1/2024/21/archive.tar.gz
--- FAIL: TestSetLatestSnapshotUrl (0.01s)
TestSetLatestSnapshotUrl
Stack Traces | 0.080s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
    init_test.go:301: running test case latest file with http url
    init_test.go:355: goroutine 29 [running]:
        runtime/debug.Stack()
        	/opt/hostedtoolcache/go/1.25.6/x64/src/runtime/debug/stack.go:26 +0x5e
        github.com/offchainlabs/nitro/util/testhelpers.RequireImpl({0x2e6da30, 0xc000a80700}, {0x2e40740, 0x41c9440}, {0xc000595c90, 0x1, 0x1})
        	/home/runner/work/nitro/nitro/util/testhelpers/testhelpers.go:29 +0x55
        github.com/offchainlabs/nitro/cmd/nitro.Require(0xc000a80700, {0x2e40740, 0x41c9440}, {0xc000595c90, 0x1, 0x1})
        	/home/runner/work/nitro/nitro/cmd/nitro/config_test.go:324 +0x5d
        github.com/offchainlabs/nitro/cmd/nitro.startFileServer.func2()
        	/home/runner/work/nitro/nitro/cmd/nitro/init_test.go:355 +0xa5
        created by github.com/offchainlabs/nitro/cmd/nitro.startFileServer in goroutine 9
        	/home/runner/work/nitro/nitro/cmd/nitro/init_test.go:352 +0x285
        
    init_test.go:355: �[31;1m [failed to shutdown server] context canceled �[0;0m
INFO [02-13|16:43:42.284] Set latest snapshot url                  url=http://some.domain.com/arb1/2024/21/archive.tar.gz
    init_test.go:301: running test case latest file with https url
INFO [02-13|16:43:42.285] Set latest snapshot url                  url=https://some.domain.com/arb1/2024/21/archive.tar.gz
    init_test.go:301: running test case chain and contents with upper case
INFO [02-13|16:43:42.287] Set latest snapshot url                  url=http://127.0.0.1:37849/arb1/2024/21/archive.tar.gz
--- FAIL: TestSetLatestSnapshotUrl (0.08s)
TestRedisProduceComplex/one_producer,_all_consumers_are_active
Stack Traces | 1.320s run time
... [CONTENT TRUNCATED: Keeping last 20 lines]
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xack                           �[36mcid�[0m=b5514050-c88d-42de-a091-c70468d1bf00 �[36mmessageId�[0m=1771001141446-2
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xack                           �[36mcid�[0m=feb07549-5bcb-4fef-953c-ee6012ba3bb7 �[36mmessageId�[0m=1771001141446-4
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xdel                           �[36mcid�[0m=b6509ec9-b9be-4dcb-b3df-a75e7f750eb3 �[36mmessageId�[0m=1771001141446-7
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xdel                           �[36mcid�[0m=0684b948-5143-4d9d-86f0-c3d211efe059 �[36mmessageId�[0m=1771001141446-5
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xdel                           �[36mcid�[0m=b5514050-c88d-42de-a091-c70468d1bf00 �[36mmessageId�[0m=1771001141446-2
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xack                           �[36mcid�[0m=6ad6fc81-dd57-4391-bcb2-35d4eda6d305 �[36mmessageId�[0m=1771001141446-8
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xack                           �[36mcid�[0m=59a4d6e2-6e8a-4cbc-af90-ae83e65bb51c �[36mmessageId�[0m=1771001141446-6
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xdel                           �[36mcid�[0m=feb07549-5bcb-4fef-953c-ee6012ba3bb7 �[36mmessageId�[0m=1771001141446-4
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xdel                           �[36mcid�[0m=6ad6fc81-dd57-4391-bcb2-35d4eda6d305 �[36mmessageId�[0m=1771001141446-8
�[36mDEBUG�[0m[02-13|16:45:42.548] consumer: xdel                           �[36mcid�[0m=59a4d6e2-6e8a-4cbc-af90-ae83e65bb51c �[36mmessageId�[0m=1771001141446-6
�[33mWARN �[0m[02-13|16:45:42.570] XClaimJustID returned empty response when indicating heartbeat �[33mmsgID�[0m=1771001141435-8
�[36mDEBUG�[0m[02-13|16:45:42.610] checkResponses                           �[36mresponded�[0m=70 �[36merrored�[0m=0 �[36mchecked�[0m=100
�[36mDEBUG�[0m[02-13|16:45:42.626] redis producer: check responses starting
�[36mDEBUG�[0m[02-13|16:45:42.652] checkResponses                           �[36mresponded�[0m=30 �[36merrored�[0m=0 �[36mchecked�[0m=30
�[31mERROR�[0m[02-13|16:45:42.656] Error from XpendingExt in getting PEL for auto claim �[31merr�[0m="context canceled" �[31mpendingLen�[0m=0
�[31mERROR�[0m[02-13|16:45:42.656] Error from XpendingExt in getting PEL for auto claim �[31merr�[0m="context canceled" �[31mpendingLen�[0m=0
�[31mERROR�[0m[02-13|16:45:42.656] Error from XpendingExt in getting PEL for auto claim �[31merr�[0m="context canceled" �[31mpendingLen�[0m=0
�[31mERROR�[0m[02-13|16:45:42.656] Error from XpendingExt in getting PEL for auto claim �[31merr�[0m="context canceled" �[31mpendingLen�[0m=0
�[36mDEBUG�[0m[02-13|16:45:42.732] Error destroying a stream group          �[36merror�[0m="dial tcp 127.0.0.1:39391: connect: connection refused"
--- FAIL: TestRedisProduceComplex/one_producer,_all_consumers_are_active (1.32s)

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

@codecov
Copy link
Copy Markdown

codecov Bot commented Feb 10, 2026

Codecov Report

❌ Patch coverage is 23.94558% with 559 lines in your changes missing coverage. Please review.
✅ Project coverage is 28.97%. Comparing base (9fb0b2b) to head (16a61db).
⚠️ Report is 56 commits behind head on mel-validator-createvalidationentry.

Additional details and impacted files
@@                           Coverage Diff                           @@
##           mel-validator-createvalidationentry    #4338      +/-   ##
=======================================================================
+ Coverage                                28.46%   28.97%   +0.51%     
=======================================================================
  Files                                      495      497       +2     
  Lines                                    58271    58833     +562     
=======================================================================
+ Hits                                     16585    17047     +462     
- Misses                                   38662    38684      +22     
- Partials                                  3024     3102      +78     

Comment thread staker/mel_validator.go Outdated
Copy link
Copy Markdown
Contributor

@ganeshvanahalli ganeshvanahalli left a comment

Choose a reason for hiding this comment

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

LGTM

@ganeshvanahalli ganeshvanahalli merged commit 656284b into mel-validator-createvalidationentry Feb 13, 2026
15 of 17 checks passed
@ganeshvanahalli ganeshvanahalli deleted the raul/mel-block-validator-enabled branch February 13, 2026 16:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants