fix(security): pin evm to the deployed commit, not the merged tip (mainnet/v36) - #4639
Merged
Merged
Conversation
…innet/v36) #4637 pinned the squash-merged release/v35 tip (51190f04), which carries the module-account guard re-gated on the chain's blocked-receive policy: delta.Sign() != 0 && k.bankWrapper.BlockedAddr(cosmosAddr) Live v36.0.6 runs the earlier form, which rejects any module account: delta.Sign() != 0 && acct is sdk.ModuleAccountI ZetaChain's blocked-receive set is a strict subset of its module accounts (x/fungible, x/crosschain and emissions are deliberately not blocked), so for an unblocked module account with a non-zero delta the two forms take different branches -- reject vs. mint/burn. That is a consensus-breaking difference and must not ship as a v36.0.x patch. Repins to 3e5f8e53, the commit v36.0.6 was built from, restoring an exact behavioural match with the deployed binary. The blocked-receive guard is still a wanted improvement; it needs its own coordinated upgrade. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
morde08
approved these changes
Sep 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Repins
cosmos/evmto the commit live v36.0.6 was built from.Why
#4637 pinned the squash-merged
release/v35tip. That tip includes the follow-up commit re-gating the module-account guard on the chain's blocked-receive policy:ZetaChain's blocked-receive set is a strict subset of its module accounts —
x/fungible,x/crosschainand emissions are deliberately not blocked. So for an unblocked module account with a non-zero delta the two forms take different branches: reject vs. mint/burn. Same input, different state transition — consensus-breaking, and it cannot ship as av36.0.xpatch.The private node PR pinned
3e5f8e53deliberately for this reason; the blocked-receive guard was always meant to ship separately as a coordinated upgrade. Repinning to the merged tip collapsed that separation, because the squash merge made the pre-gating commit unselectable fromrelease/v35.The guard change is still wanted — it fixes real breakage around sends to emissions — just not in a patch release.
Note
3e5f8e53is reachable via thesec/mainnet-v36-completebranch onzeta-chain/evm. Do not delete that branch while this pin is live, or tag the commit to make it permanent.Verification
go build ./cmd/zetacoredgreen. Guard confirmed as theisModuleform in the downloaded module, not just by SHA.Note
High Risk
Wrong EVM fork semantics directly affect consensus state transitions for module-account balance updates; correct pinning is security-critical for patch releases.
Overview
Repins the
github.com/cosmos/evmreplace fromzeta-chain/evmcommit51190f042d34back to3e5f8e5337fa, matching what v36.0.6 on mainnet actually runs.go.sumis updated for the new pseudo-version.This reverses a pin that tracked the squash-merged
release/v35tip, which pulled in blocked-receive gating on balance deltas for module accounts. On ZetaChain, blocked-receive is a strict subset of module accounts, so that newer logic can reject transfers the live binary would mint/burn—a consensus-breaking divergence unsuitable for av36.0.xpatch. The guard change remains intended for a later coordinated upgrade.Reviewed by Cursor Bugbot for commit 55f3dae. Configure here.
Greptile Summary
Repins the Cosmos EVM replacement to the commit used by deployed v36.0.6, preserving patch-release consensus behavior.
github.com/cosmos/evmreplacement from51190f042d34to3e5f8e5337fa.Confidence Score: 5/5
The PR appears safe to merge because it restores the deployed EVM revision without changing the module dependency graph.
The replacement version and checksums are internally consistent, and no reachable build, runtime, consensus, or security regression caused by the repin was established.
Important Files Changed
Reviews (1): Last reviewed commit: "fix(security): pin evm to the deployed c..." | Re-trigger Greptile