Skip to content

Remove live IBC transfer module - #3981

Merged
masih merged 6 commits into
mainfrom
masih/transfer-be-gone
Aug 25, 2026
Merged

masih merged 6 commits into
mainfrom
masih/transfer-be-gone

Conversation

@masih

@masih masih commented Aug 21, 2026 •

Copy link
Copy Markdown
Collaborator

Remove ICS-20 module wiring, APIs, CLI commands, and CosmWasm integration.

Retire the live IBC precompile while preserving legacy implementations and codecs for historical tracing and transaction decoding. Keep the transfer store and module account mounted for historical state safety, and remove its module version during the v6.7 upgrade.

Remove ICS-20 module wiring, APIs, CLI commands, and CosmWasm
integration.

Retire the live IBC precompile while preserving legacy implementations
and codecs for historical tracing and transaction decoding. Keep the
transfer store and module account mounted for historical state safety,
and remove its module version during the v6.7 upgrade.
@github-actions

github-actions Bot commented Aug 21, 2026 •

Copy link
Copy Markdown

The latest Buf updates on your PR. Results from workflow Buf / buf (pull_request).

BuildFormatLintBreakingUpdated (UTC)
✅ passed✅ passed✅ passed✅ passedAug 25, 2026, 8:39 AM

@codecov

codecov Bot commented Aug 21, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.70968% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 57.58%. Comparing base (776d565) to head (5817e97).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
precompiles/ibc/ibc.go 68.75% 3 Missing and 2 partials ⚠️
sei-wasmd/x/wasm/keeper/handler_plugin_encoders.go 83.33% 2 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #3981      +/-   ##
==========================================
- Coverage   59.08%   57.58%   -1.50%     
==========================================
  Files        2305     2225      -80     
  Lines      197021   185842   -11179     
==========================================
- Hits       116402   107011    -9391     
+ Misses      69858    69048     -810     
+ Partials    10761     9783     -978     
Flag Coverage Δ
sei-chain-pr 64.19% <88.70%> (?)
sei-db 69.80% <ø> (ø)
sei-db-state-db ?

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
app/app.go 71.65% <100.00%> (-0.27%) ⬇️
app/precompiles.go 100.00% <ø> (ø)
app/upgrades.go 45.28% <100.00%> (+1.05%) ⬆️
docs/swagger/statik.go 100.00% <ø> (ø)
giga/deps/xevm/keeper/address.go 84.31% <ø> (-2.58%) ⬇️
giga/deps/xevm/keeper/keeper.go 61.63% <100.00%> (-0.17%) ⬇️
precompiles/ibc/setup.go 91.66% <100.00%> (+0.75%) ⬆️
precompiles/utils/expected_keepers.go 100.00% <ø> (ø)
sei-db/common/keys/store_keys.go 100.00% <ø> (ø)
sei-wasmd/app/app.go 78.09% <100.00%> (-1.03%) ⬇️
... and 11 more

... and 261 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@masih
masih marked this pull request as ready for review August 21, 2026 17:45
@masih
masih requested a review from codchen August 21, 2026 17:45
@cursor

cursor Bot commented Aug 21, 2026 •

Copy link
Copy Markdown

PR Summary

High Risk
Disables ICS-20 cross-chain transfers and related APIs/precompile wiring—a breaking protocol change affecting IBC relayers, CosmWasm contracts, and indexers that relied on transfer queries on full nodes.

Overview
Removes live ICS-20 token transfer from the chain binary: the transfer keeper, app module, IBC port route, params subspace, and genesis wiring are dropped, along with CosmWasm and EVM keeper dependencies and IBC-related precompile keeper injection.

State compatibility is preserved by keeping the transfer KV store in kvStoreKeyNames, retaining the transfer module account permissions, materializing that module account at genesis via initializeRetiredTransferModuleAccount, and dropping only the module version entry on the v6.7 upgrade (alongside capability and feegrant). Tests assert the store stays writable and the retired module account remains present.

