Skip to content

Latest commit

 

History

History
1461 lines (1130 loc) · 64.5 KB

CHANGELOG.md

File metadata and controls

1461 lines (1130 loc) · 64.5 KB

CHANGELOG

v0.9.0, the “Zamfir” release

November 23rd, 2021

This release honors Anca Zamfir, who has lead ibc-rs from its inception and through its first two years of life. The whole team is grateful for her dedication and the nurturing environment she created. To many more achievements, Anca!! 🥂

Notice for operators

This release requires operators to update their Hermes configuration. The mode configuration section now replaces the strategy option.

strategy = 'packets'

If Hermes was configured with strategy = 'packets', then the configuration needs to be changed in the following way:

 [global]
-strategy = 'packets'
 log_level = 'trace'
-clear_packets_interval = 100
-tx_confirmation = true
+
+[mode]
+
+[mode.clients]
+enabled = true
+refresh = true
+misbehaviour = true
+
+[mode.connections]
+enabled = false
+
+[mode.channels]
+enabled = false
+
+[mode.packets]
+enabled = true
+clear_interval = 100
+clear_on_start = true
+filter = false
+tx_confirmation = true
strategy = 'all'

If Hermes was configured to complete connection and channel handshakes as well, ie. with strategy = 'all', then on top of the changes above, mode.connections.enabled and mode.chhanels.enabled must be set to true.

See the relevant section of the documented config.toml file in the repository for more details.

BUG FIXES

