Repository navigation
Releases
Solidity Contracts v4.0.0-rc.2
Description
This release candidate follows the repository's move from cosmos/ibc-contracts to lfdt-ibc/ibc-contracts. It contains no contract logic changes since v4.0.0-rc.1. It is cut so that integrators can test against the new paths before the final v4.0.0 release. For the full set of v4.0.0 features and breaking changes, see the rc.1 release notes.
Repository Move
- New home: the repository now lives at
github.com/lfdt-ibc/ibc-contracts. GitHub redirects the oldcosmos/ibc-contractsURLs, but please point git remotes, Foundry/Soldeer or npm git dependencies, and CI references at the new location. - Go bindings module path: the
go-abigenmodule is nowgithub.com/lfdt-ibc/ibc-contracts/packages/go-abigen. Go consumers must update their imports andgo.mod. Go refuses to fetch a module from a path that differs from the one it declares, so the old path will not resolve to this or any later version. - Spec links: NatSpec and comment links to the IBC specs now point to
lfdt-ibc/ibc. These are comment-only changes, so contract logic and ABIs are unchanged. - Release provenance: release assets are now attested and signed by workflows in
lfdt-ibc/ibc-contracts, using the shared actions inlfdt-ibc/ibc. When verifying assets, use the new repository, e.g.gh attestation verify <asset> --repo lfdt-ibc/ibc-contracts.
Other Changes
- CI moved to GitHub-hosted runners and gained a dependency review workflow. A
NOTICEfile, issue/PR templates and updatedCODEOWNERSwere added. Foundry toolchain and other dependencies were bumped.
This is a pre-release intended for testing and integration feedback before the final v4.0.0 release.
What's Changed
- chore(deps): bump cachix/install-nix-action from 31.11.2 to 31.11.3 by @dependabot[bot] in #1238
- chore(deps): bump google.golang.org/grpc from 1.84.0 to 1.85.0 in /e2e/interchaintestv8 by @dependabot[bot] in #1234
- ci: replace Depot runners with GitHub-hosted ubuntu-24.04 (minimal) by @gjermundgaraba in #1243
- ci: parallel E2E builds and Foundry jobs on GitHub-hosted runners by @gjermundgaraba in #1244
- ci: Add 'Dependency Review' workflow by @dianab-cl in #1241
- chore(deps): bump docker/login-action from 4.6.0 to 4.7.0 by @dependabot[bot] in #1239
- chore(deps): bump foundry-rs/foundry-toolchain from 1.9.1 to 1.9.2 by @dependabot[bot] in #1235
- chore: Add issue/PR templates + label set by @dianab-cl in #1247
- chore: Add NOTICE file with copyright information by @dianab-cl in #1242
- chore(e2e): bump kurtosis to 1.22.2 and ethereum-package by @srdtrk in #1248
- chore(deps): bump github.com/ethereum/go-ethereum from 1.17.8 to 1.17.10 in /tools/compute-ift-addresses by @dependabot[bot] in #1237
- chore: Replace asset image by @dianab-cl in #1260
- chore: Add md files by @dianab-cl in #1261
- chore: Update CODEOWNERS to reflect new maintainers by @victorlepri in #1263
- chore: Rename org to lfdt-ibc by @dianab-cl in #1264
- chore: Fix e2e after org rename by @dianab-cl in #1282
New Contributors
- @victorlepri made their first contribution in #1263
Full Changelog: solidity-v4.0.0-rc.1...solidity-v4.0.0-rc.2
Solidity Contracts v4.0.0-rc.1
Description
This release candidate is the first Solidity IBC release since the contracts moved into their own ibc-solidity/ directory and the repository was renamed to cosmos/ibc-contracts. It is focused on new light client support, end-to-end pausability and rate limiting.
Features
- Besu light client:
BesuLightClientis a single contract that verifies both Besu IBFT 2.0 and QBFT chains in header-validator mode. It uses OpenZeppelin's RLP and trie proof libraries for membership and non-membership proofs, stores only consensus state hashes to save gas, and supports a configurable trust level, trusting period and max clock drift. Misbehaviour is permissionless: the client freezes on double signs, time non-monotonicity, sub-second block times, and validator set changes that could not come from a single valid chain. - IBCMulticall: a standalone, AccessManaged batcher for relayers in the style of Multicall3's
aggregate3. Each call in a batch can be allowed to fail without reverting the rest, so a batch still lands when, for example, IFT rate limits only fit some of its refunds. - Pausing across the stack: following the pausability ADR,
ICS26Routercan pause app and client registration (the packet lifecycle is not pausable), light clients can be paused through the router'sAccessManager, and the reference IFT implementations can pause bridge transfers, mints and refunds. - IFT rate limits: IFT tokens now support per-token inbound and outbound rate limits.
- IFT bridge hooks:
IFTBaseUpgradeableadds the internal hooks_beforeIFTTransfer,_beforeIFTMintand_beforeIFTRefund, so third-party tokens can extend the bridge flows. - IFTOwnable2Step: a new IFT reference implementation that uses OpenZeppelin's two-step ownership transfer.
Improvements
- Light clients bound to ICS26:
SP1ICS07Tendermint,AttestationLightClientandBesuLightClientdrop their ownAccessControlandPROOF_SUBMITTER_ROLE. They only accept calls from theICS26Routerthey are bound to and are paused through itsAccessManagerwithPAUSER_ROLEandUNPAUSER_ROLE. The constructor'sroleManagerparameter is replaced byics26Routerin the same position. - Proof verification through the router:
ICS26RoutergainsRELAYER_ROLE-restrictedverifyMembershipandverifyNonMembershiprouting functions. - Restrictable registration: the permissionless
addIBCApp(address)andaddClientoverloads are nowrestricted.DeployAccessManagerWithRolesmaps them toPUBLIC_ROLE, so they stay public by default but can now be restricted. - ICS27Account:
delegateExecutehas been removed. - Cleanup: the v1 to v2 migration functions (
initializeV2) andICS26AdminsDeprecatedare removed now that mainnet has been upgraded, and SPDX headers are now consistentlyApache-2.0, matching the repository license. - Tooling and testing: solc (v0.8.37), SP1 (v6.9.0), forge-std, Solhint and Prettier have been updated. Gas benchmarks are now generated automatically, and the integration suites run on the Besu light client and, in the shadowfork tests, against the upgraded mainnet stack.
Bug Fixes
- ICS27GMP out of gas: the relay now fails, instead of writing an error acknowledgement, when the GMP call runs out of gas. This prevents a relayer from permanently failing a packet by picking a low gas limit.
Breaking Changes and Upgrading
This release includes API-breaking changes: the v1 to v2 migration functions (initializeV2) and ICS26AdminsDeprecated are removed, ICS27Account.delegateExecute is removed, light client constructors and access control change as described above, and the permissionless addIBCApp(address) and addClient overloads are now restricted. DeployAccessManagerWithRoles maps them to PUBLIC_ROLE, so they stay public by default but can now be restricted. Existing deployments can be upgraded without reinitializers, but the AccessManager target roles must be updated after the upgrade (accessManagerSetTargetRoles and accessManagerSetMulticallRoles). Otherwise the newly restricted functions default to ADMIN_ROLE. Light clients are not upgradeable, so they need to be redeployed and migrated.
This is a pre-release intended for testing and integration feedback before the final v4.0.0 release. For the full changelog, see the section below.
What's Changed
- chore: post mainnet upgrade chores by @srdtrk in #1063
- refactor(solidity): move ibc-solidity to its own dir by @srdtrk in #1064
- chore: add evm ift send call constructor go-abigen by @Eric-Warehime in #1070
- chore: Reconcile license declarations and enforce SPDX headers by @dianab-cl in #1085
- feat(solidity): add IBFT 2.0 and QBFT light clients by @gjermundgaraba in #1092
- imp(solidity/besu): replace the novel RLP and trie proof implementation with openzeppelin by @srdtrk in #1116
- chore(solidity/besu): replace if-revert pattern with require by @srdtrk in #1117
- chore(solidity): added automatic benchmark generation and updated justfile by @srdtrk in #1118
- feat(solidity/besu): add non-membership support by forking openzeppelin by @srdtrk in #1119
- imp(solidity/besu): gas improvement by storing hashed consensus states by @srdtrk in #1123
- imp(solidity/besu): decouple MPT proofs and update client by @srdtrk in #1133
- chore: pin foundry to stable and bump nix deps by @gjermundgaraba in #1134
- imp(solidity/besu): reject zero trusting period by @srdtrk in #1135
- imp(solidity/besu): reject unknown commit seal signers by @srdtrk in #1136
- refactor(solidity/besu): integrate openzeppelin Math and SafeCast libraries by @srdtrk in #1137
- chore(solidity/besu): stop inheriting messages and restrict internal functions to private by @srdtrk in #1139
- test(solidity/besu): added a simulation testsuite for qbft by @srdtrk in #1146
- imp(solidity/ift): implement rate limits by @srdtrk in #1147
- feat(solidity/besu): freeze client on double sign misbehaviour by @srdtrk in #1148
- feat(solidity/besu): freeze client on time non-monotonicity misbehaviour by @srdtrk in #1149
- imp(solidity/besu): add configurable trust level for trusted validator overlap by @srdtrk in #1159
- imp(besu): gas savings by requiring commit seals sorted by signer by @srdtrk in #1160
- chore(solidity): bump solc to v0.8.37 by @srdtrk in #1162
- chore(solidity): disable gas-strict-inequalities solhint rule project wide by @srdtrk in #1163
- imp(solidity/besu): take initial client and consensus state in constructor by @srdtrk in #1164
- feat(solidity/besu): permissionless misbehaviour with header evidence by @srdtrk in #1165
- test(solidity/besu): cover decoding, seal, proof, access control and backfill paths by @srdtrk in #1171
- test(solidity): run integration suites on Besu QBFT/IBFT2 light clients by @srdtrk in #1182
- feat(solidity/ift): add IFTOwnable2Step implementation by @srdtrk in #1186
- imp(solidity): add bridge hooks to IFTBaseUpgradeable by @srdtrk in #1187
- imp(solidity/ics26): restrict public
addClientandaddIBCAppvia AccessManager by @srdtrk in #1193 - chore: upgrade sp1 to v6.9.0 by @srdtrk in #1195
- imp(solidity/ift): add pause to reference IFT implementations by @srdtrk in #1196
- feat(solidity): add IBCMulticall and relay EVM destinations through it by @srdtrk in #1205
- imp(solidity)!: bind light clients to ICS26 and pause them via its authority by @srdtrk in #1209
- imp(solidity/besu): freeze on validator set changes larger than the height difference by @srdtrk in #1211
- imp(solidity/besu): freeze on sub-second block times between consensus states by @srdtrk in #1212
- docs(solidity/besu): explain why the clock drift check is not in _verifyHeader by @srdtrk in #1215
- imp(solidity/besu): reject zero and empty trie state roots by @srdtrk in #1216
- imp(solidity/besu): check headers against stored consensus states in conflicting headers misbehaviour by @srdtrk in #1217
- imp(solidity/besu): us...
Eureka Relayer v0.7.1
Description
This release includes a bug fix to the eureka relayer (rebranded to proof-api in v0.7.1) by bumping sp1-sdk.
What's Changed
Full Changelog: relayer-v0.7.0...relayer-v0.7.1
Solidity Contracts v3.0.2
Description
This release contains improvements to the off-chain IBCRolesLib library.
What's Changed
- imp(solidity/IBCRolesLib): added missing role selectors by @gjermundgaraba in #1046
Full Changelog: solidity-v3.0.1...solidity-v3.0.2
Proof API v0.8.1
Description
This release adds a compatibility module for wasm ethereum light client v1.3.0 and includes a bug fix. For the full changelog, see the section below.
What's Changed
- ci: build proof-api multiarch image by @gjermundgaraba in #1042
- chore: fix clippy issues by @srdtrk in #1049
- chore(proof-api): add eth light client v1.3 compat by @srdtrk in #1050
- fix(utils): set a User-Agent on the Tendermint RPC client by @gjermundgaraba in #1052
Full Changelog: proof-api-v0.8.0...proof-api-v0.8.1
Solidity Contracts v3.0.1
Description
This release updates ICS27GMP contract to be pausable. This does not break API nor require a new initializer.
What's Changed
Full Changelog: solidity-v3.0.0...solidity-v3.0.1
SP1 Programs v2.0.0
Description
This release introduces refactors and updates to the dependencies used by the sp1 programs. We have updated sp1 from v5 line to v6.1.
What's Changed
- chore: dependency and linting updates by @srdtrk in #1028
- test(tendermint-light-client): add unit tests for
check_for_misbehaviourby @mariuszzak in #1021 - fix(solana/ics07): client state max drift unused in misbehavior by @vaporif in #1016
- chore: migrate sp1 from v5 to v6.1 by @mariuszzak in #952
- deps(solana): switch tendermint-rs from fork to upstream by @mariuszzak in #929
- fix(solana): ift action items by @vaporif in #927
- feat: implement Solana IBC by @cernicc in #868
- chore: simplify fixtures generation logic for tendermint light client tests by @mariuszzak in #754
- fix(test): use trusted consensus state timestamp for test timing validation by @mariuszzak in #714
- test: add fixture tests for
tendermint-light-clientpackages by @mariuszzak in #654 - feat: chain agnostic tendermint light client functions by @vaporif in #589
- chore: updated workspace dependencies by @srdtrk in #582
- refactor: extract the logic shared across sp1 and solana programs by @mariuszzak in #576
New Contributors
- @MozirDmitriy made their first contribution in #586
- @VolodymyrBg made their first contribution in #620
- @MamunC0der made their first contribution in #764
- @ericHgorski made their first contribution in #866
- @dependabot[bot] made their first contribution in #886
- @aljo242 made their first contribution in #895
- @bpiv400 made their first contribution in #950
- @dianab-cl made their first contribution in #1023
- @dhfang made their first contribution in #1033
Full Diff: sp1-programs-v1.2.0...sp1-programs-v2.0.0
Proof API v0.8.0
Description
This release renames relayer-api to proof-api and expands the stack with initial Solana IBC support, IFT, GMP, and attestations support. It also bumps the dependencies, includes bug fixes, and cleanups
What's Changed
- fix(proof-api): enable rustls TLS feature on alloy so HTTPS RPCs work by @dhfang in #1034
- refactor: rename relayer to proof-api by @srdtrk in #1030
- chore: dependency and linting updates by @srdtrk in #1028
- fix(solana/test): adjust attestor timing by @vaporif in #1019
- fix(solana): nix devshell + build by @vaporif in #1017
- feat(solana/access-manager): add two-step upgrade authority transfer mechanism by @mariuszzak in #1013
- fix(solana): gmp empty ack by @vaporif in #1008
- fix(solana): require upgrade authority signer in initialize instructions by @mariuszzak in #1002
- fix(solana): timeout timestamp conversions by @vaporif in #992
- fix(solana/ift): decouple finalize_transfer from bridge lifecycle by @mariuszzak in #972
- fix(solana/gmp): remove payer_position, add prefund_lamports by @mariuszzak in #962
- fix(solana): relayer controlled metadata in non inline mode validation by @vaporif in #961
- feat(solana): implement SolanaIFTSendCallConstructor by @mariuszzak in #959
- chore: remove wasm attestation client by @srdtrk in #958
- chore: migrate sp1 from v5 to v6.1 by @mariuszzak in #952
- feat(solana): add account validation and simplify PDA seeds by @mariuszzak in #940
- feat(solana): remove duplicated chain_id from ICS07 AppState by @mariuszzak in #935
- feat(solana): remove GMP_PORT_ID from app_state PDA seeds by @mariuszzak in #934
- fix(solana): enforce relayer role on chunk uploads, add RecvPacket seeds validation by @mariuszzak in #932
- feat(solana): harden send_call signer and IFT security by @mariuszzak in #930
- fix(solana): ift action items by @vaporif in #927
- feat(solana): tighten account validation and CPI security, refactor Solana programs by @mariuszzak in #926
- feat(solana, ift): replace access manager with direct admin, add pause, rate limits, and admin mint by @vaporif in #922
- chore: docker and rm sp1 dep by @johnnylarner in #921
- chore(relayer): remove unused config parameters by @srdtrk in #920
- feat(relayer): enable solana-to-cosmos attestor by @srdtrk in #912
- feat(solana): implement Attestation LC by @mariuszzak in #910
- docs(relayer): updated the proof-api docs by @srdtrk in #900
- fix(solana): formatting by @vaporif in #885
- fix: attestor timeout by @vaporif in #883
- feat(relayer): add support for attestation by @cernicc in #880
- feat(solana): add IFT program by @vaporif in #873
- feat(solana): gmp result pda by @vaporif in #870
- feat: implement Solana IBC by @cernicc in #868
- docs: update readme for proof relayer api by @NotJeremyLiu in #867
- chore: lint clippy by @srdtrk in #862
- chore: bumped rust dependencies by @srdtrk in #832
- feat: Relayer tracing by @DeshErBojhaa in #681
New Contributors
- @ericHgorski made their first contribution in #866
- @dependabot[bot] made their first contribution in #886
- @aljo242 made their first contribution in #895
- @bpiv400 made their first contribution in #950
- @dianab-cl made their first contribution in #1023
- @dhfang made their first contribution in #1033
Full Diff: relayer-v0.7.0...proof-api-v0.8.0-rc.1
SP1 Programs v2.0.0-rc.2
Description
This release introduces refactors and updates to the dependencies used by the sp1 programs. We have updated sp1 from v5 line to v6.1.
What's Changed
- chore: dependency and linting updates by @srdtrk in #1028
- test(tendermint-light-client): add unit tests for
check_for_misbehaviourby @mariuszzak in #1021 - fix(solana/ics07): client state max drift unused in misbehavior by @vaporif in #1016
- chore: migrate sp1 from v5 to v6.1 by @mariuszzak in #952
- deps(solana): switch tendermint-rs from fork to upstream by @mariuszzak in #929
- fix(solana): ift action items by @vaporif in #927
- feat: implement Solana IBC by @cernicc in #868
- chore: simplify fixtures generation logic for tendermint light client tests by @mariuszzak in #754
- fix(test): use trusted consensus state timestamp for test timing validation by @mariuszzak in #714
- test: add fixture tests for
tendermint-light-clientpackages by @mariuszzak in #654 - feat: chain agnostic tendermint light client functions by @vaporif in #589
- chore: updated workspace dependencies by @srdtrk in #582
- refactor: extract the logic shared across sp1 and solana programs by @mariuszzak in #576
New Contributors
- @MozirDmitriy made their first contribution in #586
- @VolodymyrBg made their first contribution in #620
- @MamunC0der made their first contribution in #764
- @ericHgorski made their first contribution in #866
- @dependabot[bot] made their first contribution in #886
- @aljo242 made their first contribution in #895
- @bpiv400 made their first contribution in #950
- @dianab-cl made their first contribution in #1023
- @dhfang made their first contribution in #1033
Proof API v0.8.0-rc.1
Description
This release renames relayer-api to proof-api and expands the stack with initial Solana IBC support, IFT, GMP, and attestations support. It also bumps the dependencies, includes bug fixes, and cleanups
What's Changed
- fix(proof-api): enable rustls TLS feature on alloy so HTTPS RPCs work by @dhfang in #1034
- refactor: rename relayer to proof-api by @srdtrk in #1030
- chore: dependency and linting updates by @srdtrk in #1028
- fix(solana/test): adjust attestor timing by @vaporif in #1019
- fix(solana): nix devshell + build by @vaporif in #1017
- feat(solana/access-manager): add two-step upgrade authority transfer mechanism by @mariuszzak in #1013
- fix(solana): gmp empty ack by @vaporif in #1008
- fix(solana): require upgrade authority signer in initialize instructions by @mariuszzak in #1002
- fix(solana): timeout timestamp conversions by @vaporif in #992
- fix(solana/ift): decouple finalize_transfer from bridge lifecycle by @mariuszzak in #972
- fix(solana/gmp): remove payer_position, add prefund_lamports by @mariuszzak in #962
- fix(solana): relayer controlled metadata in non inline mode validation by @vaporif in #961
- feat(solana): implement SolanaIFTSendCallConstructor by @mariuszzak in #959
- chore: remove wasm attestation client by @srdtrk in #958
- chore: migrate sp1 from v5 to v6.1 by @mariuszzak in #952
- feat(solana): add account validation and simplify PDA seeds by @mariuszzak in #940
- feat(solana): remove duplicated chain_id from ICS07 AppState by @mariuszzak in #935
- feat(solana): remove GMP_PORT_ID from app_state PDA seeds by @mariuszzak in #934
- fix(solana): enforce relayer role on chunk uploads, add RecvPacket seeds validation by @mariuszzak in #932
- feat(solana): harden send_call signer and IFT security by @mariuszzak in #930
- fix(solana): ift action items by @vaporif in #927
- feat(solana): tighten account validation and CPI security, refactor Solana programs by @mariuszzak in #926
- feat(solana, ift): replace access manager with direct admin, add pause, rate limits, and admin mint by @vaporif in #922
- chore: docker and rm sp1 dep by @johnnylarner in #921
- chore(relayer): remove unused config parameters by @srdtrk in #920
- feat(relayer): enable solana-to-cosmos attestor by @srdtrk in #912
- feat(solana): implement Attestation LC by @mariuszzak in #910
- docs(relayer): updated the proof-api docs by @srdtrk in #900
- fix(solana): formatting by @vaporif in #885
- fix: attestor timeout by @vaporif in #883
- feat(relayer): add support for attestation by @cernicc in #880
- feat(solana): add IFT program by @vaporif in #873
- feat(solana): gmp result pda by @vaporif in #870
- feat: implement Solana IBC by @cernicc in #868
- docs: update readme for proof relayer api by @NotJeremyLiu in #867
- chore: lint clippy by @srdtrk in #862
- chore: bumped rust dependencies by @srdtrk in #832
- feat: Relayer tracing by @DeshErBojhaa in #681
New Contributors
- @ericHgorski made their first contribution in #866
- @dependabot[bot] made their first contribution in #886
- @aljo242 made their first contribution in #895
- @bpiv400 made their first contribution in #950
- @dianab-cl made their first contribution in #1023
- @dhfang made their first contribution in #1033
Full Diff: relayer-v0.7.0...proof-api-v0.8.0-rc.1