From c36b8494eea77aa4e9a198924069ea0326b9fbcb Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Mon, 16 Mar 2020 15:16:14 +0000 Subject: [PATCH] Add kusama runtime and example (#75) --- examples/kusama_balance_transfer.rs | 47 +++++++++++++++++++++++++++++ src/runtimes.rs | 25 +++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 examples/kusama_balance_transfer.rs diff --git a/examples/kusama_balance_transfer.rs b/examples/kusama_balance_transfer.rs new file mode 100644 index 0000000000..643129fffc --- /dev/null +++ b/examples/kusama_balance_transfer.rs @@ -0,0 +1,47 @@ +// Copyright 2020 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 sp_keyring::AccountKeyring; +use substrate_subxt::{ + balances, + Error, + system::System, + KusamaRuntime, +}; + +fn main() { + async_std::task::block_on(async move { + env_logger::init(); + + let xt_result = transfer_balance().await; + match xt_result { + Ok(hash) => println!("Balance transfer extrinsic submitted: {}", hash), + Err(_) => eprintln!("Balance transfer extrinisic failed"), + } + }); +} + +async fn transfer_balance() -> Result { + let signer = AccountKeyring::Alice.pair(); + let dest = AccountKeyring::Bob.to_account_id(); + + // note use of `KusamaRuntime` + substrate_subxt::ClientBuilder::::new() + .build().await? + .xt(signer, None).await? + .submit(balances::transfer::(dest.clone().into(), 10_000)) + .await +} diff --git a/src/runtimes.rs b/src/runtimes.rs index 5b3fb9b339..793aeef2a6 100644 --- a/src/runtimes.rs +++ b/src/runtimes.rs @@ -60,3 +60,28 @@ impl Balances for DefaultNodeRuntime { } impl Contracts for DefaultNodeRuntime {} + +/// Concrete type definitions compatible with those for kusama, v0.7 +/// +/// # Note +/// +/// Main difference is `type Address = AccountId`. +/// Also the contracts module is not part of the kusama runtime. +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct KusamaRuntime; + +impl System for KusamaRuntime { + type Index = u32; + type BlockNumber = u32; + type Hash = sp_core::H256; + type Hashing = BlakeTwo256; + type AccountId = <::Signer as IdentifyAccount>::AccountId; + type Address = Self::AccountId; + type Header = Header; + type Extrinsic = OpaqueExtrinsic; + type AccountData = AccountData<::Balance>; +} + +impl Balances for KusamaRuntime { + type Balance = u128; +}