diff --git a/Cargo.toml b/Cargo.toml index d7683a62352ee..57c464b0aa969 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 1f51cfdc2f2c2..2af7dc072a474 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 4cbc3e66f88cd..c473b41556900 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 0000000000000..4d315618ed553 --- /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 {}