Skip to content

Releases: informalsystems/hermes

v1.8.0

23 Jan 15:35
v1.8.0
39036d1
Compare
Choose a tag to compare

January 23rd, 2024

This v1.8.0 release introduces new features and improvements to Hermes.

One key feature is that Hermes is now compatible with both the legacy UpgradeProposal and the newer MsgIbcSoftwareUpgrade message when upgrading a chain.
This allows Hermes to be compatible with ibc-go v8.0.0. The compatibility check that Hermes performs on startup has been updated to reflect this.

Additional configuration settings have been added:

  • The new global settings ics20_max_memo_size and ics20_max_receiver_size allow users to specify a limit for the size of the memo and receiver fields for ICS20 packets. Any packet with either field having a size exceeding the configured values will not be relayed.
  • The new per-chain setting query_packets_chunk_size allows users to specify how many packets are queried at once from the chain when clearing pending packets. This is useful to tweak when there are many large pending packets and the RPC endpoints times out or refuses to answer the pending packets query.
  • The new per-chain setting client_refresh_rate can be use to specify how often the clients referencing this chain should be refreshed. The rate is expressed as a fraction of the trusting period.
  • The new per-chain setting dynamic_gas_price can be enabled to have the relayer query for and use a dynamic gas price instead of using the static gas_price specified in the config. This should only be used for chains which have a EIP-1559-like fee market enabled and support the osmosis.txfees.v1beta1.Query/GetEipBaseFee gRPC query.

Telemetry now features new metrics:

  • Monitoring the ICS20 packets filtered due to the memo and/or receiver field size exceeding the configured limits.
  • Monitoring the distribution of dynamic gas fees queried from the chain, if enabled.

