Repository navigation
Releases: cosmos/ibc-contracts
Release list
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
Solidity Contracts v3.0.0
Description
This release candidate brings several major improvements to Solidity IBC, focused on expanding application support, improving cross-chain token transfers, and simplifying the contract APIs ahead of the final v3 release.
The main addition is ICS27GMP, the new contract calls application. This enables generalized cross-chain contract execution through IBC, expanding Solidity IBC beyond token transfers into broader cross-chain application use cases.
This release also adds IFT, a new token transfer standard implementation. IFT is intended to support more flexible interoperability burn/mint pattern and will help pave the way for future Solana connectivity.
For chains that do not yet have a dedicated light client protocol, this release introduces an attestation multisig light client. This provides a practical verification path for additional ecosystems while dedicated light clients are still under development.
On the contracts side, OpenZeppelin AccessControl has been replaced with AccessManager, giving deployments a more explicit and flexible access management model. The release also includes API-breaking cleanup and simplifications, such as removing upgradeClient.
For Cosmos EVM integrations, this release adds ICS02PrecompileWrapper, which works with the cosmos/evm ICS02 precompile. This allows Solidity contracts to access ibc-go light clients through the precompile interface.
Several dependencies and development tools have also been updated, including OpenZeppelin Contracts, Foundry-related tooling, SP1, Solhint, NatSpec linting, formatting, and static analysis.
This is a pre-release intended for testing and integration feedback before the final v3.0.0 release. For the full changelog, see the section below.
What's Changed
- feat: add contract calls application by @srdtrk in #508
- test: added shadowfork testing by @srdtrk in #534
- chore: added natlint, a natspec linter by @srdtrk in #536
- imp(ethereum): remove deneb support by @srdtrk in #530
- imp: added a reference IBC-compatible ERC20 by @srdtrk in #539
- imp: use AccessManager for access control by @srdtrk in #554
- ci: add slither static analysis by @gjermundgaraba in #634
- chore: updated nix flakes to fix foundry by @srdtrk in #674
- chore: updated solhint to v6 and linted the repo by @srdtrk in #675
- chore: lint with new forge fmt by @srdtrk in #767
- imp(contracts): remove
upgradeClientby @srdtrk in #776 - chore(contracts): lint with
forge fmtby @srdtrk in #777 - chore: 'forge fmt' with 1.4.4 by @srdtrk in #807
- feat: added precompile light client for cosmos/evm by @srdtrk in #820
- imp(ics27): reverse lookup of AccountIdentifier by @srdtrk in #859
- feat: add attestation LC by @srdtrk in #861
- chore(docs): contracts readme by @ericHgorski in #866
- feat: implement IFT token standard in Solidity by @mariuszzak in #864
- test(e2e, ift): added test cases for IFT (Cosmos ↔ Evm + Cosmos ↔ Cosmos) by @mariuszzak in #876
- fix: validate receiver address in CosmosIFTSendCallConstructor by @srdtrk in #939
- feat(attestation): add domain separation to attestation light clients by @mariuszzak in #946
- chore: migrate sp1 from v5 to v6.1 by @mariuszzak in #952
- imp(contracts/ift): added nonReentrant to IFT functions by @srdtrk in #953
- imp(contracts/ics20): add more balance validation to permit2 transfers by @srdtrk in #954
- deps: update openzeppelin-contracts to v5.5.0 by @srdtrk in #955
- feat(solana): implement SolanaIFTSendCallConstructor by @mariuszzak in #959
- chore: dependency and linting updates by @srdtrk in #1028
- imp(ift): add authority gated mint and burn functions to reference implementations by @srdtrk in #1029
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
Full Changelog: solidity-v2.0.0...solidity-v3.0.0-rc.1