This is the second release candidate for Hermes v1.0.0 🎉
⚠️ This release contains multiple breaking changes to the Hermes command-line interface and configuration.⚠️ Please consult the UPGRADING document for instructions to update to Hermes v1.0.0-rc.1.
- Bump
ibc-proto
crate to 0.19.1 - Bump
ibc
,ibc-relayer
,ibc-telemetry
,ibc-relayer-rest
crates to v0.17.0 - Bump tendermint-rs dependencies to 0.23.8 (#2455)
Hermes - ibc-relayer-cli
(v1.0.0-rc.1)
- Drop the
raw
prefix from all thetx raw
commands (#2315 - Remove the four duplicate commands:
tx raw update-client
, which is the same asupdate client
tx raw upgrade-client
, which is the same asupgrade client
tx raw upgrade-clients
, which is the same asupgrade clients
tx raw create-client
, which is the same ascreate client
- (#2315)
- Rename
--a-
and--b-
prefixes inhermes tx
subcommands to--src-
and--dst-
(#2410) - Rename flags of
tx upgrade-chain
command from--src
/--dst
to--reference
/--host
(#2376) - The default value of the configuration
tx_confirmation
in Hermesconfig.toml
has been changed fromtrue
tofalse
. (#2408)
- Fixed filtering counterparty chain in Hermes command
query channels
(#1132) - Fixed command
tx raw ft-transfer
to correctly use the address given by the--receiver
flag (#2405)
- Add an optional
--show-counterparty
flag tohermes query channels
which outputs every channel along with its corresponding port, and the counterparty chain's id, in a pretty way (#2429) - New optional flags
--counterparty-chain
and--verbose
for the commandquery connections
(#2310) - Added new optional flag
--host-chain
to filter which clients are upgraded when runningupgrade clients
command (#2311)
- Hermes command
keys add
now checks for existing key and overwrites only if the flag--overwrite
is passed (#2375) - Rename
--a-
and--b-
prefixes inhermes tx
subcommands to--src-
and--dst-
(#2410) - Increase default value for
gas_multiplier
setting to 1.1 (#2435) - Output status is now colored in green for success and red for error (#2431)
IBC Proto - ibc-proto
(v0.19.1)
- Update Protobuf definitions for IBC-Go to v4.0.0-rc0 and Cosmos SDK to v0.45.6 (#2403)
IBC Modules - ibc
(v0.17.0)
- Remove provided
Ics20Reader::get_channel_escrow_address()
implementation and makecosmos_adr028_escrow_address()
public. (#2387)
- Fix serialization for ICS20 packet data structures (#2386).
- Properly process
WriteAcknowledgement
s on packet callback (#2424). - Fix
write_acknowledgement
handler which incorrectly used packet'ssource_{port, channel}
as key for storing acks (#2428)
- Propose ADR011 for light client extraction. (#2356).
Relayer Library - ibc-relayer
(v0.17.0)
- Fix a regression where Hermes would not retry relaying packet on account mismatch error when the sequence number used was smaller than the expected one (#2411)
- Fix a bug where the relayer would fail to relay any packets when the
/acbi_info
endpoint of a chain did not includedata
andversion
fields (#2444)
Telemetry & Metrics - ibc-telemetry
(v0.17.0)
- Updated telemetry metric
wallet_balance
to f64 and removed downscaling displayed value. Please note that when converting the balance to f64 a loss in precision might be introduced in the displayed value (#2381) - Improved naming and description of some telemetry metrics and added
histogram buckets for
tx_latency
metrics (#2408)
July 7th, 2022
This is the first release candidate for Hermes v1.0.0 🎉
⚠️ This release contains multiple breaking changes to the Hermes command-line interface and configuration.⚠️ Please consult the UPGRADING document for instructions to update to Hermes v1.0.0-rc.0.
As of this release, the Hermes CLI will be versioned separately from
the other crates in the project. As such, the top-level version
designates the version of the Hermes CLI, but the other crates in
the repository do not necessarily match this version. For example,
the ibc
and ibc-relayer
crates are released under version 0.16.0.
The structure of this changelog has therefore changed as well, changes are now grouped first by crate and then by the type of change, eg. feature, bug fix, etc.
Hermes - ibc-relayer-cli
(v1.0.0-rc.0)
- New ADR which describes the changes to the Hermes commands, specifically the move to flags instead of positional arguments. (#594)
- Merged commands
keys add
andkeys restore
into single commandkeys add
. The flag to specify the key name for the CLI commandkeys add
has been changed from-n
to-k
. Restoring a key now takes a file containing the mnemonic as input instead of directly taking the mnemonic. (#1075) - Deprecate
gas_adjustment
setting in favor of newgas_multiplier
setting (#2174) - Updated all CLI commands to take flags instead of positional arguments. (#2239)
- Rename
query packet unreceived-packets
toquery packet pending-sends
andquery packet unreceived-acks
toquery packet pending-acks
(#2379)
- CLI command
config validate
now correctly outputs an error if the configuration file does not exist or is empty. (#2143) - Fix the flow for crate connection to ensure success despite concurrent relayers racing to finish the handshake. (#2168)
- Added CLI command
keys balance
which outputs the balance of an account associated with a key. (#912) - Added CLI command
query channel client
which outputs the channel's client state. (#999) - Added CLI command
query transfer denom-trace
which outputs the base denomination and path of a given trace hash. (#2201) - Add unit tests for all Hermes commands with at least one argument (#2358)
- Add support for selecting a specific wallet in the
clear packets
CLI flow (#2111) - Added a required flag
--upgrade-height
that halts the reference chain at the specified height when performing a client upgrade (#2300) - Added
--yes
flag to thecreate channel
flow to enable skipping the--new-client-connection
step (#2317)
IBC Proto - ibc-proto
(v0.19.0)
- Generate gRPC server code under feature 'server' (#2277)
IBC Modules - ibc
(v0.16.0)
- Change
ChannelId
representation to a string, allowing all IDs valid per ICS 024 (#2330).
- Fix
recv_packet
handler incorrectly queryingpacket_receipt
andnext_sequence_recv
using packet'ssource_{port, channel}
. (#2293) - Permit channel identifiers with length up to 64 characters, as per the ICS 024 specification. (#2330).
- Remove the concept of a zero Height (#1009)
- Complete ICS20 implementation (#1759)
- Derive
serde::{Serialize, Deserialize}
forU256
. (#2279) - Remove unnecessary supertraits requirements from ICS20 traits. (#2280)
Relayer Library - ibc-relayer
(v0.16.0)
- Fix
execute_schedule
method dropping operational data due to improper handling of errors. (#2118) - Fix duplicate packets being generated on start. (#2093)
- Use appropriate height when querying for client upgrade state (#2185)
- Fix the channel handshake issues that occur when concurrent relayers are present (#2254)
- When Hermes submits
N
messages to a chain, it will now always gets backN
responses, even in the presence of errors. (#2333)
- Add preliminary support for multiple chain types, which can be specified in
the chain configuration. At the moment only the
CosmosSdk
chain type is supported. (#2240) - Add support for fetching & parsing the Tendermint version of a network that Hermes is connected to. (#2301)
- Added handler for SDK error 13 in order to output an understandable error message. (#1400)
- Do not retry indefinitely on command handling failure in the packet worker (#2155)
- Consolidate
ChainEndpoint::proven_*
methods with their correspondingquery_*
form (#2223) - Reduce relaying delay when some account mismatch errors occur during Tx simulation (#2249)
Telemetry & Metrics - ibc-telemetry
(v0.16.0)
- Added new metrics to track the number of relayed
SendPacket
andWriteAcknowledgement
messages, the sequence number and the timestamp of the oldest pendingSendPacket
(#2175)
May 23rd, 2022
This release brings a number of bug fixes, some performance improvements, notably when clearing packets, as well as new metrics for better observability of the relayer's operations.
- General
- Replaced gaia v5 with v7 in E2E tests. (#1986)
- Relayer Library
- Add six new metrics:
wallet_balance
,ws_events
,ws_reconnect
,tx_latency_submitted
,tx_latency_confirmed
,msg_num
(#2112)
- Add six new metrics:
- IBC Modules
- Remove object capabilities from the modules (#2159)
- Relayer Library
- Ensure
max_msg_num
is between 1 and 100 with a default of 30 (#1971) - Fixed misleading error message leaking from the misbehavior detection task. (#2031)
- Added support for incremental processing of packet clearing commands. (#2087)
- Implement ADR 9: add domain type for request messages that are passed to query functions (#2192)
- Ensure
May 2nd, 2022
This release improves the reliability of the relayer by fixing an edge case where some queries would fail if they reach a full node after a new block is committed but before the application state updates to reflect the changes in that block.
- Relayer Library
- Fixed query for application status when application state lags behind blockchain state. (#1970)
April 27th, 2022
This release notably features a new query packet pending
command to
list outstanding packet commitments that are either unreceived or pending
acknowledgement at both ends of a channel.
The ibc
crate now also come with a complete ICS 026 implementation.
There is a new query packet pending
command, see above for more information.
The create channel
command now requires an existing client and connection,
unless the --new-client-connection
flag is provided.
Please refer to the guide for more information.
create channel
now requires a--new-client-connection
flag to create a new client and connection for the channel (#1421)- Update MSRV to Rust 1.60 (#2081)
- IBC Modules
- Relayer Library
- Fix the connection delay logic to use the timestamp of the host block when the client update header was installed. (#1772)
- Fixed Hermes retrying mechanism not regenerating operational data for messages (#1792)
- Adjusted max_block_time default value to 30s (#1998)
- Fix a bug in the wildcard filter where pattern would match in the middle of a string (#2075)
- Fixed target height used in misbehavior detection. (#2097)
- Relayer CLI
- Relayer Library
- Add a metric for query cache hits (#2036)
- General
- IBC Modules
- Relayer CLI
March 28th, 2022
Hermes v0.13.0 improves performance by lowering the pressure on the full nodes by adding a caching layer for some queries. It also fixes a bug which could cause an exponential slowdown when relaying between many chains with a low average block time.
This release also add support for wildcards in port and channel identifiers in the packet filter configuration, which enable operators to filter ICA channels based on the port prefix.
Additionally, the IBC Protocol Buffers definitions can now be used from CosmWasm.
As of version 0.13.0, Hermes supports relaying on Interchain Accounts channels.
If the packet_filter
option in the chain configuration is disabled, then
Hermes will relay on all existing and future channels, including ICA channels.
There are two kinds of ICA channels:
- The host channels, whose port is
icahost
- The controller channels, whose port starts with
icacontroller-
followed by the owner account address. See the spec for more details.
If you wish to only relay on a few specific standard channels (here channel-0
and channel-1
),
but also relay on all ICA channels, you can specify the following packet filter:
Note the use of wildcards in the port and channel identifiers (
['ica*', '*']
) to match over all the possible ICA ports.
[chains.packet_filter]
policy = 'allow'
list = [
['ica*', '*'], # allow relaying on all channels whose port starts with `ica`
['transfer', 'channel-0'],
['transfer', 'channel-1'],
# Add any other port/channel pairs you wish to relay on
]
If you wish to relay on all channels but not on ICA channels, you can use the following packet filter configuration:
[chains.packet_filter]
policy = 'deny'
list = [
['ica*', '*'], # deny relaying on all channels whose port starts with `ica`
]
This information can also be found in the Hermes guide.
- IBC Proto
- Add CosmWasm support to the generated Protobuf code (#1913)
- Add a new
client
feature to gate the tonic client code, implies thestd
feature. - Add a new
json-schema
feature to deriveschemars::JsonSchema
on some proto types, implies thestd
feature. - Add
#[serde(default)]
to fields that might be omitted by Golangomitempty
directive. - Change serialization of byte arrays to Base64 for compatibility with Go.
- Add a new
- Derive
Serialize
andDeserialize
foribc-proto::ibc::core
andibc_proto::ibc::applications
structs, and switch to Google's Protobuf standard types instead of Prost's types. (#1988)
- Add CosmWasm support to the generated Protobuf code (#1913)
- Relayer Library
- IBC Modules
- Refactored channels events in ICS 04 module (#718)
- Integration Test Framework
- Split out test framework as new crate
ibc-test-framework
fromibc-integration-test
. (#1961)
- Split out test framework as new crate
- Relayer Library
- Add documentation for the caching layer implemented in (#1908)
- Relayer CLI
- Print packet data on one line (#1559)
February 24th, 2022
This release notably brings compatibility with Cosmos SDK 0.45 and IBC v3.0.0-rc.0,
as well as support for non-standard ports in the channel handshake.
It also contains a fix for a bug where SendPacket
events were duplicated when emitted at EndBlock,
and fixes another bug where Hermes would clear packet at startup even when clear_on_start = false
.
The relayer will now also honor the tracing
filter specified in the RUST_LOG
environment variable, if any.
As of this release, the relayer will not respond to the SIGHUP
signal and will therefore
not reload the configuration anymore. This feature has been deemed unnecessary given the
recent performance improvements, and it is now recommended to just restart the relayer
when the configuration is updated.
Additionally, a new CLI command clear packets
has been added for clearing packets in both direction on a given channel.
- IBC Modules
- Relayer Library
- Relayer CLI
- Disable reloading of configuration upon receiving a SIGHUP signal (#1885)
- General
- Upgrade protos and compatibility to IBC v3.0.0-rc.0 and Cosmos SDK v0.45.1 (#1797)
- Relayer CLI
- Allow overriding the tracing filter with
RUST_LOG
environment variable (#1895)
- Allow overriding the tracing filter with
- IBC Modules
- Relayer Library
- Relayer CLI
- Added
clear packets
command, combining the effects oftx raw packet-recv
andtx raw packet-ack
(#1834)
- Added
February 4th, 2022
This release mainly adds support for channel events originating from Tendermint ABCI's BeginBlock
and EndBlock
methods.
- Relayer CLI
- Do not require a config file to be present for the
completions
command. (#1822)
- Do not require a config file to be present for the
January 27th, 2022
This release notably speeds up the startup time of Hermes,
adds options to the create client
command to customize the client parameters,
makes the deposit denomination configurable in tx raw upgrade-chain
via a new --denom
flag,
and adds a completions
CLI command to generate shell auto-completion scripts.
This release includes a breaking change, which requires the configuration file to be edited.
The mode.packets.filter
configuration option has been removed and is now enabled by default.
Before running Hermes v0.11.0, make sure you remove the mode.packets.filter
option from the configuration file.
--- a/config.toml
+++ b/config.toml
@@ -50,18 +50,6 @@ clear_interval = 100
# Whether or not to clear packets on start. [Default: false]
clear_on_start = true
-# Enable or disable the filtering mechanism.
-# Valid options are 'true', 'false'.
-# Currently Hermes supports two filters:
-# 1. Packet filtering on a per-chain basis; see the chain-specific
-# filter specification below in [chains.packet_filter].
-# 2. Filter for all activities based on client state trust threshold; this filter
-# is parametrized with (numerator = 1, denominator = 3), so that clients with
-# thresholds different than this will be ignored.
-# If set to 'true', both of the above filters will be enabled.
-# [Default: false]
-filter = false
-
# Toggle the transaction confirmation mechanism.
# The tx confirmation mechanism periodically queries the `/tx_search` RPC
# endpoint to check that previously-submitted transactions
- General
- Relayer Library
- Added a
denom
member toupgrade_chain::UpgradePlanOptions
(#1662)
- Added a
- IBC Modules
- Hide
ibc::Timestamp::now()
behindclock
feature flag (#1612)
- Hide
- General
- Improve startup time of the relayer (#1705)
- When scanning a chain with filtering enabled and an allow list, skip scanning all the clients and query the allowed channels directly. This results in much fewer queries and a faster start.
- Add a
--full-scan
option tohermes start
to opt out of the fast start mechanism and do a full scan.
- Update
tendermint-rs
to v0.23.4 and harmonize the dependencies to use a single TLS stack. A system installation of OpenSSL is no longer required to build Hermes. (#1641) - Remove 1 second sleep in
generate_tm_block
during testing with mock context. (#1687)
- Improve startup time of the relayer (#1705)
- IBC Modules
- Relayer Library
- Relayer CLI
January 13th, 2021
This release notably updates the underlying CLI framework (abscissa
) to version 0.6.0-beta.1,
which now uses clap
for parsing command line arguments. This substantially improves the UX of the CLI,
by adding support for --help
flags in subcommands and improving help and usage printouts.
The --version
option of the create channel
subcommand has been renamed
to --channel-version
, with the old name still supported as an alias.
Additionally, the -h
short flag on many commands is now -H
to avoid
clashes with the clap-provided short flag for help.
This release also improves the handling of account sequence mismatch errors, with a recovery mechanism to automatically retry or drop tx upon such errors.
The relayer now also supports dynamic versions in channel open handshake (which is needed by Interchain Accounts), and enables full support for IBC v2.
- General
- IBC Modules
- Add the
frozen_height()
method to theClientState
trait (includes breaking changes to the TendermintClientState
API). (#1618) - Remove
Timestamp
API that depended on thechrono
crate: (#1665):Timestamp::from_datetime
; useFrom<tendermint::Time>
Timestamp::as_datetime
, superseded byTimestamp::into_datetime
- Add the
- Relayer Library
- Improve spawning of supervisor worker tasks (#1656)
- The
Supervisor
struct is removed. - Supervisor is now spawned using the
spawn_supervisor
function.
- The
- Improve spawning of supervisor worker tasks (#1656)
- Relayer CLI
- Update to abscissa framework version 0.6.0-beta.1, adding support for
--help
flags in subcommands and improving help and usage printouts. The--version
option of thecreate channel
subcommand has been renamed to--channel-version
, with the old name still supported as an alias. Additionally, the-h
short flag on many commands is now-H
to avoid clashes with the clap-provided short flag for help. (#1576, #1743)
- Update to abscissa framework version 0.6.0-beta.1, adding support for
- IBC Modules
- Delete packet commitment instead of acknowledgement in acknowledgePacket #1573
- Set the
counterparty_channel_id
correctly to fix ICS04chanOpenAck
handler verification (#1649) - Add missing assertion for non-zero trust-level in Tendermint client initialization. (#1697)
- Fix conversion to Protocol Buffers of
ClientState
'sfrozen_height
field. (#1710)
- Relayer Library
- General
- IBC Modules
- Implement proof verification for Tendermint client (ICS07). (#1583)
- Relayer Library
- General
- Update
CONTRIBUTING.md
for latest version of unclog (#1634)
- Update
- IBC Modules
- More conventional ad-hoc conversion methods on
Timestamp
(#1665): Timestamp::nanoseconds
replacesTimestamp::as_nanoseconds
Timestamp::into_datetime
substitutesTimestamp::as_datetime
- More conventional ad-hoc conversion methods on
- Relayer CLI
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!! 🥂
This release requires operators to update their Hermes configuration.
The mode
configuration section now replaces the strategy
option.
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
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.channels.enabled
must be set to true
.
See the relevant section of the documented config.toml
file in the repository for more details.
- IBC Modules
- Set the connection counterparty in the ICS 003
connOpenAck
handler (#1532)
- Set the connection counterparty in the ICS 003
- General
- Relayer Library
- Allow for more granular control of relaying modes. The
mode
configuration section replaces thestrategy
option. (#1518)
- Allow for more granular control of relaying modes. The
- General
- IBC Modules
- Derive
PartialEq
andEq
onIbcEvent
and inner types (#1546)
- Derive
- 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
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.
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
- Update MSRV to Rust 1.56 and use the 2021 edition (#1519)
- 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.
- Added new config param
- Ensure Hermes does not send timeouts for packets that have not expired yet (#1504)
- General
- Update to official releases of
prost
0.9 andtonic
0.6 (#1502)
- Update to official releases of
- IBC Modules
- Relayer Library
- Improve performance of misbehaviour checks triggered by an
UpdateClient
event (#1417)
- Improve performance of misbehaviour checks triggered by an
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).
- IBC Modules
- The
check_header_and_update_state
method of theClientDef
trait (ICS02) has been expanded to facilitate ICS07 (#1214)
- The
- General
- Add support for the
tx.memo
field (#1433)
- Add support for the
- IBC Modules
- Add ICS07 verification functionality by using
tendermint-light-client
(#1214)
- Add ICS07 verification functionality by using
- Relayer Library
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
- 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)
- Relayer Library
- Set default trusting period to be 2/3 of unbonding period for Cosmos chains (#1392)
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.
-
Support for chains which use Secp256k1 signatures in consensus votes (#1155)
-
Modified packet worker to use stubborn strategy (#1290)
-
Skip
consensus_heights
query inupdate_client
when possible (#1362) -
Support for disabling tx confirmation mechanism (#1380)
-
- 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)
- Use
core
andalloc
crates forno_std
compatibility (#1156) - Improve performance of health check, and only perform it on
hermes start
. Add ahermes 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)
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.
-
Fix header decoding error which resulted in killing the chain runtime (#1342)
-
General
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.
-
- Set the index of
ibc::ics05_port::capabilities::Capability
(#1257)
- Set the index of
-
- Fix silent exit when requirements are missing
-
General
- Update CI to test with gaiad v5.0.5 (#1175)
-
General
- Update Modelator to 0.2.0 (#1249)
-
- Add optional destination chain and
--verbose
options forquery channels
CLI (#1132)
- Add optional destination chain and
-
- Implement
ics02_client::client_consensus::ConsensusState
forAnyConsensusState
(#1297)
- Implement
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.
- Add missing
Protobuf
impl forics03_connection::connection::Counterparty
(#1247)
- Use the
flex-error
crate to define and handle errors (#1158)
- 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)
- Add semantic validation of of
max_tx_size
andmax_num_msg
config options (#1245)
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
, andtx raw upgrade-chain
commands have been temporarily disabled in this version. These commands will be re-enabled in the next version.
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.
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.
Please have a look around the config.toml directly.
This feature will restrict the channels on which Hermes relays packets. There are two new options in the configuration file:
- A global
filter
parameter to enable or disable filtering globally. - A per-chain
.filters
option that expects apolicy
(eitherallow
ordeny
) plus a list of channel and port identifiers. If policy isallow
, then packet relaying will be restricted to this list for the corresponding chain. If the policy isdeny
, then any packets from this list will be ignored.
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
.
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.
-
Update to
tendermint-rs
v0.20.0 (#1125) -
Add inline documentation to config.toml (#1127)
-
- Hermes will now clear pending packets at a configurable interval (#1124)
- ibc-relayer
- Fix for schedule refreshing bug (#1143)
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.
-
- Add
--hd-path
option tokeys restore
andkeys add
commands to specify derivation path when importing keys (#1049)
- Add
-
- Minor log output improvements: color enabled, reduced redundant information (#1100)
-
- 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)
-
- Removed the testnet command as not all networks support it (#1050)
- Update for compatibility with Hermes's new
--hd-path
option
- ibc-relayer-cli
- Removed
--coin-type
option fromkeys restore
command. Use--hd-path
instead (#1049)
- Removed
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 tostart
, 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.
-
- Started
unwrap
cleanup (#871)
- Started
- ibc-relayer-cli
- Promote
start-multi
command tostart
(#911)
- Promote
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.
-
- Add a
--key
option to the tx raw ft-transfer command to override the account used for sending messages (#963)
- Add a
-
- 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)
- ibc-relayer
- Batch together all events from all transactions included in a block (#957)
- ibc-relayer-cli
- Prevent sending
ft-transfer
MsgTransfer on a non-Open channel (#960)
- Prevent sending
Nothing
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.
-
[scripts]
- Created the Gaiad Manager
gm
CLI tool for managing gaiad instances on the local machine (#902)
- Created the Gaiad Manager
- 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)
Nothing
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).
-
- Support for ICS27 (#794)
-
- 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)
-
- Fix parsing in
chain_version
when chain identifier has multiple dashes (#878)
- Fix parsing in
-
- 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
hermes -j query channels
command now returnsresult
array with the format[{"channel_id":"channel-0","port_id":"transfer"}, ...]
instead of["channel-0", ...]
(#840)
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.
-
Update to
tendermint-rs
v0.19.0 (#798) -
- Added
create connection
andcreate 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])
- Added
-
- Consistent identifier handling across ICS 02, 03 and 04 (#622)
-
- 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)
- Replaced
-
- Fix for proto files re-compilation bug (#801)
-
MsgConnectionOpenAck.counterparty_connection_id
is now aConnectionId
instead of anOption<ConnectionId>
(#700)
-
- Remove the light client configuration from the global configuration (#793)
-
- Remove the light add and light rm commands (#793)
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.
-
- Quick fix for
funty
breaking change bug (#665)
- Quick fix for
-
- Fix wrong acks sent with
tx raw packet-ack
in a 3-chain setup (#614)
- Fix wrong acks sent with
-
- Remove the
proof
option from CLI (#572)
- Remove the
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.
-
Continous Integration (CI) end-to-end (e2e) testing with gaia v4 (#32, #582, #602)
-
Add support for streamlining releases (#507)
-
- 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
andinit_clients
(#577)
-
- Added retry mechanism, restructured relayer (#519)
- Relay
MsgTimeoutOnClose
if counterparty channel state isState::Closed
-
Update to
tokio
1.0,prost
0.7 andtonic
0.4 (#527)
-
- Help and usage commands show 'hermes' for executable name (#590)
-
- Fix for storing
ClientType
upon 'create-client' (#513)
- Fix for storing
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').
-
Update to tendermint-rs version
0.17
(#451) -
Update to cosmos-sdk IBC proto version
v0.40.0-rc5
(#451)
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 tolight rm
command to remove all peers for a given chain (#431)
- Add
- Update to tendermint-rs version
0.17-RC3
(#403) - changelog Added "unreleased" section in
CHANGELOG.MD
to help streamline releases (#274) - ibc
- 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
- ibc/relayer-spec
- ibc-relayer
- 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)
- Split
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.
- ibc-relayer & ibc Alignment with ecosystem updates:
- ibc-relayer UX improvement: Remove proof option from client connections command (#205)
- ibc/ics03 ICS03 Ack and Confirm message processors (#223)
- ibc-relayer-cli
- ibc Routing module minimal implementation for MVP (#159, #232)
- ibc/relayer-spec Relayer specification for packet handling (#229, #234, #237)
- ibc/relayer-spec Basic packet handling in TLA+(#124)
- ibc Basic relayer functionality: a test with ClientUpdate ping-pong between two mocked chains (#276)
- 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, implementFrom
for all messages (#253) - ibc-proto
- 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)
- ibc Removed "Uninitialized" state from connection (#217)
- ibc-relayer-cli Fix for client query subcommands (#231)
- disclosure-log & spec/connection-handshake Disclosed bugs in ICS3 version negotiation and proposed a fix (#209, #213)
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. 🎉
- ibc Renamed
modules
crate toibc
crate. Version number for the new crate is not reset. (#198) - ibc/ics02
ConnectionId
s are now decoded toVec<ConnectionId>
and validated instead ofVec<String>
(#185) - ibc/ics03 Removed
Connection
andConnectionCounterparty
traits (#193) - ibc/ics04 Removed
Channel
andChannelCounterparty
traits (#192)
- ibc/ics02 partial implementation of message handler (#119, #194)
- ibc/ics07 partial implementation of message handler (#119, #194)
- architecture/ADR-003 Proposal for IBC handler (message processor) architecture (#119, #194)
- ibc/relayer-spec Detailed technical specification of the relayer algorithm with focus on client update (#84)
- architecture/ADR-001 Documentation for the repository structure (#1)
- architecture/FSM-1 Connection Handshake FSM English description (#122)
- contributing Updated CONTRIBUTING.md. Please read before opening PRs (#195)
- ibc-relayer-cli Refactor ConnectionId decoding in
query client
(#185)
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.
- [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
- ibc-relayer Query connections given client id. #169
- ibc-relayer Query connection given connection id. #136
- ibc-relayer Query channel given channel id and port #163
- [spec] Channel closing datagrams in TLA+ #141
- [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
- 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
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.