From 591a9204847dcd4cf971984ed9cf7a8412b5eefd Mon Sep 17 00:00:00 2001 From: Sergey <83376337+freak12techno@users.noreply.github.com> Date: Wed, 5 Jun 2024 08:39:03 +0300 Subject: [PATCH] Add custom User-Agent to Hermes queries (#4017) --- .../ibc-relayer/3979-add-custom-user-agent.md | 2 + Cargo.lock | 37 ++++++++++--------- Cargo.toml | 16 ++++---- crates/chain-registry/Cargo.toml | 1 + crates/chain-registry/src/querier.rs | 2 + crates/relayer-cli/src/commands/listen.rs | 10 ++++- crates/relayer/src/chain/cosmos.rs | 5 ++- crates/relayer/src/lib.rs | 2 + crates/relayer/src/light_client/tendermint.rs | 9 +++-- 9 files changed, 52 insertions(+), 32 deletions(-) create mode 100644 .changelog/unreleased/improvements/ibc-relayer/3979-add-custom-user-agent.md diff --git a/.changelog/unreleased/improvements/ibc-relayer/3979-add-custom-user-agent.md b/.changelog/unreleased/improvements/ibc-relayer/3979-add-custom-user-agent.md new file mode 100644 index 0000000000..4854632ae5 --- /dev/null +++ b/.changelog/unreleased/improvements/ibc-relayer/3979-add-custom-user-agent.md @@ -0,0 +1,2 @@ +- Use custom User-Agent for Hermes queries + ([\#3979](https://github.com/informalsystems/hermes/issues/3979)) diff --git a/Cargo.lock b/Cargo.lock index 2a401e1ae8..39c12c544c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1378,6 +1378,7 @@ dependencies = [ "futures", "http 0.2.12", "ibc-proto", + "ibc-relayer", "ibc-relayer-types", "itertools", "reqwest", @@ -1410,9 +1411,9 @@ dependencies = [ [[package]] name = "ibc-proto" -version = "0.44.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66080040d5a4800d52966d55b055400f86b79c34b854b935bef03c87aacda62a" +checksum = "6cb09e0b52b8a16e98ce98845e7c15b018440f3c56defa12fa44782cd66bab65" dependencies = [ "base64 0.22.1", "bytes", @@ -3167,9 +3168,9 @@ dependencies = [ [[package]] name = "tendermint" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b50aae6ec24c3429149ad59b5b8d3374d7804d4c7d6125ceb97cb53907fb68d" +checksum = "954496fbc9716eb4446cdd6d00c071a3e2f22578d62aa03b40c7e5b4fda3ed42" dependencies = [ "bytes", "digest 0.10.7", @@ -3198,9 +3199,9 @@ dependencies = [ [[package]] name = "tendermint-config" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e07b383dc8780ebbec04cfb603f3fdaba6ea6663d8dd861425b1ffa7761fe90d" +checksum = "f84b11b57d20ee4492a1452faff85f5c520adc36ca9fe5e701066935255bb89f" dependencies = [ "flex-error", "serde", @@ -3212,9 +3213,9 @@ dependencies = [ [[package]] name = "tendermint-light-client" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331544139bbcf353acb5f56e733093d8e4bf2522cda0491b4bba7039ef0b944e" +checksum = "4faf208913acf562b8703e8e1e5eabdc57efa88c1404f9df20338a9969f08d6b" dependencies = [ "contracts", "crossbeam-channel", @@ -3237,9 +3238,9 @@ dependencies = [ [[package]] name = "tendermint-light-client-detector" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73d0ffaf614bd2db605c4762e3a31a536b73cd45488fa5bace050135ca348f28" +checksum = "d4e7c930960f72741f9baa7fb0bb12c1cf3e4bd687e2eb2cbd7996555e9799e2" dependencies = [ "crossbeam-channel", "derive_more", @@ -3260,9 +3261,9 @@ dependencies = [ [[package]] name = "tendermint-light-client-verifier" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4216e487165e5dbd7af79952eaa0d5f06c5bde861eb76c690acd7f2d2a19395c" +checksum = "3848090df4502a09ee27cb1a00f1835e1111c8993b22c5e1e41ffb7f6f09d57e" dependencies = [ "derive_more", "flex-error", @@ -3273,9 +3274,9 @@ dependencies = [ [[package]] name = "tendermint-proto" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f193d04afde6592c20fd70788a10b8cb3823091c07456db70d8a93f5fb99c1" +checksum = "dc87024548c7f3da479885201e3da20ef29e85a3b13d04606b380ac4c7120d87" dependencies = [ "bytes", "flex-error", @@ -3289,9 +3290,9 @@ dependencies = [ [[package]] name = "tendermint-rpc" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e3c231a3632cab53f92ad4161c730c468c08cfe4f0aa5a6735b53b390aecbd" +checksum = "dfdc2281e271277fda184d96d874a6fe59f569b130b634289257baacfc95aa85" dependencies = [ "async-trait", "async-tungstenite", @@ -3323,9 +3324,9 @@ dependencies = [ [[package]] name = "tendermint-testgen" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b233cec83c56c413ccc346af866cb9206a14d468fcecf0255080107bc9b103c0" +checksum = "318a0e38b3b7b36b4078d78446d4284088aa9b173d519fc804c3ee4683972934" dependencies = [ "ed25519-consensus", "gumdrop", diff --git a/Cargo.toml b/Cargo.toml index 6f8bbf44b3..4cff6bfad3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,13 +30,13 @@ ibc-test-framework = { version = "0.28.0", path = "tools/test-framework" } ibc-integration-test = { version = "0.28.0", path = "tools/integration-test" } # Tendermint dependencies -tendermint = { version = "0.36.0", default-features = false } -tendermint-light-client = { version = "0.36.0", default-features = false } -tendermint-light-client-detector = { version = "0.36.0", default-features = false } -tendermint-light-client-verifier = { version = "0.36.0", default-features = false } -tendermint-proto = { version = "0.36.0" } -tendermint-rpc = { version = "0.36.0" } -tendermint-testgen = { version = "0.36.0" } +tendermint = { version = "0.37.0", default-features = false } +tendermint-light-client = { version = "0.37.0", default-features = false } +tendermint-light-client-detector = { version = "0.37.0", default-features = false } +tendermint-light-client-verifier = { version = "0.37.0", default-features = false } +tendermint-proto = { version = "0.37.0" } +tendermint-rpc = { version = "0.37.0" } +tendermint-testgen = { version = "0.37.0" } # Other dependencies abscissa_core = "=0.6.0" @@ -72,7 +72,7 @@ hex = "0.4.3" http = "0.2.9" humantime = "2.1.0" humantime-serde = "1.1.1" -ibc-proto = "0.44.0" +ibc-proto = "0.46.0" ics23 = "0.11.1" itertools = "0.12.1" moka = "0.12.5" diff --git a/crates/chain-registry/Cargo.toml b/crates/chain-registry/Cargo.toml index cd515800ae..c2b79fb856 100644 --- a/crates/chain-registry/Cargo.toml +++ b/crates/chain-registry/Cargo.toml @@ -12,6 +12,7 @@ description = """ """ [dependencies] +ibc-relayer = { workspace = true } ibc-relayer-types = { workspace = true } ibc-proto = { workspace = true, features = ["serde"] } tendermint-rpc = { workspace = true, features = ["http-client", "websocket-client"] } diff --git a/crates/chain-registry/src/querier.rs b/crates/chain-registry/src/querier.rs index 3102011f16..9df2504e41 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::HERMES_VERSION; use tendermint_rpc::{Client, Url}; use crate::error::RegistryError; @@ -107,6 +108,7 @@ impl QueryContext for SimpleHermesRpcQuerier { .map_err(|e| RegistryError::tendermint_url_parse_error(rpc_url.clone(), e))?; let client = HttpClient::builder(url) + .user_agent(format!("hermes/{}", HERMES_VERSION)) .build() .map_err(|e| RegistryError::rpc_connect_error(rpc_url.clone(), e))?; diff --git a/crates/relayer-cli/src/commands/listen.rs b/crates/relayer-cli/src/commands/listen.rs index 101a9ab9da..121f4c6034 100644 --- a/crates/relayer-cli/src/commands/listen.rs +++ b/crates/relayer-cli/src/commands/listen.rs @@ -19,6 +19,7 @@ use ibc_relayer::{ error::Error, event::source::EventSource, util::compat_mode::compat_mode_from_version, + HERMES_VERSION, }; use ibc_relayer_types::{core::ics24_host::identifier::ChainId, events::IbcEvent}; @@ -161,7 +162,9 @@ fn subscribe( interval, max_retries, } => { - let mut rpc_client = HttpClient::new(config.rpc_addr.clone()) + let mut rpc_client = HttpClient::builder(config.rpc_addr.clone().try_into()?) + .user_agent(format!("hermes/{}", HERMES_VERSION)) + .build() .map_err(|e| Error::rpc(config.rpc_addr.clone(), e))?; rpc_client.set_compat_mode(compat_mode); @@ -191,7 +194,10 @@ fn detect_compatibility_mode( let rpc_addr = match config { ChainConfig::CosmosSdk(config) => config.rpc_addr.clone(), }; - let client = HttpClient::new(rpc_addr)?; + let client = HttpClient::builder(rpc_addr.try_into()?) + .user_agent(format!("hermes/{}", HERMES_VERSION)) + .build()?; + let status = rt.block_on(client.status())?; let compat_mode = match config { ChainConfig::CosmosSdk(config) => { diff --git a/crates/relayer/src/chain/cosmos.rs b/crates/relayer/src/chain/cosmos.rs index 09cd731b77..6cd8916905 100644 --- a/crates/relayer/src/chain/cosmos.rs +++ b/crates/relayer/src/chain/cosmos.rs @@ -110,6 +110,7 @@ use crate::util::pretty::PrettySlice; use crate::util::pretty::{ PrettyIdentifiedChannel, PrettyIdentifiedClientState, PrettyIdentifiedConnection, }; +use crate::HERMES_VERSION; use self::gas::dynamic_gas_price; use self::types::app_state::GenesisAppState; @@ -980,7 +981,9 @@ impl ChainEndpoint for CosmosSdkChain { return Err(Error::config(ConfigError::wrong_type())); }; - let mut rpc_client = HttpClient::new(config.rpc_addr.clone()) + let mut rpc_client = HttpClient::builder(config.rpc_addr.clone().try_into().unwrap()) + .user_agent(format!("hermes/{}", HERMES_VERSION)) + .build() .map_err(|e| Error::rpc(config.rpc_addr.clone(), e))?; let node_info = rt.block_on(fetch_node_info(&rpc_client, &config))?; diff --git a/crates/relayer/src/lib.rs b/crates/relayer/src/lib.rs index 511e1a62f3..eb16353f62 100644 --- a/crates/relayer/src/lib.rs +++ b/crates/relayer/src/lib.rs @@ -47,3 +47,5 @@ pub mod transfer; pub mod upgrade_chain; pub mod util; pub mod worker; + +pub const HERMES_VERSION: &str = "1.9.0"; diff --git a/crates/relayer/src/light_client/tendermint.rs b/crates/relayer/src/light_client/tendermint.rs index bb48d8dbc4..32d31dfcdb 100644 --- a/crates/relayer/src/light_client/tendermint.rs +++ b/crates/relayer/src/light_client/tendermint.rs @@ -28,11 +28,11 @@ use ibc_relayer_types::core::ics24_host::identifier::ChainId; use ibc_relayer_types::Height as ICSHeight; use crate::{ - chain::cosmos::config::CosmosSdkConfig, - chain::cosmos::CosmosSdkChain, + chain::cosmos::{config::CosmosSdkConfig, CosmosSdkChain}, client_state::AnyClientState, error::Error, misbehaviour::{AnyMisbehaviour, MisbehaviourEvidence}, + HERMES_VERSION, }; use super::{ @@ -255,7 +255,10 @@ fn io_for_addr( peer_id: PeerId, timeout: Option, ) -> Result { - let rpc_client = rpc::HttpClient::new(addr.clone()).map_err(|e| Error::rpc(addr.clone(), e))?; + let rpc_client = rpc::HttpClient::builder(addr.clone().try_into().unwrap()) + .user_agent(format!("hermes/{}", HERMES_VERSION)) + .build() + .map_err(|e| Error::rpc(addr.clone(), e))?; Ok(ProdIo::new(peer_id, rpc_client, timeout)) }