FEATURES

  • General
    • Support for compatibility with gaia Vega upgrade (protos matching ibc-go v1.2.2 and SDK v0.44.3) (#1408)
    • Optimize the WS client to subscribe to IBC events only (instead of all Tx events) (#1534)
  • Relayer Library
    • Allow for more granular control of relaying modes. The mode configuration section replaces the strategy option. (#1518)

IMPROVEMENTS

  • General
    • Upgrade IBC-rs TLA+ MBT models to modern Apalache type annotations (#1544)
    • Add architecture.md doc that gives a high-level overview of the structure of the codebase
    • Add some module-level documentation (#1556)
  • IBC Modules
    • Derive PartialEq and Eq on IbcEvent and inner types (#1546)
  • Relayer Library
    • The relayer will now avoid submitting a tx after the simulation failed (in all but one special case) to avoid wasting fees unnecessarily (#1479)
  • Relayer CLI
    • Output errors on a single line if ANSI output is disabled (#1529)
    • Compute fee amount using big integers to prevent overflow when using denominations with high decimal places (#1555)

v0.8.0

October 29th, 2021

This is the final release of version 0.8.0, which now depends on the official releases of the prost and tonic crates. In addition to everything that's included in v0.8.0-pre.1, this release updates the minimum supported Rust version to 1.56, and contains various bug fixes and performance improvements which make the relayer more reliable.

Notice for operators

A new setting was added to the Hermes configuration: max_block_time. This setting specifies the maximum time per block for this chain. The block time together with the clock drift are added to the source drift to estimate the maximum clock drift when creating a client on this chain. For Cosmos-SDK chains a good approximation is timeout_propose + timeout_commit

BREAKING CHANGES

  • Update MSRV to Rust 1.56 and use the 2021 edition (#1519)

BUG FIXES

  • Fix for "new header has a time from the future" chain error which would arise due to clock drift (#1445):
    • Added new config param max_block_time to prevent the problem for appearing in newly-created clients.
    • Added a synchronous waiting in client update logic to allow destination chain to reach a new height before submitting a client update message.
  • Ensure Hermes does not send timeouts for packets that have not expired yet (#1504)

IMPROVEMENTS

  • General
    • Update to official releases of prost 0.9 and tonic 0.6 (#1502)
  • IBC Modules
    • Support for converting ibc::events::IbcEvent into tendermint::abci::Event (#838)
    • Restructure the layout of the ibc crate to match ibc-go's layout (#1436)
    • Implement FromStr<Path> to enable string-encoded paths to be converted into Path identifiers (#1460)
  • Relayer Library
    • Improve performance of misbehaviour checks triggered by an UpdateClient event (#1417)

v0.8.0-pre.1

October 22nd, 2021

This is a pre-release which depends on in-house forks of various Rust libraries. As such, it is advised to avoid depending on the ibc and ibc-relayer crates at version 0.8.0-pre.1.

Hermes v0.8.0-pre.1 is considered stable and it is recommended for all users to update to this version.

This release notably includes a new memo_prefix configuration option for specifying a prefix to be included in the memo of each transaction submitted by Hermes.

Moreover, Hermes is now able to handle SendPacket events originating from Tendermint ABCI's BeginBlock and EndBlock methods (#1231).

BREAKING CHANGES

  • IBC Modules
    • The check_header_and_update_state method of the ClientDef trait (ICS02) has been expanded to facilitate ICS07 (#1214)

FEATURES

  • General
    • Add support for the tx.memo field (#1433)
  • IBC Modules
    • Add ICS07 verification functionality by using tendermint-light-client (#1214)
  • Relayer Library
    • Add a default_gas setting to be used for submitting a tx when tx simulation fails (#1457)
    • Update compatibility check for IBC-Go dependency (#1464)

IMPROVEMENTS

  • Relayer Library
    • Handle SendPacket events originating from Tendermint ABCI's BeginBlock and EndBlock methods (#1231)
    • Improve error message when create client fails and add a health check for the trusting period being smaller than the unbonding period (#1440)

v0.7.3

October 4th, 2021

This minor release most notably includes a fix for a bug introduced in v0.7.0 where Hermes would always use the max gas when submitting transactions to chains based on Cosmos SDK <= 0.42. It also improves the handling of account sequence numbers

BUG FIXES

  • Relayer Library
    • Fix a bug introduced in Hermes v0.7.0 where tx simulations would fail on chains based on Cosmos SDK 0.42. This would cause Hermes to use the max gas specified in the config when submitted the tx, leading to high fees. (#1345)
    • Only increase cached account sequence number when broadcast_tx_sync fails, therefore ensuring that the cached sequence number stays in sync with the node. (#1402)

IMPROVEMENTS

  • Relayer Library
    • Set default trusting period to be 2/3 of unbonding period for Cosmos chains (#1392)

v0.7.2

September 24th, 2021

This minor release brings substantial performance improvements as well as support for chains using Secp256k1 signatures in consensus votes.

It also bumps the compatibility to Cosmos SDK 0.44.

FEATURES

  • Support for chains which use Secp256k1 signatures in consensus votes (#1155)

  • Modified packet worker to use stubborn strategy (#1290)

  • Skip consensus_heights query in update_client when possible (#1362)

  • Support for disabling tx confirmation mechanism (#1380)

  • gm

    • Binaries in the config can be defined as URLs now.
    • Add the option to set gm-lib path via the $GM_LIB environment variable (#1365)

IMPROVEMENTS

  • Use core and alloc crates for no_std compatibility (#1156)
  • Improve performance of health check, and only perform it on hermes start. Add a hermes health-check command. (#1336)
  • Treat pre-releases of the Cosmos SDK as their standard version in compatibility check (#1337)
  • Bump Cosmos SDK compatibility to v0.44.0 (#1344)
  • Improve reliability of health check (#1382)

v0.7.1

September 14th, 2021

This minor release of Hermes notably features support for Ethermint chains and transfer amounts expressed as a 256-bit unsigned integer. This release also fixes a bug where the chain runtime within the relayer would crash when failing to decode a invalid header included in a ClientUpdate IBC event.

BUG FIXES

  • Fix header decoding error which resulted in killing the chain runtime (#1342)

  • gm

    • Fix gaiad keys add prints to stderr instead of stdout in SDK 0.43 (#1312)
    • Bumped default rpc_timeout in Hermes config to 5 seconds (#1312)

FEATURES

  • Added post-Stargate (v0.5+) Ethermint support (#1267 #1071)

IMPROVEMENTS

  • General

    • Derive Debug, PartialEq and Eq traits for module errors (#1281)
    • Add MBT tests for ICS 07 Client Upgrade (#1311)
    • Add support for uint256 transfer amounts (#1319)
  • ibc

    • Change all *Reader traits to return Result instead of Option (#1268)
    • Clean up modules' errors (#1333)

v0.7.0

August 24th, 2021

This release of Hermes is the first to be compatible with the development version of Cosmos SDK 0.43. Hermes 0.7.0 also improves the performance and reliability of the relayer, notably by waiting asynchronously for transactions to be confirmed. Additionnally, Hermes now includes a REST server which exposes the relayer's internal state over HTTP.

BUG FIXES

  • ibc

    • Set the index of ibc::ics05_port::capabilities::Capability (#1257)
  • gm

    • Fix silent exit when requirements are missing

FEATURES

  • General

    • Update CI to test with gaiad v5.0.5 (#1175)
  • ibc-relayer-cli

    • Add keys delete CLI command (#1065)
    • Add --legacy | -l flag to support upgrades for chains built with Cosmos SDK < v0.43.0 (#1287)
  • ibc-relayer

    • Expose the Hermes config and internal state over a REST API (#843)
    • Spawn packet workers only when there are outstanding packets or acknowledgements to relay (#901)
    • Upgrade to Cosmos SDK proto (v0.43.0) & ibc-go proto (v1.0.0) (#948)

IMPROVEMENTS

  • General

    • Update Modelator to 0.2.0 (#1249)
  • ibc-relayer-cli

    • Add optional destination chain and --verbose options for query channels CLI (#1132)
  • ibc-relayer

    • Improve support for Interchain Accounts (ICS 027) (#1191)
    • Improve performance and reliability of the relayer by asynchronously waiting for tx confirmations (#1124, #1265)
  • ibc

    • Implement ics02_client::client_consensus::ConsensusState for AnyConsensusState (#1297)

v0.6.2

August 2nd, 2021

This minor release of Hermes re-enables the upgrade client, upgrade clients, tx raw upgrade-clients, and tx raw upgrade-chain, and otherwise contains a few bug fixes and internal improvements.

Upgrading from version 0.6.1 to 0.6.2 requires no explicit steps.

BUG FIXES

  • Add missing Protobuf impl for ics03_connection::connection::Counterparty (#1247)

FEATURES

  • Augment ClientCreationFailed error with chain id and WS address (#1020)
  • Improve the error message for config file parse errors (#1021)
  • Fix for upgrade CLI regression using new type ics02::TrustThreshold (#1229)

IMPROVEMENTS

  • Add semantic validation of of max_tx_size and max_num_msg config options (#1245)

v0.6.1

July 22nd, 2021

This minor release mainly improves the reliability of the relayer by ensuring that pending packets are cleared on start, and that Hermes can recover from the WebSocket subscriptions being closed under its feet by Tendermint.

Upgrading from version 0.6.0 to 0.6.1 requires no explicit steps.

WARNING: Due to a regression (#1229), the upgrade client, tx raw upgrade-clients, and tx raw upgrade-chain commands have been temporarily disabled in this version. These commands will be re-enabled in the next version.

FEATURES

  • ibc
    • Enable pub access to verification methods of ICS 03 & 04 (#1198)
    • Add ics26_routing::handler::decode function (#1194)
    • Add a pseudo root to MockConsensusState (#1215)

IMPROVEMENTS

BUG FIXES

  • ibc

    • Fix stack overflow in MockHeader implementation (#1192)
    • Align as_str and from_str behavior in ClientType (#1192)
  • ibc-relayer

    • Ensure pending packets are cleared on start (#1200)
    • Recover from missed RPC events after WebSocket subscription is closed by Tendermint (#1196)

v0.6.0

July 12th, 2021

Many thanks to Fraccaroli Gianmarco (@Fraccaman) for helping us improve the reliability of Hermes (#697).

This release includes two major features to Hermes: (1) support for reloading the chains from the configuration file at runtime, and (2) a filtering mechanism to restrict Hermes activity based on predefined parameters (e.g., packet relaying on certain ports and channels exclusively, and ignoring activity for clients that have non-standard trust threshold).

In addition to these two, we have also added a health checkup mechanism, plus new config validate and query channel ends CLIs.

Upgrading from 0.5.0 to 0.6.0

When upgrading from Hermes v0.5.0 to v0.6.0, the most important point to watch out for is the configuration file. The Hermes config.toml configuration file has went through a few revisions, with the changes described below.

Added inline documentation for all options.

Please have a look around the config.toml directly.

Added a packet filtering mechanism based on channel/port identifiers

This feature will restrict the channels on which Hermes relays packets. There are two new options in the configuration file:

  1. A global filter parameter to enable or disable filtering globally.
  2. A per-chain .filters option that expects a policy (either allow or deny) plus a list of channel and port identifiers. If policy is allow, then packet relaying will be restricted to this list for the corresponding chain. If the policy is deny, then any packets from this list will be ignored.

Added filtering based on client state

The global filter option additionally enables filtering of all activities based on client state trust threshold. If enabled, Hermes will ignore all activity for clients that have a trust threshold different than 1/3.

Added a packet clearing configuration option

This will enable the parametrization of the frequency at which Hermes will clear pending packets. This is a global option, called clear_packets_interval, which applies to all chains in the configuration.

The full list of changes is described below.

FEATURES

  • ibc-relayer

    • The chains configuration can be reloaded by sending the Hermes process a SIGHUP signal (#1117)
    • Added support for filtering based on client state trust threshold (#1165)
  • ibc-relayer-cli

    • Added config validate CLI to Hermes (#600)
    • Added filtering capability to deny or allow for specific channels (#1140, #1141, #69)
    • Added basic channel filter (#1140)
    • Added query channel ends CLI command (#1062)
    • Added a health checkup mechanism for Hermes ([#697, #1057])

IMPROVEMENTS

  • Update to tendermint-rs v0.20.0 (#1125)

  • Add inline documentation to config.toml (#1127)

  • ibc-relayer

    • Hermes will now clear pending packets at a configurable interval (#1124)

BUG FIXES

v0.5.0

June 22nd, 2021

This release brings a few features, and several improvements and bug fixes to the Hermes relayer, notably the capability for Hermes to complete IBC connection handshakes when it detects that one has been initialized, as well as the ability to detect chain impersonation attacks and to dynamically estimate the gas needed to submit a transaction.

Moreover, the overall reliability and availability of the relayer has also been improved substantially by switching over to tx_broadcast_sync for submitting transactions.

FEATURES

  • ibc-relayer-cli

    • Add --hd-path option to keys restore and keys add commands to specify derivation path when importing keys (#1049)
  • ibc-relayer

    • Event-based handshake completion for IBC connections (#821)
    • Enable TLS support for gRPC client (#877)

IMPROVEMENTS

  • ibc-relayer-cli

    • Minor log output improvements: color enabled, reduced redundant information (#1100)
  • ibc-relayer

    • Update the on-chain IBC client with supporting headers when light client verification performs bisection when verifying a header for a client update or a misbehaviour detection (#673)
    • Add mitigation for chain impersonation attacks (#1038)
    • Determine gas fee dynamically per transaction (#930)
    • Submit transactions with broadcast_tx_sync and keep track of account sequences (#986)

BUG FIXES

  • gaiad-manager

    • Removed the testnet command as not all networks support it (#1050)
    • Update for compatibility with Hermes's new --hd-path option
  • ibc-relayer

    • Fix bug where channels were left partially open after channel create (#1064)
    • Prevent account sequence mismatch errors in many cases (#919, #978)
    • Prevent timeouts when submitting transactins (#977)

BREAKING CHANGES

  • ibc-relayer-cli
    • Removed --coin-type option from keys restore command. Use --hd-path instead (#1049)

v0.4.0

June 3rd, 2021

  • This release of Hermes features an internal telemetry service which can export metrics about the relayer to Prometheus.
  • A new relaying strategy is now available, which enables Hermes to complete channel handshakes in an event-based fashion.
  • Hermes now checks if another relayer may have already processed a packet event, and will not attempt to process it itself, which improves performance.
  • The startup time of the relayer has been substantially improved.
  • The start-multi command has been promoted to start, which means that the worker-based relayer is not experimental anymore.
  • A regression where Hermes would not recover after a node went down and up again was fixed.

Special thanks to Colin Axnér (@colin-axner) and Jongwhan Lee (@leejw51crypto) for raising multiple issues that helped us improve the reliability of Hermes.

FEATURES

  • ibc-relayer
    • Add telemetry and Prometheus endpoint (#868, #1032)
    • Add support for event based channel relaying (#822)
    • Graceful handling of packet events in the presence of multiple relayers (#983)

IMPROVEMENTS

  • ibc

    • Started unwrap cleanup (#871)
  • ibc-relayer-cli

    • Include chain-id in query clients command, and sort output by client counter (#992)
    • Improve config loading message (#996)
    • Improve Hermes worker spawn time for start command (#998)
    • Better Hermes help message when command is unrecognized (#1003)

BUG FIXES

  • ibc-relayer

    • Fix client worker initialization error (#972)
    • Fix hermes start panic when all chains are unreachable (#972)
    • Ensure expired or frozen client worker logs message and terminates (#1022)
    • Fix regression where Hermes would not recover after a node went down and up again (#1026)
  • gaiad-manager

    • Import hermes keys properly even if wallet HD derivation path is set (#975)
    • Apply default values to missing configuration parameters (#993)
    • gm hermes config now creates hermes 0.4.0 compatible configuration (#1039)

BREAKING CHANGES

v0.3.2

May 21st, 2021

This is minor release which brings substantial performance improvements to the relayer (relaying 1000 packets now takes 2-5min instead of 1h+), better UX for the ft-transfer command, and automatic deployment of Docker images to Docker Hub.

FEATURES

  • ibc-relayer-cli

    • Add a --key option to the tx raw ft-transfer command to override the account used for sending messages (#963)
  • ibc-relayer

    • Add support for multiple keys to the keyring (#963)
  • [release]

    • Released the official Hermes image on Docker Hub (#894)
    • Automatically deploy Docker Hub image during release (#967)

IMPROVEMENTS

  • ibc-relayer
    • Batch together all events from all transactions included in a block (#957)

BUG FIXES

BREAKING CHANGES

Nothing

v0.3.1

May 14h, 2021

This release improves the UX of a couple commands, fixes a bug related to delay periods, and adds support for packet timeouts based on timestamps, as well as support Protobuf-encoded keys.

FEATURES

  • [scripts]

    • Created the Gaiad Manager gm CLI tool for managing gaiad instances on the local machine (#902)
  • ibc-relayer

    • Add support for packet timeout based on timeout timestamp (#937)
    • Added support for Protobuf-based Keyring (#925)

IMPROVEMENTS

  • ibc-relayer-cli
    • Improve UX when querying non-existing connections and channels (#875, #920)
    • More details in error messages to increase debuggability (#921, #934)
    • Disallow creating a client with same source and destination chains (#932)
    • Make packet worker more resilient to nodes being unreachable for a short amount of time (#943)

BUG FIXES

  • ibc
    • Process raw delay_period field as nanoseconds instead of seconds. (#927)

BREAKING CHANGES

Nothing

v0.3.0

May 7h, 2021

Special thanks to Jongwhan Lee (@leejw51crypto) for his contributions (#878).

This release mostly focuses on improving the UX and the experimental multi-paths relayer (start-multi command), which has been made more resilient against nodes going down, and is now able to clear pending packets and periodically refresh IBC clients. The relayer now also supports ICS 027 (Interchain Accounts).

FEATURES

IMPROVEMENTS

  • ibc

    • Reinstated ics23 dependency (#854)
    • Use proper Timestamp type to track time (#758)
  • ibc-relayer

    • Change the default for client creation to allow governance recovery in case of expiration or misbehaviour (#785)
    • Use a single supervisor in start-multi to subscribe to all configured chains (#862)
    • The start-multi command is now more resilient to a node not being up or going down, and will attempt to reconnect (#871)

BUG FIXES

  • ibc

    • Fix parsing in chain_version when chain identifier has multiple dashes (#878)
  • ibc-relayer

    • Fix pagination in gRPC query for clients (#811)
    • Fix relayer crash when hermes starts in the same time as packets are being sent (#851)
    • Fix missing port information in hermes query channels (#840)
    • Fix crash during initialization of event monitor when node is down (#863)
    • Spawn a single Tokio runtime for the whole supervisor instead of one per chain (#909)
  • ibc-relayer-cli

    • Fix for ft-transfer mismatching arguments (#869)
    • Fix channel destination chain mismatch on unreceived-packets or unreceived-acks (#873)

BREAKING CHANGES

  • ibc-relayer
    • hermes -j query channels command now returns result array with the format [{"channel_id":"channel-0","port_id":"transfer"}, ...] instead of ["channel-0", ...] (#840)

v0.2.0

April 14th, 2021

This release includes initial support for relaying over multiple paths from a single hermes instance. Adds support for relayer restart, where pending packets are cleared. Includes support for ordered channels, packet delay, misbehaviour detection and evidence submission, client upgrade after counterparty chain upgrades.

This release brings improvements to the relayer UX by providing new and updated commands for keys, client, connection and channel management. In addition, it simplifies the configuration of and integration with the light client.

This release also finalizes the initial implementation of all the ICS 004 handlers.

FEATURES

  • Update to tendermint-rs v0.19.0 (#798)

  • ibc

    • Added handler(s) for sending packets (#695), recv. and ack. packets (#736), and timeouts (#362)
  • ibc-relayer

    • Support for relayer restart (#561)
    • Add support for ordered channels (#599)
    • Misbehaviour detection and evidence submission (#632)
    • Use a stateless light client without a runtime (#673)
  • ibc-relayer-cli

    • Added create connection and create channel CLIs (#630, #715)
    • Proposed ADR 006 to describe Hermes v0.2.0 use-cases (#637)
    • Added client-upgrade CLI (#357)
    • Added delay feature for packet relaying (#640)
    • Update gaia to version 4.2.0 for e2e tests on CI (#809)
    • Add start-multi command to relay on all paths defined in the configuration (#748)
    • Add option to specify which events to listen for in listen command (#550)
    • Add option to customise receiver address for ft-transfer command (#806)
    • Add keys restore command to import a signing key from its mnemonic ([#813])

IMPROVEMENTS

  • ibc

    • Follow Rust guidelines naming conventions (#689)
    • Per client structure modules (#740)
    • MBT: use modelator crate (#761)
  • ibc-relayer

    • Consistent identifier handling across ICS 02, 03 and 04 (#622)
  • ibc-relayer-cli

    • Clarified success path for updating a client that is already up-to-date (#734)
    • Added create and update wrappers for client raw commands (#772)
    • Output by default is human-readable, and JSON is optional (#805)

BUG FIXES

  • ibc

    • Fix overflow bug in ICS03 client consensus height verification method (#685)
    • Allow a conn open ack to succeed in the happy case (#699)
  • ibc-relayer

    • Replaced rust-crypto & bitcoin-wallet deprecated dependencies (#352)
    • Fix for hard-coded account number (#752)
    • Fix for chains that don't have cosmos account prefix (#416)
    • Fix for building the trusted_validator_set for the header used in client updates (#770)
    • Don't send MsgAcknowledgment if channel is closed (#675)
    • Fix a bug where the keys addresses had their account prefix overriden by the prefix in the configuration (#751)
  • ibc-relayer-cli

    • Hermes guide: improved installation guideline (#672)
    • Make fee denom and amount configurable (#754)
  • ibc-proto

    • Fix for proto files re-compilation bug (#801)

BREAKING CHANGES

  • ibc

    • MsgConnectionOpenAck.counterparty_connection_id is now a ConnectionId instead of an Option<ConnectionId>(#700)
  • ibc-relayer

    • Remove the light client configuration from the global configuration (#793)
  • ibc-relayer-cli

    • Remove the light add and light rm commands (#793)

v0.1.1

February 17, 2021

This release brings a quick fix for a problem with a dependency of crate ibc-relayer, which causes build & installation issues. Many thanks to @Fraccaman for bringing this problem to our attention! (#672)

Additionally, this release also introduces initial implementation for most of ICS 004 handlers, and several bug fixes and improvements, e.g., refactored some CLI code, refactored the Height type in the IBC Events, and a bug fix involving packet acks in a 3-chain setup. More details below.

FEATURES

  • ibc-relayer
    • Listen to channel close initialization event and perform the close handshake (#560)
    • Updated to tendermint-rs v0.18.1 (#682, #671)

IMPROVEMENTS

BUG FIXES

  • ibc

    • Fix panic in conn open try when no connection id is provided (#626)
    • Disable MBT tests if the "mocks" feature is not enabled (#643)
  • ibc-relayer

    • Quick fix for funty breaking change bug (#665)
  • ibc-relayer-cli

    • Fix wrong acks sent with tx raw packet-ack in a 3-chain setup (#614)

BREAKING CHANGES

  • ibc

    • Implementation of the ChanOpenAck, ChanOpenConfirm, ChanCloseInit, and ChanCloseConfirm handlers (#316)
    • Remove dependency on tendermint-rpc (#624)
  • ibc-relayer-cli

    • Remove the proof option from CLI (#572)

v0.1.0

February 4, 2021

🎉 This release brings the first publication of ibc-relayer and ibc-relayer-cli to crates.io.

Noteworthy changes in this release include:

  • The binary in the ibc-relayer-cli crate was given the name Hermes.
  • We published a comprehensive guide for Hermes at hermes.informal.systems.
  • Major improvements to user experience, in particular at CLI level: JSON output, configurable log output level, dedicated channel handshake command, as well as overall improvements to error display and output.

FEATURES

  • Continous Integration (CI) end-to-end (e2e) testing with gaia v4 (#32, #582, #602)

  • Add support for streamlining releases (#507)

  • ibc-relayer-cli

    • Implement command to query the channels associated with a connection (#505)
    • JSON output for queries and txs (#500)
    • Added 'required' annotation for CLIs queries & txs; better error display (#555)
    • Implement commands for channel close init and confirm (#538)
    • Implement command to perform the handshake for a new channel (#557)
    • Query all clients command (#552)
    • Query all connections command (#553)
    • Query all channels command (#568)
    • Added a relayer binary guide (#542)
    • Split the dev-env script in setup_chains and init_clients (#577)
  • ibc-relayer

    • Added retry mechanism, restructured relayer (#519)
    • Relay MsgTimeoutOnClose if counterparty channel state is State::Closed
  • ibc

    • Add MsgTimeoutOnClose message type (#563)
    • Implement MsgChannelOpenTry message handler (#543)

IMPROVEMENTS

  • Update to tendermint-rs v0.18.0 (#517, #583)

  • Update to tokio 1.0, prost 0.7 and tonic 0.4 (#527)

  • ibc-relayer-cli

    • Replace ChannelConfig in Channel::new (#511)
    • Add packet-send CLI (#470)
    • UX improvements for relayer txs (#536, #540, #554)
    • Allow running standalone commands concurrently to the main relayer loop (#501)
    • Remove the simd-based integration tests (#593)
  • ibc-relayer

    • Performance improvements (#514, #537)
    • Fix for mismatching bitcoin dep (#525)
  • ibc

    • Clean the validate_basic method (#94)
    • MsgConnectionOpenAck testing improvements (#306)

BUG FIXES:

  • ibc-relayer-cli

    • Help and usage commands show 'hermes' for executable name (#590)
  • ibc

    • Fix for storing ClientType upon 'create-client' (#513)

BREAKING CHANGES:

  • ibc
    • The ibc::handler::Event is removed and handlers now produce ibc::events::IBCEvents (#535)

v0.0.6

December 23, 2020

This release focuses on upgrading the relayer and ibc modules to the latest interfaces from the ecosystem: tendermint-rs v0.17, which brings the protobuf changes from tendermint v0.34.0, plus alignment with the latest cosmos proto versions from v0.40.0-rc5 (sometimes called 'stargate-5').

FEATURES

  • Update to tendermint-rs version 0.17 (#451)

  • Update to cosmos-sdk IBC proto version v0.40.0-rc5 (#451)

  • ibc-relayer

  • ibc-relayer-cli

    • Packet CLIs for recv_packet (#443)
    • Packet CLIs for acknowledging packets (#468)

IMPROVEMENTS

  • ibc-relayer
    • Mock chain (implementing IBC handlers) and integration against CLI (#158)
    • Relayer tests for client update (ping pong) against MockChain (#381)
    • Relayer refactor to improve testing and add semantic dependencies (#447)

v0.0.5

December 2, 2020

This release focuses on implementing relayer and relayer-cli functionality towards a full v0 implementation. We now have the full-stack implementation for supporting client creation & updates, as well as connection- and channel handshakes. We also consolidated our TLA+ specs into an "IBC Core TLA+ specification," and added ICS 020 spec.

Special thanks to external contributors for this release: @CharlyCst (#347, #419).

  • ibc-relayer-cli
    • Add --all option to light rm command to remove all peers for a given chain (#431)

FEATURES

  • Update to tendermint-rs version 0.17-RC3 (#403)
  • changelog Added "unreleased" section in CHANGELOG.MD to help streamline releases (#274)
  • ibc
    • Implement flexible connection id selection (#332)
    • ICS 4 Domain Types for channel handshakes and packets (#315, #95)
    • Introduce LightBlock support for MockContext (#389)
  • ibc-relayer
    • Retrieve account sequence information from a chain using a GRPC client (#337)
    • Implementation of chain runtime for v0 (#330)
    • Integrate relayer spike into ibc-relayer crate (#335)
    • Implement query_header_at_height via plain RPC queries (no light client verification) (#336)
    • Implement the relayer logic for connection handshake messages (#358, #359, #360)
    • Implement the relayer logic for channel handshake messages (#371, #372, #373, #374)
  • ibc-relayer-cli
    • Merge light clients config in relayer config and add commands to add/remove light clients (#348)
    • CLI for client update message (#277)
    • Implement the relayer CLI for connection handshake messages (#358, #359, #360)
    • Implement the relayer CLI for channel handshake messages (#371, #372, #373, #374)
    • Added basic client, connection, and channel lifecyle in relayer v0 (#376, #377, #378)
    • Implement commands to add and list keys for a chain (#363)
    • Allow overriding of peer_id, height and hash in light add command (#428)
  • proto-compiler
    • Refactor and allow specifying a commit at which the Cosmos SDK should be checked out (#366)
    • Add a --tag option to the clone-sdk command to check out a tag instead of a commit (#369)
    • Fix --out command line parameter (instead of --path) (#419)
  • ibc/relayer-spec
    • ICS 020 spec in TLA+ (#386)
    • Prepare IBC Core TLA+ specs (#404)

IMPROVEMENTS

  • ibc-relayer
    • Pin chain runtime against Tokio 0.2 by downgrading for 0.3 to avoid dependency hell (#415, follow up to #402)
  • ibc-relayer-cli
    • Split tasks spawned by CLI commands into their own modules ([#331])
    • V0 command implementation (#346)
  • ibc
    • Split msgs.rs of ICS002 in separate modules (#367)
    • Fixed inconsistent versioning for ICS003 and ICS004 (#97)
    • Fixed get_sign_bytes method for messages (#98)
    • Homogenize ConnectionReader trait so that all functions return owned objects (#347)
    • Align with tendermint-rs in the domain type definition of block::Id (#338)

v0.0.4

October 19, 2020

This release focuses on alignment with the Cosmos ecosystem: adaptations to Tendermint-rs 0.16 and subsequently to 0.17 (0.17.0-rc1), and numerous protobuf updates following latest stargate releases.

Additional highlights:

  • Adding DomainTypes and (de)serialization capability to ICS02 and ICS03 messages and structures.
  • Improvements of the IBC message processor framework (handlers, contexts and mocks).
  • Added initial implementations for the ICS26 (routing module) and ICS18 (basic relayer algorithms module) for use in testing.
  • Also added support for packet handling in the relayer algorithm specifications.

BREAKING CHANGES:

FEATURES:

IMPROVEMENTS:

  • ibc Implemented the DomainType trait for IBC proto structures (#245, #249).
  • ibc & ibc-proto Several improvements to message processors, among which (#218):
    • ICS03 connection handshake protocol initial implementation and tests (#160)
    • Add capability to decode from protobuf Any* type into Tendermint and Mock client states
    • Cleanup Any* client wrappers related code
    • Migrate handlers to newer protobuf definitions (#226)
    • Extend client context mock (#221)
    • Context mock simplifications and cleanup (#269, #295, #296, #297)
  • ibc/ics03 Split msgs.rs in multiple files, implement From for all messages (#253)
  • ibc-proto
    • Move ibc-proto source code into ibc-rs (#142) and fixed code deduplication (#282, #284)
    • Consolidate proto-compiler logic #241
  • ibc/relayer-spec Add support for APALACHE to the Relayer TLA+ spec (#165)
  • ibc-relayer Update to tendermint v.0.16 and integrate with the new light client implementation (#90, #243)

BUG FIXES:

v0.0.3

September 1, 2020

This release focuses on the IBC message processor framework and initial implementations in ICS02 and ICS07. It also introduces an initial specification for the relayer algorithm.

Other highlights:

  • The ibc crate is published as ibc in crates.io
  • ADR-001 and ADR-003 are complete. 🎉

BREAKING CHANGES:

  • ibc Renamed modules crate to ibc crate. Version number for the new crate is not reset. (#198)
  • ibc/ics02 ConnectionIds are now decoded to Vec<ConnectionId> and validated instead of Vec<String> (#185)
  • ibc/ics03 Removed Connection and ConnectionCounterparty traits (#193)
  • ibc/ics04 Removed Channel and ChannelCounterparty traits (#192)

FEATURES:

IMPROVEMENTS:

BUG FIXES:

  • ibc/ics24 Identifiers limit update according to ICS specs (#168)

v0.0.2

August 1, 2020

This release is focused on updating the query system from amino to protobuf, implementing a few queries from the CLI, and establishing an initial testing framework that will support multiple chain types.

It does not target a stable release of Cosmos-SDK chains, but is tracking the latest state of development towards the Cosmos-SDK Stargate release.

BREAKING CHANGES:

  • [ibc|ibc-relayer] Refactor queries, paths, and Chain trait to reduce code and use protobuf instead of Amino. #152, #174, #155
  • [repo] Moved relayer/cli to relayer-cli, relayer/relay to relayer. #183

FEATURES:

IMPROVEMENTS:

  • [ci] Framework (scripts and Github Actions) for integration testing the relayer queries against the Cosmos-SDK's simd binary with prepopulated IBC state in the genesis #140, #184
  • [ibc-relayer|ibc] Implemented better Raw type handling. #156
  • [repo] Add rust-toolchain file. #154

BUG FIXES:

  • ibc Fixed the identifiers limits according to updated ics spec. #189
  • [ibc/relayer] Remove some warnings triggered during compilation due to dependency specification. #132
  • ibc Fix nightly runs. #161
  • [repo] Fix for incomplete licence terms. #153

0.0.1

July 1st, 2020

This is the initial prototype release of an IBC relayer and TLA+ specifications. There are no compatibility guarantees until v0.1.0.

Includes:

  • Configuration file definition and validation
  • Client state, consensus state, connection, channel queries.
    • Note: deserialization is unimplemented as it has dependency on migration to protobuf for ABCI queries
  • Per chain light clients threads are created and headers are periodically retrieved and verified.
  • Per chain IBC event monitor threads are spawned and main event handler that receives them.
    • Note: the event handler just displays the events.
  • IBC Modules partial implementation for datastructures, messages and queries.
  • Some English and TLA+ specifications for Connection & Channel Handshake as well as naive relayer algorithm.