From 58959db9d4344ce513d6bd5a8d7cc72f4d13a7b9 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Fri, 4 Oct 2019 17:54:16 +0100 Subject: [PATCH] Define `node_runtime` compatible Runtime types (#23) * Define default `node_runtime` compatible Runtime * rustfmt --- Cargo.toml | 1 + src/extrinsic.rs | 70 ++++++++++++++++++++++++++++++++++-------------- src/lib.rs | 2 ++ src/runtimes.rs | 54 +++++++++++++++++++++++++++++++++++++ 4 files changed, 107 insertions(+), 20 deletions(-) create mode 100644 src/runtimes.rs diff --git a/Cargo.toml b/Cargo.toml index d7683a6235..57c464b0aa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,7 @@ sr-version = { git = "https://github.com/paritytech/substrate/", package = "sr-v srml-system = { git = "https://github.com/paritytech/substrate/", package = "srml-system" } srml-balances = { git = "https://github.com/paritytech/substrate/", package = "srml-balances" } srml-contracts = { git = "https://github.com/paritytech/substrate/", package = "srml-contracts" } +srml-indices = { git = "https://github.com/paritytech/substrate/", package = "srml-indices" } substrate-rpc-api = { git = "https://github.com/paritytech/substrate/", package = "substrate-rpc-api" } substrate-rpc-primitives = { git = "https://github.com/paritytech/substrate/", package = "substrate-rpc-primitives" } substrate-primitives = { git = "https://github.com/paritytech/substrate/", package = "substrate-primitives" } diff --git a/src/extrinsic.rs b/src/extrinsic.rs index 1f51cfdc2f..2af7dc072a 100644 --- a/src/extrinsic.rs +++ b/src/extrinsic.rs @@ -52,12 +52,17 @@ pub struct CheckVersion( u32, ); -impl SignedExtension for CheckVersion where T: System + Send + Sync { +impl SignedExtension for CheckVersion +where + T: System + Send + Sync, +{ type AccountId = u64; type Call = (); type AdditionalSigned = u32; type Pre = (); - fn additional_signed(&self) -> Result { + fn additional_signed( + &self, + ) -> Result { Ok(self.1) } } @@ -76,12 +81,17 @@ pub struct CheckGenesis( T::Hash, ); -impl SignedExtension for CheckGenesis where T: System + Send + Sync { +impl SignedExtension for CheckGenesis +where + T: System + Send + Sync, +{ type AccountId = u64; type Call = (); type AdditionalSigned = T::Hash; type Pre = (); - fn additional_signed(&self) -> Result { + fn additional_signed( + &self, + ) -> Result { Ok(self.1) } } @@ -102,12 +112,17 @@ pub struct CheckEra( T::Hash, ); -impl SignedExtension for CheckEra where T: System + Send + Sync { +impl SignedExtension for CheckEra +where + T: System + Send + Sync, +{ type AccountId = u64; type Call = (); type AdditionalSigned = T::Hash; type Pre = (); - fn additional_signed(&self) -> Result { + fn additional_signed( + &self, + ) -> Result { Ok(self.1) } } @@ -116,12 +131,17 @@ impl SignedExtension for CheckEra where T: System + Send + Sync { #[derive(Encode, Decode, Clone, Eq, PartialEq, Debug)] pub struct CheckNonce(#[codec(compact)] T::Index); -impl SignedExtension for CheckNonce where T: System + Send + Sync { +impl SignedExtension for CheckNonce +where + T: System + Send + Sync, +{ type AccountId = u64; type Call = (); type AdditionalSigned = (); type Pre = (); - fn additional_signed(&self) -> Result { + fn additional_signed( + &self, + ) -> Result { Ok(()) } } @@ -130,12 +150,17 @@ impl SignedExtension for CheckNonce where T: System + Send + Sync { #[derive(Encode, Decode, Clone, Eq, PartialEq, Debug)] pub struct CheckWeight(PhantomData); -impl SignedExtension for CheckWeight where T: System + Send + Sync { +impl SignedExtension for CheckWeight +where + T: System + Send + Sync, +{ type AccountId = u64; type Call = (); type AdditionalSigned = (); type Pre = (); - fn additional_signed(&self) -> Result { + fn additional_signed( + &self, + ) -> Result { Ok(()) } } @@ -145,12 +170,17 @@ impl SignedExtension for CheckWeight where T: System + Send + Sync { #[derive(Encode, Decode, Clone, Eq, PartialEq, Debug)] pub struct TakeFees(#[codec(compact)] T::Balance); -impl SignedExtension for TakeFees where T: Balances + Send + Sync { +impl SignedExtension for TakeFees +where + T: Balances + Send + Sync, +{ type AccountId = u64; type Call = (); type AdditionalSigned = (); type Pre = (); - fn additional_signed(&self) -> Result { + fn additional_signed( + &self, + ) -> Result { Ok(()) } } @@ -159,12 +189,17 @@ impl SignedExtension for TakeFees where T: Balances + Send + Sync { #[derive(Encode, Decode, Clone, Eq, PartialEq, Debug)] pub struct CheckBlockGasLimit(PhantomData); -impl SignedExtension for CheckBlockGasLimit where T: System + Send + Sync { +impl SignedExtension for CheckBlockGasLimit +where + T: System + Send + Sync, +{ type AccountId = u64; type Call = (); type AdditionalSigned = (); type Pre = (); - fn additional_signed(&self) -> Result { + fn additional_signed( + &self, + ) -> Result { Ok(()) } } @@ -235,12 +270,7 @@ pub fn create_and_sign( call: C, extra: E, ) -> Result< - UncheckedExtrinsic< - T::Address, - C, - P::Signature, - >::Extra, - >, + UncheckedExtrinsic>::Extra>, TransactionValidityError, > where diff --git a/src/lib.rs b/src/lib.rs index 4cbc3e66f8..c473b41556 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,11 +78,13 @@ mod events; mod extrinsic; mod metadata; mod rpc; +mod runtimes; mod srml; pub use error::Error; pub use events::RawEvent; pub use rpc::ExtrinsicSuccess; +pub use runtimes::*; pub use srml::*; fn connect(url: &Url) -> impl Future, Error = Error> { diff --git a/src/runtimes.rs b/src/runtimes.rs new file mode 100644 index 0000000000..4d315618ed --- /dev/null +++ b/src/runtimes.rs @@ -0,0 +1,54 @@ +// Copyright 2019 Parity Technologies (UK) Ltd. +// This file is part of substrate-subxt. +// +// subxt is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// subxt is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with substrate-subxt. If not, see . + +use crate::srml::{ + balances::Balances, + contracts::Contracts, + system::System, +}; +use runtime_primitives::{ + generic::Header, + traits::{ + BlakeTwo256, + Verify, + }, + AnySignature, +}; + +/// Concrete type definitions compatible with those in the default substrate `node_runtime` +/// +/// # Note +/// +/// If the concrete types in the target substrate runtime differ from these, a custom Runtime +/// definition MUST be used to ensure type compatibility. +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct DefaultNodeRuntime; + +impl System for DefaultNodeRuntime { + type Index = u32; + type BlockNumber = u32; + type Hash = substrate_primitives::H256; + type Hashing = BlakeTwo256; + type AccountId = ::Signer; + type Address = srml_indices::address::Address; + type Header = Header; +} + +impl Balances for DefaultNodeRuntime { + type Balance = u64; +} + +impl Contracts for DefaultNodeRuntime {}