diff --git a/Cargo.lock b/Cargo.lock index feb2b716c56..c952c1d8cc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1653,7 +1653,7 @@ dependencies = [ [[package]] name = "executor_custom_data_model" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_data_model", "iroha_executor_data_model", @@ -2865,7 +2865,7 @@ dependencies = [ [[package]] name = "iroha" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "assertables", "attohttpc", @@ -2916,7 +2916,7 @@ dependencies = [ [[package]] name = "iroha_client_cli" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "clap", "color-eyre", @@ -2936,7 +2936,7 @@ dependencies = [ [[package]] name = "iroha_config" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "assertables", "cfg-if", @@ -2966,7 +2966,7 @@ dependencies = [ [[package]] name = "iroha_config_base" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "derive_more", "drop_bomb", @@ -2985,7 +2985,7 @@ dependencies = [ [[package]] name = "iroha_config_base_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "expect-test", @@ -3001,7 +3001,7 @@ dependencies = [ [[package]] name = "iroha_core" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "async-trait", "byte-unit", @@ -3045,7 +3045,7 @@ dependencies = [ [[package]] name = "iroha_core_wasm_codec_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_macro_utils", "manyhow", @@ -3057,7 +3057,7 @@ dependencies = [ [[package]] name = "iroha_crypto" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "aead", "amcl", @@ -3099,7 +3099,7 @@ dependencies = [ [[package]] name = "iroha_data_model" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "base64 0.22.1", "criterion", @@ -3126,7 +3126,7 @@ dependencies = [ [[package]] name = "iroha_data_model_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "derive_more", @@ -3145,7 +3145,7 @@ dependencies = [ [[package]] name = "iroha_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "impls", @@ -3159,7 +3159,7 @@ dependencies = [ [[package]] name = "iroha_executor" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_executor_data_model", "iroha_executor_derive", @@ -3172,7 +3172,7 @@ dependencies = [ [[package]] name = "iroha_executor_data_model" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_data_model", "iroha_executor_data_model_derive", @@ -3183,7 +3183,7 @@ dependencies = [ [[package]] name = "iroha_executor_data_model_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "iroha_executor_data_model", @@ -3195,7 +3195,7 @@ dependencies = [ [[package]] name = "iroha_executor_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "iroha_macro_utils", @@ -3207,7 +3207,7 @@ dependencies = [ [[package]] name = "iroha_ffi" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "derive_more", "getset", @@ -3217,7 +3217,7 @@ dependencies = [ [[package]] name = "iroha_ffi_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "getset", @@ -3234,7 +3234,7 @@ dependencies = [ [[package]] name = "iroha_futures" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_config", "iroha_futures_derive", @@ -3248,7 +3248,7 @@ dependencies = [ [[package]] name = "iroha_futures_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_macro_utils", "manyhow", @@ -3259,7 +3259,7 @@ dependencies = [ [[package]] name = "iroha_genesis" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "derive_more", "eyre", @@ -3276,7 +3276,7 @@ dependencies = [ [[package]] name = "iroha_logger" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "color-eyre", "console-subscriber", @@ -3296,14 +3296,14 @@ dependencies = [ [[package]] name = "iroha_macro" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_derive", ] [[package]] name = "iroha_macro_utils" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "drop_bomb", @@ -3315,7 +3315,7 @@ dependencies = [ [[package]] name = "iroha_numeric" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "derive_more", "displaydoc", @@ -3331,7 +3331,7 @@ dependencies = [ [[package]] name = "iroha_p2p" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "async-trait", "bytes", @@ -3353,7 +3353,7 @@ dependencies = [ [[package]] name = "iroha_primitives" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "derive_more", "displaydoc", @@ -3375,7 +3375,7 @@ dependencies = [ [[package]] name = "iroha_primitives_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_numeric", "iroha_primitives", @@ -3387,7 +3387,7 @@ dependencies = [ [[package]] name = "iroha_schema" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "impls", "iroha_schema_derive", @@ -3398,7 +3398,7 @@ dependencies = [ [[package]] name = "iroha_schema_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "iroha_schema", @@ -3411,7 +3411,7 @@ dependencies = [ [[package]] name = "iroha_schema_gen" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_crypto", "iroha_data_model", @@ -3423,7 +3423,7 @@ dependencies = [ [[package]] name = "iroha_smart_contract" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "derive_more", "getrandom", @@ -3439,7 +3439,7 @@ dependencies = [ [[package]] name = "iroha_smart_contract_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_macro_utils", "manyhow", @@ -3450,7 +3450,7 @@ dependencies = [ [[package]] name = "iroha_smart_contract_utils" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "cfg-if", "iroha_data_model", @@ -3460,7 +3460,7 @@ dependencies = [ [[package]] name = "iroha_swarm" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "clap", "color-eyre", @@ -3483,7 +3483,7 @@ dependencies = [ [[package]] name = "iroha_telemetry" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "async-trait", "chrono", @@ -3509,7 +3509,7 @@ dependencies = [ [[package]] name = "iroha_telemetry_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_core", "iroha_macro_utils", @@ -3522,7 +3522,7 @@ dependencies = [ [[package]] name = "iroha_torii" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "async-trait", "axum 0.7.5", @@ -3554,14 +3554,14 @@ dependencies = [ [[package]] name = "iroha_torii_const" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_primitives", ] [[package]] name = "iroha_trigger" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_smart_contract", "iroha_smart_contract_utils", @@ -3570,7 +3570,7 @@ dependencies = [ [[package]] name = "iroha_trigger_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "iroha_macro_utils", @@ -3582,7 +3582,7 @@ dependencies = [ [[package]] name = "iroha_version" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_data_model", "iroha_logger", @@ -3596,7 +3596,7 @@ dependencies = [ [[package]] name = "iroha_version_derive" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "darling", "iroha_macro", @@ -3613,7 +3613,7 @@ dependencies = [ [[package]] name = "iroha_wasm_builder" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "eyre", "path-absolutize", @@ -3624,7 +3624,7 @@ dependencies = [ [[package]] name = "iroha_wasm_builder_cli" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "clap", "color-eyre", @@ -3635,7 +3635,7 @@ dependencies = [ [[package]] name = "iroha_wasm_codec" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_core_wasm_codec_derive", "parity-scale-codec", @@ -3645,7 +3645,7 @@ dependencies = [ [[package]] name = "iroha_wasm_test_runner" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "anyhow", "wasmtime", @@ -3653,7 +3653,7 @@ dependencies = [ [[package]] name = "irohad" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "assertables", "clap", @@ -3797,7 +3797,7 @@ dependencies = [ [[package]] name = "kagami" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "clap", "color-eyre", @@ -3826,7 +3826,7 @@ dependencies = [ [[package]] name = "kura_inspector" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "clap", "iroha_core", @@ -4332,7 +4332,7 @@ dependencies = [ [[package]] name = "parity_scale_cli" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "clap", "colored", @@ -5745,7 +5745,7 @@ dependencies = [ [[package]] name = "test_network" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "eyre", "futures", @@ -5771,7 +5771,7 @@ dependencies = [ [[package]] name = "test_samples" -version = "2.0.0-pre-rc.21" +version = "2.0.0-pre-rc.22.0" dependencies = [ "iroha_crypto", "iroha_data_model", diff --git a/client/src/client.rs b/client/src/client.rs index 6902b054f0a..ee70fe5bb00 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -388,7 +388,7 @@ impl QueryRequest { fn assemble(self) -> DefaultRequestBuilder { let builder = DefaultRequestBuilder::new( HttpMethod::POST, - self.torii_url.join(torii_uri::QUERY).expect("Valid URI"), + join_torii_url(&self.torii_url, torii_uri::QUERY), ) .headers(self.headers); @@ -689,9 +689,7 @@ impl Client { ( B::new( HttpMethod::POST, - self.torii_url - .join(torii_uri::TRANSACTION) - .expect("Valid URI"), + join_torii_url(&self.torii_url, torii_uri::TRANSACTION), ) .headers(self.headers.clone()) .body(transaction_bytes), @@ -958,9 +956,7 @@ impl Client { events_api::flow::Init::new( event_filters.into_iter().map(Into::into).collect(), self.headers.clone(), - self.torii_url - .join(torii_uri::SUBSCRIPTION) - .expect("Valid URI"), + join_torii_url(&self.torii_url, torii_uri::SUBSCRIPTION), ) } @@ -994,9 +990,7 @@ impl Client { blocks_api::flow::Init::new( height, self.headers.clone(), - self.torii_url - .join(torii_uri::BLOCKS_STREAM) - .expect("Valid URI"), + join_torii_url(&self.torii_url, torii_uri::BLOCKS_STREAM), ) } @@ -1007,9 +1001,7 @@ impl Client { pub fn get_config(&self) -> Result { let resp = DefaultRequestBuilder::new( HttpMethod::GET, - self.torii_url - .join(torii_uri::CONFIGURATION) - .expect("Valid URI"), + join_torii_url(&self.torii_url, torii_uri::CONFIGURATION), ) .headers(&self.headers) .header(http::header::CONTENT_TYPE, APPLICATION_JSON) @@ -1032,10 +1024,7 @@ impl Client { /// If sending request or decoding fails pub fn set_config(&self, dto: &ConfigDTO) -> Result<()> { let body = serde_json::to_vec(&dto).wrap_err(format!("Failed to serialize {dto:?}"))?; - let url = self - .torii_url - .join(torii_uri::CONFIGURATION) - .expect("Valid URI"); + let url = join_torii_url(&self.torii_url, torii_uri::CONFIGURATION); let resp = DefaultRequestBuilder::new(HttpMethod::POST, url) .headers(&self.headers) .header(http::header::CONTENT_TYPE, APPLICATION_JSON) @@ -1076,12 +1065,25 @@ impl Client { pub fn prepare_status_request(&self) -> B { B::new( HttpMethod::GET, - self.torii_url.join(torii_uri::STATUS).expect("Valid URI"), + join_torii_url(&self.torii_url, torii_uri::STATUS), ) .headers(self.headers.clone()) } } +fn join_torii_url(url: &Url, path: &str) -> Url { + // This is needed to prevent "https://iroha-peer.jp/peer1/".join("/query") == "https://iroha-peer.jp/query" + let path = path.strip_prefix('/').unwrap_or(path); + + // This is needed to prevent "https://iroha-peer.jp/peer1".join("query") == "https://iroha-peer.jp/query" + assert!( + url.path().ends_with('/'), + "Torii url must end with trailing slash" + ); + + url.join(path).expect("Valid URI") +} + /// Logic for `sync` and `async` Iroha websocket streams pub mod stream_api { use futures_util::{SinkExt, Stream, StreamExt}; diff --git a/client/src/config/user.rs b/client/src/config/user.rs index 71bf826d4d3..e87c6d38b6a 100644 --- a/client/src/config/user.rs +++ b/client/src/config/user.rs @@ -87,6 +87,16 @@ impl Root { .attach_printable("Note: only `http` and `https` protocols are supported"), ), } + let torii_api_url = { + let mut url = torii_url.into_value(); + let path = url.path(); + // Ensure torii url ends with a trailing slash + if !path.ends_with('/') { + let path = path.to_owned() + "/"; + url.set_path(&path) + } + url + }; let (public_key, public_key_origin) = public_key.into_tuple(); let (private_key, private_key_origin) = private_key.into_tuple(); @@ -103,7 +113,7 @@ impl Root { chain: chain_id, account: account_id, key_pair: key_pair.unwrap(), - torii_api_url: torii_url.into_value(), + torii_api_url, basic_auth, transaction_ttl: tx_ttl.into_value().get(), transaction_status_timeout: tx_timeout.into_value().get(), diff --git a/configs/swarm/executor.wasm b/configs/swarm/executor.wasm index da0c0313bae..8549e4ab9ba 100644 Binary files a/configs/swarm/executor.wasm and b/configs/swarm/executor.wasm differ