BREAKING CHANGES

  • Bump MSRV to 1.71 (#3688)

FEATURES

  • Relayer
    • Use legacy UpgradeProposal or newer MsgIbcSoftwareUpgrade message when upgrading
      a chain depending on whether the chain is running IBC-Go v8 or older.
      (#3696)

    • Add a new per-chain configuration table dynamic_gas_price which enables
      querying the current gas price from the chain instead of the static gas_price,
      when the chain has EIP-1559-like dynamic gas price.
      The new configuration setting can be configured per-chain as follows:

      dynamic_gas_price = { enabled = true, multiplier = 1.1, max = 0.6 }

      At the moment, only chains which support the osmosis.txfees.v1beta1.Query/GetEipBaseFee
      query can be used with dynamic gas price enabled.
      (#3738)

    • Add two new packet configurations:

      • ics20_max_memo_size which filters ICS20 packets with memo field bigger than the configured value
      • ics20_max_receiver_size which filters ICS20 packets with receiver field bigger than the configured value
        (#3766)
    • Add a client_refresh_rate setting to specify the rate at which to refresh clients referencing this chain, relative to its trusting period.
      (#3402)

    • Add a --packet-sequences flag to the clear packets, tx packet-recv, and tx packet-ack commands.
      When this flag is specified, these commands will only clear the packets with the specified sequence numbers
      on the given chain. If not provided, all pending packets will be cleared on both chains, as before.
      (#3672)

      This flag takes either a single sequence number or a range of sequences numbers.
      Each element of the comma-separated list must be either a single sequence number or
      a range of sequence numbers.

      Examples:

      • 10 will clear a single packet with sequence number 10
      • 1,2,3 will clear packets with sequence numbers 1, 2, 3
      • 1..5 will clear packets with sequence numbers 1, 2, 3, 4, 5
      • ..5 will clear packets with sequence numbers 1, 2, 3, 4, 5
      • 5.. will clear packets with sequence numbers greater than or equal to 5
      • ..5,10..20,25,30.. will clear packets with sequence numbers 1, 2, 3, 4, 5, 10, 11, ..., 20, 25, 30, 31, ...
      • ..5,10..20,25,30.. will clear packets with sequence numbers 1, 2, 3, 4, 5, 10, 11, ..., 20, 25, 30, 31, ...
    • Add a --gov-account option to hermes tx upgrade-chain to specify the authority account used to sign upgrade proposal for chains running IBC-Go v8+.
      (#3696)

    • Add a query_packets_chunk_size config option and a --query-packets-chunk-size flag to the clear packets CLI to configure how
      many packets to query at once from the chain when clearing pending packets. Lower this setting if one or more of packets you are
      trying to clear are huge and make the packet query time out or fail.
      (#3743)

  • Telemetry & Metrics
    • Add three metrics related to EIP gas price:
    • dynamic_gas_queried_fees contains data on the queried values before applying any filter
    • dynamic_gas_queried_success_fees contains data on the queried values if the query was successful and before applying any filter
    • dynamic_gas_paid_fees contains data on the queried values after applying the max filter
      (#3738)
    • Add a new metric filtered_packets which counts the number of packets filtered due to having a memo or receiver field too big
      (#3794)
  • Integration Test Framework
    • Add a test for asynchronous Interchain Query relaying
      (#3455)
    • Add an ICA test to assert a channel correctly closes after a packet time-outs
      (#3778)

IMPROVEMENTS

  • Relayer CLI
    • Update compatibility check to allow IBC-Go 4.1.1 to 8.x and SDK 0.45.x to 0.50.x.
      (#3745)

v1.7.4

15 Dec 09:11
v1.7.4
ab73266
Compare
Choose a tag to compare

December 15th, 2023

Special thanks to Yun Yeo (@beer-1) for their contributions (#3697 and #3703).

This release improves the monitoring of Hermes instances by fixing the broadcast_errors metric so that it correctly batches the same errors together. It also improves the metrics backlog_* by updating them whenever Hermes queries pending packets.

This release also improves the reliability of the idle worker clean-up and fixes a bug within the evidence command which would sometimes prevent the misbehaviour evidence from being reported.

BUG FIXES

  • Relayer CLI
    • Fix a bug in the evidence command which would sometimes prevent the detected misbehaviour evidence from being submitted, instead erroring out with a validator set hash mismatch. (#3697)
  • Relayer Library
    • Avoid retrieving a worker which is being removed by the idle worker clean-up process. (#3703)
  • Telemetry & Metrics
    • Fix the issue where broadcast_errors metric would not correctly batch the same errors together. (#3720)
    • Update the values of backlog metrics when clearing packets.
      Change the backlog_oldest_timestamp to backlog_latest_update_timestamp which shows the last time the backlog metrics have been updated. (#3723)

Full changes: v1.7.3...v1.7.4

v1.7.3

29 Nov 16:31
v1.7.3
e529d25
Compare
Choose a tag to compare

November 29th, 2023

This release improves the reliability of the evidence command and fixes a bug that was preventing evidence to be reported, as seen on the Gaia RS testnet.

BUG FIXES

  • Relayer CLI
    • Improve reliability of evidence command and fix a bug that was preventing evidence to be reported, as seen on the Gaia RS testnet (#3702)

Full changes: v1.7.2...v1.7.3

v1.7.2

28 Nov 16:21
v1.7.2
c3210fc
Compare
Choose a tag to compare

November 28th, 2023

v1.7.2

November 28th, 2023

This patch release of Hermes adds a metric to improve monitoring errors and one
to measure the efficiency of the client update skip feature released in patch v1.7.1.

  • broadcast_errors records the number of times a specific error is observed by Hermes when broadcasting transactions.
  • client_updates_skipped records the number of client updates skipped due to the consensus states already existing.

FEATURES

  • Telemetry & Metrics
    • Added metric client_updates_skipped to track the number of client
      update messages skipped due to the conscensus state existing already.
      (#3707)
    • Add a new metric broadcast_errors which
      records the number of times a specific error is observed by Hermes when broadcasting transactions
      (#3708)

Full changes: v1.7.1...v1.7.2

v1.7.1

13 Nov 11:32
v1.7.1
0658526
Compare
Choose a tag to compare

November 13th, 2023

This patch release of Hermes now allows operators to set the clearing interval at a different value for each chain, using the new per-chain clear_interval setting. The global clear_interval setting is used as a default value if the per-chain setting is not defined.

Additionnaly, operators can now override the CometBFT compatibility mode to be used for a chain by using the new compat_mode per-chain setting. The main use case for this is to override the automatically detected compatibility mode in case Hermes gets it wrong or encounters a non-standard version number and falls back on the wrong CometBFT version.

On top of that, Hermes will now attempt to save on fees by not building a client update for a given height if the consensus state for that height is already present on chain.

FEATURES

  • Add an optional per-chain setting compat_mode, which can be used to specify which CometBFT compatibility mode is used for interacting with the node over RPC. (#3623)
  • Add a configuration which allows to override the clear_interval for specific chains (#3691)

IMPROVEMENTS

  • Hermes now saves on fees by not including a client update if the consensus state at desired height is already present on chain. (#3521)

Full changes: v1.7.0...v1.7.1

v1.7.0

21 Oct 09:20
v1.7.0
ac916f5
Compare
Choose a tag to compare

October 20th, 2023

This v1.7 release introduces new features and improvements to Hermes.

One of the key highlights is the addition of new misbehavior detection features.

  • Hermes now includes a new command called evidence, which monitors the blocks emitted by a chain for any presence of misbehavior evidence.
  • If misbehavior is detected, the CLI will report that evidence to all counterparty clients of that chain.
    On top of that, misbehavior evidence detected on a chain that is a CCV (Cross-Chain Validation) consumer is now sent to its provider chain, alerting it directly of the misbehaving consumer chain.
  • Furthermore, when misbehavior is detected from an on-chain client, such as a light client attack or a double-sign, the evidence is now submitted to all counterparty clients of the misbehaving chain, rather than just the counterparty client of the misbehaving client.

In addition, the REST server of Hermes now has a /clear_packets endpoint which allows triggering packet clearing for a specific chain or all chains if no specific chain is provided.

Another notable improvement is the ability to change tracing directives at runtime.
This feature lets users adjust tracing settings dynamically as needed, providing a more customizable and efficient debugging experience.

Overall, the new misbehavior detection features in Hermes contribute to a more robust and secure environment, enabling timely identification and response to potential misbehaving actors.

FEATURES

  • Relayer CLI
    • Add a new evidence command for monitoring the blocks emitted by a chain for the presence of a misbehaviour evidence, and report that evidence to all counteparty clients of that chain. (#3456)
    • Add a /clear_packets?chain=CHAIN_ID endpoint to the built-in REST server to trigger packet clear for the chain specified in the chain query param or for all chains if the query param is omitted. (#3398)
    • Add support for changing tracing directives at runtime. ([#3564]
      Please see the corresponding page in the Hermes guide for more information.(#3564))

IMPROVEMENTS

  • Relayer Library
    • When Hermes detects a misbehaviour on a chain that is CCV consumer, it will now send the misbehaviour evidence to the provider chain using the new IcsConsumerMisbehaviour message. (#3219)
    • When Hermes detects a misbehaviour from a on-chain client, eg. a light client attack or a double-sign, it will now submit the misbehaviour evidence to all counterparty clients of the misbehaving chain instead of to the counterparty client of the misbehaving client only. (#3223)
    • Improve error message when scanning unsupported client (#3531)
    • Regard the finalize_block_events field of the block_results RPC endpoint, added in CometBFT 0.38 (#3548)
    • Change fallback compatibility version for CometBFT from v0.37 to v0.34 (#3666)
  • Relayer CLI
    • The listen command now works with both push and pull event sources (#3501)

BUG FIXES

What's Changed

Read more

v1.6.0

19 Jul 07:38
v1.6.0
1c1cf02
Compare
Choose a tag to compare

July 19th, 2023

This release of Hermes notably features a new pull-based event source which fetches events from the chain periodically using
the /block_results RPC endpoint instead of getting them over WebSocket.

To use the new pull-based event source, set

event_source = { mode = 'pull', interval = '1s' }`

in the per-chain configuration.

Check the event_source setting in the example config.toml file in the Hermes repository for more details.

Additionally, it is now possible to skip the scanning phase during Hermes startup, by disabling clients, connections and channels workers, and setting clear_on_start to false. This significantly improve startup time when relaying on chains with hundreds or thousands of open channels, connections and clients.
See the Performance tuning page of the guide for more information.

Note for operators

⚠️ Be aware that this release contains breaking changes to the Hermes configuration.
⚠️ Please consult the UPGRADING.md document for more details.

BREAKING CHANGES

  • The websocket_addr configuration option has been removed in favour of the new event_source setting.
    Please consult the UPGRADING.md document for more details.
  • Bump MSRV to 1.71 (#3478)

BUG FIXES

  • Relayer CLI
    • Install CA certificates in Docker image for Hermes to be able to connect to TLS endpoints (#3423)
  • Relayer Library
    • Fix a bug where Hermes would discard the client updates corresponding to the supporting headers returned by the light client when assembling messages to relay from the operational data (#3465)

FEATURES

  • Relayer Library
    • Add a pull-based event source which fetches events from the chain periodically using the /block_results RPC endpoint instead of getting them over WebSocket.

      To use the pull-based event source, set event_source = { mode = 'pull', interval = '1s' } in the per-chain configuration.

      Warning
      Only use this if you think Hermes is not getting all the events it should, eg. when relaying for a CosmWasm-enabled blockchain which emits IBC events in a smart contract where the events lack the message attribute key.
      See #3190 and #2809 for more background information.
      (#2850)

  • Integration Test Framework
    • Add integration tests for the Fee Grant module. (#3416)
    • Add a new trait InterchainSecurityChainTest and two functions run_binary_interchain_security_node_test and run_binary_interchain_security_channel_test which can be used to bootstrap a Provider and Consumer chain for integration tests. Add a CI job to run tests with Gaia as a provider chain and Neutron as a Consumer chain.
      (#3450) (#3387)

IMPROVEMENTS

  • Relayer CLI
    • By disabling clients, connections and channels workers, and setting clear_on_start to false, Hermes will now skip the scanning phase during startup, significantly improve startup time when relaying on chains with hundreds or thousands of open channels, connections and/or clients. See the Performance tuning page of the guide for more information. (#3403)
  • Relayer Library
    • Hermes will now automatically shutdown inactive workers to reduce the consumption of host system resources (#3385)
    • Query the /genesis RPC endpoint to retrieve the value of max_expected_time_per_block and use it for max_block_time. (#3211)
  • Telemetry & Metrics
    • Add two new configurations for the telemetry buckets:
    • latency_submitted used to specify the range and number of buckets for the tx_latency_submitted metric.
    • latency_confirmed used to specify the range and number of buckets for the tx_latency_confirmed metric.
      (#3366)
  • Integration Test Framework
    • Update ICA tests to use ibc-go's simd instead of interchain-accounts-demo. (#3353)
    • Update simd version used in integration tests from v7.0.0 to v7.1.0 (#3434)

What's Changed

New Contributors

Full changes: v1.5.1...v1.6.0

v1.5.1

05 Jun 15:48
v1.5.1
6583d69
Compare
Choose a tag to compare

June 5th, 2023

This is a patch release for Hermes, which includes a single bugfix and enables overflow checks in production builds.

BUG FIXES

  • Fix a panic which can occur when querying connections filtered by counterparty chain using hermes query connections (#3381)

IMPROVEMENTS

  • Overflow checks are now enabled when Hermes is built in release mode, in order to better catch and address potential logic errors leading to overflows (#3390)

What's Changed

Full Changelog: v1.5.0...v1.5.1

v1.5.0

24 May 16:03
v1.5.0
4f88912
Compare
Choose a tag to compare

May 24th, 2023

🎉 Hermes v1.5.0 is here, packed with a slew of exciting updates, including breaking changes💥, brand-new features🎁, performance enhancements🚀, and sweeping improvements✨.

The one breaking change is the removal of the unbonding_period setting from the chain configuration. This is now replaced by a fresh ccv_consumer_chain setting for Cross-Chain Validation (CCV) consumer chains.

Also, Hermes has strengthened its misbehavior detection. With the mode.misbehaviour.enabled setting enabled (now the case by default) the relayer was already closely monitoring on-chain client updates, comparing submitted headers with those fetched from its RPC node. In the event of any discrepancy, Hermes would report the misbehaviour to the chain hosting the IBC client. As of this version, Hermes will also report the misbehaviour evidence to the reference chain.

This version rolls out a string of performance enhancements. Event batches are now delivered after a configurable delay, greatly trimming down latency when relaying, particularly on high-traffic channels. This can be adjusted using the batch_delay setting in the per-chain configuration. Plus, packet acknowledgments are only queried when there are packet commitments on the counterparty, resulting in a major speed boost for packet clearing and on-start scanning! 🚀

In addition, the trusted_node setting can now specify whether the full node Hermes connects to is trusted or not. If untrusted, the light client will verify headers included in the ClientUpdate message. However, a word of caution: configuring the full node as trusted may cut down latency but could risk sending invalid client updates to the chain. Use wisely! ⚠️
Our Hermes guide has been re-organized a bit, now featuring a new Performance Tuning page that details the settings for optimizing the performance of the relayer.

For all the debuggers out there, Hermes now equips a new --debug global flag with several selectable values, and two bonus flags, --archive-address and --restart-height that enable a client update following a genesis restart without an IBC upgrade proposal.

When it comes to telemetry, the destination chain is now added to the labels of the confirmed packet metrics.

Take note that some metrics now have the suffix _total. If you're using a running a Grafana dashboard or any other tool relying on the metric names or labels, an update might be needed. The corresponding page in the guide reflects the new metric names and labels for your convenience.

There's also a fresh configuration option to specify the directory used for the keyring store.

From this version onwards, multi-platform (arm64 and amd64) images will be distributed both on Docker Hub and the GitHub Content Repository.

Note for operators

⚠️ Be aware that this release contains a couple breaking
⚠️ changes to the Hermes configuration and telemetry metrics.
⚠️ Please consult the UPGRADING.md document for more details.

What's changed

  • Improved tests for 'hermes config auto' by @ljoss17 in #3287
  • Use dependabot for Github Actions by @faddat in #3304
  • Publish multi-platform (arm64/amd64) images to Docker Hub and GHCR by @faddat in #3305
  • Add changelog entry for #3303 by @romac in #3316
  • Output profiling data as JSON, with additional metadata by @romac in #3329
  • Allow gRPC calls with larger query responses by @ljoss17 in #3335
  • Add destination chain to confirmed packet metrics by @ljoss17 in #3302
  • Document metric label updates by @ljoss17 in #3343
  • Add migaloo ics29 tests by @ljoss17 in #3346
  • Emit events batch after a configurable delay by @romac in #3327
  • Detect light client attacks and report them to both the chain and the RPC node by @romac in #3224
  • Only query for packet acks when there are packet commitments on the counterparty by @romac in #3347
  • Allow disabling header verification by setting trusted_node = true in the chain config by @romac in #3328
  • Improve visibility of config auto command by @seanchen1991 in #3301
  • Add --debug=rpc and --debug=profiling flags for enabling debug output by @romac in #3352
  • Handle duplicate packet events and perform full clearing even in the presence of errors by @romac in #3361
  • Revert "Send consumer misbehaviour message IcsConsumerMisbehaviour to the provider" by @romac in #3242
  • Release Hermes v1.5.0 by @romac in #3363
    Full Changelog: v1.4.1...v1.5.0

v1.4.1

02 May 10:28
v1.4.1
45b5c29
Compare
Choose a tag to compare