Operator and client impact is documented in CHANGELOG.md and README.md: v6.7 nodes no longer serve transfer queries, historical transfer tx decoding, or pre-v6.7 IBC precompile tracing—those need v6.6 freeze nodes. Swagger/OpenAPI entries for ibc/apps/transfer are removed to match the retired APIs.

Reviewed by Cursor Bugbot for commit 5817e97. Bugbot is set up for automated code reviews on this repo. Configure here.

Comment thread sei-ibc-go/modules/apps/transfer/keeper/keeper.go Outdated
Comment thread sei-ibc-go/modules/apps/transfer/keeper/metrics.go Outdated
Comment thread sei-ibc-go/modules/apps/transfer/keeper/params.go Outdated
Comment thread sei-wasmd/x/wasm/keeper/handler_plugin_encoders.go Outdated
@masih
masih force-pushed the masih/transfer-be-gone branch from 6f8297d to cd3c443 Compare August 24, 2026 11:44

@seidroid seidroid Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

The automated review did not complete; see the failing AI Review check for details.

masih added 3 commits August 24, 2026 13:57
Remove the remaining transfer keeper, codecs, protobufs, metrics, and
functional legacy IBC precompiles.

Route pre-v6.7 transfer history to v6.6 freeze nodes and map all IBC
precompile versions to the deterministic retirement tombstone. Retain
the transfer store and module account for state compatibility, along
with raw Wasm packet handling and callbacks.
# Conflicts:
#	sei-ibc-go/modules/apps/transfer/keeper/grpc_query.go
@masih
masih added this pull request to the merge queue Aug 25, 2026
Merged via the queue into main with commit ee27dd3 Aug 25, 2026
76 of 77 checks passed
@masih
masih deleted the masih/transfer-be-gone branch August 25, 2026 08:59
@masih masih mentioned this pull request Sep 24, 2026
revofusion pushed a commit to revofusion/sei-chain that referenced this pull request Sep 25, 2026
Precompile behaviour is selected by upgrade height, so the code every
precompile ran as `v6.7` has to be frozen before `main` can carry `v6.8`
behaviour. This is the `scripts/bump_version` output for that step, the
same preparatory PR as sei-protocol#3625 (v6.6) and sei-protocol#3961 (v6.7): every generated
precompile is archived into `legacy/v68`, and its `setup.go` and
`versions` file gain the new entry. `app/tags` gains `v6.8` in the same
PR, as sei-protocol#3961 did, because the two have to move together: once the
`versions` file lists `v6.8`, the generated `GetVersioned` map carries
both `latestUpgrade` and a literal `"v6.7"` key pointing at the archived
snapshot, and with `app/tags` still at `v6.7` the snapshot shadows the
live implementation. The archived `v6.7` code is not the current code
(for example the pointer precompile still had its creation path, removed
after the tag in sei-protocol#4230), so the shadowing changed historical
`debug_traceTransaction` replays in `evmrpc/tests`.

Appending to `app/tags` makes v6.7 to v6.8 the current boundary, so
`make new-upgrade-test FROM=v6.7 TO=v6.8` scaffolds the tagged boundary
tests. They assert the minimum for an upgrade that changes nothing yet:
an un-upgraded binary halts at the plan height, the handler applies
without changing the module version map, bank sends succeed on both
sides, and the offline source, target and reopen phases see the same
store set. The oracle removal in sei-protocol#4319 replaces them with its own
assertions.

The one hand-written generator change is in `archiveModule`, which now
skips an existing module that has no `versions` file instead of creating
one and archiving it. The retired `ibc` precompile is maintained by hand
as a tombstone (sei-protocol#3981) and has no `versions` file, so without the guard
the generator rewrote its `setup.go` down to a single `v6.8` entry and
`TestVersionedPrecompilesAreAllTombstones` failed. Brand-new modules
still get a `versions` file, since that path is keyed on `isNew`.
Re-running `go run ./scripts/bump_version` on this branch produces no
further changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants