From 7564196e101b2a10ecfb9c2b1e96ef0bc765c742 Mon Sep 17 00:00:00 2001 From: haerdib Date: Thu, 30 Mar 2023 11:58:07 +0200 Subject: [PATCH 1/5] update to tag v0.10.0 switch to generic extrinsic params some more changes add SignExtrinisc trait update extrinisc factory fix error rename event subscription fix events fix whatever possible we're getting there compiling! fix tests fix teeracle fmt clippy fix evm fmt --- Cargo.lock | 67 +++++----- cli/Cargo.toml | 7 +- cli/src/base_cli/commands/faucet.rs | 8 +- cli/src/base_cli/commands/listen.rs | 14 +-- cli/src/base_cli/commands/shield_funds.rs | 27 ++-- cli/src/base_cli/commands/transfer.rs | 15 ++- cli/src/error.rs | 39 ++++++ cli/src/evm/commands/evm_call.rs | 5 +- cli/src/evm/commands/evm_create.rs | 3 +- cli/src/evm/commands/evm_read.rs | 4 +- cli/src/main.rs | 1 + cli/src/oracle/commands/add_to_whitelist.rs | 14 +-- cli/src/oracle/commands/listen_to_exchange.rs | 10 +- cli/src/oracle/commands/listen_to_oracle.rs | 29 +++-- cli/src/trusted_operation.rs | 118 ++++++++---------- core-primitives/extrinsics-factory/Cargo.toml | 2 +- core-primitives/extrinsics-factory/src/lib.rs | 43 +++---- .../extrinsics-factory/src/mock.rs | 4 +- .../node-api/api-client-extensions/Cargo.toml | 2 +- .../api-client-extensions/src/account.rs | 7 +- .../api-client-extensions/src/chain.rs | 6 +- .../node-api/api-client-types/Cargo.toml | 2 +- .../node-api/api-client-types/src/lib.rs | 31 +++-- core-primitives/node-api/factory/src/lib.rs | 26 ++-- core-primitives/node-api/metadata/Cargo.toml | 2 +- core-primitives/stf-executor/Cargo.toml | 2 +- .../indirect-calls-executor/Cargo.toml | 2 +- .../indirect-calls-executor/src/executor.rs | 15 +-- .../src/parentchain_extrinsic_parser.rs | 9 +- core/rpc-client/Cargo.toml | 2 +- core/rpc-client/src/mock.rs | 22 ++-- enclave-runtime/Cargo.lock | 59 ++++----- enclave-runtime/Cargo.toml | 3 +- .../src/initialization/global_components.rs | 10 +- .../src/initialization/parentchain/common.rs | 11 +- enclave-runtime/src/test/evm_pallet_tests.rs | 24 ++-- .../src/test/on_chain_ocall_tests.rs | 2 +- enclave-runtime/src/test/top_pool_tests.rs | 11 +- service/Cargo.toml | 2 +- service/src/account_funding.rs | 15 ++- service/src/error.rs | 2 +- service/src/main.rs | 29 ++--- .../src/ocall_bridge/worker_on_chain_ocall.rs | 4 +- service/src/teeracle/mod.rs | 14 ++- sidechain/peer-fetch/src/error.rs | 10 +- 45 files changed, 369 insertions(+), 365 deletions(-) create mode 100644 cli/src/error.rs diff --git a/Cargo.lock b/Cargo.lock index 3175a88fc4..e592dfb01f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,8 +14,8 @@ dependencies = [ [[package]] name = "ac-compose-macros" -version = "0.2.2" -source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39-tag-v0.9.0#c4d3f110b94e25d5ce52d5bb64d0c778c4c7f2da" +version = "0.2.3" +source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39#417c301cce7e23f765891cd56ca48878390c5cf9" dependencies = [ "ac-primitives", "log 0.4.17", @@ -27,14 +27,14 @@ dependencies = [ [[package]] name = "ac-node-api" -version = "0.2.2" -source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39-tag-v0.9.0#c4d3f110b94e25d5ce52d5bb64d0c778c4c7f2da" +version = "0.2.3" +source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39#417c301cce7e23f765891cd56ca48878390c5cf9" dependencies = [ "ac-primitives", "bitvec", "derive_more", "either", - "frame-metadata 15.0.0 (git+https://github.com/paritytech/frame-metadata)", + "frame-metadata 15.1.0", "hex", "log 0.4.17", "parity-scale-codec", @@ -49,8 +49,8 @@ dependencies = [ [[package]] name = "ac-primitives" -version = "0.4.0" -source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39-tag-v0.9.0#c4d3f110b94e25d5ce52d5bb64d0c778c4c7f2da" +version = "0.5.0" +source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39#417c301cce7e23f765891cd56ca48878390c5cf9" dependencies = [ "frame-system", "hex", @@ -196,6 +196,12 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" +[[package]] +name = "array-bytes" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f72e9d6fac4bc80778ea470b20197b88d28c292bb7d60c3fb099280003cd19" + [[package]] name = "arrayref" version = "0.3.7" @@ -1749,8 +1755,8 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.0.0" -source = "git+https://github.com/paritytech/frame-metadata#040a53c63af277e280282028b73b992eac9c35a2" +version = "15.1.0" +source = "git+https://github.com/paritytech/frame-metadata#438a5b098bb9d5b5a09bdc5b68275b2c5e63a010" dependencies = [ "cfg-if 1.0.0", "parity-scale-codec", @@ -1764,7 +1770,7 @@ version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "bitflags", - "frame-metadata 15.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "frame-metadata 15.0.0", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -2664,6 +2670,7 @@ dependencies = [ name = "integritee-cli" version = "0.9.0" dependencies = [ + "array-bytes 6.0.0", "base58", "blake2-rfc", "chrono 0.4.24", @@ -2685,6 +2692,7 @@ dependencies = [ "log 0.4.17", "pallet-balances", "pallet-evm", + "pallet-teerex", "parity-scale-codec", "primitive-types", "rand 0.8.5", @@ -2700,6 +2708,7 @@ dependencies = [ "substrate-api-client", "substrate-client-keystore", "teerex-primitives", + "thiserror 1.0.40", "ws", ] @@ -3164,7 +3173,7 @@ name = "itc-rpc-client" version = "0.9.0" dependencies = [ "env_logger 0.9.3", - "frame-metadata 15.0.0 (git+https://github.com/paritytech/frame-metadata)", + "frame-metadata 15.1.0", "itc-tls-websocket-server", "itp-networking-utils", "itp-rpc", @@ -3648,7 +3657,7 @@ name = "itp-storage" version = "0.9.0" dependencies = [ "derive_more", - "frame-metadata 15.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "frame-metadata 15.0.0", "frame-support", "hash-db", "itp-types", @@ -6777,7 +6786,7 @@ name = "sc-keystore" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "async-trait", "parking_lot 0.12.1", "serde_json 1.0.94", @@ -7644,7 +7653,7 @@ name = "sp-core" version = "7.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "base58", "bitflags", "blake2", @@ -8197,13 +8206,14 @@ dependencies = [ [[package]] name = "substrate-api-client" -version = "0.9.0" -source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39-tag-v0.9.0#c4d3f110b94e25d5ce52d5bb64d0c778c4c7f2da" +version = "0.10.0" +source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39#417c301cce7e23f765891cd56ca48878390c5cf9" dependencies = [ "ac-compose-macros", "ac-node-api", "ac-primitives", - "frame-metadata 15.0.0 (git+https://github.com/paritytech/frame-metadata)", + "derive_more", + "frame-metadata 15.1.0", "frame-support", "futures 0.3.27", "hex", @@ -8215,7 +8225,6 @@ dependencies = [ "sp-core", "sp-runtime", "sp-runtime-interface", - "thiserror-core", "url 2.3.1", "ws", ] @@ -8236,7 +8245,7 @@ dependencies = [ [[package]] name = "substrate-client-keystore" version = "0.7.0" -source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39-tag-v0.9.0#c4d3f110b94e25d5ce52d5bb64d0c778c4c7f2da" +source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39#417c301cce7e23f765891cd56ca48878390c5cf9" dependencies = [ "async-trait", "hex", @@ -8420,26 +8429,6 @@ dependencies = [ "thiserror-impl 1.0.40", ] -[[package]] -name = "thiserror-core" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" -dependencies = [ - "thiserror-core-impl", -] - -[[package]] -name = "thiserror-core-impl" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "thiserror-impl" version = "1.0.9" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 3aa4d5667b..7c4065a7fd 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -5,6 +5,7 @@ authors = ["Integritee AG "] edition = "2021" [dependencies] +array-bytes = { version = "6.0.0" } base58 = "0.2" blake2-rfc = { version = "0.2.18" } chrono = "*" @@ -20,13 +21,15 @@ rayon = "1.5.1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sgx_crypto_helper = { branch = "master", git = "https://github.com/apache/teaclave-sgx-sdk.git" } +thiserror = "1.0" ws = { version = "0.9.1", features = ["ssl"] } # scs / integritee my-node-runtime = { package = "integritee-node-runtime", git = "https://github.com/integritee-network/integritee-node.git", branch = "polkadot-v0.9.39" } pallet-evm = { optional = true, git = "https://github.com/integritee-network/frontier.git", branch = "polkadot-v0.9.39" } -substrate-api-client = { features = ["ws-client"], git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } -substrate-client-keystore = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } +pallet-teerex = { git = "https://github.com/integritee-network/pallets.git", branch = "polkadot-v0.9.39" } +substrate-api-client = { features = ["ws-client"], git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } +substrate-client-keystore = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } teerex-primitives = { git = "https://github.com/integritee-network/pallets.git", branch = "polkadot-v0.9.39" } # substrate dependencies diff --git a/cli/src/base_cli/commands/faucet.rs b/cli/src/base_cli/commands/faucet.rs index 592bea4a62..b751993233 100644 --- a/cli/src/base_cli/commands/faucet.rs +++ b/cli/src/base_cli/commands/faucet.rs @@ -19,7 +19,7 @@ use crate::{ command_utils::{get_accountid_from_str, get_chain_api}, Cli, }; -use codec::Encode; +use itp_node_api::api_client::ParentchainExtrinsicSigner; use my_node_runtime::{BalancesCall, RuntimeCall}; use sp_keyring::AccountKeyring; use sp_runtime::MultiAddress; @@ -38,12 +38,12 @@ pub struct FaucetCommand { impl FaucetCommand { pub(crate) fn run(&self, cli: &Cli) { let mut api = get_chain_api(cli); - api.set_signer(AccountKeyring::Alice.pair()); + api.set_signer(ParentchainExtrinsicSigner::new(AccountKeyring::Alice.pair())); let mut nonce = api.get_nonce().unwrap(); for account in &self.accounts { let to = get_accountid_from_str(account); #[allow(clippy::redundant_clone)] - let xt: UncheckedExtrinsicV4<_, _> = compose_extrinsic_offline!( + let xt: UncheckedExtrinsicV4<_, _, _, _> = compose_extrinsic_offline!( api.signer().unwrap(), RuntimeCall::Balances(BalancesCall::transfer { dest: MultiAddress::Id(to.clone()), @@ -53,7 +53,7 @@ impl FaucetCommand { ); // send and watch extrinsic until finalized println!("Faucet drips to {} (Alice's nonce={})", to, nonce); - let _blockh = api.submit_extrinsic(xt.encode()).unwrap(); + let _blockh = api.submit_extrinsic(xt).unwrap(); nonce += 1; } } diff --git a/cli/src/base_cli/commands/listen.rs b/cli/src/base_cli/commands/listen.rs index 28ea89e8a9..ab303a2d73 100644 --- a/cli/src/base_cli/commands/listen.rs +++ b/cli/src/base_cli/commands/listen.rs @@ -17,11 +17,10 @@ use crate::{command_utils::get_chain_api, Cli}; use base58::ToBase58; -use codec::{Decode, Encode}; +use codec::Encode; use log::*; use my_node_runtime::{Hash, RuntimeEvent}; -use std::vec::Vec; -use substrate_api_client::{rpc::HandleSubscription, SubscribeFrameSystem}; +use substrate_api_client::SubscribeEvents; #[derive(Parser)] pub struct ListenCommand { @@ -41,7 +40,7 @@ impl ListenCommand { info!("Subscribing to events"); let mut count = 0u32; let mut blocks = 0u32; - let mut subscription = api.subscribe_system_events().unwrap(); + let mut subscription = api.subscribe_events().unwrap(); loop { if let Some(e) = self.events { if count >= e { @@ -54,12 +53,9 @@ impl ListenCommand { } }; - let event_bytes = subscription.next().unwrap().unwrap().changes[0].1.clone().unwrap().0; - let events_result = Vec::>::decode( - &mut event_bytes.as_slice(), - ); + let event_results = subscription.next_event::().unwrap(); blocks += 1; - match events_result { + match event_results { Ok(evts) => for evr in &evts { println!("decoded: phase {:?} event {:?}", evr.phase, evr.event); diff --git a/cli/src/base_cli/commands/shield_funds.rs b/cli/src/base_cli/commands/shield_funds.rs index 5773d8108c..281fe38d8a 100644 --- a/cli/src/base_cli/commands/shield_funds.rs +++ b/cli/src/base_cli/commands/shield_funds.rs @@ -21,7 +21,7 @@ use crate::{ }; use base58::FromBase58; use codec::{Decode, Encode}; -use itp_node_api::api_client::TEEREX; +use itp_node_api::api_client::{ParentchainExtrinsicSigner, TEEREX}; use itp_sgx_crypto::ShieldingCryptoEncrypt; use itp_stf_primitives::types::ShardIdentifier; use log::*; @@ -31,16 +31,13 @@ use substrate_api_client::{compose_extrinsic, SubmitAndWatch, UncheckedExtrinsic #[derive(Parser)] pub struct ShieldFundsCommand { - /// Sender's parentchain AccountId in ss58check format + /// Sender's parentchain AccountId in ss58check format. from: String, - - /// Recipient's incognito AccountId in ss58check format + /// Recipient's incognito AccountId in ss58check format. to: String, - - /// Amount to be transferred + /// Amount to be transferred. amount: Balance, - - /// Shard identifier + /// Shard identifier. shard: String, } @@ -58,18 +55,18 @@ impl ShieldFundsCommand { Err(e) => panic!("{}", e), }; - // get the sender + // Get the sender. let from = get_pair_from_str(&self.from); - chain_api.set_signer(sr25519_core::Pair::from(from)); + chain_api.set_signer(ParentchainExtrinsicSigner::new(sr25519_core::Pair::from(from))); - // get the recipient + // Get the recipient. let to = get_accountid_from_str(&self.to); let encryption_key = get_shielding_key(cli).unwrap(); let encrypted_recevier = encryption_key.encrypt(&to.encode()).unwrap(); - // compose the extrinsic - let xt: UncheckedExtrinsicV4<_, _> = compose_extrinsic!( + // Compose the extrinsic. + let xt: UncheckedExtrinsicV4<_, _, _, _> = compose_extrinsic!( chain_api, TEEREX, "shield_funds", @@ -78,9 +75,7 @@ impl ShieldFundsCommand { shard ); - let tx_hash = chain_api - .submit_and_watch_extrinsic_until(xt.encode(), XtStatus::Finalized) - .unwrap(); + let tx_hash = chain_api.submit_and_watch_extrinsic_until(xt, XtStatus::Finalized).unwrap(); println!("[+] TrustedOperation got finalized. Hash: {:?}\n", tx_hash); } } diff --git a/cli/src/base_cli/commands/transfer.rs b/cli/src/base_cli/commands/transfer.rs index 35520a6128..34e221b74f 100644 --- a/cli/src/base_cli/commands/transfer.rs +++ b/cli/src/base_cli/commands/transfer.rs @@ -19,11 +19,13 @@ use crate::{ command_utils::{get_accountid_from_str, get_chain_api, *}, Cli, }; -use codec::Encode; +use itp_node_api::api_client::{Address, ParentchainExtrinsicSigner}; use log::*; use my_node_runtime::Balance; use sp_core::{crypto::Ss58Codec, sr25519 as sr25519_core, Pair}; -use substrate_api_client::{GenericAddress, GetAccountInformation, SubmitAndWatch, XtStatus}; +use substrate_api_client::{ + extrinsic::BalancesExtrinsics, GetAccountInformation, SubmitAndWatch, XtStatus, +}; #[derive(Parser)] pub struct TransferCommand { @@ -44,9 +46,12 @@ impl TransferCommand { info!("from ss58 is {}", from_account.public().to_ss58check()); info!("to ss58 is {}", to_account.to_ss58check()); let mut api = get_chain_api(cli); - api.set_signer(sr25519_core::Pair::from(from_account)); - let xt = api.balance_transfer(GenericAddress::Id(to_account.clone()), self.amount); - let tx_hash = api.submit_and_watch_extrinsic_until(xt.encode(), XtStatus::InBlock).unwrap(); + api.set_signer(ParentchainExtrinsicSigner::new(sr25519_core::Pair::from(from_account))); + let xt = api.balance_transfer(Address::Id(to_account.clone()), self.amount); + let tx_hash = api + .submit_and_watch_extrinsic_until(xt, XtStatus::InBlock) + .unwrap() + .extrinsic_hash; println!("[+] TrustedOperation got finalized. Hash: {:?}\n", tx_hash); let result = api.get_account_data(&to_account).unwrap().unwrap(); println!("balance for {} is now {}", to_account, result.free); diff --git a/cli/src/error.rs b/cli/src/error.rs new file mode 100644 index 0000000000..5969d5a2a8 --- /dev/null +++ b/cli/src/error.rs @@ -0,0 +1,39 @@ +/* + Copyright 2021 Integritee AG and Supercomputing Systems AG + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +use itp_node_api::api_client::ApiClientError; +use itp_types::parentchain::{BlockHash, BlockNumber}; +use std::result::Result as StdResult; + +pub type Result = StdResult; + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("{0:?}")] + ApiClient(ApiClientError), + #[error("Could not retrieve Header from node")] + MissingBlock, + #[error("Confirmed Block Number ({0:?}) exeeds expected one ({0:?})")] + ConfirmedBlockNumeberTooHigh(BlockNumber, BlockNumber), + #[error("Confirmed Block Hash ({0:?}) does not match expected one ({0:?})")] + ConfirmedBlockHashDoesNotMatchExpected(BlockHash, BlockHash), +} + +impl From for Error { + fn from(error: ApiClientError) -> Self { + Error::ApiClient(error) + } +} diff --git a/cli/src/evm/commands/evm_call.rs b/cli/src/evm/commands/evm_call.rs index 212425d8cc..a84d05156e 100644 --- a/cli/src/evm/commands/evm_call.rs +++ b/cli/src/evm/commands/evm_call.rs @@ -29,7 +29,6 @@ use itp_types::AccountId; use log::*; use sp_core::{crypto::Ss58Codec, Pair, H160, U256}; use std::{boxed::Box, vec::Vec}; -use substrate_api_client::utils::FromHexString; #[derive(Parser)] pub struct EvmCallCommands { @@ -58,9 +57,9 @@ impl EvmCallCommands { info!("senders evm account is {}", sender_evm_acc); let execution_address = - H160::from_slice(&Vec::from_hex(self.execution_address.to_string()).unwrap()); + H160::from_slice(&array_bytes::hex2bytes(&self.execution_address).unwrap()); - let function_hash = Vec::from_hex(self.function.to_string()).unwrap(); + let function_hash = array_bytes::hex2bytes(&self.function).unwrap(); let (mrenclave, shard) = get_identifiers(trusted_args); let nonce = get_layer_two_nonce!(sender, cli, trusted_args); diff --git a/cli/src/evm/commands/evm_create.rs b/cli/src/evm/commands/evm_create.rs index e0291e4194..9b1e3d7de3 100644 --- a/cli/src/evm/commands/evm_create.rs +++ b/cli/src/evm/commands/evm_create.rs @@ -33,7 +33,6 @@ use pallet_evm::{AddressMapping, HashedAddressMapping}; use sp_core::{crypto::Ss58Codec, Pair, H160, U256}; use sp_runtime::traits::BlakeTwo256; use std::vec::Vec; -use substrate_api_client::utils::FromHexString; #[derive(Parser)] pub struct EvmCreateCommands { @@ -70,7 +69,7 @@ impl EvmCreateCommands { let top = TrustedCall::evm_create( from_acc, sender_evm_acc, - Vec::from_hex(self.smart_contract.to_string()).unwrap(), + array_bytes::hex2bytes(&self.smart_contract).unwrap().to_vec(), U256::from(0), 967295, // gas limit U256::from(1), // max_fee_per_gas !>= min_gas_price defined in runtime diff --git a/cli/src/evm/commands/evm_read.rs b/cli/src/evm/commands/evm_read.rs index 73b05dfe31..8de4309c6f 100644 --- a/cli/src/evm/commands/evm_read.rs +++ b/cli/src/evm/commands/evm_read.rs @@ -25,8 +25,6 @@ use itp_stf_primitives::types::KeyPair; use itp_types::AccountId; use log::*; use sp_core::{crypto::Ss58Codec, Pair, H160, H256}; -use std::{boxed::Box, vec::Vec}; -use substrate_api_client::utils::FromHexString; #[derive(Parser)] pub struct EvmReadCommands { @@ -52,7 +50,7 @@ impl EvmReadCommands { info!("senders evm account is {}", sender_evm_acc); let execution_address = - H160::from_slice(&Vec::from_hex(self.execution_address.to_string()).unwrap()); + H160::from_slice(&array_bytes::hex2bytes(&self.execution_address).unwrap()); let top: TrustedOperation = TrustedGetter::evm_account_storages(sender_acc, execution_address, H256::zero()) diff --git a/cli/src/main.rs b/cli/src/main.rs index 17f0ba5370..6deb825ce2 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -32,6 +32,7 @@ mod base_cli; mod benchmark; mod command_utils; mod commands; +mod error; #[cfg(feature = "evm")] mod evm; #[cfg(feature = "teeracle")] diff --git a/cli/src/oracle/commands/add_to_whitelist.rs b/cli/src/oracle/commands/add_to_whitelist.rs index 1f43543d6e..f62599df57 100644 --- a/cli/src/oracle/commands/add_to_whitelist.rs +++ b/cli/src/oracle/commands/add_to_whitelist.rs @@ -19,11 +19,8 @@ use crate::{ command_utils::{get_chain_api, get_pair_from_str, mrenclave_from_base58}, Cli, }; -use codec::Encode; -use itp_node_api::api_client::{ADD_TO_WHITELIST, TEERACLE}; -use substrate_api_client::{ - compose_call, compose_extrinsic, SubmitAndWatch, UncheckedExtrinsicV4, XtStatus, -}; +use itp_node_api::api_client::{ParentchainExtrinsicSigner, ADD_TO_WHITELIST, TEERACLE}; +use substrate_api_client::{compose_call, compose_extrinsic, SubmitAndWatch, XtStatus}; /// Add a trusted market data source to the on-chain whitelist. #[derive(Debug, Clone, Parser)] @@ -48,7 +45,7 @@ impl AddToWhitelistCmd { let market_data_source = self.source.clone(); - api.set_signer(from.into()); + api.set_signer(ParentchainExtrinsicSigner::new(from.into())); let call = compose_call!( api.metadata(), @@ -59,10 +56,9 @@ impl AddToWhitelistCmd { ); // compose the extrinsic - let xt: UncheckedExtrinsicV4<_, _> = compose_extrinsic!(api, "Sudo", "sudo", call); + let xt = compose_extrinsic!(api, "Sudo", "sudo", call); - let report = - api.submit_and_watch_extrinsic_until(xt.encode(), XtStatus::Finalized).unwrap(); + let report = api.submit_and_watch_extrinsic_until(xt, XtStatus::Finalized).unwrap(); println!("[+] Add to whitelist got finalized. Hash: {:?}\n", report.extrinsic_hash); } } diff --git a/cli/src/oracle/commands/listen_to_exchange.rs b/cli/src/oracle/commands/listen_to_exchange.rs index e2e803acf4..8c27e0e0ca 100644 --- a/cli/src/oracle/commands/listen_to_exchange.rs +++ b/cli/src/oracle/commands/listen_to_exchange.rs @@ -16,13 +16,12 @@ */ use crate::{command_utils::get_chain_api, Cli}; -use codec::Decode; use itp_node_api::api_client::ParentchainApi; use itp_time_utils::{duration_now, remaining_time}; use log::{debug, info, trace}; use my_node_runtime::{Hash, RuntimeEvent}; use std::time::Duration; -use substrate_api_client::{rpc::HandleSubscription, SubscribeFrameSystem}; +use substrate_api_client::SubscribeEvents; /// Listen to exchange rate events. #[derive(Debug, Clone, Parser)] @@ -47,14 +46,11 @@ pub fn count_exchange_rate_update_events(api: &ParentchainApi, duration: Duratio let stop = duration_now() + duration; //subscribe to events - let mut subscription = api.subscribe_system_events().unwrap(); + let mut subscription = api.subscribe_events().unwrap(); let mut count = 0; while remaining_time(stop).unwrap_or_default() > Duration::ZERO { - let event_bytes = subscription.next().unwrap().unwrap().changes[0].1.clone().unwrap().0; - let events_result = Vec::>::decode( - &mut event_bytes.as_slice(), - ); + let events_result = subscription.next_event::().unwrap(); if let Ok(events) = events_result { for event_record in &events { info!("received event {:?}", event_record.event); diff --git a/cli/src/oracle/commands/listen_to_oracle.rs b/cli/src/oracle/commands/listen_to_oracle.rs index f1d19bde67..916e8706ad 100644 --- a/cli/src/oracle/commands/listen_to_oracle.rs +++ b/cli/src/oracle/commands/listen_to_oracle.rs @@ -16,13 +16,12 @@ */ use crate::{command_utils::get_chain_api, Cli}; -use codec::Decode; use itp_node_api::api_client::ParentchainApi; use itp_time_utils::{duration_now, remaining_time}; use log::{debug, info}; use my_node_runtime::{Hash, RuntimeEvent}; use std::time::Duration; -use substrate_api_client::{rpc::HandleSubscription, SubscribeFrameSystem}; +use substrate_api_client::{EventRecord, SubscribeEvents}; /// Listen to exchange rate events. #[derive(Debug, Clone, Parser)] @@ -32,6 +31,7 @@ pub struct ListenToOracleEventsCmd { } type EventCount = u32; +type Event = EventRecord; impl ListenToOracleEventsCmd { pub fn run(&self, cli: &Cli) { @@ -47,28 +47,27 @@ fn count_oracle_update_events(api: &ParentchainApi, duration: Duration) -> Event let stop = duration_now() + duration; //subscribe to events - let mut subscription = api.subscribe_system_events().unwrap(); + let mut subscription = api.subscribe_events().unwrap(); let mut count = 0; while remaining_time(stop).unwrap_or_default() > Duration::ZERO { - let event_bytes = subscription.next().unwrap().unwrap().changes[0].1.clone().unwrap().0; - count += report_event_count(&event_bytes); + let events_result = subscription.next_event::(); + let event_count = match events_result { + Some(Ok(event_records)) => { + debug!("Could not successfully decode event_bytes {:?}", event_records); + report_event_count(event_records) + }, + _ => 0, + }; + count += event_count; } debug!("Received {} ExchangeRateUpdated event(s) in total", count); count } -fn report_event_count(events_bytes: &[u8]) -> EventCount { - let event_records = - Vec::>::decode(&mut &events_bytes[..]); - if event_records.is_err() { - // Return no count if cant successfully decode event - debug!("Could not successfully decode event_bytes {:?}", event_records); - return 0 - } - +fn report_event_count(event_records: Vec) -> EventCount { let mut count = 0; - event_records.unwrap().iter().for_each(|event_record| { + event_records.iter().for_each(|event_record| { info!("received event {:?}", event_record.event); if let RuntimeEvent::Teeracle(event) = &event_record.event { match &event { diff --git a/cli/src/trusted_operation.rs b/cli/src/trusted_operation.rs index 5b4293e39f..d3cd0eded9 100644 --- a/cli/src/trusted_operation.rs +++ b/cli/src/trusted_operation.rs @@ -17,6 +17,7 @@ use crate::{ command_utils::{get_chain_api, get_pair_from_str, get_shielding_key, get_worker_api_direct}, + error::{Error, Result}, trusted_cli::TrustedCli, Cli, }; @@ -24,14 +25,15 @@ use base58::FromBase58; use codec::{Decode, Encode}; use ita_stf::{Getter, TrustedOperation}; use itc_rpc_client::direct_client::{DirectApi, DirectClient}; -use itp_node_api::api_client::TEEREX; +use itp_node_api::api_client::{ParentchainApi, ParentchainExtrinsicSigner, TEEREX}; use itp_rpc::{RpcRequest, RpcResponse, RpcReturnValue}; use itp_sgx_crypto::ShieldingCryptoEncrypt; use itp_stf_primitives::types::ShardIdentifier; use itp_types::{BlockNumber, DirectRequestStatus, TrustedOperationStatus}; use itp_utils::{FromHexPrefixed, ToHexPrefixed}; use log::*; -use my_node_runtime::{AccountId, Hash}; +use my_node_runtime::{Hash, RuntimeEvent}; +use pallet_teerex::Event as TeerexEvent; use sp_core::{sr25519 as sr25519_core, H256}; use std::{ result::Result as StdResult, @@ -39,8 +41,7 @@ use std::{ time::Instant, }; use substrate_api_client::{ - compose_extrinsic, GetHeader, StaticEvent, SubmitAndWatch, SubscribeEvents, - SubscribeFrameSystem, XtStatus, + compose_extrinsic, GetHeader, SubmitAndWatch, SubscribeEvents, XtStatus, }; use teerex_primitives::Request; @@ -118,14 +119,14 @@ fn send_request( let arg_signer = &trusted_args.xt_signer; let signer = get_pair_from_str(arg_signer); - chain_api.set_signer(sr25519_core::Pair::from(signer)); + chain_api.set_signer(ParentchainExtrinsicSigner::new(sr25519_core::Pair::from(signer))); let request = Request { shard, cyphertext: call_encrypted }; let xt = compose_extrinsic!(&chain_api, TEEREX, "call_worker", request); // send and watch extrinsic until block is executed let block_hash = chain_api - .submit_and_watch_extrinsic_until(xt.encode(), XtStatus::InBlock) + .submit_and_watch_extrinsic_until(xt, XtStatus::InBlock) .unwrap() .block_hash .unwrap(); @@ -135,54 +136,59 @@ fn send_request( block_hash ); info!("Waiting for execution confirmation from enclave..."); - let mut subscription = chain_api.subscribe_system_events().unwrap(); - + let mut subscription = chain_api.subscribe_events().unwrap(); loop { - let ret: ProcessedParentchainBlockArgs = - chain_api.wait_for_event(&mut subscription).unwrap(); - info!("Confirmation of ProcessedParentchainBlock received"); - debug!("Expected block Hash: {:?}", block_hash); - debug!("Confirmed stf block Hash: {:?}", ret.block_hash); - match chain_api.get_header(Some(block_hash)) { - Ok(option) => { - match option { - None => { - error!("Could not get Block Header"); - return None - }, - Some(header) => { - let block_number: BlockNumber = header.number; - info!("Expected block Number: {:?}", block_number); - info!("Confirmed block Number: {:?}", ret.block_number); - // The returned block number belongs to a subsequent event. We missed our event and can break the loop. - if ret.block_number > block_number { - warn!( - "Received block number ({:?}) exceeds expected one ({:?}) ", - ret.block_number, block_number - ); - return None - } - // The block number is correct, but the block hash does not fit. - if block_number == ret.block_number && block_hash != ret.block_hash { - error!( - "Block hash for event does not match expected hash. Expected: {:?}, returned: {:?}", - block_hash, ret.block_hash); - return None - } - }, + let event_records = subscription.next_event::().unwrap().unwrap(); + for event_record in event_records { + if let RuntimeEvent::Teerex(TeerexEvent::ProcessedParentchainBlock( + _signer, + confirmed_block_hash, + _merkle_root, + confirmed_block_number, + )) = event_record.event + { + info!("Confirmation of ProcessedParentchainBlock received"); + debug!("Expected block Hash: {:?}", block_hash); + debug!("Confirmed stf block Hash: {:?}", confirmed_block_hash); + if let Err(e) = check_if_received_event_exceeds_expected( + &chain_api, + block_hash, + confirmed_block_hash, + confirmed_block_number, + ) { + error!("ProcessedParentchainBlock event: {:?}", e); + return None + }; + + if confirmed_block_hash == block_hash { + return Some(confirmed_block_hash.encode()) } - }, - Err(err) => { - error!("Could not get Block Header, due to error: {:?}", err); - return None - }, - } - if ret.block_hash == block_hash { - return Some(ret.block_hash.encode()) + } } } } +fn check_if_received_event_exceeds_expected( + chain_api: &ParentchainApi, + block_hash: Hash, + confirmed_block_hash: Hash, + confirmed_block_number: BlockNumber, +) -> Result<()> { + let block_number = chain_api.get_header(Some(block_hash))?.ok_or(Error::MissingBlock)?.number; + + info!("Expected block Number: {:?}", block_number); + info!("Confirmed block Number: {:?}", confirmed_block_number); + // The returned block number belongs to a subsequent event. We missed our event and can break the loop. + if confirmed_block_number > block_number { + return Err(Error::ConfirmedBlockNumeberTooHigh(confirmed_block_number, block_number)) + } + // The block number is correct, but the block hash does not fit. + if block_number == confirmed_block_number && block_hash != confirmed_block_hash { + return Err(Error::ConfirmedBlockHashDoesNotMatchExpected(confirmed_block_hash, block_hash)) + } + Ok(()) +} + pub fn read_shard(trusted_args: &TrustedCli) -> StdResult { match &trusted_args.shard { Some(s) => match s.from_base58() { @@ -286,7 +292,7 @@ pub(crate) fn wait_until( match receiver.recv() { Ok(response) => { debug!("received response: {}", response); - let parse_result: Result = serde_json::from_str(&response); + let parse_result: StdResult = serde_json::from_str(&response); if let Ok(response) = parse_result { if let Ok(return_value) = RpcReturnValue::from_hex(&response.result) { debug!("successfully decoded rpc response: {:?}", return_value); @@ -340,17 +346,3 @@ fn connection_can_be_closed(top_status: TrustedOperationStatus) -> bool { | TrustedOperationStatus::Broadcast ) } - -#[allow(dead_code)] -#[derive(Decode)] -struct ProcessedParentchainBlockArgs { - signer: AccountId, - block_hash: H256, - merkle_root: H256, - block_number: BlockNumber, -} - -impl StaticEvent for ProcessedParentchainBlockArgs { - const PALLET: &'static str = TEEREX; - const EVENT: &'static str = "ProcessedParentchainBlock"; -} diff --git a/core-primitives/extrinsics-factory/Cargo.toml b/core-primitives/extrinsics-factory/Cargo.toml index b6d97e3175..cc6f7e4893 100644 --- a/core-primitives/extrinsics-factory/Cargo.toml +++ b/core-primitives/extrinsics-factory/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" # sgx dependencies sgx_tstd = { branch = "master", git = "https://github.com/apache/teaclave-sgx-sdk.git", optional = true } sgx_types = { branch = "master", git = "https://github.com/apache/teaclave-sgx-sdk.git" } -substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } +substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } # local dependencies itp-node-api = { path = "../node-api", default-features = false } diff --git a/core-primitives/extrinsics-factory/src/lib.rs b/core-primitives/extrinsics-factory/src/lib.rs index 9e7bf393cf..5f6d6f02ba 100644 --- a/core-primitives/extrinsics-factory/src/lib.rs +++ b/core-primitives/extrinsics-factory/src/lib.rs @@ -32,15 +32,15 @@ pub mod sgx_reexport_prelude { use codec::Encode; use error::Result; use itp_node_api::{ - api_client::{ParentchainExtrinsicParams, ParentchainExtrinsicParamsBuilder}, + api_client::{ParentchainAdditionalParams, ParentchainExtrinsicParams}, metadata::{provider::AccessNodeMetadata, NodeMetadata}, }; use itp_nonce_cache::{MutateNonce, Nonce}; -use itp_types::OpaqueCall; -use sp_core::{Pair, H256}; -use sp_runtime::{generic::Era, MultiSignature, OpaqueExtrinsic}; +use itp_types::{parentchain::AccountId, OpaqueCall}; +use sp_core::H256; +use sp_runtime::{generic::Era, OpaqueExtrinsic}; use std::{sync::Arc, vec::Vec}; -use substrate_api_client::{compose_extrinsic_offline, ExtrinsicParams}; +use substrate_api_client::{compose_extrinsic_offline, ExtrinsicParams, SignExtrinsic}; pub mod error; @@ -54,15 +54,14 @@ pub trait CreateExtrinsics { fn create_extrinsics( &self, calls: &[OpaqueCall], - extrinsics_params_builder: Option, + extrinsics_params: Option, ) -> Result>; } /// Extrinsics factory pub struct ExtrinsicsFactory where - Signer: Pair, - Signer::Signature: Into, + Signer: SignExtrinsic, NonceCache: MutateNonce, NodeMetadataRepository: AccessNodeMetadata, { @@ -75,8 +74,7 @@ where impl ExtrinsicsFactory where - Signer: Pair, - Signer::Signature: Into, + Signer: SignExtrinsic, NonceCache: MutateNonce, NodeMetadataRepository: AccessNodeMetadata, { @@ -93,23 +91,20 @@ where impl CreateExtrinsics for ExtrinsicsFactory where - Signer: Pair, - Signer::Signature: Into, + Signer: SignExtrinsic, NonceCache: MutateNonce, NodeMetadataRepository: AccessNodeMetadata, { fn create_extrinsics( &self, calls: &[OpaqueCall], - extrinsics_params_builder: Option, + extrinsics_params: Option, ) -> Result> { let mut nonce_lock = self.nonce_cache.load_for_mutation()?; let mut nonce_value = nonce_lock.0; - let params_builder = extrinsics_params_builder.unwrap_or_else(|| { - ParentchainExtrinsicParamsBuilder::new() - .era(Era::Immortal, self.genesis_hash) - .tip(0) + let additional_extrinsic_params = extrinsics_params.unwrap_or_else(|| { + ParentchainAdditionalParams::new().era(Era::Immortal, self.genesis_hash).tip(0) }); let (runtime_spec_version, runtime_transaction_version) = @@ -125,10 +120,9 @@ where runtime_transaction_version, nonce_value, self.genesis_hash, - params_builder, + additional_extrinsic_params, ); - let xt = compose_extrinsic_offline!(self.signer.clone(), call, extrinsic_params) - .encode(); + let xt = compose_extrinsic_offline!(&self.signer, call, extrinsic_params).encode(); nonce_value += 1; xt }) @@ -148,9 +142,12 @@ where pub mod tests { use super::*; - use itp_node_api::metadata::provider::NodeMetadataRepository; + use itp_node_api::{ + api_client::{PairSignature, StaticExtrinsicSigner}, + metadata::provider::NodeMetadataRepository, + }; use itp_nonce_cache::{GetNonce, Nonce, NonceCache, NonceValue}; - use sp_core::ed25519; + use sp_core::{ed25519, Pair}; //use substrate_api_client::extrinsic::xt_primitives::UncheckedExtrinsicV4; #[test] @@ -159,7 +156,7 @@ pub mod tests { let node_metadata_repo = Arc::new(NodeMetadataRepository::new(NodeMetadata::default())); let extrinsics_factory = ExtrinsicsFactory::new( test_genesis_hash(), - test_account(), + StaticExtrinsicSigner::<_, PairSignature>::new(test_account()), nonce_cache.clone(), node_metadata_repo, ); diff --git a/core-primitives/extrinsics-factory/src/mock.rs b/core-primitives/extrinsics-factory/src/mock.rs index 2f270f545e..4e1923210e 100644 --- a/core-primitives/extrinsics-factory/src/mock.rs +++ b/core-primitives/extrinsics-factory/src/mock.rs @@ -16,7 +16,7 @@ */ use crate::{error::Result, CreateExtrinsics}; -use itp_node_api::api_client::ParentchainExtrinsicParamsBuilder; +use itp_node_api::api_client::ParentchainAdditionalParams; use itp_types::OpaqueCall; use sp_runtime::OpaqueExtrinsic; use std::vec::Vec; @@ -31,7 +31,7 @@ impl CreateExtrinsics for ExtrinsicsFactoryMock { fn create_extrinsics( &self, _calls: &[OpaqueCall], - _extrinsics_params_builder: Option, + _additional_params: Option, ) -> Result> { // Intention was to map an OpaqueCall to some dummy OpaqueExtrinsic, // so the output vector has the same size as the input one (and thus can be tested from the outside). diff --git a/core-primitives/node-api/api-client-extensions/Cargo.toml b/core-primitives/node-api/api-client-extensions/Cargo.toml index c5d98cab9a..27e4c4eea4 100644 --- a/core-primitives/node-api/api-client-extensions/Cargo.toml +++ b/core-primitives/node-api/api-client-extensions/Cargo.toml @@ -15,7 +15,7 @@ sp-finality-grandpa = { git = "https://github.com/paritytech/substrate.git", bra sp-runtime = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } # scs -substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } +substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } # local deps itp-api-client-types = { path = "../api-client-types" } diff --git a/core-primitives/node-api/api-client-extensions/src/account.rs b/core-primitives/node-api/api-client-extensions/src/account.rs index 7e2a656048..c1d541faab 100644 --- a/core-primitives/node-api/api-client-extensions/src/account.rs +++ b/core-primitives/node-api/api-client-extensions/src/account.rs @@ -17,10 +17,8 @@ use crate::ApiResult; use itp_types::parentchain::{AccountData, AccountId, Balance, Index}; -use sp_core::Pair; -use sp_runtime::MultiSignature; use substrate_api_client::{ - rpc::Request, Api, ExtrinsicParams, FrameSystemConfig, GetAccountInformation, + rpc::Request, Api, ExtrinsicParams, FrameSystemConfig, GetAccountInformation, SignExtrinsic, }; /// ApiClient extension that contains some convenience methods around accounts. @@ -31,8 +29,7 @@ pub trait AccountApi { impl AccountApi for Api where - Signer: Pair, - MultiSignature: From, + Signer: SignExtrinsic, Client: Request, Runtime: FrameSystemConfig, Params: ExtrinsicParams, diff --git a/core-primitives/node-api/api-client-extensions/src/chain.rs b/core-primitives/node-api/api-client-extensions/src/chain.rs index 410f6332a3..fc598a122f 100644 --- a/core-primitives/node-api/api-client-extensions/src/chain.rs +++ b/core-primitives/node-api/api-client-extensions/src/chain.rs @@ -21,8 +21,8 @@ use itp_types::parentchain::{BlockNumber, Hash, Header, StorageProof}; use sp_finality_grandpa::{AuthorityList, VersionedAuthorityList, GRANDPA_AUTHORITIES_KEY}; use sp_runtime::traits::GetRuntimeBlockType; use substrate_api_client::{ - primitives::StorageKey, rpc::Request, Api, ExtrinsicParams, FrameSystemConfig, GetBlock, - GetHeader, GetStorage, + api::Error as ApiClientError, primitives::StorageKey, rpc::Request, Api, ExtrinsicParams, + FrameSystemConfig, GetBlock, GetHeader, GetStorage, }; /// ApiClient extension that simplifies chain data access. @@ -57,7 +57,7 @@ where } fn get_genesis_hash(&self) -> ApiResult { - self.get_block_hash(Some(0u32))?.ok_or(ApiClientError::NoBlockHash) + self.get_block_hash(Some(0u32))?.ok_or(ApiClientError::BlockHashNotFound) } fn header(&self, header_hash: Option) -> ApiResult> { diff --git a/core-primitives/node-api/api-client-types/Cargo.toml b/core-primitives/node-api/api-client-types/Cargo.toml index 205ce327c4..866f23881b 100644 --- a/core-primitives/node-api/api-client-types/Cargo.toml +++ b/core-primitives/node-api/api-client-types/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" my-node-runtime = { package = "integritee-node-runtime", optional = true, git = "https://github.com/integritee-network/integritee-node.git", branch = "polkadot-v0.9.39" } # scs -substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } +substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } # substrate sp-core = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } diff --git a/core-primitives/node-api/api-client-types/src/lib.rs b/core-primitives/node-api/api-client-types/src/lib.rs index dd35c54ad3..fa3335e27b 100644 --- a/core-primitives/node-api/api-client-types/src/lib.rs +++ b/core-primitives/node-api/api-client-types/src/lib.rs @@ -22,11 +22,12 @@ #![cfg_attr(not(feature = "std"), no_std)] -pub use itp_types::parentchain::{Balance, Hash, Index}; -pub use sp_runtime::MultiSignature; +pub use itp_types::parentchain::{ + AccountId, Address, Balance, Hash, Index, Signature as PairSignature, +}; pub use substrate_api_client::{ - AssetTip, BaseExtrinsicParams, BaseExtrinsicParamsBuilder, CallIndex, GenericAddress, PlainTip, - SubstrateDefaultSignedExtra, UncheckedExtrinsicV4, + AssetTip, CallIndex, GenericAdditionalParams, GenericExtrinsicParams, GenericSignedExtra, + PlainTip, StaticExtrinsicSigner, UncheckedExtrinsicV4, }; pub type ParentchainPlainTip = PlainTip; @@ -35,28 +36,29 @@ pub type ParentchainAssetTip = AssetTip; /// Configuration for the ExtrinsicParams. /// /// Valid for the default integritee node -pub type ParentchainExtrinsicParams = BaseExtrinsicParams; -pub type ParentchainExtrinsicParamsBuilder = BaseExtrinsicParamsBuilder; +pub type ParentchainExtrinsicParams = GenericExtrinsicParams; +pub type ParentchainAdditionalParams = GenericAdditionalParams; // Pay in asset fees. // // This needs to be used if the node uses the `pallet_asset_tx_payment`. -//pub type ParentchainExtrinsicParams = BaseExtrinsicParams; -//pub type ParentchainExtrinsicParamsBuilder = BaseExtrinsicParamsBuilder; +//pub type ParentchainExtrinsicParams = GenericExtrinsicParams; +// pub type ParentchainAdditionalParams = GenericAdditionalParams; -pub type ParentchainUncheckedExtrinsic = UncheckedExtrinsicV4; -pub type ParentchainSignedExtra = SubstrateDefaultSignedExtra; +pub type ParentchainUncheckedExtrinsic = + UncheckedExtrinsicV4; +pub type ParentchainSignedExtra = GenericSignedExtra; pub type ParentchainSignature = Signature; /// Signature type of the [UncheckedExtrinsicV4]. -pub type Signature = Option<(GenericAddress, MultiSignature, SignedExtra)>; +pub type Signature = Option<(Address, PairSignature, SignedExtra)>; #[cfg(feature = "std")] pub use api::*; #[cfg(feature = "std")] mod api { - use super::ParentchainExtrinsicParams; + use super::{PairSignature, ParentchainExtrinsicParams, StaticExtrinsicSigner}; use sp_runtime::generic::SignedBlock as GenericSignedBlock; use substrate_api_client::Api; @@ -68,6 +70,9 @@ mod api { }; pub type SignedBlock = GenericSignedBlock; + pub type ParentchainExtrinsicSigner = + StaticExtrinsicSigner; + pub type ParentchainApi = - Api; + Api; } diff --git a/core-primitives/node-api/factory/src/lib.rs b/core-primitives/node-api/factory/src/lib.rs index fb37dc6ec2..55ccd5dc25 100644 --- a/core-primitives/node-api/factory/src/lib.rs +++ b/core-primitives/node-api/factory/src/lib.rs @@ -16,7 +16,7 @@ */ -use itp_api_client_types::{ParentchainApi, WsRpcClient}; +use itp_api_client_types::{ParentchainApi, ParentchainExtrinsicSigner, WsRpcClient}; use sp_core::sr25519; /// Trait to create a node API, based on a node URL and signer. @@ -27,25 +27,37 @@ pub trait CreateNodeApi { /// Node API factory error. #[derive(Debug, thiserror::Error)] pub enum NodeApiFactoryError { - #[error("Could not connect to node with rpc client: {0}")] - FailedToCreateRpcClient(#[from] itp_api_client_types::RpcClientError), - #[error("Failed to create a node API: {0}")] - FailedToCreateNodeApi(#[from] itp_api_client_types::ApiClientError), + #[error("Could not connect to node with rpc client")] + FailedToCreateRpcClient(itp_api_client_types::RpcClientError), + #[error("Failed to create a node API")] + FailedToCreateNodeApi(itp_api_client_types::ApiClientError), #[error(transparent)] Other(#[from] Box), } +impl From for NodeApiFactoryError { + fn from(error: itp_api_client_types::RpcClientError) -> Self { + NodeApiFactoryError::FailedToCreateRpcClient(error) + } +} + +impl From for NodeApiFactoryError { + fn from(error: itp_api_client_types::ApiClientError) -> Self { + NodeApiFactoryError::FailedToCreateNodeApi(error) + } +} + pub type Result = std::result::Result; /// Node API factory implementation. pub struct NodeApiFactory { node_url: String, - signer: sr25519::Pair, + signer: ParentchainExtrinsicSigner, } impl NodeApiFactory { pub fn new(url: String, signer: sr25519::Pair) -> Self { - NodeApiFactory { node_url: url, signer } + NodeApiFactory { node_url: url, signer: ParentchainExtrinsicSigner::new(signer) } } } diff --git a/core-primitives/node-api/metadata/Cargo.toml b/core-primitives/node-api/metadata/Cargo.toml index 3d6dd1874e..84d39d7f28 100644 --- a/core-primitives/node-api/metadata/Cargo.toml +++ b/core-primitives/node-api/metadata/Cargo.toml @@ -13,7 +13,7 @@ derive_more = { version = "0.99.5" } sp-core = { git = "https://github.com/paritytech/substrate.git", default-features = false, branch = "polkadot-v0.9.39" } # scs -substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } +substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } [features] default = ["std"] diff --git a/core-primitives/stf-executor/Cargo.toml b/core-primitives/stf-executor/Cargo.toml index 0459301d11..a1af492e19 100644 --- a/core-primitives/stf-executor/Cargo.toml +++ b/core-primitives/stf-executor/Cargo.toml @@ -26,7 +26,7 @@ itp-top-pool-author = { path = "../top-pool-author", default-features = false } itp-types = { path = "../types", default-features = false } # scs -substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } +substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } # sgx enabled external libraries thiserror_sgx = { optional = true, package = "thiserror", git = "https://github.com/mesalock-linux/thiserror-sgx", tag = "sgx_1.1.3" } diff --git a/core/parentchain/indirect-calls-executor/Cargo.toml b/core/parentchain/indirect-calls-executor/Cargo.toml index e27228660b..dea5905ffa 100644 --- a/core/parentchain/indirect-calls-executor/Cargo.toml +++ b/core/parentchain/indirect-calls-executor/Cargo.toml @@ -38,7 +38,7 @@ sp-core = { default-features = false, features = ["full_crypto"], git = "https:/ sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } # scs/integritee -substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0", default-features = false } +substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39", default-features = false } [dev-dependencies] env_logger = "0.9.0" diff --git a/core/parentchain/indirect-calls-executor/src/executor.rs b/core/parentchain/indirect-calls-executor/src/executor.rs index 24df6c4899..84bd294d2c 100644 --- a/core/parentchain/indirect-calls-executor/src/executor.rs +++ b/core/parentchain/indirect-calls-executor/src/executor.rs @@ -235,8 +235,7 @@ mod test { use itc_parentchain_test::parentchain_block_builder::ParentchainBlockBuilder; use itp_node_api::{ api_client::{ - ParentchainExtrinsicParams, ParentchainExtrinsicParamsBuilder, - ParentchainUncheckedExtrinsic, + ParentchainAdditionalParams, ParentchainExtrinsicParams, ParentchainUncheckedExtrinsic, }, metadata::{metadata_mocks::NodeMetadataMock, provider::NodeMetadataRepository}, }; @@ -245,11 +244,13 @@ mod test { use itp_stf_primitives::types::AccountId; use itp_test::mock::shielding_crypto_mock::ShieldingCryptoMock; use itp_top_pool_author::mocks::AuthorApiMock; - use itp_types::{Block, CallWorkerFn, Request, ShardIdentifier, ShieldFundsFn}; + use itp_types::{ + parentchain::Address, Block, CallWorkerFn, Request, ShardIdentifier, ShieldFundsFn, + }; use sp_core::{ed25519, Pair}; use sp_runtime::{MultiSignature, OpaqueExtrinsic}; use std::assert_matches::assert_matches; - use substrate_api_client::{ExtrinsicParams, GenericAddress}; + use substrate_api_client::ExtrinsicParams; type TestShieldingKeyRepo = KeyRepositoryMock; type TestStfEnclaveSigner = StfEnclaveSignerMock; @@ -375,7 +376,7 @@ mod test { let shield_funds_indexes = dummy_metadata.shield_funds_call_indexes().unwrap(); ParentchainUncheckedExtrinsic::::new_signed( (shield_funds_indexes, target_account, 1000u128, shard_id()), - GenericAddress::Address32([1u8; 32]), + Address::Address32([1u8; 32]), MultiSignature::Ed25519(default_signature()), default_extrinsic_params().signed_extra(), ) @@ -388,7 +389,7 @@ mod test { ParentchainUncheckedExtrinsic::::new_signed( (call_worker_indexes, request), - GenericAddress::Address32([1u8; 32]), + Address::Address32([1u8; 32]), MultiSignature::Ed25519(default_signature()), default_extrinsic_params().signed_extra(), ) @@ -412,7 +413,7 @@ mod test { 0, 0, H256::default(), - ParentchainExtrinsicParamsBuilder::default(), + ParentchainAdditionalParams::default(), ) } fn test_fixtures( diff --git a/core/parentchain/indirect-calls-executor/src/parentchain_extrinsic_parser.rs b/core/parentchain/indirect-calls-executor/src/parentchain_extrinsic_parser.rs index 7578f0b924..93ae9e934b 100644 --- a/core/parentchain/indirect-calls-executor/src/parentchain_extrinsic_parser.rs +++ b/core/parentchain/indirect-calls-executor/src/parentchain_extrinsic_parser.rs @@ -18,7 +18,7 @@ use codec::{Decode, Encode}; use core::marker::PhantomData; use itp_node_api::api_client::{ - CallIndex, ParentchainSignedExtra, Signature, UncheckedExtrinsicV4, + Address, CallIndex, PairSignature, ParentchainSignedExtra, Signature, UncheckedExtrinsicV4, }; pub struct ExtrinsicParser { @@ -61,7 +61,12 @@ where // `()` is a trick to stop decoding after the call index. So the remaining bytes // of `call` after decoding only contain the parentchain's dispatchable's arguments. - let xt = UncheckedExtrinsicV4::<(CallIndex, ()), Self::SignedExtra>::decode(call_mut)?; + let xt = UncheckedExtrinsicV4::< + Address, + (CallIndex, ()), + PairSignature, + Self::SignedExtra, + >::decode(call_mut)?; Ok(SemiOpaqueExtrinsic { signature: xt.signature, diff --git a/core/rpc-client/Cargo.toml b/core/rpc-client/Cargo.toml index 4dd93ef238..b3e42adf80 100644 --- a/core/rpc-client/Cargo.toml +++ b/core/rpc-client/Cargo.toml @@ -13,7 +13,7 @@ parking_lot = "0.12.1" serde_derive = "1.0" serde_json = "1.0" sgx_crypto_helper = { branch = "master", git = "https://github.com/apache/teaclave-sgx-sdk.git" } -substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } +substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } thiserror = { version = "1.0" } url = { version = "2.0.0" } ws = { version = "0.9.1", features = ["ssl"] } diff --git a/core/rpc-client/src/mock.rs b/core/rpc-client/src/mock.rs index 12ba0bffeb..c66c311071 100644 --- a/core/rpc-client/src/mock.rs +++ b/core/rpc-client/src/mock.rs @@ -17,22 +17,19 @@ //! Interface for direct access to a workers rpc. -use crate::{ - direct_client::{DirectApi, Error}, - error::Result, -}; +use crate::{direct_client::DirectApi, error::Result}; use codec::Decode; use frame_metadata::RuntimeMetadataPrefixed; use sgx_crypto_helper::rsa3072::Rsa3072PubKey; use std::{sync::mpsc::Sender as MpscSender, thread::JoinHandle}; -use substrate_api_client::{FromHexString, Metadata}; +use substrate_api_client::Metadata; #[derive(Clone, Default)] pub struct DirectClientMock { rsa_pubkey: Rsa3072PubKey, mu_ra_url: String, untrusted_worker_url: String, - metadata: String, + metadata: Vec, } impl DirectClientMock { @@ -40,7 +37,7 @@ impl DirectClientMock { rsa_pubkey: Rsa3072PubKey, mu_ra_url: String, untrusted_worker_url: String, - metadata: String, + metadata: Vec, ) -> Self { Self { rsa_pubkey, mu_ra_url, untrusted_worker_url, metadata } } @@ -60,8 +57,8 @@ impl DirectClientMock { self } - pub fn with_metadata(mut self, hex_metadata: String) -> Self { - self.metadata = hex_metadata; + pub fn with_metadata(mut self, metadata: Vec) -> Self { + self.metadata = metadata; self } } @@ -88,12 +85,7 @@ impl DirectApi for DirectClientMock { } fn get_state_metadata(&self) -> Result { - let metadata_bytes = match Vec::from_hex(self.metadata.clone()) { - Ok(m) => m, - Err(e) => - return Err(Error::Custom(format!("Decode metadata FromHexError: {:?}", e).into())), - }; - let metadata = RuntimeMetadataPrefixed::decode(&mut metadata_bytes.as_slice())?; + let metadata = RuntimeMetadataPrefixed::decode(&mut self.metadata.as_slice())?; Metadata::try_from(metadata).map_err(|e| e.into()) } diff --git a/enclave-runtime/Cargo.lock b/enclave-runtime/Cargo.lock index e19aae974f..acbfd039c6 100644 --- a/enclave-runtime/Cargo.lock +++ b/enclave-runtime/Cargo.lock @@ -14,8 +14,8 @@ dependencies = [ [[package]] name = "ac-compose-macros" -version = "0.2.2" -source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39-tag-v0.9.0#c952d689bfd6469432f92b10ca351876bd5ac51a" +version = "0.2.3" +source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39#417c301cce7e23f765891cd56ca48878390c5cf9" dependencies = [ "ac-primitives", "log", @@ -27,14 +27,14 @@ dependencies = [ [[package]] name = "ac-node-api" -version = "0.2.2" -source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39-tag-v0.9.0#c952d689bfd6469432f92b10ca351876bd5ac51a" +version = "0.2.3" +source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39#417c301cce7e23f765891cd56ca48878390c5cf9" dependencies = [ "ac-primitives", "bitvec", "derive_more", "either", - "frame-metadata 15.0.0 (git+https://github.com/paritytech/frame-metadata)", + "frame-metadata 15.1.0", "hex", "log", "parity-scale-codec", @@ -49,8 +49,8 @@ dependencies = [ [[package]] name = "ac-primitives" -version = "0.4.0" -source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39-tag-v0.9.0#c952d689bfd6469432f92b10ca351876bd5ac51a" +version = "0.5.0" +source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39#417c301cce7e23f765891cd56ca48878390c5cf9" dependencies = [ "hex", "impl-serde", @@ -142,6 +142,12 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" +[[package]] +name = "array-bytes" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f72e9d6fac4bc80778ea470b20197b88d28c292bb7d60c3fb099280003cd19" + [[package]] name = "arrayref" version = "0.3.7" @@ -664,6 +670,7 @@ dependencies = [ name = "enclave-runtime" version = "0.9.0" dependencies = [ + "array-bytes 6.0.0", "cid", "derive_more", "env_logger", @@ -977,8 +984,8 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.0.0" -source = "git+https://github.com/paritytech/frame-metadata#040a53c63af277e280282028b73b992eac9c35a2" +version = "15.1.0" +source = "git+https://github.com/paritytech/frame-metadata#438a5b098bb9d5b5a09bdc5b68275b2c5e63a010" dependencies = [ "cfg-if 1.0.0", "parity-scale-codec", @@ -992,7 +999,7 @@ version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "bitflags", - "frame-metadata 15.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "frame-metadata 15.0.0", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -2105,7 +2112,7 @@ name = "itp-storage" version = "0.9.0" dependencies = [ "derive_more", - "frame-metadata 15.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "frame-metadata 15.0.0", "frame-support", "hash-db", "itp-types", @@ -4009,7 +4016,7 @@ name = "sp-core" version = "7.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "bitflags", "blake2", "bounded-collections", @@ -4352,13 +4359,14 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "substrate-api-client" -version = "0.9.0" -source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39-tag-v0.9.0#c952d689bfd6469432f92b10ca351876bd5ac51a" +version = "0.10.0" +source = "git+https://github.com/scs/substrate-api-client.git?branch=polkadot-v0.9.39#417c301cce7e23f765891cd56ca48878390c5cf9" dependencies = [ "ac-compose-macros", "ac-node-api", "ac-primitives", - "frame-metadata 15.0.0 (git+https://github.com/paritytech/frame-metadata)", + "derive_more", + "frame-metadata 15.1.0", "hex", "log", "parity-scale-codec", @@ -4367,7 +4375,6 @@ dependencies = [ "sp-core", "sp-runtime", "sp-runtime-interface", - "thiserror-core", ] [[package]] @@ -4460,26 +4467,6 @@ dependencies = [ "thiserror-impl 1.0.40", ] -[[package]] -name = "thiserror-core" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" -dependencies = [ - "thiserror-core-impl", -] - -[[package]] -name = "thiserror-core-impl" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" -dependencies = [ - "proc-macro2", - "quote 1.0.26", - "syn 1.0.109", -] - [[package]] name = "thiserror-impl" version = "1.0.9" diff --git a/enclave-runtime/Cargo.toml b/enclave-runtime/Cargo.toml index 908b6bd7b4..5f9f3f1319 100644 --- a/enclave-runtime/Cargo.toml +++ b/enclave-runtime/Cargo.toml @@ -60,6 +60,7 @@ sgx_tunittest = { branch = "master", git = "https://github.com/apache/teaclave-s sgx_types = { branch = "master", git = "https://github.com/apache/teaclave-sgx-sdk.git" } [dependencies] +array-bytes = { version = "6.0.0" } codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } derive_more = { version = "0.99.5" } hex = { version = "0.4.3", default-features = false, features = ["alloc"] } @@ -69,7 +70,7 @@ primitive-types = { version = "0.12.1", default-features = false, features = ["c # scs / integritee jsonrpc-core = { default-features = false, git = "https://github.com/scs/jsonrpc", branch = "no_std_v18" } -substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } +substrate-api-client = { default-features = false, git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } # mesalock env_logger = { git = "https://github.com/integritee-network/env_logger-sgx" } diff --git a/enclave-runtime/src/initialization/global_components.rs b/enclave-runtime/src/initialization/global_components.rs index 2c8e040f63..7a3f9fb898 100644 --- a/enclave-runtime/src/initialization/global_components.rs +++ b/enclave-runtime/src/initialization/global_components.rs @@ -56,7 +56,10 @@ use itp_attestation_handler::IntelAttestationHandler; use itp_block_import_queue::BlockImportQueue; use itp_component_container::ComponentContainer; use itp_extrinsics_factory::ExtrinsicsFactory; -use itp_node_api::metadata::{provider::NodeMetadataRepository, NodeMetadata}; +use itp_node_api::{ + api_client::PairSignature, + metadata::{provider::NodeMetadataRepository, NodeMetadata}, +}; use itp_nonce_cache::NonceCache; use itp_sgx_crypto::{key_repository::KeyRepository, Aes, AesSeal, Rsa3072Seal}; use itp_stf_executor::{ @@ -87,6 +90,9 @@ use its_sidechain::{ use sgx_crypto_helper::rsa3072::Rsa3072KeyPair; use sp_core::ed25519::Pair; +pub type EnclaveParentchainSigner = + itp_node_api::api_client::StaticExtrinsicSigner; + pub type EnclaveGetter = Getter; pub type EnclaveTrustedCallSigned = TrustedCallSigned; pub type EnclaveStf = Stf; @@ -122,7 +128,7 @@ pub type EnclaveSidechainApi = SidechainApi; // Parentchain types pub type EnclaveExtrinsicsFactory = - ExtrinsicsFactory; + ExtrinsicsFactory; pub type EnclaveIndirectCallsExecutor = IndirectCallsExecutor< EnclaveShieldingKeyRepository, EnclaveStfEnclaveSigner, diff --git a/enclave-runtime/src/initialization/parentchain/common.rs b/enclave-runtime/src/initialization/parentchain/common.rs index d2866cac57..c0cf521657 100644 --- a/enclave-runtime/src/initialization/parentchain/common.rs +++ b/enclave-runtime/src/initialization/parentchain/common.rs @@ -23,10 +23,11 @@ use crate::{ EnclaveIndirectCallsExecutor, EnclaveNodeMetadataRepository, EnclaveOffchainWorkerExecutor, EnclaveParentchainBlockImportDispatcher, EnclaveParentchainBlockImportQueue, EnclaveParentchainBlockImporter, - EnclaveStfExecutor, EnclaveTriggeredParentchainBlockImportDispatcher, - EnclaveValidatorAccessor, GLOBAL_OCALL_API_COMPONENT, - GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT, GLOBAL_STATE_HANDLER_COMPONENT, - GLOBAL_STATE_OBSERVER_COMPONENT, GLOBAL_TOP_POOL_AUTHOR_COMPONENT, + EnclaveParentchainSigner, EnclaveStfExecutor, + EnclaveTriggeredParentchainBlockImportDispatcher, EnclaveValidatorAccessor, + GLOBAL_OCALL_API_COMPONENT, GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT, + GLOBAL_STATE_HANDLER_COMPONENT, GLOBAL_STATE_OBSERVER_COMPONENT, + GLOBAL_TOP_POOL_AUTHOR_COMPONENT, }, EnclaveStfEnclaveSigner, }, @@ -78,7 +79,7 @@ pub(crate) fn create_extrinsics_factory( Ok(Arc::new(EnclaveExtrinsicsFactory::new( genesis_hash, - signer, + EnclaveParentchainSigner::new(signer), GLOBAL_NONCE_CACHE.clone(), node_metadata_repository, ))) diff --git a/enclave-runtime/src/test/evm_pallet_tests.rs b/enclave-runtime/src/test/evm_pallet_tests.rs index 1bb2c0b8bb..e863b13f37 100644 --- a/enclave-runtime/src/test/evm_pallet_tests.rs +++ b/enclave-runtime/src/test/evm_pallet_tests.rs @@ -32,8 +32,7 @@ use itp_stf_primitives::types::KeyPair; use itp_types::{AccountId, OpaqueCall, ShardIdentifier}; use primitive_types::H256; use sp_core::{crypto::Pair, H160, U256}; -use std::{string::ToString, sync::Arc, vec::Vec}; -use substrate_api_client::utils::FromHexString; +use std::{sync::Arc, vec::Vec}; pub fn test_evm_call() { // given @@ -111,7 +110,7 @@ pub fn test_evm_counter() { let trusted_call = TrustedCall::evm_create( sender_acc.clone(), sender_evm_acc, - Vec::from_hex(smart_contract.to_string()).unwrap(), + array_bytes::hex2bytes(smart_contract).unwrap().to_vec(), U256::from(0), 10_000_000, // gas limit U256::from(1), // max_fee_per_gas !>= min_gas_price defined in runtime @@ -130,7 +129,7 @@ pub fn test_evm_counter() { assert_eq!( execution_address, H160::from_slice( - &Vec::from_hex("0xce2c9e7f9c10049996173b2ca2d9a6815a70e890".to_string()).unwrap(), + &array_bytes::hex2bytes("0xce2c9e7f9c10049996173b2ca2d9a6815a70e890").unwrap(), ) ); @@ -147,13 +146,13 @@ pub fn test_evm_counter() { // Call to inc() function // in solidity compile information you get the hash of the call - let inc_function_input = Vec::from_hex("371303c0".to_string()).unwrap(); + let inc_function_input = array_bytes::hex2bytes("371303c0").unwrap(); execute_and_verify_evm_call( sender_acc.clone(), sender_evm_acc, execution_address, - inc_function_input.clone(), + inc_function_input.to_vec(), 1, 1, sender.clone().into(), @@ -202,7 +201,8 @@ pub fn test_evm_counter() { let function_hash = "1003e2d2"; // 32 byte string of the value to add in hex let add_value = "0000000000000000000000000000000000000000000000000000000000000002"; - let add_function_input = Vec::from_hex(format!("{}{}", function_hash, add_value)).unwrap(); + let add_function_input = + array_bytes::hex2bytes(&format!("{}{}", function_hash, add_value)).unwrap(); execute_and_verify_evm_call( sender_acc.clone(), @@ -274,12 +274,12 @@ pub fn test_evm_create() { // Bytecode from Counter.sol let smart_contract = "608060405234801561001057600080fd5b50600160008190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610377806100696000396000f3fe6080604052600436106100435760003560e01c80631003e2d21461004d57806333cf508014610076578063371303c0146100a157806358992216146100b857610044565b5b60056000819055005b34801561005957600080fd5b50610074600480360381019061006f9190610209565b6100e3565b005b34801561008257600080fd5b5061008b61013f565b6040516100989190610245565b60405180910390f35b3480156100ad57600080fd5b506100b6610148565b005b3480156100c457600080fd5b506100cd6101a4565b6040516100da91906102a1565b60405180910390f35b806000808282546100f491906102eb565b9250508190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054905090565b600160008082825461015a91906102eb565b9250508190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b6000819050919050565b6101e6816101d3565b81146101f157600080fd5b50565b600081359050610203816101dd565b92915050565b60006020828403121561021f5761021e6101ce565b5b600061022d848285016101f4565b91505092915050565b61023f816101d3565b82525050565b600060208201905061025a6000830184610236565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061028b82610260565b9050919050565b61029b81610280565b82525050565b60006020820190506102b66000830184610292565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006102f6826101d3565b9150610301836101d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610336576103356102bc565b5b82820190509291505056fea2646970667358221220b37e993e133ed19c840809cc8acbbba8116dee3744ba01c81044d75146805c9364736f6c634300080f0033"; - let smart_contract = Vec::from_hex(smart_contract.to_string()).unwrap(); + let smart_contract = array_bytes::hex2bytes(smart_contract).unwrap(); let trusted_call = TrustedCall::evm_create( sender_acc.clone(), sender_evm_acc, - smart_contract.clone(), + smart_contract, U256::from(0), // value 10_000_000, // gas limit U256::from(1), // max_fee_per_gas !>= min_gas_price defined in runtime @@ -299,7 +299,7 @@ pub fn test_evm_create() { assert_eq!( execution_address, H160::from_slice( - &Vec::from_hex("0xce2c9e7f9c10049996173b2ca2d9a6815a70e890".to_string()).unwrap(), + &array_bytes::hex2bytes("0xce2c9e7f9c10049996173b2ca2d9a6815a70e890").unwrap(), ) ); assert!(state.execute_with(|| get_evm_account_codes(&execution_address).is_some())); @@ -329,7 +329,7 @@ pub fn test_evm_create2() { let salt = H256::from_low_u64_be(20); // Bytecode from Counter.sol let smart_contract = "608060405234801561001057600080fd5b50600160008190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610377806100696000396000f3fe6080604052600436106100435760003560e01c80631003e2d21461004d57806333cf508014610076578063371303c0146100a157806358992216146100b857610044565b5b60056000819055005b34801561005957600080fd5b50610074600480360381019061006f9190610209565b6100e3565b005b34801561008257600080fd5b5061008b61013f565b6040516100989190610245565b60405180910390f35b3480156100ad57600080fd5b506100b6610148565b005b3480156100c457600080fd5b506100cd6101a4565b6040516100da91906102a1565b60405180910390f35b806000808282546100f491906102eb565b9250508190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054905090565b600160008082825461015a91906102eb565b9250508190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b6000819050919050565b6101e6816101d3565b81146101f157600080fd5b50565b600081359050610203816101dd565b92915050565b60006020828403121561021f5761021e6101ce565b5b600061022d848285016101f4565b91505092915050565b61023f816101d3565b82525050565b600060208201905061025a6000830184610236565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061028b82610260565b9050919050565b61029b81610280565b82525050565b60006020820190506102b66000830184610292565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006102f6826101d3565b9150610301836101d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610336576103356102bc565b5b82820190509291505056fea2646970667358221220b37e993e133ed19c840809cc8acbbba8116dee3744ba01c81044d75146805c9364736f6c634300080f0033"; - let smart_contract = Vec::from_hex(smart_contract.to_string()).unwrap(); + let smart_contract = array_bytes::hex2bytes(smart_contract).unwrap(); let trusted_call = TrustedCall::evm_create2( sender_acc.clone(), @@ -355,7 +355,7 @@ pub fn test_evm_create2() { assert_eq!( execution_address, H160::from_slice( - &Vec::from_hex("0xe07ad7925f6b2b10c5a7653fb16db7a984059d11".to_string()).unwrap(), + &array_bytes::hex2bytes("0xe07ad7925f6b2b10c5a7653fb16db7a984059d11").unwrap(), ) ); diff --git a/enclave-runtime/src/test/on_chain_ocall_tests.rs b/enclave-runtime/src/test/on_chain_ocall_tests.rs index 403b9734a8..782674eb72 100644 --- a/enclave-runtime/src/test/on_chain_ocall_tests.rs +++ b/enclave-runtime/src/test/on_chain_ocall_tests.rs @@ -21,7 +21,7 @@ use itp_ocall_api::EnclaveOnChainOCallApi; use itp_types::{WorkerRequest, WorkerResponse}; use log::*; use std::vec::Vec; -use substrate_api_client::utils::storage_key; +use substrate_api_client::storage_key; #[allow(unused)] fn test_ocall_worker_request() { diff --git a/enclave-runtime/src/test/top_pool_tests.rs b/enclave-runtime/src/test/top_pool_tests.rs index daefff0d32..0e325dba4f 100644 --- a/enclave-runtime/src/test/top_pool_tests.rs +++ b/enclave-runtime/src/test/top_pool_tests.rs @@ -44,8 +44,7 @@ use itc_parentchain_test::{ }; use itp_node_api::{ api_client::{ - ParentchainExtrinsicParams, ParentchainExtrinsicParamsBuilder, - ParentchainUncheckedExtrinsic, + ParentchainAdditionalParams, ParentchainExtrinsicParams, ParentchainUncheckedExtrinsic, }, metadata::{ metadata_mocks::NodeMetadataMock, pallet_teerex::TeerexCallIndexes, @@ -58,14 +57,14 @@ use itp_stf_executor::enclave_signer::StfEnclaveSigner; use itp_stf_state_observer::mock::ObserveStateMock; use itp_test::mock::metrics_ocall_mock::MetricsOCallMock; use itp_top_pool_author::{top_filter::AllowAllTopsFilter, traits::AuthorApi}; -use itp_types::{AccountId, Block, ShardIdentifier, ShieldFundsFn, H256}; +use itp_types::{parentchain::Address, AccountId, Block, ShardIdentifier, ShieldFundsFn, H256}; use jsonrpc_core::futures::executor; use log::*; use sgx_crypto_helper::RsaKeyPair; use sp_core::{ed25519, Pair}; use sp_runtime::{MultiSignature, OpaqueExtrinsic}; use std::{sync::Arc, vec::Vec}; -use substrate_api_client::{ExtrinsicParams, GenericAddress}; +use substrate_api_client::ExtrinsicParams; pub fn process_indirect_call_in_top_pool() { let _ = env_logger::builder().is_test(true).try_init(); @@ -187,7 +186,7 @@ fn create_shielding_call_extrinsic( 0, 0, H256::default(), - ParentchainExtrinsicParamsBuilder::default(), + ParentchainAdditionalParams::default(), ); let dummy_node_metadata = NodeMetadataMock::new(); @@ -196,7 +195,7 @@ fn create_shielding_call_extrinsic( let opaque_extrinsic = OpaqueExtrinsic::from_bytes( ParentchainUncheckedExtrinsic::::new_signed( (shield_funds_indexes, target_account, 1000u128, shard), - GenericAddress::Address32([1u8; 32]), + Address::Address32([1u8; 32]), MultiSignature::Ed25519(signature), default_extra_for_test.signed_extra(), ) diff --git a/service/Cargo.toml b/service/Cargo.toml index 9fea393138..381f2238d0 100644 --- a/service/Cargo.toml +++ b/service/Cargo.toml @@ -60,7 +60,7 @@ its-storage = { path = "../sidechain/storage" } my-node-runtime = { package = "integritee-node-runtime", git = "https://github.com/integritee-network/integritee-node.git", branch = "polkadot-v0.9.39" } sgx-verify = { git = "https://github.com/integritee-network/pallets.git", branch = "polkadot-v0.9.39" } -substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39-tag-v0.9.0" } +substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.39" } teerex-primitives = { git = "https://github.com/integritee-network/pallets.git", branch = "polkadot-v0.9.39" } # Substrate dependencies diff --git a/service/src/account_funding.rs b/service/src/account_funding.rs index d1aae3f93a..9988b9c97a 100644 --- a/service/src/account_funding.rs +++ b/service/src/account_funding.rs @@ -17,7 +17,7 @@ use crate::error::{Error, ServiceResult}; use codec::Encode; -use itp_node_api::api_client::{AccountApi, ParentchainApi}; +use itp_node_api::api_client::{AccountApi, ParentchainApi, ParentchainExtrinsicSigner}; use itp_settings::worker::{ EXISTENTIAL_DEPOSIT_FACTOR_FOR_INIT_FUNDS, REGISTERING_FEE_FACTOR_FOR_INIT_FUNDS, }; @@ -28,8 +28,9 @@ use sp_core::{ Pair, }; use sp_keyring::AccountKeyring; +use sp_runtime::MultiAddress; use substrate_api_client::{ - GenericAddress, GetBalance, GetTransactionPayment, SubmitAndWatch, XtStatus, + extrinsic::BalancesExtrinsics, GetBalance, GetTransactionPayment, SubmitAndWatch, XtStatus, }; /// Information about the enclave on-chain account. @@ -114,7 +115,7 @@ fn enclave_registration_fees( api: &ParentchainApi, encoded_extrinsic: Vec, ) -> Result { - let reg_fee_details = api.get_fee_details(encoded_extrinsic, None)?; + let reg_fee_details = api.get_fee_details(encoded_extrinsic.into(), None)?; match reg_fee_details { Some(details) => match details.inclusion_fee { Some(fee) => Ok(fee.inclusion_fee()), @@ -152,13 +153,11 @@ fn bootstrap_funds_from_alice( } let mut alice_signer_api = api.clone(); - alice_signer_api.set_signer(alice); + alice_signer_api.set_signer(ParentchainExtrinsicSigner::new(alice)); println!("[+] bootstrap funding Enclave from Alice's funds"); - let xt = - alice_signer_api.balance_transfer(GenericAddress::Id(accountid.clone()), funding_amount); - let xt_report = - alice_signer_api.submit_and_watch_extrinsic_until(xt.encode(), XtStatus::InBlock)?; + let xt = alice_signer_api.balance_transfer(MultiAddress::Id(accountid.clone()), funding_amount); + let xt_report = alice_signer_api.submit_and_watch_extrinsic_until(xt, XtStatus::InBlock)?; info!( "[<] Extrinsic got included in a block. Extrinsic Hash: {:?}\n", xt_report.extrinsic_hash diff --git a/service/src/error.rs b/service/src/error.rs index 8703b243eb..c99f51e6fc 100644 --- a/service/src/error.rs +++ b/service/src/error.rs @@ -24,7 +24,7 @@ pub type ServiceResult = Result; pub enum Error { #[error("{0}")] Codec(#[from] CodecError), - #[error("{0}")] + #[error("{0:?}")] ApiClient(ApiClientError), #[error("Node API terminated subscription unexpectedly")] ApiSubscriptionDisconnected, diff --git a/service/src/main.rs b/service/src/main.rs index 70b0104951..5f8adfdfec 100644 --- a/service/src/main.rs +++ b/service/src/main.rs @@ -43,7 +43,7 @@ use crate::{ }; use base58::ToBase58; use clap::{load_yaml, App}; -use codec::{Decode, Encode}; +use codec::Encode; use config::Config; use enclave::{ api::enclave_init, @@ -75,8 +75,7 @@ use log::*; use my_node_runtime::{Hash, Header, RuntimeEvent}; use sgx_types::*; use substrate_api_client::{ - primitives::StorageChangeSet, rpc::HandleSubscription, GetHeader, SubmitAndWatch, - SubscribeChain, SubscribeFrameSystem, XtStatus, + rpc::HandleSubscription, GetHeader, SubmitAndWatch, SubscribeChain, SubscribeEvents, XtStatus, }; #[cfg(feature = "dcap")] @@ -112,6 +111,7 @@ const VERSION: &str = env!("CARGO_PKG_VERSION"); pub type EnclaveWorker = Worker>; +pub type Event = substrate_api_client::EventRecord; fn main() { // Setup logging @@ -529,13 +529,11 @@ fn start_worker( // ------------------------------------------------------------------------ // Subscribe to events and print them. println!("*** Subscribing to events"); - let mut subscription = node_api.subscribe_system_events().unwrap(); + let mut subscription = node_api.subscribe_events().unwrap(); println!("[+] Subscribed to events. waiting..."); loop { - if let Some(Ok(storage_change_set)) = subscription.next() { - if let Ok(events) = parse_events(storage_change_set) { - print_events(events) - } + if let Some(Ok(events)) = subscription.next_event::() { + print_events(events) } } } @@ -568,18 +566,7 @@ fn spawn_worker_for_shard_polling( }); } -type Events = Vec>; - -fn parse_events(change_set: StorageChangeSet) -> Result { - let event_bytes = &change_set.changes[0] - .1 - .as_ref() - .ok_or_else(|| "Retrieving Events Failed".to_string())? - .0; - Events::decode(&mut event_bytes.as_slice()).map_err(|_| "Decoding Events Failed".to_string()) -} - -fn print_events(events: Events) { +fn print_events(events: Vec) { for evr in &events { debug!("Decoded: phase = {:?}, event = {:?}", evr.phase, evr.event); match &evr.event { @@ -797,7 +784,7 @@ fn send_extrinsic( println!("[>] Register the TCB info (send the extrinsic)"); let register_qe_block_hash = api - .submit_and_watch_extrinsic_until(extrinsic, XtStatus::Finalized) + .submit_and_watch_opaque_extrinsic_until(extrinsic.into(), XtStatus::Finalized) .unwrap() .block_hash; println!("[<] Extrinsic got finalized. Block hash: {:?}\n", register_qe_block_hash); diff --git a/service/src/ocall_bridge/worker_on_chain_ocall.rs b/service/src/ocall_bridge/worker_on_chain_ocall.rs index 7ea5c949fa..c5b780010f 100644 --- a/service/src/ocall_bridge/worker_on_chain_ocall.rs +++ b/service/src/ocall_bridge/worker_on_chain_ocall.rs @@ -23,7 +23,7 @@ use itp_types::{WorkerRequest, WorkerResponse}; use log::*; use sp_runtime::OpaqueExtrinsic; use std::{sync::Arc, vec::Vec}; -use substrate_api_client::{GetStorage, StorageKey, SubmitExtrinsic}; +use substrate_api_client::{serde_impls::StorageKey, GetStorage, SubmitExtrinsic}; pub struct WorkerOnChainOCall { node_api_factory: Arc, @@ -87,7 +87,7 @@ where debug!("Enclave wants to send {} extrinsics", extrinsics.len()); let api = self.node_api_factory.create_api()?; for call in extrinsics.into_iter() { - if let Err(e) = api.submit_extrinsic(call.encode()) { + if let Err(e) = api.submit_opaque_extrinsic(call.encode().into()) { error!("Could not send extrsinic to node: {:?}", e); } } diff --git a/service/src/teeracle/mod.rs b/service/src/teeracle/mod.rs index d47019f7c6..ffaf6ca914 100644 --- a/service/src/teeracle/mod.rs +++ b/service/src/teeracle/mod.rs @@ -79,9 +79,10 @@ fn execute_weather_update( let encoded_extrinsic = call.encode(); debug!("Hex encoded extrinsic to be sent: {}", hex_encode(&encoded_extrinsic)); println!("[>] Update oracle (send the extrinsic)"); - let extrinsic_hash = match node_api_clone - .submit_and_watch_extrinsic_until(encoded_extrinsic, XtStatus::InBlock) - { + let extrinsic_hash = match node_api_clone.submit_and_watch_opaque_extrinsic_until( + encoded_extrinsic.into(), + XtStatus::InBlock, + ) { Err(e) => { error!("Failed to send extrinsic: {:?}", e); set_extrinsics_inclusion_success(false); @@ -128,9 +129,10 @@ fn execute_update_market( debug!("Hex encoded extrinsic to be sent: {}", hex_encode(&encoded_extrinsic)); println!("[>] Update the exchange rate (send the extrinsic)"); - let extrinsic_hash = match node_api_clone - .submit_and_watch_extrinsic_until(encoded_extrinsic, XtStatus::InBlock) - { + let extrinsic_hash = match node_api_clone.submit_and_watch_opaque_extrinsic_until( + encoded_extrinsic.into(), + XtStatus::InBlock, + ) { Err(e) => { error!("Failed to send extrinsic: {:?}", e); set_extrinsics_inclusion_success(false); diff --git a/sidechain/peer-fetch/src/error.rs b/sidechain/peer-fetch/src/error.rs index 8bf1c5f6d2..569cd01a1d 100644 --- a/sidechain/peer-fetch/src/error.rs +++ b/sidechain/peer-fetch/src/error.rs @@ -23,8 +23,8 @@ pub type Result = core::result::Result; pub enum Error { #[error("RPC client error: {0}")] RpcClient(#[from] itc_rpc_client::error::Error), - #[error("Node API extensions error: {0}")] - NodeApiExtensions(#[from] itp_node_api::api_client::ApiClientError), + #[error("Node API extensions error: {0:?}")] + NodeApiExtensions(itp_node_api::api_client::ApiClientError), #[error("Node API factory error: {0}")] NodeApiFactory(#[from] itp_node_api::node_api_factory::NodeApiFactoryError), #[error("Serialization error: {0}")] @@ -36,3 +36,9 @@ pub enum Error { #[error(transparent)] Other(#[from] Box), } + +impl From for Error { + fn from(error: itp_node_api::api_client::ApiClientError) -> Self { + Error::NodeApiExtensions(error) + } +} From 74e8fd0cea168f9cf172f63746b550eba28abdf1 Mon Sep 17 00:00:00 2001 From: haerdib Date: Tue, 4 Apr 2023 09:18:45 +0200 Subject: [PATCH 2/5] fix compilation --- core-primitives/node-api/api-client-extensions/src/chain.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-primitives/node-api/api-client-extensions/src/chain.rs b/core-primitives/node-api/api-client-extensions/src/chain.rs index fc598a122f..3630409918 100644 --- a/core-primitives/node-api/api-client-extensions/src/chain.rs +++ b/core-primitives/node-api/api-client-extensions/src/chain.rs @@ -21,8 +21,8 @@ use itp_types::parentchain::{BlockNumber, Hash, Header, StorageProof}; use sp_finality_grandpa::{AuthorityList, VersionedAuthorityList, GRANDPA_AUTHORITIES_KEY}; use sp_runtime::traits::GetRuntimeBlockType; use substrate_api_client::{ - api::Error as ApiClientError, primitives::StorageKey, rpc::Request, Api, ExtrinsicParams, - FrameSystemConfig, GetBlock, GetHeader, GetStorage, + primitives::StorageKey, rpc::Request, Api, ExtrinsicParams, FrameSystemConfig, GetBlock, + GetHeader, GetStorage, }; /// ApiClient extension that simplifies chain data access. From 1c70951bcb5d3f183265a6c81be0ced77e3e8a51 Mon Sep 17 00:00:00 2001 From: haerdib Date: Tue, 4 Apr 2023 09:25:01 +0200 Subject: [PATCH 3/5] clean up extrinisc V4 --- cli/src/base_cli/commands/faucet.rs | 4 ++-- cli/src/base_cli/commands/shield_funds.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cli/src/base_cli/commands/faucet.rs b/cli/src/base_cli/commands/faucet.rs index b751993233..a034baf0fb 100644 --- a/cli/src/base_cli/commands/faucet.rs +++ b/cli/src/base_cli/commands/faucet.rs @@ -24,7 +24,7 @@ use my_node_runtime::{BalancesCall, RuntimeCall}; use sp_keyring::AccountKeyring; use sp_runtime::MultiAddress; use std::vec::Vec; -use substrate_api_client::{compose_extrinsic_offline, SubmitExtrinsic, UncheckedExtrinsicV4}; +use substrate_api_client::{compose_extrinsic_offline, SubmitExtrinsic}; const PREFUNDING_AMOUNT: u128 = 1_000_000_000; @@ -43,7 +43,7 @@ impl FaucetCommand { for account in &self.accounts { let to = get_accountid_from_str(account); #[allow(clippy::redundant_clone)] - let xt: UncheckedExtrinsicV4<_, _, _, _> = compose_extrinsic_offline!( + let xt = compose_extrinsic_offline!( api.signer().unwrap(), RuntimeCall::Balances(BalancesCall::transfer { dest: MultiAddress::Id(to.clone()), diff --git a/cli/src/base_cli/commands/shield_funds.rs b/cli/src/base_cli/commands/shield_funds.rs index 281fe38d8a..05ca24d29f 100644 --- a/cli/src/base_cli/commands/shield_funds.rs +++ b/cli/src/base_cli/commands/shield_funds.rs @@ -27,7 +27,7 @@ use itp_stf_primitives::types::ShardIdentifier; use log::*; use my_node_runtime::Balance; use sp_core::sr25519 as sr25519_core; -use substrate_api_client::{compose_extrinsic, SubmitAndWatch, UncheckedExtrinsicV4, XtStatus}; +use substrate_api_client::{compose_extrinsic, SubmitAndWatch, XtStatus}; #[derive(Parser)] pub struct ShieldFundsCommand { @@ -66,7 +66,7 @@ impl ShieldFundsCommand { let encrypted_recevier = encryption_key.encrypt(&to.encode()).unwrap(); // Compose the extrinsic. - let xt: UncheckedExtrinsicV4<_, _, _, _> = compose_extrinsic!( + let xt = compose_extrinsic!( chain_api, TEEREX, "shield_funds", From b5d005a562e5ac8ae4170932eb337337f4fac640 Mon Sep 17 00:00:00 2001 From: haerdib Date: Tue, 4 Apr 2023 14:25:18 +0200 Subject: [PATCH 4/5] fix typos --- cli/src/error.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/src/error.rs b/cli/src/error.rs index 5969d5a2a8..973aa1cbb8 100644 --- a/cli/src/error.rs +++ b/cli/src/error.rs @@ -26,8 +26,8 @@ pub enum Error { ApiClient(ApiClientError), #[error("Could not retrieve Header from node")] MissingBlock, - #[error("Confirmed Block Number ({0:?}) exeeds expected one ({0:?})")] - ConfirmedBlockNumeberTooHigh(BlockNumber, BlockNumber), + #[error("Confirmed Block Number ({0:?}) exceeds expected one ({0:?})")] + ConfirmedBlockNumberTooHigh(BlockNumber, BlockNumber), #[error("Confirmed Block Hash ({0:?}) does not match expected one ({0:?})")] ConfirmedBlockHashDoesNotMatchExpected(BlockHash, BlockHash), } From 4817926a26a1dc2149488cf36e7cb707e0383b96 Mon Sep 17 00:00:00 2001 From: haerdib Date: Tue, 4 Apr 2023 14:57:54 +0200 Subject: [PATCH 5/5] fix typo --- cli/src/trusted_operation.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/src/trusted_operation.rs b/cli/src/trusted_operation.rs index d3cd0eded9..8f3b8cf6ba 100644 --- a/cli/src/trusted_operation.rs +++ b/cli/src/trusted_operation.rs @@ -180,7 +180,7 @@ fn check_if_received_event_exceeds_expected( info!("Confirmed block Number: {:?}", confirmed_block_number); // The returned block number belongs to a subsequent event. We missed our event and can break the loop. if confirmed_block_number > block_number { - return Err(Error::ConfirmedBlockNumeberTooHigh(confirmed_block_number, block_number)) + return Err(Error::ConfirmedBlockNumberTooHigh(confirmed_block_number, block_number)) } // The block number is correct, but the block hash does not fit. if block_number == confirmed_block_number && block_hash != confirmed_block_hash {