From b0577bb9cf23011b50d90f695a2bf4e8edae179d Mon Sep 17 00:00:00 2001 From: ascjones Date: Thu, 7 Apr 2022 15:10:55 +0100 Subject: [PATCH 1/2] Update subxt to 0.20.0 --- Cargo.lock | 101 +++++------------------------- Cargo.toml | 2 +- src/cmd/extrinsics/call.rs | 4 +- src/cmd/extrinsics/instantiate.rs | 6 +- src/cmd/extrinsics/mod.rs | 4 +- src/cmd/extrinsics/upload.rs | 4 +- 6 files changed, 27 insertions(+), 94 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26951f16..5c07b097 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -490,7 +490,7 @@ dependencies = [ "ink_primitives", "ink_storage", "itertools", - "jsonrpsee 0.9.0", + "jsonrpsee", "log", "nom", "nom-supreme", @@ -1651,48 +1651,18 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonrpsee" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05fd8cd6c6b1bbd06881d2cf88f1fc83cc36c98f2219090f839115fb4a956cb9" -dependencies = [ - "jsonrpsee-client-transport 0.8.0", - "jsonrpsee-core 0.8.0", -] - [[package]] name = "jsonrpsee" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0d0b8cc1959f8c05256ace093b2317482da9127f1d9227564f47e7e6bf9bda8" dependencies = [ - "jsonrpsee-core 0.9.0", - "jsonrpsee-types 0.9.0", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", "jsonrpsee-ws-client", ] -[[package]] -name = "jsonrpsee-client-transport" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3303cdf246e6ab76e2866fb3d9acb6c76a068b1b28bd923a1b7a8122257ad7b5" -dependencies = [ - "futures", - "http", - "jsonrpsee-core 0.8.0", - "jsonrpsee-types 0.8.0", - "pin-project", - "rustls-native-certs", - "soketto", - "thiserror", - "tokio", - "tokio-rustls", - "tokio-util", - "tracing", - "webpki-roots", -] - [[package]] name = "jsonrpsee-client-transport" version = "0.9.0" @@ -1701,8 +1671,8 @@ checksum = "fa370c2c717d798c3c0a315ae3f0a707a388c6963c11f9da7dbbe1d3f7392f5f" dependencies = [ "futures", "http", - "jsonrpsee-core 0.9.0", - "jsonrpsee-types 0.9.0", + "jsonrpsee-core", + "jsonrpsee-types", "pin-project", "rustls-native-certs", "soketto", @@ -1714,29 +1684,6 @@ dependencies = [ "webpki-roots", ] -[[package]] -name = "jsonrpsee-core" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f220b5a238dc7992b90f1144fbf6eaa585872c9376afe6fe6863ffead6191bf3" -dependencies = [ - "anyhow", - "arrayvec 0.7.2", - "async-trait", - "beef", - "futures-channel", - "futures-util", - "hyper", - "jsonrpsee-types 0.8.0", - "rustc-hash", - "serde", - "serde_json", - "soketto", - "thiserror", - "tokio", - "tracing", -] - [[package]] name = "jsonrpsee-core" version = "0.9.0" @@ -1750,7 +1697,7 @@ dependencies = [ "futures-channel", "futures-util", "hyper", - "jsonrpsee-types 0.9.0", + "jsonrpsee-types", "rustc-hash", "serde", "serde_json", @@ -1760,20 +1707,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "jsonrpsee-types" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b3f601bbbe45cd63f5407b6f7d7950e08a7d4f82aa699ff41a4a5e9e54df58" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror", - "tracing", -] - [[package]] name = "jsonrpsee-types" version = "0.9.0" @@ -1794,9 +1727,9 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31b58983485b2b626c276f1eb367d62dae82132451b281072a7bfa536a33ddf3" dependencies = [ - "jsonrpsee-client-transport 0.9.0", - "jsonrpsee-core 0.9.0", - "jsonrpsee-types 0.9.0", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", ] [[package]] @@ -3364,9 +3297,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "subxt" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da729d136eac5e53eb54d11aa61bae0cd0c8d3822226b8fe49e6fade269c8c84" +checksum = "cc99c89f8e581c6e8b3e6923e66512041d908180efee7cb026b2ccd5f0334218" dependencies = [ "async-trait", "bitvec", @@ -3375,7 +3308,7 @@ dependencies = [ "frame-metadata", "futures", "hex", - "jsonrpsee 0.8.0", + "jsonrpsee", "log", "parity-scale-codec", "scale-info", @@ -3389,9 +3322,9 @@ dependencies = [ [[package]] name = "subxt-codegen" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf09d0dbc6ba8c36beeae0784eaf256f353ea8a870be646cd33b2c5255df5b7" +checksum = "74283176932f38c579311f65f4138ff2817a3bd1040250055fbd1f3857027cbb" dependencies = [ "async-trait", "darling", @@ -3408,9 +3341,9 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e683ca8888e5da50dce8d3715c48ca66fe3495936743ffb7a1de34737ec0ff41" +checksum = "6bb844cf84cdae36fc337810569cc39e3e022c17cc2ed11031c66d0e09b73726" dependencies = [ "async-trait", "darling", diff --git a/Cargo.toml b/Cargo.toml index d232bdf2..c5ef4ed7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,7 +55,7 @@ scale-info = { version = "2.0.1", default-features = false, features = ["derive" sp-core = "6.0.0" sp-runtime = "6.0.0" pallet-contracts-primitives = "6.0.0" -subxt = "0.19.0" +subxt = "0.20.0" futures = "0.3.19" hex = "0.4.3" jsonrpsee = { version = "0.9.0", features = ["ws-client"] } diff --git a/src/cmd/extrinsics/call.rs b/src/cmd/extrinsics/call.rs index 45b82dcd..70bd194f 100644 --- a/src/cmd/extrinsics/call.rs +++ b/src/cmd/extrinsics/call.rs @@ -25,7 +25,7 @@ use jsonrpsee::{core::client::ClientT, rpc_params, ws_client::WsClientBuilder}; use serde::Serialize; use sp_core::Bytes; use std::fmt::Debug; -use subxt::{rpc::NumberOrHex, ClientBuilder, Config, DefaultConfig, Signer}; +use subxt::{rpc::NumberOrHex, ClientBuilder, Config, DefaultConfig}; type ContractExecResult = pallet_contracts_primitives::ContractExecResult; @@ -142,7 +142,7 @@ impl CallCommand { self.extrinsic_opts.storage_deposit_limit, data, ) - .sign_and_submit_then_watch(signer) + .sign_and_submit_then_watch_default(signer) .await?; let result = wait_for_success_and_handle_error(tx_progress).await?; diff --git a/src/cmd/extrinsics/instantiate.rs b/src/cmd/extrinsics/instantiate.rs index cd598dfa..27823aaf 100644 --- a/src/cmd/extrinsics/instantiate.rs +++ b/src/cmd/extrinsics/instantiate.rs @@ -29,7 +29,7 @@ use std::{ fs, path::{Path, PathBuf}, }; -use subxt::{rpc::NumberOrHex, ClientBuilder, Config, DefaultConfig, Signer}; +use subxt::{rpc::NumberOrHex, ClientBuilder, Config, DefaultConfig}; type ContractInstantiateResult = pallet_contracts_primitives::ContractInstantiateResult; @@ -230,7 +230,7 @@ impl<'a> Exec<'a> { self.args.data.clone(), self.args.salt.0.clone(), ) - .sign_and_submit_then_watch(&self.signer) + .sign_and_submit_then_watch_default(&self.signer) .await?; let result = wait_for_success_and_handle_error(tx_progress).await?; @@ -262,7 +262,7 @@ impl<'a> Exec<'a> { self.args.data.clone(), self.args.salt.0.clone(), ) - .sign_and_submit_then_watch(&self.signer) + .sign_and_submit_then_watch_default(&self.signer) .await?; let result = wait_for_success_and_handle_error(tx_progress).await?; diff --git a/src/cmd/extrinsics/mod.rs b/src/cmd/extrinsics/mod.rs index 4a5185a9..8a544772 100644 --- a/src/cmd/extrinsics/mod.rs +++ b/src/cmd/extrinsics/mod.rs @@ -45,8 +45,8 @@ pub use upload::UploadCommand; type Balance = u128; type CodeHash = ::Hash; type ContractAccount = ::AccountId; -type PairSigner = subxt::PairSigner; -type SignedExtra = subxt::DefaultExtra; +type PairSigner = subxt::PairSigner; +type SignedExtra = subxt::SubstrateExtrinsicParams; type RuntimeApi = runtime_api::api::RuntimeApi; /// Arguments required for creating and sending an extrinsic to a substrate node. diff --git a/src/cmd/extrinsics/upload.rs b/src/cmd/extrinsics/upload.rs index fa2d2dd8..b9db64c7 100644 --- a/src/cmd/extrinsics/upload.rs +++ b/src/cmd/extrinsics/upload.rs @@ -24,7 +24,7 @@ use jsonrpsee::{core::client::ClientT, rpc_params, ws_client::WsClientBuilder}; use serde::Serialize; use sp_core::Bytes; use std::{fmt::Debug, path::PathBuf}; -use subxt::{rpc::NumberOrHex, ClientBuilder, Config, DefaultConfig, Signer}; +use subxt::{rpc::NumberOrHex, ClientBuilder, Config, DefaultConfig}; type CodeUploadResult = pallet_contracts_primitives::CodeUploadResult; type CodeUploadReturnValue = pallet_contracts_primitives::CodeUploadReturnValue; @@ -114,7 +114,7 @@ impl UploadCommand { .tx() .contracts() .upload_code(code, self.extrinsic_opts.storage_deposit_limit) - .sign_and_submit_then_watch(signer) + .sign_and_submit_then_watch_default(signer) .await?; let result = wait_for_success_and_handle_error(tx_progress).await?; -- GitLab From c81ff9cba38f66dc59d178e2660d9fcefc5d484a Mon Sep 17 00:00:00 2001 From: ascjones Date: Thu, 7 Apr 2022 15:13:40 +0100 Subject: [PATCH 2/2] Update contracts runtime metadata --- .../runtime_api/contracts_runtime.scale | Bin 46088 -> 46472 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/cmd/extrinsics/runtime_api/contracts_runtime.scale b/src/cmd/extrinsics/runtime_api/contracts_runtime.scale index 328f70ed12bc456e4e2ccc33abd71e01a3845878..ea4c3d12132f81ea151d28eb195d8f982fdf2714 100644 GIT binary patch delta 9374 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 delta 8775 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