You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Check that the Supernode implementation maintains the invariants on each of the main execution paths (including when starting from the initial, empty state):
Cross-validation succeeds.
Cross-validation fails.
Waiting for L2s to sync.
L1 reorg.
Collect all execution paths that are not covered by the above. Ensure that they are exceptional cases that, under our assumptions about L1/L2 behavior, either shouldn't happen or should be recovered from in time.
Check that when cross-validation returns with an error, any intermediate state changes are cleaned up.
Review implementation of ChainContainer (including VirtualNode and EngineController) and check for any potential issues when pulling L2 data.
Review implementation of L2 rewind procedure and check that it correctly resets the chains to the previous timestamp.
Review implementation of the DenyList and that it correctly reports invalidated blocks when queried by the VirtualNode.
Check correctness of Executing Message validity check, including same-timestamp validation (cycle check).
Check liveness: is there a scenario where the Supernode stops making progress?
Consider what happens when the L1 or the L2s reorg in the middle of a round of cross-validation. Identify each point where the L1/L2s are queried and might be inconsistent. Make sure there are proper consistency checks to maintain the invariants, or else that there is a mechanism for the protocol to recover from inconsistencies.
Check for low-level issues:
Arithmetic overflow/underflow.
Out-of-bounds array access.
Race conditions/other concurrency issues.
Interop-Filter Code Review
Check that the cross-unsafe validation mechanism works correctly and is consistent with the cross-safe validation implemented in the Supernode (but note that unlike the Supernode, the Interop-Filter does not perform same-timestamp cycle detection).
The Interop Filter must return FALSE (invalid) for invalid transactions. (High/Medium)
The Interop Filter must return TRUE (valid) for valid transactions. (Low)
Check that failsafe mode operates correctly.
When failsafe mode is enabled, the Interop Filter must return FALSE for all requests. (Low)
Verify LogsDBChainIngester.
LogsDBChainIngester correctly pulls information from the L2 chain.
LogsDBChainIngester correctly updates and queries the logs database.
Supernode Code Review
ChainContainer(includingVirtualNodeandEngineController) and check for any potential issues when pulling L2 data.DenyListand that it correctly reports invalidated blocks when queried by theVirtualNode.Interop-Filter Code Review
FALSE(invalid) for invalid transactions. (High/Medium)TRUE(valid) for valid transactions. (Low)FALSEfor all requests. (Low)LogsDBChainIngester.LogsDBChainIngestercorrectly pulls information from the L2 chain.LogsDBChainIngestercorrectly updates and queries the logs database.