v2.5.0
The long-awaited v2.5.0
release comes with quite a few new notable features, a handful of enhancements, and a long list of fixes and performance tweaks. Core dependencies have been upgraded to ensure rly
now supports the CometBFT v0.38.x, Cosmos SDK v0.50.x, and ibc-go v8.0.x lines.
Highlighted Features
External feegrants
You can now use feegrant enabled addresses associated with private keys that the relayer operator does not actually have control of. This means that the grantees are authorized externally, i.e. someone else controls the granter's private key.
Previously, the feegrant feature only supported addresses associated with private keys the relayer operator controlled and had configured via the relayer.
See: (#1338)
CometBFT client wrapper
With the introduction of CometBFT v0.38.0 we were originally maintaining a fork of CometBFT to account for breaking changes to the API exposed via the RPC client, notably the BlockResults
call. This approach was both brittle and problematic due to duplicate proto types being registered.
We have now introduced cometbft-client as a dependency in the relayer. The new dependency serves as a slimmed-down version of CometBFT which only includes the packages and source code files necessary to utilize the RPC client. This allows us to avoid maintaining an entire fork of the repo, while also having fine-grained control over breaking changes introduced in CometBFT moving forward to ensure backwards compatibility with older versions.
Configurable limits on receiver and ICS-20 memo fields
Users can now configure a max size limit on both the receiver and ICS-20 memo fields via the new config fields MaxReceiverSize
& ICS20MemoLimit
respectively.
This allows relayer operators to ignore ICS-20 packets with receiver or memo fields whose size is greater than these configured values.
See: (#1377)
Ability to fine-tune client creation parameters
A few new flags have been added to enable a greater level of configuration when initializing new IBC light clients via the rly tx clients
and rly tx client
commands.
-
--max-clock-drift
sets theMaxClockDrift
value; if not set, the default value of 10 minutes is used. -
--client-tp-percentage
, overrides the current trusting period value utilized by the relayer when creating a new client, which is currently 85% of a chain's unbonding period. If a user specifies a custom trusting period with the existingclient-tp
flag this value is ignored. -
--client-unbonding-period
enables setting a custom unbonding period when creating a new client. This is useful because, in order to substitute an expired client with a new one, the new client must match the expired client's state (which includes the unbonding period). Failure to ensure these values match results in an error in ibc-go.
See: (#1369), (#1365) & (#1313)
Stuck packet flushing
Adds the new flags --stuck-packet-chain-id
, --stuck-packet-height-start
, and --stuck-packet-height-end
to the rly tx start
and rly tx flush
commands. These new flags are used for starting up the CosmosChainProcessor
by querying a specific range for a chain ID before jumping to current and relaying anything that needs to be handled by the queried range.
This is useful if stuck packets have been identified between a particular range of block heights. Without this feature, operators would normally have to start the relayer with a large initial block history via the --block-history
flag, this can be incredibly resource and time-intensive for larger values.
Note: This is for advanced usage only and should only be used for mitigation scenarios, as the relayer will not have a full picture of what happened between --stuck-packet-height-end
and the current chain tip. This could lead to failures if packets were already handled since the stuck packet height range.
See: (#1296)
Additional Features
- Add Prometheus metrics for unrelayed-packets and unrelayed-acknowledgments. (#1356)
- Add the ability to configure log level in global config. (#1324)
- Setup keys for all configured chains with a single mnemonic with the
--restore-all
flag inrly keys restore
. (#1190) - Edit configured RPC endpoints for a chain using the
rly chains set-rpc
command. (#1292)
Enhancements
- Ensure that ✘ is displayed for clients if they are expired in
rly path list
. (#1352) - Make tx broadcast errors more verbose. (#1344)
- Add unbonding period to client expiration query. (#1327)
Fixes
- Retry to send packets if 5 blocks have passed since last broadcast attempt completed vs. since last broadcast attempt occurred. (#1393)
- Fix flush race which caused acknowledgements to not be fully cleared from the caches when giving up on sending a packet message after max retries. (#1363)
- Register concrete type for type URL of EthAccount. (#1390)
- Update penumbra protos and fix tx.go, query.go with new apis. (#1379)
- Add handling for MsgTimeout in Penumbra ChainProvider. (#1378)
- Ensure gas simulation returns proper gas amount for feegrants. (#1364)
- Fix Prometheus metric
cosmos_relayer_observed_packets
observing packets on irrelevant channels. (#1345) - Properly pipe memo from cli to broadcast tx logic for MsgTransfer and MsgRegisterCounterpartyPayee. (#1362)
- Update penumbra protos & make adjustments to account for CometBFT upgrade. (#1360)
- Use ibc-data prefix in QueryTendermintProof in Penumbra ChainProvider. (#1361)
- Fix getAnchor function in Penumbra ChainProvider so it doesn't query out of range heights. (#1358)
- Update Penumbra proof spec to new multistore format. (#1355)
- Add
_total
suffix to counter metrics. (#1347) - Use the ChainProvider's
InterfaceRegistry
instead of creating a new default one. (#1346) - Fix
cosmos_relayer_tx_failure
metric counting the same error multiple times. (#1343) - Cleanup cached
MsgChannelCloseInit
msgs afterMsgChannelCloseConfirm
is observed. (#1326) - Add does not exist check for
loadConfigFile
error. (#1325) - Add missing
MsgChannelCloseConfirm
msg type when parsing from events. (#1196) - Fix issue with packets being relayed even when estimated gas is higher than configured max gas limit. (#1302)
- Properly set max gas limit when configured value is greater than zero. (#1303)
Other
- Update security procedures for Hacker One Program. (#1382)
- Add ICS-29 guide to
docs/
. (#1375) - Update relayer troubleshooting doc. (#1350)
- Clean up docs and fix typos. (#1319)
- Remove problematic self hosted GitHub runners. (#1306)
Changelog
- d821ab7 retry only if processing completed for a packet (#1393)
- 4c41650 build(deps): bump github.com/opencontainers/runc in /interchaintest (#1392)
- be5a4cf ci: bump goreleaser-cross version (#1391)
- a9ce8d6 Problem: no concrete type registered for type URL of EthAccount (#1390)
- f76614d update penumbra protos and fix tx.go, query.go with new apis (#1379)
- 287354b Fix flush race (#1363)
- ef1578e refactor: encapsulate slim client in wrapper (#1388)
- 7cb083c External feegrants (#1338)
- 5ab55c0 feat: add configurable limits for receiver and ICS-20 memo fields (#1377)
- 1ef7db5 feat: introduce cometbft client wrapper to eliminate forked repo (#1384)
- 9bd144e Update Security Procedures for Hacker One Program (#1382)
- 4ad5ab2 fix: add handling for MsgTimeout in Penumbra ChainProvider (#1378)
- caf9d52 When creating a client, make
max-clock-drift
configurable (#1369) - 3b05fdb add ICS-29 guide to path docs (#1375)
- 71acbb8 build(deps): bump github.com/containerd/containerd in /interchaintest (#1372)
- c98f389 build(deps): bump github.com/dvsekhvalnov/jose2go in /interchaintest (#1371)
- 820caf5 build(deps): bump github.com/dvsekhvalnov/jose2go from 1.5.0 to 1.6.0 (#1370)
- c017b8c build(deps): bump golang.org/x/crypto from 0.15.0 to 0.17.0 (#1366)
- 3655821 build(deps): bump golang.org/x/crypto in /interchaintest (#1367)
- 56a534c Link custom client trusting period ratio (#1365)
- ba17805 Add Prometheus metrics for
unrelayed-packets
andunrelayed-acknoledgments
(#1356) - f52b342 Update troubleshoot doc (#1350)
- 523748e Problem: simulate gas is less than required with feegrants (#1364)
- cfe8b93 fix: Observed Packet Metric (#1345)
- 654ea9f fix: pipe memo from cli to broadcast tx logic for
MsgTransfer
andMsgRegisterCounterpartyPayee
(#1362) - 912472c fix: update penumbra protos & make adjustments to account for cometbft upgrade (#1360)
- 8669bf0 penumbra: use ibc-data prefix in QueryTendermintProof (#1361)
- cf2754a penumbra provider: fix getAnchor: don't query out of range heights (#1358)
- dd40ff2 penumbra: update proof spec to new multistore format (#1355)
- 7f03bc7 rename metric (#1347)
- 1c18c2b Ensure that ✘ is displayed for clients if they are expired (#1352)
- c6e5bdb fix: Use the provider IR instead of creating a new one (#1346)
- 7efcd30 verbose tx error (#1344)
- 34d3d4f fix:
cosmos_relayer_tx_failure
metric redundant count (#1343) - be8ebe0 Auto add issues to Strangelove project board (#1337)
- d0b2700 deps: bump version numbers for handful of deps (#1334)
- 7e02760 Add Unbonding Period to
clients-expiration
query. (#1327) - c0783eb upgrade deps for cometbft v0.38.0, ibc-go v0.8.0, sdk v0.50.0 and handle breaking changes (#1312)
- 27cf122 fix: cleanup close init after close confirmed (#1326)
- 2c60f6c feat: add log-level in global config (#1324)
- 9b80dd0 fix: add not exist check for loadConfigFile error (#1325)
- 26aa983 Create new client with custom unbonding period (#1313)
- e4e9f27 docs: fix typos (#1319)
- d0deac5 Harry/wallet init (#1190)
- cc75c04 fix: add missing msg type when parse from event (#1196)
- cb4708b edit rpc endpoints using command (#1292)
- 200d0fb Remove self hosted runners (#1306)
- 6bd9c02 Stuck packet (#1296)
- 892e52c Problem: packet get relayed even estimated gas is higher than max gas (#1302)
- a3cb991 Problem: estimate less gas when miss max gas on txf when simualte runTx (#1303)