diff --git a/.changelog/v1.10.3/bug-fixes/ibc-chain-registry/4160-explicit-rootls-config.md b/.changelog/v1.10.3/bug-fixes/ibc-chain-registry/4160-explicit-rootls-config.md new file mode 100644 index 0000000000..8bccf778ae --- /dev/null +++ b/.changelog/v1.10.3/bug-fixes/ibc-chain-registry/4160-explicit-rootls-config.md @@ -0,0 +1,2 @@ +- Add explicit root TLS configuration to gRPC clients + ([\#4160](https://github.com/informalsystems/hermes/issues/4160)) \ No newline at end of file diff --git a/.changelog/v1.10.3/bug-fixes/ibc-relayer-cli/3951-exclude-sequences-with-clear-cli.md b/.changelog/v1.10.3/bug-fixes/ibc-relayer-cli/3951-exclude-sequences-with-clear-cli.md new file mode 100644 index 0000000000..aca6d720ec --- /dev/null +++ b/.changelog/v1.10.3/bug-fixes/ibc-relayer-cli/3951-exclude-sequences-with-clear-cli.md @@ -0,0 +1,3 @@ +- Correctly filter out sequences from the `excluded_sequences` configuration + when clearing packets with the `clear packet` CLI. + ([\#4158](https://github.com/informalsystems/hermes/issues/4158)) \ No newline at end of file diff --git a/.changelog/v1.10.3/bug-fixes/ibc-relayer/4160-explicit-rootls-config.md b/.changelog/v1.10.3/bug-fixes/ibc-relayer/4160-explicit-rootls-config.md new file mode 100644 index 0000000000..8bccf778ae --- /dev/null +++ b/.changelog/v1.10.3/bug-fixes/ibc-relayer/4160-explicit-rootls-config.md @@ -0,0 +1,2 @@ +- Add explicit root TLS configuration to gRPC clients + ([\#4160](https://github.com/informalsystems/hermes/issues/4160)) \ No newline at end of file diff --git a/.changelog/unreleased/features/ibc-integration-test/4151-add-ibc-go-v9.md b/.changelog/v1.10.3/features/ibc-integration-test/4151-add-ibc-go-v9.md similarity index 100% rename from .changelog/unreleased/features/ibc-integration-test/4151-add-ibc-go-v9.md rename to .changelog/v1.10.3/features/ibc-integration-test/4151-add-ibc-go-v9.md diff --git a/.changelog/unreleased/improvements/ibc-integration-test/4123-update-celestia-to-v1-14-0.md b/.changelog/v1.10.3/improvements/ibc-integration-test/4123-update-celestia-to-v1-14-0.md similarity index 100% rename from .changelog/unreleased/improvements/ibc-integration-test/4123-update-celestia-to-v1-14-0.md rename to .changelog/v1.10.3/improvements/ibc-integration-test/4123-update-celestia-to-v1-14-0.md diff --git a/.changelog/v1.10.3/improvements/ibc-integration-test/4168-update-neutron-v4-2-2.md b/.changelog/v1.10.3/improvements/ibc-integration-test/4168-update-neutron-v4-2-2.md new file mode 100644 index 0000000000..1ca212bf53 --- /dev/null +++ b/.changelog/v1.10.3/improvements/ibc-integration-test/4168-update-neutron-v4-2-2.md @@ -0,0 +1,2 @@ +- Update the version of Neutron running the integration tests in the CI from `v4.1.0` + to `v4.2.2` ([\#4168](https://github.com/informalsystems/hermes/issues/4168)) \ No newline at end of file diff --git a/.changelog/v1.10.3/improvements/ibc-integration-test/4169-update-wasmd-to-v0-53-0.md b/.changelog/v1.10.3/improvements/ibc-integration-test/4169-update-wasmd-to-v0-53-0.md new file mode 100644 index 0000000000..3caa36c8e6 --- /dev/null +++ b/.changelog/v1.10.3/improvements/ibc-integration-test/4169-update-wasmd-to-v0-53-0.md @@ -0,0 +1,2 @@ +- Update the version of `wasmd` running the integration tests in the CI from `v0.52.0` + to `v0.53.0` ([\#4169](https://github.com/informalsystems/hermes/issues/4169)) \ No newline at end of file diff --git a/.changelog/v1.10.3/improvements/ibc-integration-test/4171-update-juno-v24.md b/.changelog/v1.10.3/improvements/ibc-integration-test/4171-update-juno-v24.md new file mode 100644 index 0000000000..e5d46c87f5 --- /dev/null +++ b/.changelog/v1.10.3/improvements/ibc-integration-test/4171-update-juno-v24.md @@ -0,0 +1,2 @@ +- Update the version of Juno running the integration tests in the CI from `v23.0.0` + to `v24.0.0` ([\#4171](https://github.com/informalsystems/hermes/issues/4171)) \ No newline at end of file diff --git a/.changelog/v1.10.3/improvements/ibc-relayer/4102-abci-query-during-health-check.md b/.changelog/v1.10.3/improvements/ibc-relayer/4102-abci-query-during-health-check.md new file mode 100644 index 0000000000..6f2613b12d --- /dev/null +++ b/.changelog/v1.10.3/improvements/ibc-relayer/4102-abci-query-during-health-check.md @@ -0,0 +1,3 @@ +- Use `abci_query` instead of gRPC queries when retrieving staking params + and service config during health-check, and when retrieving version information. + ([\#4102](https://github.com/informalsystems/hermes/issues/4102)) \ No newline at end of file diff --git a/.changelog/v1.10.3/summary.md b/.changelog/v1.10.3/summary.md new file mode 100644 index 0000000000..c7343de8ea --- /dev/null +++ b/.changelog/v1.10.3/summary.md @@ -0,0 +1,5 @@ +*September 2nd, 2024* + +This release fixes an issue where Hermes could not connect to gRPC servers over TLS. Additionally, this release also fixes a bug in the `clear packet` CLI where the `excluded_sequences` configuration option was not always taken into account. + +Furthermore, Hermes now uses `abci_query` instead of gRPC for some queries, for instance for querying staking parameters and service configuration during health checks, and when retrieving version information. diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index 07e4ced41e..744d133b3d 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -84,7 +84,7 @@ jobs: command: junod account_prefix: juno native_token: stake - features: juno,forward-packet,ica + features: juno,forward-packet,ica,ics29-fee - package: provenance command: provenanced account_prefix: pb @@ -95,11 +95,13 @@ jobs: account_prefix: migaloo native_token: stake features: ics29-fee,ica,forward-packet - - package: injective - command: injectived - account_prefix: inj - native_token: stake - features: forward-packet,fee-grant + # Disable Injective because wasmvm hasn't been correctly + # wired for Injective in Cosmos Nix + #- package: injective + # command: injectived + # account_prefix: inj + # native_token: stake + # features: forward-packet,fee-grant steps: - uses: actions/checkout@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 30c45e4840..f901697dd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,48 @@ # CHANGELOG +## v1.10.3 + +*September 2nd, 2024* + +This release fixes an issue where Hermes could not connect to gRPC servers over TLS. Additionally, this release also fixes a bug in the `clear packet` CLI where the `excluded_sequences` configuration option was not always taken into account. + +Furthermore, Hermes now uses `abci_query` instead of gRPC for some queries, for instance for querying staking parameters and service configuration during health checks, and when retrieving version information. + +### BUG FIXES + +- [Chain Registry](chain-registry) + - Add explicit root TLS configuration to gRPC clients + ([\#4160](https://github.com/informalsystems/hermes/issues/4160)) +- [Relayer Library](relayer) + - Add explicit root TLS configuration to gRPC clients + ([\#4160](https://github.com/informalsystems/hermes/issues/4160)) +- [Relayer CLI](relayer-cli) + - Correctly filter out sequences from the `excluded_sequences` configuration + when clearing packets with the `clear packet` CLI. + ([\#4158](https://github.com/informalsystems/hermes/issues/4158)) + +### IMPROVEMENTS + +- [Relayer Library](relayer) + - Use `abci_query` instead of gRPC queries when retrieving staking params + and service config during health-check, and when retrieving version information. + ([\#4102](https://github.com/informalsystems/hermes/issues/4102)) +- [Integration Test Framework](tools/test-framework) + - Update the version of Celestia running the integration tests in the CI from `v1.11.0` + to `v1.14.0` ([\#4123](https://github.com/informalsystems/hermes/issues/4123)) + - Update the version of Neutron running the integration tests in the CI from `v4.1.0` + to `v4.2.2` ([\#4168](https://github.com/informalsystems/hermes/issues/4168)) + - Update the version of `wasmd` running the integration tests in the CI from `v0.52.0` + to `v0.53.0` ([\#4169](https://github.com/informalsystems/hermes/issues/4169)) + - Update the version of Juno running the integration tests in the CI from `v23.0.0` + to `v24.0.0` ([\#4171](https://github.com/informalsystems/hermes/issues/4171)) + +### FEATURES + +- [Integration Test Framework](tools/test-framework) + - Add ibc-go `v9` to the chains running the integration tests in the CI. + ([\#4151](https://github.com/informalsystems/hermes/issues/4151)) + ## v1.10.2 *August 14th, 2024* diff --git a/Cargo.lock b/Cargo.lock index 6fdc776fd2..e87f1cc43d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -271,9 +271,9 @@ checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii-canvas" @@ -327,7 +327,7 @@ dependencies = [ "futures-util", "log", "pin-project-lite", - "rustls-native-certs 0.7.1", + "rustls-native-certs 0.7.3", "rustls-pki-types", "tokio", "tokio-rustls 0.25.0", @@ -342,7 +342,7 @@ checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" dependencies = [ "futures", "pharos", - "rustc_version 0.4.0", + "rustc_version 0.4.1", ] [[package]] @@ -677,7 +677,7 @@ checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq 0.3.0", + "constant_time_eq 0.3.1", ] [[package]] @@ -688,20 +688,20 @@ checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq 0.3.0", + "constant_time_eq 0.3.1", ] [[package]] name = "blake3" -version = "1.5.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9ec96fe9a81b5e365f9db71fe00edc4fe4ca2cc7dcb7861f0603012a7caa210" +checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", - "constant_time_eq 0.3.0", + "constant_time_eq 0.3.1", ] [[package]] @@ -894,9 +894,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.11" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb8dd288a69fc53a1996d7ecfbf4a20d59065bff137ce7e56bbd620de191189" +checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" dependencies = [ "jobserver", "libc", @@ -1182,9 +1182,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "contracts" @@ -1305,9 +1305,9 @@ dependencies = [ [[package]] name = "ct-codecs" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b7eb4404b8195a9abb6356f4ac07d8ba267045c8d6d220ac4dc992e6cc75df" +checksum = "026ac6ceace6298d2c557ef5ed798894962296469ec7842288ea64674201a2d1" [[package]] name = "ctr" @@ -1329,7 +1329,7 @@ dependencies = [ "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "subtle", "zeroize", ] @@ -1548,7 +1548,7 @@ dependencies = [ "serde", "thiserror", "time", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -2094,9 +2094,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fd-lock" @@ -2477,9 +2477,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -2726,7 +2726,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "httparse", @@ -2904,7 +2904,7 @@ dependencies = [ [[package]] name = "ibc-chain-registry" -version = "0.29.2" +version = "0.29.3" dependencies = [ "async-trait", "flex-error", @@ -3276,7 +3276,7 @@ dependencies = [ [[package]] name = "ibc-integration-test" -version = "0.29.2" +version = "0.29.3" dependencies = [ "byte-unit", "http 1.1.0", @@ -3335,7 +3335,7 @@ dependencies = [ [[package]] name = "ibc-relayer" -version = "0.29.2" +version = "0.29.3" dependencies = [ "anyhow", "async-stream", @@ -3409,7 +3409,7 @@ dependencies = [ [[package]] name = "ibc-relayer-cli" -version = "1.10.2" +version = "1.10.3" dependencies = [ "abscissa_core", "clap 3.2.25", @@ -3450,7 +3450,7 @@ dependencies = [ [[package]] name = "ibc-relayer-rest" -version = "0.29.2" +version = "0.29.3" dependencies = [ "axum 0.6.20", "crossbeam-channel", @@ -3466,7 +3466,7 @@ dependencies = [ [[package]] name = "ibc-relayer-types" -version = "0.29.2" +version = "0.29.3" dependencies = [ "bytes", "derive_more", @@ -3497,7 +3497,7 @@ dependencies = [ [[package]] name = "ibc-telemetry" -version = "0.29.2" +version = "0.29.3" dependencies = [ "axum 0.6.20", "dashmap", @@ -3516,7 +3516,7 @@ dependencies = [ [[package]] name = "ibc-test-framework" -version = "0.29.2" +version = "0.29.3" dependencies = [ "color-eyre", "crossbeam-channel", @@ -3931,9 +3931,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libm" @@ -4142,7 +4142,7 @@ dependencies = [ "once_cell", "parking_lot", "quanta", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "smallvec", "tagptr", "thiserror", @@ -5301,7 +5301,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" dependencies = [ "futures", - "rustc_version 0.4.0", + "rustc_version 0.4.1", ] [[package]] @@ -5467,11 +5467,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit", ] [[package]] @@ -5646,9 +5646,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -5810,9 +5810,9 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", @@ -6034,18 +6034,18 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver 1.0.23", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" dependencies = [ "bitflags 2.6.0", "errno", @@ -6075,7 +6075,7 @@ dependencies = [ "log", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.6", + "rustls-webpki 0.102.7", "subtle", "zeroize", ] @@ -6090,7 +6090,7 @@ dependencies = [ "once_cell", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.6", + "rustls-webpki 0.102.7", "subtle", "zeroize", ] @@ -6109,9 +6109,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" dependencies = [ "openssl-probe", "rustls-pemfile 2.1.3", @@ -6157,9 +6157,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -6222,9 +6222,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.1.14" +version = "2.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79da19444d9da7a9a82b80ecf059eceba6d3129d84a8610fd25ff2364f255466" +checksum = "aeb7ac86243095b70a7920639507b71d51a63390d1ba26c4f60a552fbb914a37" dependencies = [ "sdd", ] @@ -6406,9 +6406,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.207" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] @@ -6443,9 +6443,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.207" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", @@ -6465,9 +6465,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.124" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66ad62847a56b3dba58cc891acd13884b9c61138d330c0d7b6181713d4fce38d" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" dependencies = [ "itoa", "memchr", @@ -7367,9 +7367,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.2" +version = "1.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" dependencies = [ "backtrace", "bytes", @@ -7493,7 +7493,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.20", + "toml_edit", ] [[package]] @@ -7505,17 +7505,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap 2.4.0", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.22.20" @@ -7526,21 +7515,21 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.18", + "winnow", ] [[package]] name = "tonic" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38659f4a91aba8598d27821589f5db7dddd94601e7a01b1e485a50e5484c7401" +checksum = "c6f6ba989e4b2c58ae83d862d3a3e27690b6e3ae630d0deb59f3697f32aa88ad" dependencies = [ "async-stream", "async-trait", "axum 0.7.5", "base64 0.22.1", "bytes", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", @@ -7550,7 +7539,7 @@ dependencies = [ "percent-encoding", "pin-project", "prost 0.13.1", - "rustls-native-certs 0.7.1", + "rustls-native-certs 0.7.3", "rustls-pemfile 2.1.3", "socket2", "tokio", @@ -7860,9 +7849,9 @@ checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" [[package]] name = "universal-hash" @@ -8299,15 +8288,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.6.18" @@ -8338,7 +8318,7 @@ dependencies = [ "js-sys", "log", "pharos", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "send_wrapper 0.6.0", "thiserror", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index dcb3d271c5..4e6f282cb6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,14 +20,14 @@ exclude = [ [workspace.dependencies] # Hermes dependencies -ibc-relayer-cli = { version = "1.10.2", path = "crates/relayer-cli" } -ibc-relayer = { version = "0.29.2", path = "crates/relayer" } -ibc-relayer-rest = { version = "0.29.2", path = "crates/relayer-rest" } -ibc-relayer-types = { version = "0.29.2", path = "crates/relayer-types" } -ibc-chain-registry = { version = "0.29.2", path = "crates/chain-registry" } -ibc-telemetry = { version = "0.29.2", path = "crates/telemetry" } -ibc-test-framework = { version = "0.29.2", path = "tools/test-framework" } -ibc-integration-test = { version = "0.29.2", path = "tools/integration-test" } +ibc-relayer-cli = { version = "1.10.3", path = "crates/relayer-cli" } +ibc-relayer = { version = "0.29.3", path = "crates/relayer" } +ibc-relayer-rest = { version = "0.29.3", path = "crates/relayer-rest" } +ibc-relayer-types = { version = "0.29.3", path = "crates/relayer-types" } +ibc-chain-registry = { version = "0.29.3", path = "crates/chain-registry" } +ibc-telemetry = { version = "0.29.3", path = "crates/telemetry" } +ibc-test-framework = { version = "0.29.3", path = "tools/test-framework" } +ibc-integration-test = { version = "0.29.3", path = "tools/integration-test" } # Tendermint dependencies tendermint = { version = "0.38.1", default-features = false } @@ -99,9 +99,9 @@ ripemd = "0.1.3" rpassword = "5.0.1" secp256k1 = "0.28.2" semver = "1.0.21" -serde = "1.0.206" +serde = "1.0.209" serde_derive = "1.0.104" -serde_json = "1.0.122" +serde_json = "1.0.127" serde_yaml = "0.9.34" serial_test = "3.1.1" sha2 = "0.10.6" diff --git a/crates/chain-registry/Cargo.toml b/crates/chain-registry/Cargo.toml index ad083f6582..967fbdc54e 100644 --- a/crates/chain-registry/Cargo.toml +++ b/crates/chain-registry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ibc-chain-registry" -version = "0.29.2" +version = "0.29.3" edition = "2021" license = "Apache-2.0" keywords = ["cosmos", "ibc", "relayer", "chain", "registry"] diff --git a/crates/chain-registry/src/querier.rs b/crates/chain-registry/src/querier.rs index 9df2504e41..3a3f1e02f6 100644 --- a/crates/chain-registry/src/querier.rs +++ b/crates/chain-registry/src/querier.rs @@ -13,6 +13,7 @@ use tendermint_rpc::HttpClientUrl; use tracing::{debug, info}; use ibc_proto::cosmos::bank::v1beta1::query_client::QueryClient; +use ibc_relayer::util::create_grpc_client; use ibc_relayer::HERMES_VERSION; use tendermint_rpc::{Client, Url}; @@ -159,7 +160,7 @@ impl QueryContext for GrpcHealthCheckQuerier { info!("Querying gRPC server at {tendermint_url}"); - QueryClient::connect(uri) + create_grpc_client(uri, QueryClient::new) .await .map_err(|_| RegistryError::unable_to_connect_with_grpc())?; diff --git a/crates/relayer-cli/Cargo.toml b/crates/relayer-cli/Cargo.toml index 7a5000c57a..c2f947ad0b 100644 --- a/crates/relayer-cli/Cargo.toml +++ b/crates/relayer-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ibc-relayer-cli" -version = "1.10.2" +version = "1.10.3" edition = "2021" license = "Apache-2.0" readme = "README.md" diff --git a/crates/relayer-rest/Cargo.toml b/crates/relayer-rest/Cargo.toml index 95e14711f6..7b4d10816a 100644 --- a/crates/relayer-rest/Cargo.toml +++ b/crates/relayer-rest/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ibc-relayer-rest" -version = "0.29.2" +version = "0.29.3" authors = ["Informal Systems "] edition = "2021" license = "Apache-2.0" diff --git a/crates/relayer-rest/tests/mock.rs b/crates/relayer-rest/tests/mock.rs index 2c2dc2a53a..0c9140ac73 100644 --- a/crates/relayer-rest/tests/mock.rs +++ b/crates/relayer-rest/tests/mock.rs @@ -67,7 +67,7 @@ async fn version() { let rest_api_version = VersionInfo { name: "ibc-relayer-rest".to_string(), - version: "0.29.2".to_string(), + version: "0.29.3".to_string(), }; let result: JsonResult<_, ()> = JsonResult::Success(vec![version.clone(), rest_api_version]); diff --git a/crates/relayer-types/Cargo.toml b/crates/relayer-types/Cargo.toml index 416a5c7f2e..b9ae3c2f9b 100644 --- a/crates/relayer-types/Cargo.toml +++ b/crates/relayer-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ibc-relayer-types" -version = "0.29.2" +version = "0.29.3" edition = "2021" license = "Apache-2.0" readme = "README.md" diff --git a/crates/relayer/Cargo.toml b/crates/relayer/Cargo.toml index 1967c38619..2bfdebefc1 100644 --- a/crates/relayer/Cargo.toml +++ b/crates/relayer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ibc-relayer" -version = "0.29.2" +version = "0.29.3" edition = "2021" license = "Apache-2.0" readme = "README.md" diff --git a/crates/relayer/src/chain/cosmos.rs b/crates/relayer/src/chain/cosmos.rs index d78b77db47..5a09fab4a8 100644 --- a/crates/relayer/src/chain/cosmos.rs +++ b/crates/relayer/src/chain/cosmos.rs @@ -1,20 +1,19 @@ use alloc::sync::Arc; +use bytes::Buf; +use bytes::Bytes; use core::{future::Future, str::FromStr, time::Duration}; -use query::connection::query_connection_params; -use std::{cmp::Ordering, thread}; - -use bytes::{Buf, Bytes}; use futures::future::join_all; use num_bigint::BigInt; +use prost::Message; +use std::cmp::Ordering; +use std::thread; use tokio::runtime::Runtime as TokioRuntime; use tonic::codegen::http::Uri; use tonic::metadata::AsciiMetadataValue; use tracing::{debug, error, instrument, trace, warn}; use ibc_proto::cosmos::base::node::v1beta1::ConfigResponse; -use ibc_proto::cosmos::base::tendermint::v1beta1::service_client::ServiceClient; -use ibc_proto::cosmos::base::tendermint::v1beta1::{GetSyncingRequest, GetSyncingResponse}; -use ibc_proto::cosmos::staking::v1beta1::Params as StakingParams; +use ibc_proto::cosmos::staking::v1beta1::{Params as StakingParams, QueryParamsResponse}; use ibc_proto::ibc::apps::fee::v1::{ QueryIncentivizedPacketRequest, QueryIncentivizedPacketResponse, }; @@ -76,6 +75,7 @@ use crate::chain::cosmos::fee::maybe_register_counterparty_payee; use crate::chain::cosmos::gas::{calculate_fee, mul_ceil}; use crate::chain::cosmos::query::account::get_or_fetch_account; use crate::chain::cosmos::query::balance::{query_all_balances, query_balance}; +use crate::chain::cosmos::query::connection::query_connection_params; use crate::chain::cosmos::query::consensus_state::query_consensus_state_heights; use crate::chain::cosmos::query::custom::cross_chain_query_via_rpc; use crate::chain::cosmos::query::denom_trace::query_denom_trace; @@ -108,6 +108,7 @@ use crate::light_client::tendermint::LightClient as TmLightClient; use crate::light_client::{LightClient, Verified}; use crate::misbehaviour::MisbehaviourEvidence; use crate::util::compat_mode::compat_mode_from_version; +use crate::util::create_grpc_client; use crate::util::pretty::PrettySlice; use crate::util::pretty::{ PrettyIdentifiedChannel, PrettyIdentifiedClientState, PrettyIdentifiedConnection, @@ -374,13 +375,10 @@ impl CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_ccv_consumer_chain_params"); - let mut client = self - .block_on( - ibc_proto::interchain_security::ccv::consumer::v1::query_client::QueryClient::connect( - self.grpc_addr.clone() - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::interchain_security::ccv::consumer::v1::query_client::QueryClient::new, + ))?; client = client .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); @@ -411,26 +409,20 @@ impl CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_staking_params"); - let mut client = self - .block_on( - ibc_proto::cosmos::staking::v1beta1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; - - client = client - .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); - - let request = - tonic::Request::new(ibc_proto::cosmos::staking::v1beta1::QueryParamsRequest {}); - - let response = self - .block_on(client.params(request)) - .map_err(|e| Error::grpc_status(e, "query_staking_params".to_owned()))?; + let query_response = self.block_on(abci_query( + &self.rpc_client, + &self.config().rpc_addr, + "/cosmos.staking.v1beta1.Query/Params".to_owned(), + "".to_owned(), + QueryHeight::Latest.into(), + false, + ))?; + let params_response = + QueryParamsResponse::decode(query_response.value.as_ref()).map_err(|e| { + Error::protobuf_decode("cosmos.staking.v1beta1.Query/Params".to_owned(), e) + })?; - let params = response - .into_inner() + let params = params_response .params .ok_or_else(|| Error::grpc_response_param("no staking params".to_string()))?; @@ -454,45 +446,20 @@ impl CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_config_params"); - // Helper function to diagnose if the node config query is unimplemented - // by matching on the error details. - fn is_unimplemented_node_query(err_status: &tonic::Status) -> bool { - if err_status.code() != tonic::Code::Unimplemented { - return false; - } - - err_status - .message() - .contains("unknown service cosmos.base.node.v1beta1.Service") - } - - let mut client = self - .block_on( - ibc_proto::cosmos::base::node::v1beta1::service_client::ServiceClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; - - client = client - .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); - - let request = tonic::Request::new(ibc_proto::cosmos::base::node::v1beta1::ConfigRequest {}); - - match self.block_on(client.config(request)) { - Ok(response) => { - let params = response.into_inner(); + let query_response = self.block_on(abci_query( + &self.rpc_client, + &self.config().rpc_addr, + "/cosmos.base.node.v1beta1.Service/Config".to_owned(), + "".to_owned(), + QueryHeight::Latest.into(), + false, + ))?; + let config_response = + ConfigResponse::decode(query_response.value.as_ref()).map_err(|e| { + Error::protobuf_decode("cosmos.base.node.v1beta1.Service/Config".to_owned(), e) + })?; - Ok(Some(params)) - } - Err(e) => { - if is_unimplemented_node_query(&e) { - Ok(None) - } else { - Err(Error::grpc_status(e, "query_config_params".to_owned())) - } - } - } + Ok(Some(config_response)) } /// The minimum gas price that this node accepts @@ -664,43 +631,6 @@ impl CosmosSdkChain { } } - /// Query the chain syncing status via a gRPC query. - /// - /// Returns an error if the node is still syncing and has not caught up, - /// ie. if `sync_info.syncing` is `true`. - fn chain_grpc_status(&self) -> Result { - crate::time!( - "chain_grpc_status", - { - "src_chain": self.config().id.to_string(), - } - ); - crate::telemetry!(query, self.id(), "grpc_status"); - - let grpc_addr = self.grpc_addr.clone(); - let grpc_addr_string = grpc_addr.to_string(); - - let mut client = self - .block_on(ServiceClient::connect(grpc_addr.clone())) - .map_err(Error::grpc_transport)?; - - let request = tonic::Request::new(GetSyncingRequest {}); - - let sync_info = self - .block_on(client.get_syncing(request)) - .map_err(|e| Error::grpc_status(e, "get_syncing".to_string()))? - .into_inner(); - - if sync_info.syncing { - Err(Error::chain_not_caught_up( - grpc_addr_string, - self.config().id.clone(), - )) - } else { - Ok(sync_info) - } - } - /// Query the chain status of the RPC and gRPC nodes. /// /// Returns an error if any of the node is still syncing and has not caught up. @@ -722,15 +652,6 @@ impl CosmosSdkChain { )); } - let grpc_status = self.chain_grpc_status()?; - - if grpc_status.syncing { - return Err(Error::chain_not_caught_up( - self.config.grpc_addr.to_string(), - self.config().id.clone(), - )); - } - Ok(rpc_status) } @@ -1190,7 +1111,11 @@ impl ChainEndpoint for CosmosSdkChain { } fn version_specs(&self) -> Result { - let version_specs = self.block_on(fetch_version_specs(self.id(), &self.grpc_addr))?; + let version_specs = self.block_on(fetch_version_specs( + self.id(), + &self.rpc_client, + &self.config.rpc_addr, + ))?; Ok(Specs::Cosmos(version_specs)) } @@ -1301,13 +1226,10 @@ impl ChainEndpoint for CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_clients"); - let mut client = self - .block_on( - ibc_proto::ibc::core::client::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::client::v1::query_client::QueryClient::new, + ))?; client = client .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); @@ -1492,13 +1414,10 @@ impl ChainEndpoint for CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_client_connections"); - let mut client = self - .block_on( - ibc_proto::ibc::core::connection::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::connection::v1::query_client::QueryClient::new, + ))?; client = client .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); @@ -1538,13 +1457,10 @@ impl ChainEndpoint for CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_connections"); - let mut client = self - .block_on( - ibc_proto::ibc::core::connection::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::connection::v1::query_client::QueryClient::new, + ))?; client = client .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); @@ -1596,10 +1512,11 @@ impl ChainEndpoint for CosmosSdkChain { use ibc_proto::ibc::core::connection::v1 as connection; use tonic::IntoRequest; - let mut client = - connection::query_client::QueryClient::connect(chain.grpc_addr.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client( + chain.grpc_addr.clone(), + connection::query_client::QueryClient::new, + ) + .await?; client = client.max_decoding_message_size( chain.config().max_grpc_decoding_size.get_bytes() as usize, @@ -1677,13 +1594,10 @@ impl ChainEndpoint for CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_connection_channels"); - let mut client = self - .block_on( - ibc_proto::ibc::core::channel::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::channel::v1::query_client::QueryClient::new, + ))?; client = client .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); @@ -1749,13 +1663,10 @@ impl ChainEndpoint for CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_channels"); - let mut client = self - .block_on( - ibc_proto::ibc::core::channel::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::channel::v1::query_client::QueryClient::new, + ))?; client = client .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); @@ -1873,13 +1784,10 @@ impl ChainEndpoint for CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_channel_client_state"); - let mut client = self - .block_on( - ibc_proto::ibc::core::channel::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::channel::v1::query_client::QueryClient::new, + ))?; client = client .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); @@ -1944,17 +1852,15 @@ impl ChainEndpoint for CosmosSdkChain { crate::telemetry!(query, self.id(), "query_packet_commitments"); let mut client = self - .block_on( - ibc_proto::ibc::core::channel::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) + .block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::channel::v1::query_client::QueryClient::new, + )) .map(|client| { client.max_decoding_message_size( self.config().max_grpc_decoding_size.get_bytes() as usize ) - }) - .map_err(Error::grpc_transport)?; + })?; if request.pagination.is_enabled() { let mut results = Vec::new(); @@ -2106,13 +2012,10 @@ impl ChainEndpoint for CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_unreceived_packets"); - let mut client = self - .block_on( - ibc_proto::ibc::core::channel::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::channel::v1::query_client::QueryClient::new, + ))?; client = client .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); @@ -2182,17 +2085,15 @@ impl ChainEndpoint for CosmosSdkChain { } let mut client = self - .block_on( - ibc_proto::ibc::core::channel::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) + .block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::channel::v1::query_client::QueryClient::new, + )) .map(|client| { client.max_decoding_message_size( self.config().max_grpc_decoding_size.get_bytes() as usize ) - }) - .map_err(Error::grpc_transport)?; + })?; if request.pagination.is_enabled() { let mut results = Vec::new(); @@ -2302,13 +2203,10 @@ impl ChainEndpoint for CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_unreceived_acknowledgements"); - let mut client = self - .block_on( - ibc_proto::ibc::core::channel::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::ibc::core::channel::v1::query_client::QueryClient::new, + ))?; client = client .max_decoding_message_size(self.config().max_grpc_decoding_size.get_bytes() as usize); @@ -2643,12 +2541,10 @@ impl ChainEndpoint for CosmosSdkChain { ); crate::telemetry!(query, self.id(), "query_consumer_chains"); - let mut client = self.block_on( - ibc_proto::interchain_security::ccv::provider::v1::query_client::QueryClient::connect( - self.grpc_addr.clone(), - ), - ) - .map_err(Error::grpc_transport)?; + let mut client = self.block_on(create_grpc_client( + self.grpc_addr.clone(), + ibc_proto::interchain_security::ccv::provider::v1::query_client::QueryClient::new, + ))?; let request = tonic::Request::new( ibc_proto::interchain_security::ccv::provider::v1::QueryConsumerChainsRequest {}, @@ -2857,7 +2753,11 @@ fn do_health_check(chain: &CosmosSdkChain) -> Result<(), Error> { ), } - let version_specs = chain.block_on(fetch_version_specs(&chain.config.id, &chain.grpc_addr))?; + let version_specs = chain.block_on(fetch_version_specs( + &chain.config.id, + &chain.rpc_client, + &chain.config.rpc_addr, + ))?; if let Err(diagnostic) = compatibility::run_diagnostic(&version_specs) { return Err(Error::compat_check_failed( diff --git a/crates/relayer/src/chain/cosmos/query.rs b/crates/relayer/src/chain/cosmos/query.rs index 9570587172..ad6a2c91b8 100644 --- a/crates/relayer/src/chain/cosmos/query.rs +++ b/crates/relayer/src/chain/cosmos/query.rs @@ -1,16 +1,16 @@ -use http::uri::Uri; -use ibc_proto::cosmos::base::tendermint::v1beta1::service_client::ServiceClient; -use ibc_proto::cosmos::base::tendermint::v1beta1::GetNodeInfoRequest; +use ibc_proto::cosmos::base::tendermint::v1beta1::GetNodeInfoResponse; use ibc_relayer_types::core::ics04_channel::packet::Sequence; use ibc_relayer_types::core::ics23_commitment::merkle::{ convert_tm_to_ics_merkle_proof, MerkleProof, }; use ibc_relayer_types::core::ics24_host::identifier::ChainId; +use prost::Message; use tendermint::block::Height; use tendermint_rpc::query::Query; use tendermint_rpc::{Client, HttpClient, Url}; use crate::chain::cosmos::version::Specs; +use crate::chain::requests::QueryHeight; use crate::chain::requests::{QueryClientEventRequest, QueryPacketEventDataRequest, QueryTxHash}; use crate::error::Error; @@ -121,36 +121,32 @@ pub async fn abci_query( } /// Queries the chain to obtain the version information. -pub async fn fetch_version_specs(chain_id: &ChainId, grpc_address: &Uri) -> Result { - let grpc_addr_string = grpc_address.to_string(); - - // Construct a gRPC client - let mut client = ServiceClient::connect(grpc_address.clone()) - .await - .map_err(|e| { - Error::fetch_version_grpc_transport( - chain_id.clone(), - grpc_addr_string.clone(), - "tendermint::ServiceClient".to_string(), +pub async fn fetch_version_specs( + chain_id: &ChainId, + rpc_client: &HttpClient, + rpc_addr: &Url, +) -> Result { + let query_response = abci_query( + rpc_client, + rpc_addr, + "/cosmos.base.tendermint.v1beta1.Service/GetNodeInfo".to_owned(), + "".to_owned(), + QueryHeight::Latest.into(), + false, + ) + .await?; + let node_info_response = + GetNodeInfoResponse::decode(query_response.value.as_ref()).map_err(|e| { + Error::protobuf_decode( + "cosmos.base.tendermint.v1beta1.Service/GetNodeInfo".to_owned(), e, ) })?; - let request = tonic::Request::new(GetNodeInfoRequest {}); - - let response = client.get_node_info(request).await.map_err(|e| { - Error::fetch_version_grpc_status( - chain_id.clone(), - grpc_addr_string.clone(), - "tendermint::ServiceClient".to_string(), - e, - ) - })?; - - let version = response.into_inner().application_version.ok_or_else(|| { + let version = node_info_response.application_version.ok_or_else(|| { Error::fetch_version_invalid_version_response( chain_id.clone(), - grpc_addr_string.clone(), + rpc_addr.to_string(), "tendermint::GetNodeInfoRequest".to_string(), ) })?; @@ -158,5 +154,5 @@ pub async fn fetch_version_specs(chain_id: &ChainId, grpc_address: &Uri) -> Resu // Parse the raw version info into a domain-type `version::Specs` version .try_into() - .map_err(|e| Error::fetch_version_parsing(chain_id.clone(), grpc_addr_string.clone(), e)) + .map_err(|e| Error::fetch_version_parsing(chain_id.clone(), rpc_addr.to_string(), e)) } diff --git a/crates/relayer/src/chain/cosmos/query/account.rs b/crates/relayer/src/chain/cosmos/query/account.rs index e24c414ff7..aeafea7529 100644 --- a/crates/relayer/src/chain/cosmos/query/account.rs +++ b/crates/relayer/src/chain/cosmos/query/account.rs @@ -7,6 +7,7 @@ use tracing::info; use crate::chain::cosmos::types::account::Account; use crate::config::default::max_grpc_decoding_size; use crate::error::Error; +use crate::util::create_grpc_client; /// Get a `&mut Account` from an `&mut Option` if it is `Some(Account)`. /// Otherwise query for the account information, update the `Option` to `Some`, @@ -54,9 +55,7 @@ pub async fn query_account( grpc_address: &Uri, account_address: &str, ) -> Result { - let mut client = QueryClient::connect(grpc_address.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client(grpc_address.clone(), QueryClient::new).await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); diff --git a/crates/relayer/src/chain/cosmos/query/balance.rs b/crates/relayer/src/chain/cosmos/query/balance.rs index 114bd27e74..c197b94331 100644 --- a/crates/relayer/src/chain/cosmos/query/balance.rs +++ b/crates/relayer/src/chain/cosmos/query/balance.rs @@ -7,6 +7,7 @@ use ibc_proto::cosmos::bank::v1beta1::{ use crate::account::Balance; use crate::config::default::max_grpc_decoding_size; use crate::error::Error; +use crate::util::create_grpc_client; /// Uses the GRPC client to retrieve the account balance for a specific denom pub async fn query_balance( @@ -14,9 +15,7 @@ pub async fn query_balance( account_address: &str, denom: &str, ) -> Result { - let mut client = QueryClient::connect(grpc_address.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client(grpc_address.clone(), QueryClient::new).await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); @@ -47,9 +46,7 @@ pub async fn query_all_balances( grpc_address: &Uri, account_address: &str, ) -> Result, Error> { - let mut client = QueryClient::connect(grpc_address.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client(grpc_address.clone(), QueryClient::new).await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); diff --git a/crates/relayer/src/chain/cosmos/query/connection.rs b/crates/relayer/src/chain/cosmos/query/connection.rs index 34c939a36d..2fbfe29650 100644 --- a/crates/relayer/src/chain/cosmos/query/connection.rs +++ b/crates/relayer/src/chain/cosmos/query/connection.rs @@ -6,12 +6,11 @@ use ibc_proto::ibc::core::connection::v1::QueryConnectionParamsRequest; use crate::config::default::max_grpc_decoding_size; use crate::error::Error; +use crate::util::create_grpc_client; /// Uses the GRPC client to retrieve the connection params pub async fn query_connection_params(grpc_address: &Uri) -> Result { - let mut client = QueryClient::connect(grpc_address.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client(grpc_address.clone(), QueryClient::new).await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); diff --git a/crates/relayer/src/chain/cosmos/query/consensus_state.rs b/crates/relayer/src/chain/cosmos/query/consensus_state.rs index 538b5cb140..3f95b47013 100644 --- a/crates/relayer/src/chain/cosmos/query/consensus_state.rs +++ b/crates/relayer/src/chain/cosmos/query/consensus_state.rs @@ -7,6 +7,7 @@ use crate::chain::requests::{QueryConsensusStateHeightsRequest, QueryConsensusSt use crate::config::default::max_grpc_decoding_size; use crate::consensus_state::AnyConsensusStateWithHeight; use crate::error::Error; +use crate::util::create_grpc_client; use crate::util::pretty::{PrettyConsensusStateWithHeight, PrettyHeight}; /// Performs a `QueryConsensusStateHeightsRequest` gRPC query to fetch all the consensus state @@ -36,10 +37,11 @@ pub async fn query_consensus_state_heights( .contains("unknown method ConsensusStateHeights") } - let mut client = - ibc_proto::ibc::core::client::v1::query_client::QueryClient::connect(grpc_addr.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client( + grpc_addr.clone(), + ibc_proto::ibc::core::client::v1::query_client::QueryClient::new, + ) + .await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); @@ -105,10 +107,11 @@ pub async fn query_consensus_states( } ); - let mut client = - ibc_proto::ibc::core::client::v1::query_client::QueryClient::connect(grpc_addr.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client( + grpc_addr.clone(), + ibc_proto::ibc::core::client::v1::query_client::QueryClient::new, + ) + .await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); diff --git a/crates/relayer/src/chain/cosmos/query/denom_trace.rs b/crates/relayer/src/chain/cosmos/query/denom_trace.rs index a0ef33cff0..050aea8c48 100644 --- a/crates/relayer/src/chain/cosmos/query/denom_trace.rs +++ b/crates/relayer/src/chain/cosmos/query/denom_trace.rs @@ -7,12 +7,11 @@ use ibc_proto::ibc::applications::transfer::v1::{ use crate::config::default::max_grpc_decoding_size; use crate::denom::DenomTrace; use crate::error::Error; +use crate::util::create_grpc_client; // Uses the GRPC client to retrieve the denom trace for a specific hash pub async fn query_denom_trace(grpc_address: &Uri, hash: &str) -> Result { - let mut client = QueryClient::connect(grpc_address.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client(grpc_address.clone(), QueryClient::new).await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); diff --git a/crates/relayer/src/chain/cosmos/query/fee.rs b/crates/relayer/src/chain/cosmos/query/fee.rs index fab58fcc2a..e59e70bc41 100644 --- a/crates/relayer/src/chain/cosmos/query/fee.rs +++ b/crates/relayer/src/chain/cosmos/query/fee.rs @@ -13,15 +13,14 @@ use tonic::Code; use crate::config::default::max_grpc_decoding_size; use crate::error::Error; +use crate::util::create_grpc_client; pub async fn query_counterparty_payee( grpc_address: &Uri, channel_id: &ChannelId, address: &Signer, ) -> Result, Error> { - let mut client = QueryClient::connect(grpc_address.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client(grpc_address.clone(), QueryClient::new).await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); @@ -53,9 +52,7 @@ pub async fn query_incentivized_packets( channel_id: &ChannelId, port_id: &PortId, ) -> Result, Error> { - let mut client = QueryClient::connect(grpc_address.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client(grpc_address.clone(), QueryClient::new).await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); @@ -87,9 +84,7 @@ pub async fn query_incentivized_packet( grpc_address: &Uri, request: QueryIncentivizedPacketRequest, ) -> Result { - let mut client = QueryClient::connect(grpc_address.clone()) - .await - .map_err(Error::grpc_transport)?; + let mut client = create_grpc_client(grpc_address.clone(), QueryClient::new).await?; client = client.max_decoding_message_size(max_grpc_decoding_size().get_bytes() as usize); diff --git a/crates/relayer/src/chain/cosmos/simulate.rs b/crates/relayer/src/chain/cosmos/simulate.rs index 0cb142d698..c48d3027a3 100644 --- a/crates/relayer/src/chain/cosmos/simulate.rs +++ b/crates/relayer/src/chain/cosmos/simulate.rs @@ -4,6 +4,7 @@ use tonic::codegen::http::Uri; use crate::config::default::max_grpc_decoding_size; use crate::error::Error; +use crate::util::create_grpc_client; pub async fn send_tx_simulate(grpc_address: &Uri, tx: Tx) -> Result { let mut tx_bytes = vec![]; @@ -15,9 +16,7 @@ pub async fn send_tx_simulate(grpc_address: &Uri, tx: Tx) -> Result ] |e| { format!("failed while fetching version info from endpoint {0} on the gRPC interface of chain {1}:{2}", e.endpoint, e.chain_id, e.address) diff --git a/crates/relayer/src/lib.rs b/crates/relayer/src/lib.rs index f342fa9b8a..3ceac0c335 100644 --- a/crates/relayer/src/lib.rs +++ b/crates/relayer/src/lib.rs @@ -14,7 +14,7 @@ //! //! For the IBC relayer binary, please see [Hermes] (`ibc-relayer-cli` crate). //! -//! [Hermes]: https://docs.rs/ibc-relayer-cli/1.10.2/ +//! [Hermes]: https://docs.rs/ibc-relayer-cli/1.10.3/ extern crate alloc; @@ -48,4 +48,4 @@ pub mod upgrade_chain; pub mod util; pub mod worker; -pub const HERMES_VERSION: &str = "1.10.2"; +pub const HERMES_VERSION: &str = "1.10.3"; diff --git a/crates/relayer/src/link/cli.rs b/crates/relayer/src/link/cli.rs index f7b7372f4f..f07cd39e23 100644 --- a/crates/relayer/src/link/cli.rs +++ b/crates/relayer/src/link/cli.rs @@ -110,10 +110,16 @@ impl Link { sequences.retain(|seq| sequence_filter.iter().any(|range| range.contains(seq))); } + // Retain only sequences which should not be filtered out + let raw_sequences: Vec = sequences + .into_iter() + .filter(|sequence| !self.a_to_b.exclude_src_sequences.contains(sequence)) + .collect(); + info!( "{} unreceived packets found: {} ", - sequences.len(), - PrettySlice(&sequences) + raw_sequences.len(), + PrettySlice(&raw_sequences) ); let query_height = match packet_data_query_height { @@ -128,7 +134,7 @@ impl Link { .map_or(50, |cfg| cfg.query_packets_chunk_size()); self.relay_packet_messages( - sequences, + raw_sequences, query_height, chunk_size, query_send_packet_events, @@ -179,10 +185,16 @@ impl Link { sequences.retain(|seq| sequence_filter.iter().any(|range| range.contains(seq))); } + // Retain only sequences which should not be filtered out + let raw_sequences: Vec = sequences + .into_iter() + .filter(|sequence| !self.a_to_b.exclude_src_sequences.contains(sequence)) + .collect(); + info!( "{} unreceived acknowledgements found: {} ", - sequences.len(), - sequences.iter().copied().collated().format(", "), + raw_sequences.len(), + raw_sequences.iter().copied().collated().format(", "), ); let query_height = match packet_data_query_height { @@ -197,7 +209,7 @@ impl Link { .map_or(50, |cfg| cfg.query_packets_chunk_size()); self.relay_packet_messages( - sequences, + raw_sequences, query_height, chunk_size, query_write_ack_events, diff --git a/crates/relayer/src/util.rs b/crates/relayer/src/util.rs index 852764ca50..765792e92b 100644 --- a/crates/relayer/src/util.rs +++ b/crates/relayer/src/util.rs @@ -15,3 +15,18 @@ pub mod retry; pub mod seq_range; pub mod stream; pub mod task; + +/// Helper function to create a gRPC client. +pub async fn create_grpc_client( + grpc_addr: tonic::transport::Uri, + client_constructor: impl FnOnce(tonic::transport::Channel) -> T, +) -> Result { + let tls_config = tonic::transport::ClientTlsConfig::new().with_native_roots(); + let channel = tonic::transport::Channel::builder(grpc_addr) + .tls_config(tls_config) + .map_err(crate::error::Error::grpc_transport)? + .connect() + .await + .map_err(crate::error::Error::grpc_transport)?; + Ok(client_constructor(channel)) +} diff --git a/crates/telemetry/Cargo.toml b/crates/telemetry/Cargo.toml index 4c5abda644..b6ab30faf6 100644 --- a/crates/telemetry/Cargo.toml +++ b/crates/telemetry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ibc-telemetry" -version = "0.29.2" +version = "0.29.3" edition = "2021" license = "Apache-2.0" readme = "README.md" diff --git a/docs/architecture/adr-002-ibc-relayer.md b/docs/architecture/adr-002-ibc-relayer.md index 983ff24805..0ed5e63439 100644 --- a/docs/architecture/adr-002-ibc-relayer.md +++ b/docs/architecture/adr-002-ibc-relayer.md @@ -45,12 +45,12 @@ IBC protocol defines the minimal data set that must be made available to relayer #### Query Functionality IBC host state machines MUST expose an interface for inspecting their state. For Cosmos/Tendermint chains this means: - the IBC modules on chain correctly implement and respond to queries - - [IBC-Modules-Rust] an implementation for some queries currently exist in Cosmos-SDK and same and more need to be implemented in Rust. The full requirements are detailed in section Relayer Queries. + - [IBC-Modules-Rust] an implementation for some queries currently exists in Cosmos-SDK and the same and more need to be implemented in Rust. The full requirements are detailed in section Relayer Queries. - the relayer needs the ability to send rpc/http ABCI queries to and receive replies from Tendermint/Cosmos-SDK - [[ABCI Rust](https://github.com/tendermint/rust-abci)] - ABCI Rust implementation - [IBC-Modules-Rust] identifier validation is required (ICS-024) - [IBC-Modules-Rust] requires Rust types for all query responses - - [[Merkle-Proofs-Rust](https://github.com/confio/ics23/tree/master/rust)] (candidate implementation) - some query responses include proofs and included in IBC transactions by the relayer (some may be validated, TBD) + - [[Merkle-Proofs-Rust](https://github.com/confio/ics23/tree/master/rust)] (candidate implementation) - some query responses include proofs and are included in IBC transactions by the relayer (some may be validated, TBD) #### IBC Messages The relayer creates transactions that include IBC messages to manage clients, connections and channels, and send application packets to destination chains. These messages must be defined in the IBC Rust implementation [IBC-Modules-Rust]. diff --git a/docs/architecture/adr-003-handler-implementation.md b/docs/architecture/adr-003-handler-implementation.md index e552f7672e..dc78a0f56d 100644 --- a/docs/architecture/adr-003-handler-implementation.md +++ b/docs/architecture/adr-003-handler-implementation.md @@ -369,7 +369,7 @@ to deal with chain-specific datatypes, such as `Header`, `ClientState`, and To abstract over chain-specific datatypes, we introduce a trait which specifies both which types we need to abstract over, and their interface. -For the ICS 002 Client submodule, this trait looks as follow: +For the ICS 002 Client submodule, this trait looks as follows: ```rust pub trait ClientDef { @@ -379,7 +379,7 @@ pub trait ClientDef { } ``` -The `ClientDef` trait specifies three datatypes, and their corresponding interface, which is provided +The `ClientDef` trait specifies three datatypes, and their corresponding interface, which are provided via a trait defined in the same submodule. A production implementation of this interface would instantiate these types with the concrete @@ -632,4 +632,4 @@ Proposed ### Neutral -## References \ No newline at end of file +## References diff --git a/docs/architecture/adr-004-relayer-domain-decomposition.md b/docs/architecture/adr-004-relayer-domain-decomposition.md index b97f376339..c65aa638a3 100644 --- a/docs/architecture/adr-004-relayer-domain-decomposition.md +++ b/docs/architecture/adr-004-relayer-domain-decomposition.md @@ -91,7 +91,7 @@ Channel datagrams are built similarly. Packet datagrams are triggered by events, ### IBC Module -For every a transaction in a block of height H: +For every transaction in a block of height H: - call appropriate handler (this is realized by ICS26 routing sub-module), - If handler succeeds (transaction does not abort), then @@ -236,7 +236,7 @@ fn main() -> Result<(), Box> { let src_chain = ChainRuntime::new(); let dst_chain = ChainRuntime::new(); - /// chains expose handlers for commuicating with the chain related runtime + /// chains expose handlers for communicating with the chain related runtime /// which move into their own threads let src_chain_handle = src_chain.handle(); thread::spawn(move || { diff --git a/docs/architecture/adr-006-hermes-v0.2-usecases.md b/docs/architecture/adr-006-hermes-v0.2-usecases.md index e6e6488fec..2b4bad5dc3 100644 --- a/docs/architecture/adr-006-hermes-v0.2-usecases.md +++ b/docs/architecture/adr-006-hermes-v0.2-usecases.md @@ -80,7 +80,7 @@ connection, or reuse a connection in the creation of a new channel). #### Patterns -We propose two basic patterns that Hermes should be able to fulfil. +We propose two basic patterns that Hermes should be able to fulfill. 1. Simple invocations to perform basic actions. - By _action_ here we mean doing the complete handshake for an object from diff --git a/flake.lock b/flake.lock index 9a71a2fcca..ae1418f0a4 100644 --- a/flake.lock +++ b/flake.lock @@ -157,6 +157,7 @@ "gaia15-src": "gaia15-src", "gaia17-src": "gaia17-src", "gaia18-src": "gaia18-src", + "gaia19-src": "gaia19-src", "gaia5-src": "gaia5-src", "gaia6-ordered-src": "gaia6-ordered-src", "gaia6-src": "gaia6-src", @@ -173,7 +174,9 @@ "ibc-go-v5-src": "ibc-go-v5-src", "ibc-go-v6-src": "ibc-go-v6-src", "ibc-go-v7-src": "ibc-go-v7-src", + "ibc-go-v7-wasm-src": "ibc-go-v7-wasm-src", "ibc-go-v8-src": "ibc-go-v8-src", + "ibc-go-v8-wasm-src": "ibc-go-v8-wasm-src", "ibc-go-v9-src": "ibc-go-v9-src", "ibc-rs-src": "ibc-rs-src", "ica-src": "ica-src", @@ -188,7 +191,7 @@ "neutron-src": "neutron-src", "nix-std": "nix-std", "nix2container": "nix2container", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_2", "osmosis-src": "osmosis-src", "provenance-src": "provenance-src", "regen-src": "regen-src", @@ -214,16 +217,19 @@ "wasmvm_1_3_0-src": "wasmvm_1_3_0-src", "wasmvm_1_5_0-src": "wasmvm_1_5_0-src", "wasmvm_1_5_2-src": "wasmvm_1_5_2-src", + "wasmvm_1_5_4-src": "wasmvm_1_5_4-src", "wasmvm_1_beta7-src": "wasmvm_1_beta7-src", "wasmvm_2_0_0-src": "wasmvm_2_0_0-src", - "wasmvm_2_1_0-src": "wasmvm_2_1_0-src" + "wasmvm_2_0_3-src": "wasmvm_2_0_3-src", + "wasmvm_2_1_0-src": "wasmvm_2_1_0-src", + "wasmvm_2_1_2-src": "wasmvm_2_1_2-src" }, "locked": { - "lastModified": 1723637281, - "narHash": "sha256-PVodBpj6BF+Cv8d8/tHZmWh29bAEHeAlalJdQTmBBP4=", + "lastModified": 1725007328, + "narHash": "sha256-DMRDFFpXIJyKRNhiVhXaIoOJkmVyKbt6DO6M5F8CCec=", "owner": "informalsystems", "repo": "cosmos.nix", - "rev": "5115762f60f6c700d9b211a3e7d10f4c909843dd", + "rev": "d87f011075da3ee1afbbe3443ca25461af7d49fd", "type": "github" }, "original": { @@ -389,6 +395,7 @@ "systems": "systems" }, "locked": { + "lastModified": 1694529238, "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", "owner": "numtide", "repo": "flake-utils", @@ -649,6 +656,23 @@ "type": "github" } }, + "gaia19-src": { + "flake": false, + "locked": { + "lastModified": 1724235134, + "narHash": "sha256-iAljnCnviTZ0wpgUYtTj+adH6imx6g6+niLq72yuoTk=", + "owner": "cosmos", + "repo": "gaia", + "rev": "4106e7a673da18b518fd81231a8e8b99bbf0fd0d", + "type": "github" + }, + "original": { + "owner": "cosmos", + "ref": "v19.1.0", + "repo": "gaia", + "type": "github" + } + }, "gaia5-src": { "flake": false, "locked": { @@ -787,18 +811,21 @@ "gomod2nix": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "nixpkgs": [ + "cosmos-nix", + "nixpkgs" + ] }, "locked": { - "narHash": "sha256-f1NuMA2mZ3Chw2CjlUkRAzNgDw0TYyj1i5YZJRByDdo=", - "owner": "JonathanLorimer", + "lastModified": 1722589758, + "narHash": "sha256-sbbA8b6Q2vB/t/r1znHawoXLysCyD4L/6n6/RykiSnA=", + "owner": "nix-community", "repo": "gomod2nix", - "rev": "6d2fce6003d08eee42648f2931de8449d3de1f5f", + "rev": "4e08ca09253ef996bd4c03afa383b23e35fe28a1", "type": "github" }, "original": { - "owner": "JonathanLorimer", - "ref": "jonathan/update-go", + "owner": "nix-community", "repo": "gomod2nix", "type": "github" } @@ -835,7 +862,7 @@ "devenv": "devenv", "flake-utils": "flake-utils_3", "gomod2nix": "gomod2nix_2", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs", "nixpkgs-unstable": "nixpkgs-unstable" }, "locked": { @@ -968,6 +995,23 @@ "type": "github" } }, + "ibc-go-v7-wasm-src": { + "flake": false, + "locked": { + "lastModified": 1722365763, + "narHash": "sha256-ZYGCvm1Ek1RaXKzkkwQCc56I2HzmbrLR/lFD5IZZdLc=", + "owner": "cosmos", + "repo": "ibc-go", + "rev": "13c071f0b34d67342f0b7a8874d84d2e68b887e1", + "type": "github" + }, + "original": { + "owner": "cosmos", + "ref": "modules/light-clients/08-wasm/v0.3.1+ibc-go-v7.4-wasmvm-v1.5", + "repo": "ibc-go", + "type": "github" + } + }, "ibc-go-v8-src": { "flake": false, "locked": { @@ -985,6 +1029,23 @@ "type": "github" } }, + "ibc-go-v8-wasm-src": { + "flake": false, + "locked": { + "lastModified": 1722365433, + "narHash": "sha256-mgfbibipk09LtO0h0hQDfnVA0cQADaI6Bq+ruyP6xI4=", + "owner": "cosmos", + "repo": "ibc-go", + "rev": "ccd4dc278e720be87418028026ebd93a80fa5ac0", + "type": "github" + }, + "original": { + "owner": "cosmos", + "ref": "modules/light-clients/08-wasm/v0.4.1+ibc-go-v8.4-wasmvm-v2.0", + "repo": "ibc-go", + "type": "github" + } + }, "ibc-go-v9-src": { "flake": false, "locked": { @@ -1053,15 +1114,16 @@ "injective-src": { "flake": false, "locked": { - "narHash": "sha256-Vr/l8/wtZ47wi1OTWhsfLetKZH8c1fUFeoQaxF+QS3c=", + "lastModified": 1722874193, + "narHash": "sha256-zDG32ogXMep0wKegDN8zm1YmadcVpwlrY+ITokefcVI=", "owner": "OpenDeFiFoundation", "repo": "injective-core", - "rev": "e1ab66c240524b05b872f63890fefcd4fced5f7a", + "rev": "725af8f9ca6809d6b1026d5e8dddeb309ff97b42", "type": "github" }, "original": { "owner": "OpenDeFiFoundation", - "ref": "v1.12.1", + "ref": "v1.13.1", "repo": "injective-core", "type": "github" } @@ -1117,16 +1179,16 @@ "juno-src": { "flake": false, "locked": { - "lastModified": 1720542396, - "narHash": "sha256-niG12wn49bt184zqctrGsT73mgKfZUPTZAzSKX+ZLVs=", + "lastModified": 1724278445, + "narHash": "sha256-XvJqp36HSYqm6OMLQqJPX5sCT52GxSLFDMO+fJovh+0=", "owner": "CosmosContracts", "repo": "juno", - "rev": "bf140aa60045ba92b83d0cb7f3bc47a2661a4e7e", + "rev": "2f119adacca3a1668ff150c225a3f423501e748c", "type": "github" }, "original": { "owner": "CosmosContracts", - "ref": "v23.0.0", + "ref": "v24.0.0", "repo": "juno", "type": "github" } @@ -1182,16 +1244,16 @@ "neutron-src": { "flake": false, "locked": { - "lastModified": 1722341371, - "narHash": "sha256-dhBhWytamqp1hRsQH+xqpq1UJmPi6CRHHDQwveCQ2WQ=", + "lastModified": 1724773633, + "narHash": "sha256-pHubObIv3p6IrzI/U7aeDjdF5kWBpI9qgDoH/Hjk+i8=", "owner": "neutron-org", "repo": "neutron", - "rev": "db33d3302abb45ee3887a97ea3d53923241fc167", + "rev": "1b10cd282d5809ccdd87208918fd175aebec2b0b", "type": "github" }, "original": { "owner": "neutron-org", - "ref": "v4.1.0", + "ref": "v4.2.2", "repo": "neutron", "type": "github" } @@ -1260,17 +1322,15 @@ }, "nixpkgs": { "locked": { - "narHash": "sha256-D+zHwkwPc6oYQ4G3A1HuadopqRwUY/JkMwHz1YF7j4Q=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "e97b3e4186bcadf0ef1b6be22b8558eab1cdeb5d", - "type": "github" + "narHash": "sha256-LahKBAfGbY836gtpVNnWwBTIzN7yf/uYM/S0g393r0Y=", + "rev": "9f2ee8c91ac42da3ae6c6a1d21555f283458247e", + "revCount": 555392, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2311.555392%2Brev-9f2ee8c91ac42da3ae6c6a1d21555f283458247e/018d7c73-3161-76d5-aca1-5929105b0aa0/source.tar.gz" }, "original": { - "owner": "NixOS", - "ref": "master", - "repo": "nixpkgs", - "type": "github" + "type": "tarball", + "url": "https://flakehub.com/f/NixOS/nixpkgs/0.2311.%2A.tar.gz" } }, "nixpkgs-lib": { @@ -1337,24 +1397,11 @@ }, "nixpkgs_2": { "locked": { - "narHash": "sha256-LahKBAfGbY836gtpVNnWwBTIzN7yf/uYM/S0g393r0Y=", - "rev": "9f2ee8c91ac42da3ae6c6a1d21555f283458247e", - "revCount": 555392, - "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2311.555392%2Brev-9f2ee8c91ac42da3ae6c6a1d21555f283458247e/018d7c73-3161-76d5-aca1-5929105b0aa0/source.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://flakehub.com/f/NixOS/nixpkgs/0.2311.%2A.tar.gz" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1722895844, - "narHash": "sha256-kGwDuefMQgzdzMXx1BN3+pS7oKafQd6LTDG6XMwcqrU=", + "lastModified": 1723603349, + "narHash": "sha256-VMg6N7MryOuvSJ8Sj6YydarnUCkL7cvMdrMcnsJnJCE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d3f42bd62aa840084563e3b93e4eab73cb0a0448", + "rev": "daf7bb95821b789db24fc1ac21f613db0c1bf2cb", "type": "github" }, "original": { @@ -1364,7 +1411,7 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_3": { "locked": { "lastModified": 1706487304, "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=", @@ -1380,7 +1427,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_4": { "locked": { "narHash": "sha256-4zOyp+hFW2Y7imxIpZqZGT8CEqKmDjwgfD6BzRUE0mQ=", "owner": "NixOS", @@ -1395,13 +1442,13 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_5": { "locked": { - "lastModified": 1723603349, - "narHash": "sha256-VMg6N7MryOuvSJ8Sj6YydarnUCkL7cvMdrMcnsJnJCE=", + "lastModified": 1725194671, + "narHash": "sha256-tLGCFEFTB5TaOKkpfw3iYT9dnk4awTP/q4w+ROpMfuw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "daf7bb95821b789db24fc1ac21f613db0c1bf2cb", + "rev": "b833ff01a0d694b910daca6e2ff4a3f26dee478c", "type": "github" }, "original": { @@ -1528,13 +1575,13 @@ "inputs": { "cosmos-nix": "cosmos-nix", "flake-utils": "flake-utils_7", - "nixpkgs": "nixpkgs_6" + "nixpkgs": "nixpkgs_5" } }, "rust-overlay": { "inputs": { "flake-utils": "flake-utils_5", - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_3" }, "locked": { "lastModified": 1710468700, @@ -1553,7 +1600,7 @@ "sbt-derivation": { "inputs": { "flake-utils": "flake-utils_6", - "nixpkgs": "nixpkgs_5" + "nixpkgs": "nixpkgs_4" }, "locked": { "narHash": "sha256-Pnej7WZIPomYWg8f/CZ65sfW85IfIUjYhphMMg7/LT0=", @@ -1681,6 +1728,7 @@ }, "systems": { "locked": { + "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", "repo": "default", @@ -1785,16 +1833,16 @@ "wasmd-src": { "flake": false, "locked": { - "lastModified": 1720696698, - "narHash": "sha256-b2u3PWtjZAgmTdm/b3UcGn9K9qVQj9DR4FMcqg67T1w=", + "lastModified": 1724231006, + "narHash": "sha256-X8Q93gqk+gBJwn4EIxFVeWqRpHcIxNAplfARejHwfbk=", "owner": "CosmWasm", "repo": "wasmd", - "rev": "1ff818801d4aa5dd6f483571ac7a38660c59c671", + "rev": "de7db0dc672e7beb201e06e7eb12b2de356ac7c9", "type": "github" }, "original": { "owner": "CosmWasm", - "ref": "v0.52.0", + "ref": "v0.53.0", "repo": "wasmd", "type": "github" } @@ -1945,6 +1993,23 @@ "type": "github" } }, + "wasmvm_1_5_4-src": { + "flake": false, + "locked": { + "lastModified": 1723135235, + "narHash": "sha256-DGQHC20eMa1CDIx9fWYTTBxdFDCPoS/SsEDJnWJ+7bA=", + "owner": "CosmWasm", + "repo": "wasmvm", + "rev": "9f85c0f44fb8a5573be8e461cad12f784c544c4b", + "type": "github" + }, + "original": { + "owner": "CosmWasm", + "ref": "v1.5.4", + "repo": "wasmvm", + "type": "github" + } + }, "wasmvm_1_beta7-src": { "flake": false, "locked": { @@ -1978,6 +2043,23 @@ "type": "github" } }, + "wasmvm_2_0_3-src": { + "flake": false, + "locked": { + "lastModified": 1723134607, + "narHash": "sha256-fFFP9sqlfgFbjAPP6VVXEcDQ3is2RHZYNE003Ls8Sfk=", + "owner": "CosmWasm", + "repo": "wasmvm", + "rev": "64b8c846dadb664eeb9da765a98fc370eb594f6d", + "type": "github" + }, + "original": { + "owner": "CosmWasm", + "ref": "v2.0.3", + "repo": "wasmvm", + "type": "github" + } + }, "wasmvm_2_1_0-src": { "flake": false, "locked": { @@ -1994,6 +2076,23 @@ "repo": "wasmvm", "type": "github" } + }, + "wasmvm_2_1_2-src": { + "flake": false, + "locked": { + "lastModified": 1723135029, + "narHash": "sha256-Y3BVRR2T5MLOtXdPK38W8MX8etIuqGcTjvxkaEOyvVM=", + "owner": "CosmWasm", + "repo": "wasmvm", + "rev": "d8f06b73e4d49f8246e1569f032962122427882b", + "type": "github" + }, + "original": { + "owner": "CosmWasm", + "ref": "v2.1.2", + "repo": "wasmvm", + "type": "github" + } } }, "root": "root", diff --git a/guide/README.md b/guide/README.md index 3666489bfc..37a44860ba 100644 --- a/guide/README.md +++ b/guide/README.md @@ -10,7 +10,7 @@ mdBook is a utility to create modern online books from Markdown files. This guide should be permanently deployed at its latest stable version at [hermes.informal.systems](https://hermes.informal.systems). -Current version: `v1.10.2`. +Current version: `v1.10.3`. The version of this guide is aligned with the [versioning of the ibc crates](../README.md). diff --git a/guide/src/SUMMARY.md b/guide/src/SUMMARY.md index 268a9c016b..1813766c20 100644 --- a/guide/src/SUMMARY.md +++ b/guide/src/SUMMARY.md @@ -1,6 +1,6 @@ # Summary -# Hermes v1.10.2 +# Hermes v1.10.3 --- - [Introduction](./index.md) diff --git a/guide/src/templates/hermes-version.md b/guide/src/templates/hermes-version.md index 460c8b939d..d9c8fd4074 100644 --- a/guide/src/templates/hermes-version.md +++ b/guide/src/templates/hermes-version.md @@ -1 +1 @@ -v1.10.2 +v1.10.3 diff --git a/tools/integration-test/Cargo.toml b/tools/integration-test/Cargo.toml index 607e934182..33dd804b2b 100644 --- a/tools/integration-test/Cargo.toml +++ b/tools/integration-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ibc-integration-test" -version = "0.29.2" +version = "0.29.3" edition = "2021" rust-version = "1.76.0" license = "Apache-2.0" diff --git a/tools/test-framework/Cargo.toml b/tools/test-framework/Cargo.toml index 57c74ecd98..9afe672f25 100644 --- a/tools/test-framework/Cargo.toml +++ b/tools/test-framework/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ibc-test-framework" -version = "0.29.2" +version = "0.29.3" edition = "2021" license = "Apache-2.0" readme = "README.md"