Conversation
PR SummaryMedium Risk Overview The app pairs committed block metadata with a caller-owned state snapshot via Tests cover calls during a stalled finalize, the commit boundary, concurrent finalize + RPC, and commit-failure reporting. Reviewed by Cursor Bugbot for commit 1b2eaea. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want higher recall? High effort reviews run extra passes and find more bugs. A team admin can switch effort levels in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 1b2eaea. Configure here.
| changeSetEncoder: changeSetEncoder, | ||
| validators: slices.Clone(validators), | ||
| executor: utils.NewMutex(new(utils.Option[*evmonly.Executor])), | ||
| cursor: utils.NewMutex(&evmOnlyCursorState{}), |
There was a problem hiding this comment.
InitChain races committed-state readers
Low Severity
InitChain publishes the executor on settler before writing the committed cursor, and that write does not call Updated(). openCommittedState now reads settler without the executor lock, so a concurrent call can observe a zero gasLimit at height 0, or wait for committed.height that InitChain never signals.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 1b2eaea. Configure here.


On current main,
eth_callandeth_estimateGastake the executor lock and can wait behindFinalizeBlock; they can then fail while the finalized block awaits Commit. This ports suryuhh/sei-chain#3 to main after #4366 introduced asynchronous state commits.Each request now uses a point-in-time state snapshot whose height matches the last committed block's execution context. Requests can run while the next block executes. If state and block metadata are briefly out of step, the request waits; a failed state commit is still reported.
The application and executor packages pass under
-race. Tests cover calls during a stalled block, the Commit boundary, and a failed asynchronous write. The fork's response-rate benchmark used an older main; this port has not yet been load-benchmarked.