Skip to content

v4.0.2: CometBFT 0.38.23 (reindex), IAVL 1.2.3 (perf regression fix), x/group - #212

Merged
ECHOAD merged 8 commits into
envadiv:v4.0.xfrom
Ninjaxan:feat/v4.0.2-cometbft-iavl-group
Jul 10, 2026
Merged

v4.0.2: CometBFT 0.38.23 (reindex), IAVL 1.2.3 (perf regression fix), x/group#212
ECHOAD merged 8 commits into
envadiv:v4.0.xfrom
Ninjaxan:feat/v4.0.2-cometbft-iavl-group

Conversation

@Ninjaxan

Copy link
Copy Markdown

Passage v4.0.2 — CometBFT 0.38.23, IAVL 1.2.3, x/group

Follow-up to the v4.0.1 emergency fix (#210, #211). Three changes, all validated by real-broadcast fork-testing against forked mainnet state (the same harness that caught the v4.0.0/v4.0.1 defects).

Changes

  1. CometBFT v0.38.12 → v0.38.23 — restores working tx_index reindexing and picks up the accumulated 0.38.x fixes. Go directive moves 1.21 → 1.22.11 (transitive requirement); cosmos-sdk stays pinned at v0.50.13.
  2. IAVL v1.2.2 → v1.2.3 (vendored fork) — upstream v1.2.3 is a single-line fix (iavl#1018): getFirstVersion() never cached its result after scanning legacy versions, a significant performance regression on chains upgraded from iavl 0.x — which describes Passage post-v4.0.0. Applied to the vendored iavl-fork on top of the existing empty-store load fix (no overlap; verified against git diff v1.2.2 v1.2.3 upstream).
  3. x/group — new module + store. Wired per SDK 0.50 conventions (keeper with MsgServiceRouter + group.DefaultConfig(), EndBlocker + InitGenesis ordering, gRPC/AutoCLI via module manager). Upgrade handler v4.0.2 uses StoreUpgrades{Added: ["group"]}; RunMigrations InitGenesis-es the module automatically.

Also includes the v4.0.1 upgrade-handler registration (inert on mainnet — no gov plan by that name ever existed; kept for lineage completeness).

Verification (real forked mainnet state, not generate-only)

  • Gov MsgSoftwareUpgrade (plan name v4.0.2) submitted, voted, chain halted at plan height, binary swapped, node logged applying upgrade "v4.0.2" and resumed producing blocks.
  • Module version map post-upgrade: group: 2.
  • Regression broadcasts all code 0: bank send, staking delegate, distribution withdraw-rewards.
  • x/group full lifecycle all code 0: create-group-with-policy → fund policy account → group proposal carrying a MsgSend from the policy address → vote → exec → policy balance decreased by exactly the proposed amount.
  • gRPC-gateway REST verified: /cosmos/group/v1/groups serves the created group.

Upgrade coordination

New store ⇒ consensus-breaking ⇒ requires a coordinated gov software-upgrade (normal path; gov works on v4.0.1). Release binaries + checksums will follow on the release page.

🤖 Generated with Claude Code

Ninjaxan and others added 8 commits July 9, 2026 14:11
MakeTestEncodingConfig built the InterfaceRegistry with the codec-less
types.NewInterfaceRegistry(). Under Cosmos SDK v0.50 the registry must carry
an address codec via SigningOptions, otherwise every message that references a
validator (valoper) address — MsgDelegate, MsgUndelegate, MsgBeginRedelegate,
MsgWithdrawDelegatorReward — fails with:

  InterfaceRegistry requires a proper address codec implementation to do
  address conversion

This encoding config feeds both the CLI (app.MakeEncodingConfig) and the node
(NewPassageApp -> SetInterfaceRegistry), so the missing codec silently breaks
all staking and distribution transactions network-wide while plain bank sends
keep working. Construct the registry with NewInterfaceRegistryWithOptions and
the pasg / pasgvaloper bech32 codecs.

Verified: go build passes and the CLI now generates MsgWithdrawDelegatorReward
and MsgDelegate txs that previously errored.
…(ibc-go v8 no longer bundles them; unregistered ClientState broke IBC client-state decoding)
The 0.47->0.50 port dropped cosmwasm_1_3 from availableCapabilities
(v3.0.0 had "iterator,staking,stargate,cosmwasm_1_1,cosmwasm_1_2,
cosmwasm_1_3"; v4.0.0 shipped without cosmwasm_1_3). Contracts
requiring 1_3 features that v3.0.0 accepted at store-code would be
rejected on v4.0.0. wasmvm 1.5.x fully supports cosmwasm_1_3.
Restores exact v3.0.0 parity; no new capabilities introduced.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
No-op RunMigrations (v4.0.1 fixes are binary-only: address codec, ibctm/solomachine registration, cosmwasm_1_3 capability; no state migration, no new stores). Registers const Name=v4.0.1 so a gov MsgSoftwareUpgrade with plan.name=v4.0.1 applies instead of halting with no-handler. Verified: app.UpgradeKeeper.HasHandler(v4.0.1)==true; 22/22 msg+query battery green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ccountDecorator on every tx)

The 0.47->0.50 ante rewrite left HandlerOptions.Codec unset, so NewBlockAccountDecorator got a nil codec and cdc.GetMsgV1Signers nil-derefed on every non-simulate tx. Masked on v4.0.0 because signer resolution failed earlier (no address codec); once the InterfaceRegistry codec is fixed, execution reaches the custom ante and panics. Verified on a fork of real mainnet state: v4.0.0 bank send = code 1, v4.0.1 (with this + the codec fix) = code 0, included in a block.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ersion perf regression), reconcile empty-store patch
@Ninjaxan

Copy link
Copy Markdown
Author

Reproducible release binaries for this PR are published at https://github.com/Ninjaxan/Passage3D/releases/tag/v4.0.2 — static musl builds via cosmossdk/rbuilder at tag commit 6bfe7c4:

e46174f14a72efe8be5bdd004144e8e8122cf620a1736b710310bb5f1acc30a7  passage-4.0.2-linux-amd64
b6e139d44d14141cc3aa1e424ba4ecaf35af01cb5af1912b6e98e930fcb9aa77  passage-4.0.2-linux-arm64

Feel free to mirror these on an official envadiv release (rbuilder from the tag should reproduce them byte-identical, same as v4.0.1).

Gov proposal #24 scheduling this upgrade at height 20114000 (~Mon Jul 20 15:00 UTC) is in voting until Jul 17 ~19:54 UTC. Validated by real-broadcast fork-test on forked mainnet state: gov upgrade applies (applying upgrade "v4.0.2"), bank/staking/distribution regression txs all code 0, and a full x/group lifecycle (create group+policy → proposal executing a MsgSend from the policy account → vote → exec) all code 0 with balances moving correctly.

@ECHOAD
ECHOAD merged commit 521661c into envadiv:v4.0.x Jul 10, 2026
2 of 5 checks passed
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.

3 participants