mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 01:11:10 +00:00
Merge pull request #3 from paritytech/bkchr-validate_block
Adds first version of `validate_block`
This commit is contained in:
Generated
+1824
-1622
File diff suppressed because it is too large
Load Diff
+6
-1
@@ -1,2 +1,7 @@
|
||||
[workspace]
|
||||
members = [ "consensus" ]
|
||||
members = [
|
||||
"consensus",
|
||||
"runtime",
|
||||
"test/runtime",
|
||||
"test/client",
|
||||
]
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
name = "cumulus-consensus"
|
||||
description = "Proxy Polkadot's consensus as a consensus engine for Substrate"
|
||||
version = "0.1.0"
|
||||
authors = ["Parity Technologies"]
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
# substrate deps
|
||||
substrate-client = { git = "https://github.com/paritytech/substrate" }
|
||||
substrate-consensus-common = { git = "https://github.com/paritytech/substrate" }
|
||||
substrate-primitives = { git = "https://github.com/paritytech/substrate" }
|
||||
sr-primitives = { git = "https://github.com/paritytech/substrate" }
|
||||
substrate-client = { git = "https://github.com/paritytech/substrate", branch = "bkchr-cumulus-branch" }
|
||||
substrate-consensus-common = { git = "https://github.com/paritytech/substrate", branch = "bkchr-cumulus-branch" }
|
||||
substrate-primitives = { git = "https://github.com/paritytech/substrate", branch = "bkchr-cumulus-branch" }
|
||||
sr-primitives = { git = "https://github.com/paritytech/substrate", branch = "bkchr-cumulus-branch" }
|
||||
|
||||
# polkadot deps
|
||||
polkadot-service = { git = "https://github.com/paritytech/polkadot" }
|
||||
polkadot-primitives = { git = "https://github.com/paritytech/polkadot" }
|
||||
polkadot-runtime = { git = "https://github.com/paritytech/polkadot" }
|
||||
polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "bkchr-cumulus-branch" }
|
||||
polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "bkchr-cumulus-branch" }
|
||||
polkadot-runtime = { git = "https://github.com/paritytech/polkadot", branch = "bkchr-cumulus-branch" }
|
||||
|
||||
# other deps
|
||||
futures = "0.1.21"
|
||||
tokio = "0.1.8"
|
||||
parity-codec = "3.0"
|
||||
log = "0.4"
|
||||
parity-codec = "3.1"
|
||||
log = "0.4"
|
||||
|
||||
@@ -57,7 +57,7 @@ pub enum Error<P> {
|
||||
/// A parachain head update.
|
||||
pub struct HeadUpdate {
|
||||
/// The relay-chain's block hash where the parachain head updated.
|
||||
pub relay_hash: PHash,
|
||||
pub relay_hash: PHash,
|
||||
/// The parachain head-data.
|
||||
pub head_data: Vec<u8>,
|
||||
}
|
||||
@@ -80,9 +80,9 @@ pub trait PolkadotClient: Clone {
|
||||
}
|
||||
|
||||
/// Spawns a future that follows the Polkadot relay chain for the given parachain.
|
||||
pub fn follow_polkadot<'a, L: 'a, P: 'a>(para_id: ParaId, local: Arc<L>, polkadot: P)
|
||||
pub fn follow_polkadot<'a, L: 'a, P: 'a>(para_id: ParaId, local: Arc<L>, polkadot: P)
|
||||
-> impl Future<Item=(),Error=()> + Send + 'a
|
||||
where
|
||||
where
|
||||
L: LocalClient + Send + Sync,
|
||||
P: PolkadotClient + Send + Sync,
|
||||
{
|
||||
@@ -169,23 +169,23 @@ impl<B, E, RA> PolkadotClient for Arc<Client<B, E, PBlock, RA>> where
|
||||
{
|
||||
type Error = ClientError;
|
||||
|
||||
type HeadUpdates = Box<Stream<Item=HeadUpdate,Error=Self::Error> + Send>;
|
||||
type Finalized = Box<Stream<Item=Vec<u8>,Error=Self::Error> + Send>;
|
||||
type HeadUpdates = Box<Stream<Item=HeadUpdate, Error=Self::Error> + Send>;
|
||||
type Finalized = Box<Stream<Item=Vec<u8>, Error=Self::Error> + Send>;
|
||||
|
||||
fn head_updates(&self, para_id: ParaId) -> Self::HeadUpdates {
|
||||
let parachain_key = parachain_key(para_id);
|
||||
let stream = stream::once(self.storage_changes_notification_stream(Some(&[parachain_key.clone()])))
|
||||
.map(|s| s.map_err(|()| panic!("unbounded receivers never yield errors; qed")))
|
||||
.flatten();
|
||||
|
||||
|
||||
let s = stream.filter_map(move |(hash, changes)| {
|
||||
let head_data = changes.iter()
|
||||
.filter_map(|(k, v)| if k == ¶chain_key { Some(v) } else { None })
|
||||
.next();
|
||||
|
||||
match head_data {
|
||||
Some(Some(head_data)) => Some(HeadUpdate {
|
||||
relay_hash: hash,
|
||||
Some(Some(head_data)) => Some(HeadUpdate {
|
||||
relay_hash: hash,
|
||||
head_data: head_data.0.clone(),
|
||||
}),
|
||||
Some(None) | None => None,
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
[package]
|
||||
name = "cumulus-runtime"
|
||||
version = "0.1.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
codec = { package = "parity-codec", version = "3.1", default-features = false, features = [ "derive" ] }
|
||||
rstd = { package = "sr-std", git = "https://github.com/paritytech/substrate", default-features = false, branch = "bkchr-cumulus-branch" }
|
||||
runtime-primitives = { package = "sr-primitives", git = "https://github.com/paritytech/substrate", default-features = false, branch = "bkchr-cumulus-branch" }
|
||||
primitives = { package = "substrate-primitives", git = "https://github.com/paritytech/substrate", default-features = false, branch = "bkchr-cumulus-branch" }
|
||||
rio = { package = "sr-io", git = "https://github.com/paritytech/substrate", default-features = false, branch = "bkchr-cumulus-branch" }
|
||||
executive = { package = "srml-executive", git = "https://github.com/paritytech/substrate", default-features = false, branch = "bkchr-cumulus-branch" }
|
||||
substrate-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "bkchr-cumulus-branch" }
|
||||
memory-db = { version = "0.12.2", default-features = false }
|
||||
hash-db = { version = "0.12.2", default-features = false }
|
||||
trie-db = { version = "0.12.2", default-features = false }
|
||||
hashbrown = "0.1"
|
||||
|
||||
[dev-dependencies]
|
||||
keyring = { package = "substrate-keyring", git = "https://github.com/paritytech/substrate", branch = "bkchr-cumulus-branch" }
|
||||
primitives = { package = "substrate-primitives", git = "https://github.com/paritytech/substrate", branch = "bkchr-cumulus-branch" }
|
||||
executor = { package = "substrate-executor", git = "https://github.com/paritytech/substrate", branch = "bkchr-cumulus-branch" }
|
||||
test-client = { package = "cumulus-test-client", path = "../test/client" }
|
||||
|
||||
[features]
|
||||
default = ["std"]
|
||||
std = [
|
||||
"codec/std",
|
||||
"rstd/std",
|
||||
"rio/std",
|
||||
"runtime-primitives/std",
|
||||
"primitives/std",
|
||||
"executive/std",
|
||||
"memory-db/std",
|
||||
"hash-db/std",
|
||||
"trie-db/std",
|
||||
"test-client/std",
|
||||
"substrate-trie/std",
|
||||
]
|
||||
wasm = [
|
||||
"hashbrown/nightly",
|
||||
"rio/wasm-nice-panic-message",
|
||||
]
|
||||
@@ -0,0 +1,61 @@
|
||||
// Copyright 2019 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Cumulus.
|
||||
|
||||
// Cumulus 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.
|
||||
|
||||
// Cumulus 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#![cfg_attr(not(feature = "std"), no_std)]
|
||||
|
||||
///! The Cumulus runtime to make a runtime a parachain.
|
||||
|
||||
use rstd::vec::Vec;
|
||||
use codec::{Encode, Decode};
|
||||
use runtime_primitives::traits::Block as BlockT;
|
||||
|
||||
#[cfg(not(feature = "std"))]
|
||||
#[doc(hidden)]
|
||||
pub use rstd::slice;
|
||||
|
||||
#[macro_use]
|
||||
pub mod validate_block;
|
||||
|
||||
/// The witness data type.
|
||||
type WitnessData = Vec<Vec<u8>>;
|
||||
|
||||
/// The parachain block that is created on a collator and validated by a validator.
|
||||
#[derive(Encode, Decode)]
|
||||
pub struct ParachainBlockData<B: BlockT> {
|
||||
/// The header of the parachain block.
|
||||
header: <B as BlockT>::Header,
|
||||
/// The extrinsics of the parachain block without the `PolkadotInherent`.
|
||||
extrinsics: Vec<<B as BlockT>::Extrinsic>,
|
||||
/// The data that is required to emulate the storage accesses executed by all extrinsics.
|
||||
witness_data: WitnessData,
|
||||
witness_data_storage_root: <B as BlockT>::Hash,
|
||||
}
|
||||
|
||||
impl<B: BlockT> ParachainBlockData<B> {
|
||||
pub fn new(
|
||||
header: <B as BlockT>::Header,
|
||||
extrinsics: Vec<<B as BlockT>::Extrinsic>,
|
||||
witness_data: WitnessData,
|
||||
witness_data_storage_root: <B as BlockT>::Hash,
|
||||
) -> Self {
|
||||
Self {
|
||||
header,
|
||||
extrinsics,
|
||||
witness_data,
|
||||
witness_data_storage_root,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
// Copyright 2019 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Substrate.
|
||||
|
||||
// Substrate 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.
|
||||
|
||||
// Substrate 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! The actual implementation of the validate block functionality.
|
||||
|
||||
use crate::WitnessData;
|
||||
use runtime_primitives::traits::{
|
||||
Block as BlockT, Header as HeaderT, Hash as HashT
|
||||
};
|
||||
use executive::ExecuteBlock;
|
||||
|
||||
use substrate_trie::{MemoryDB, read_trie_value, delta_trie_root};
|
||||
|
||||
use rstd::{slice, ptr, cmp, vec::Vec, boxed::Box, mem};
|
||||
|
||||
use hash_db::HashDB;
|
||||
|
||||
static mut STORAGE: Option<Box<Storage>> = None;
|
||||
/// The message to use as expect message while accessing the `STORAGE`.
|
||||
const STORAGE_SET_EXPECT: &str =
|
||||
"`STORAGE` needs to be set before calling this function.";
|
||||
const STORAGE_ROOT_LEN: usize = 32;
|
||||
|
||||
/// Extract the hashing algorithm type from the given block type.
|
||||
type HashingOf<B> = <<B as BlockT>::Header as HeaderT>::Hashing;
|
||||
|
||||
/// Abstract the storage into a trait without `Block` generic.
|
||||
trait Storage {
|
||||
/// Retrieve the value for the given key.
|
||||
fn get(&self, key: &[u8]) -> Option<Vec<u8>>;
|
||||
|
||||
/// Insert the given key and value.
|
||||
fn insert(&mut self, key: &[u8], value: &[u8]);
|
||||
|
||||
/// Remove key and value.
|
||||
fn remove(&mut self, key: &[u8]);
|
||||
|
||||
/// Calculate the storage root.
|
||||
fn storage_root(&mut self) -> [u8; STORAGE_ROOT_LEN];
|
||||
}
|
||||
|
||||
/// Validate a given parachain block on a validator.
|
||||
#[cfg(not(feature = "std"))]
|
||||
#[doc(hidden)]
|
||||
pub fn validate_block<B: BlockT, E: ExecuteBlock<B>>(
|
||||
mut block_data: &[u8],
|
||||
) {
|
||||
use codec::Decode;
|
||||
|
||||
let block_data = crate::ParachainBlockData::<B>::decode(&mut block_data)
|
||||
.expect("Could not decode parachain block.");
|
||||
// TODO: Add `PolkadotInherent`.
|
||||
let block = B::new(block_data.header, block_data.extrinsics);
|
||||
let storage = WitnessStorage::<B>::new(
|
||||
block_data.witness_data,
|
||||
block_data.witness_data_storage_root,
|
||||
).expect("Witness data and storage root always match; qed");
|
||||
|
||||
let _guard = unsafe {
|
||||
STORAGE = Some(Box::new(storage));
|
||||
(
|
||||
// Replace storage calls with our own implementations
|
||||
rio::ext_get_allocated_storage.replace_implementation(ext_get_allocated_storage),
|
||||
rio::ext_get_storage_into.replace_implementation(ext_get_storage_into),
|
||||
rio::ext_set_storage.replace_implementation(ext_set_storage),
|
||||
rio::ext_exists_storage.replace_implementation(ext_exists_storage),
|
||||
rio::ext_clear_storage.replace_implementation(ext_clear_storage),
|
||||
rio::ext_storage_root.replace_implementation(ext_storage_root),
|
||||
)
|
||||
};
|
||||
|
||||
E::execute_block(block);
|
||||
}
|
||||
|
||||
/// The storage implementation used when validating a block that is using the
|
||||
/// witness data as source.
|
||||
struct WitnessStorage<B: BlockT> {
|
||||
witness_data: MemoryDB<<HashingOf<B> as HashT>::Hasher>,
|
||||
overlay: hashbrown::HashMap<Vec<u8>, Option<Vec<u8>>>,
|
||||
storage_root: B::Hash,
|
||||
}
|
||||
|
||||
impl<B: BlockT> WitnessStorage<B> {
|
||||
/// Initialize from the given witness data and storage root.
|
||||
///
|
||||
/// Returns an error if given storage root was not found in the witness data.
|
||||
fn new(
|
||||
data: WitnessData,
|
||||
storage_root: B::Hash,
|
||||
) -> Result<Self, &'static str> {
|
||||
let mut db = MemoryDB::default();
|
||||
data.into_iter().for_each(|i| { db.insert(&[], &i); });
|
||||
|
||||
if !db.contains(&storage_root, &[]) {
|
||||
return Err("Witness data does not contain given storage root.")
|
||||
}
|
||||
|
||||
Ok(Self {
|
||||
witness_data: db,
|
||||
overlay: Default::default(),
|
||||
storage_root,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl<B: BlockT> Storage for WitnessStorage<B> {
|
||||
fn get(&self, key: &[u8]) -> Option<Vec<u8>> {
|
||||
self.overlay.get(key).cloned().or_else(|| {
|
||||
read_trie_value(
|
||||
&self.witness_data,
|
||||
&self.storage_root,
|
||||
key,
|
||||
).ok()
|
||||
}).unwrap_or(None)
|
||||
}
|
||||
|
||||
fn insert(&mut self, key: &[u8], value: &[u8]) {
|
||||
self.overlay.insert(key.to_vec(), Some(value.to_vec()));
|
||||
}
|
||||
|
||||
fn remove(&mut self, key: &[u8]) {
|
||||
self.overlay.insert(key.to_vec(), None);
|
||||
}
|
||||
|
||||
fn storage_root(&mut self) -> [u8; STORAGE_ROOT_LEN] {
|
||||
let root = match delta_trie_root(
|
||||
&mut self.witness_data,
|
||||
self.storage_root.clone(),
|
||||
self.overlay.drain()
|
||||
) {
|
||||
Ok(root) => root,
|
||||
Err(_) => return [0; STORAGE_ROOT_LEN],
|
||||
};
|
||||
|
||||
assert!(root.as_ref().len() <= STORAGE_ROOT_LEN);
|
||||
let mut res = [0; STORAGE_ROOT_LEN];
|
||||
res.copy_from_slice(root.as_ref());
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
unsafe fn ext_get_allocated_storage(
|
||||
key_data: *const u8,
|
||||
key_len: u32,
|
||||
written_out: *mut u32,
|
||||
) -> *mut u8 {
|
||||
let key = slice::from_raw_parts(key_data, key_len as usize);
|
||||
match STORAGE.as_mut().expect(STORAGE_SET_EXPECT).get(key) {
|
||||
Some(value) => {
|
||||
let mut out_value: Vec<_> = value.clone();
|
||||
*written_out = out_value.len() as u32;
|
||||
let ptr = out_value.as_mut_ptr();
|
||||
mem::forget(out_value);
|
||||
ptr
|
||||
},
|
||||
None => {
|
||||
*written_out = u32::max_value();
|
||||
ptr::null_mut()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsafe fn ext_set_storage(
|
||||
key_data: *const u8,
|
||||
key_len: u32,
|
||||
value_data: *const u8,
|
||||
value_len: u32,
|
||||
) {
|
||||
let key = slice::from_raw_parts(key_data, key_len as usize);
|
||||
let value = slice::from_raw_parts(value_data, value_len as usize);
|
||||
|
||||
STORAGE.as_mut().expect(STORAGE_SET_EXPECT).insert(key, value);
|
||||
}
|
||||
|
||||
unsafe fn ext_get_storage_into(
|
||||
key_data: *const u8,
|
||||
key_len: u32,
|
||||
value_data: *mut u8,
|
||||
value_len: u32,
|
||||
value_offset: u32,
|
||||
) -> u32 {
|
||||
let key = slice::from_raw_parts(key_data, key_len as usize);
|
||||
let out_value = slice::from_raw_parts_mut(value_data, value_len as usize);
|
||||
|
||||
match STORAGE.as_mut().expect(STORAGE_SET_EXPECT).get(key) {
|
||||
Some(value) => {
|
||||
let value = &value[value_offset as usize..];
|
||||
let len = cmp::min(value_len as usize, value.len());
|
||||
out_value[..len].copy_from_slice(&value[..len]);
|
||||
len as u32
|
||||
},
|
||||
None => {
|
||||
u32::max_value()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsafe fn ext_exists_storage(key_data: *const u8, key_len: u32) -> u32 {
|
||||
let key = slice::from_raw_parts(key_data, key_len as usize);
|
||||
|
||||
if STORAGE.as_mut().expect(STORAGE_SET_EXPECT).get(key).is_some() {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
||||
unsafe fn ext_clear_storage(key_data: *const u8, key_len: u32) {
|
||||
let key = slice::from_raw_parts(key_data, key_len as usize);
|
||||
|
||||
STORAGE.as_mut().expect(STORAGE_SET_EXPECT).remove(key);
|
||||
}
|
||||
|
||||
unsafe fn ext_storage_root(result: *mut u8) {
|
||||
let res = STORAGE.as_mut().expect(STORAGE_SET_EXPECT).storage_root();
|
||||
let result = slice::from_raw_parts_mut(result, STORAGE_ROOT_LEN);
|
||||
result.copy_from_slice(&res);
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
// Copyright 2019 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Substrate.
|
||||
|
||||
// Substrate 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.
|
||||
|
||||
// Substrate 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! A module that enables a runtime to work as parachain.
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
#[cfg(not(feature = "std"))]
|
||||
#[doc(hidden)]
|
||||
pub mod implementation;
|
||||
|
||||
/// Register the `validate_block` function that is used by parachains to validate blocks on a validator.
|
||||
///
|
||||
/// Does *nothing* when `std` feature is enabled.
|
||||
///
|
||||
/// Expects as parameters the block and the block executor.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// struct Block;
|
||||
/// struct BlockExecutor;
|
||||
///
|
||||
/// cumulus_runtime::register_validate_block!(Block, BlockExecutor);
|
||||
///
|
||||
/// # fn main() {}
|
||||
/// ```
|
||||
#[macro_export]
|
||||
macro_rules! register_validate_block {
|
||||
($block:ty, $block_executor:ty) => {
|
||||
$crate::register_validate_block_impl!($block, $block_executor);
|
||||
};
|
||||
}
|
||||
|
||||
/// The actual implementation of `register_validate_block` for `no_std`.
|
||||
#[cfg(not(feature = "std"))]
|
||||
#[doc(hidden)]
|
||||
#[macro_export]
|
||||
macro_rules! register_validate_block_impl {
|
||||
($block:ty, $block_executor:ty) => {
|
||||
#[doc(hidden)]
|
||||
mod parachain_validate_block {
|
||||
use super::*;
|
||||
|
||||
#[no_mangle]
|
||||
unsafe fn validate_block(
|
||||
block_data: *const u8,
|
||||
block_data_len: u64,
|
||||
) {
|
||||
let block_data = $crate::slice::from_raw_parts(
|
||||
block_data,
|
||||
block_data_len as usize,
|
||||
);
|
||||
|
||||
$crate::validate_block::implementation::validate_block::<
|
||||
$block, $block_executor
|
||||
>(block_data);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// The actual implementation of `register_validate_block` for `std`.
|
||||
#[cfg(feature = "std")]
|
||||
#[doc(hidden)]
|
||||
#[macro_export]
|
||||
macro_rules! register_validate_block_impl {
|
||||
($block:ty, $block_executor:ty) => {};
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
// Copyright 2019 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Substrate.
|
||||
|
||||
// Substrate 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.
|
||||
|
||||
// Substrate 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use crate::{ParachainBlockData, WitnessData};
|
||||
|
||||
use rio::TestExternalities;
|
||||
use keyring::AccountKeyring;
|
||||
use primitives::{storage::well_known_keys};
|
||||
use runtime_primitives::traits::{Block as BlockT, Header as HeaderT};
|
||||
use executor::{WasmExecutor, error::Result, wasmi::RuntimeValue::{I64, I32}};
|
||||
use test_client::{
|
||||
TestClientBuilder, TestClient,
|
||||
runtime::{Block, Transfer}, TestClientBuilderExt,
|
||||
};
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
use codec::Encode;
|
||||
|
||||
const WASM_CODE: &[u8] =
|
||||
include_bytes!("../../../test/runtime/wasm/target/wasm32-unknown-unknown/release/cumulus_test_runtime.compact.wasm");
|
||||
|
||||
fn call_validate_block(block_data: ParachainBlockData<Block>) -> Result<()> {
|
||||
let mut ext = TestExternalities::default();
|
||||
WasmExecutor::new().call_with_custom_signature(
|
||||
&mut ext,
|
||||
1024,
|
||||
&WASM_CODE,
|
||||
"validate_block",
|
||||
|alloc| {
|
||||
let block_data = block_data.encode();
|
||||
let block_data_offset = alloc(&block_data)?;
|
||||
|
||||
Ok(
|
||||
vec![
|
||||
I32(block_data_offset as i32),
|
||||
I64(block_data.len() as i64),
|
||||
]
|
||||
)
|
||||
},
|
||||
|res, _| {
|
||||
if res.is_none() {
|
||||
Ok(Some(()))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fn create_extrinsics() -> Vec<<Block as BlockT>::Extrinsic> {
|
||||
vec![
|
||||
Transfer {
|
||||
from: AccountKeyring::Alice.into(),
|
||||
to: AccountKeyring::Bob.into(),
|
||||
amount: 69,
|
||||
nonce: 0,
|
||||
}.into_signed_tx(),
|
||||
Transfer {
|
||||
from: AccountKeyring::Alice.into(),
|
||||
to: AccountKeyring::Charlie.into(),
|
||||
amount: 100,
|
||||
nonce: 1,
|
||||
}.into_signed_tx(),
|
||||
Transfer {
|
||||
from: AccountKeyring::Bob.into(),
|
||||
to: AccountKeyring::Charlie.into(),
|
||||
amount: 100,
|
||||
nonce: 0,
|
||||
}.into_signed_tx(),
|
||||
Transfer {
|
||||
from: AccountKeyring::Charlie.into(),
|
||||
to: AccountKeyring::Alice.into(),
|
||||
amount: 500,
|
||||
nonce: 0,
|
||||
}.into_signed_tx(),
|
||||
]
|
||||
}
|
||||
|
||||
fn create_test_client() -> TestClient {
|
||||
let mut genesis_extension = HashMap::new();
|
||||
genesis_extension.insert(well_known_keys::CODE.to_vec(), WASM_CODE.to_vec());
|
||||
|
||||
TestClientBuilder::new()
|
||||
.set_genesis_extension(genesis_extension)
|
||||
.build_cumulus()
|
||||
}
|
||||
|
||||
fn build_block_with_proof(
|
||||
client: &TestClient,
|
||||
extrinsics: Vec<<Block as BlockT>::Extrinsic>,
|
||||
) -> (Block, WitnessData) {
|
||||
let mut builder = client.new_block().expect("Initializes new block");
|
||||
builder.record_proof();
|
||||
|
||||
extrinsics.into_iter().for_each(|e| builder.push(e).expect("Pushes an extrinsic"));
|
||||
|
||||
let (block, proof) = builder
|
||||
.bake_and_extract_proof()
|
||||
.expect("Finalizes block");
|
||||
|
||||
(block, proof.expect("We enabled proof recording before."))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn validate_block_with_no_extrinsics() {
|
||||
let client = create_test_client();
|
||||
let witness_data_storage_root = *client
|
||||
.best_block_header()
|
||||
.expect("Best block exists")
|
||||
.state_root();
|
||||
let (block, witness_data) = build_block_with_proof(&client, Vec::new());
|
||||
let (header, extrinsics) = block.deconstruct();
|
||||
|
||||
let block_data = ParachainBlockData::new(
|
||||
header,
|
||||
extrinsics,
|
||||
witness_data,
|
||||
witness_data_storage_root
|
||||
);
|
||||
call_validate_block(block_data).expect("Calls `validate_block`");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn validate_block_with_extrinsics() {
|
||||
let client = create_test_client();
|
||||
let witness_data_storage_root = *client
|
||||
.best_block_header()
|
||||
.expect("Best block exists")
|
||||
.state_root();
|
||||
let (block, witness_data) = build_block_with_proof(&client, create_extrinsics());
|
||||
let (header, extrinsics) = block.deconstruct();
|
||||
|
||||
let block_data = ParachainBlockData::new(
|
||||
header,
|
||||
extrinsics,
|
||||
witness_data,
|
||||
witness_data_storage_root
|
||||
);
|
||||
call_validate_block(block_data).expect("Calls `validate_block`");
|
||||
}
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# This script assumes that all pre-requisites are installed.
|
||||
|
||||
set -e
|
||||
|
||||
PROJECT_ROOT=`git rev-parse --show-toplevel`
|
||||
source `dirname "$0"`/common.sh
|
||||
|
||||
export CARGO_INCREMENTAL=0
|
||||
|
||||
# Save current directory.
|
||||
pushd .
|
||||
|
||||
cd $ROOT
|
||||
|
||||
for SRC in "${SRCS[@]}"
|
||||
do
|
||||
echo "*** Building wasm binaries in $SRC"
|
||||
cd "$PROJECT_ROOT/$SRC"
|
||||
|
||||
./build.sh
|
||||
|
||||
cd - >> /dev/null
|
||||
done
|
||||
|
||||
# Restore initial directory.
|
||||
popd
|
||||
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
ROOT=`dirname "$0"`
|
||||
|
||||
# A list of directories which contain wasm projects.
|
||||
SRCS=(
|
||||
"test/runtime/wasm"
|
||||
)
|
||||
|
||||
# Make pushd/popd silent.
|
||||
|
||||
pushd () {
|
||||
command pushd "$@" > /dev/null
|
||||
}
|
||||
|
||||
popd () {
|
||||
command popd "$@" > /dev/null
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
[package]
|
||||
name = "cumulus-test-client"
|
||||
version = "0.1.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
substrate-test-client = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "bkchr-cumulus-branch" }
|
||||
|
||||
[features]
|
||||
default = ["std"]
|
||||
std = [
|
||||
"substrate-test-client/std",
|
||||
]
|
||||
@@ -0,0 +1,56 @@
|
||||
// Copyright 2019 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Substrate.
|
||||
|
||||
// Substrate 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.
|
||||
|
||||
// Substrate 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! A Cumulus test client.
|
||||
|
||||
pub use substrate_test_client::*;
|
||||
|
||||
mod local_executor {
|
||||
#![allow(missing_docs)]
|
||||
use substrate_test_client::runtime;
|
||||
use substrate_test_client::executor::native_executor_instance;
|
||||
native_executor_instance!(
|
||||
pub LocalExecutor,
|
||||
runtime::api::dispatch,
|
||||
runtime::native_version,
|
||||
include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/cumulus_test_runtime.compact.wasm")
|
||||
);
|
||||
}
|
||||
|
||||
/// Native executor used for tests.
|
||||
pub use local_executor::LocalExecutor;
|
||||
|
||||
/// Test client executor.
|
||||
pub type Executor = client::LocalCallExecutor<
|
||||
Backend,
|
||||
executor::NativeExecutor<LocalExecutor>,
|
||||
>;
|
||||
|
||||
/// Test client type.
|
||||
pub type TestClient = client::Client<
|
||||
Backend, Executor, runtime::Block, runtime::RuntimeApi
|
||||
>;
|
||||
|
||||
/// An extension to the `TestClientBuilder` for building a cumulus test-client.
|
||||
pub trait TestClientBuilderExt {
|
||||
fn build_cumulus(self) -> TestClient;
|
||||
}
|
||||
|
||||
impl TestClientBuilderExt for TestClientBuilder {
|
||||
fn build_cumulus(self) -> TestClient {
|
||||
self.build_with_native_executor(NativeExecutor::<LocalExecutor>::new(None))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
[package]
|
||||
name = "cumulus-test-runtime"
|
||||
version = "0.1.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
runtime = { package = "cumulus-runtime", path = "../../runtime", default-features = false }
|
||||
substrate-test-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "bkchr-cumulus-branch" }
|
||||
|
||||
[features]
|
||||
default = ["std"]
|
||||
std = [
|
||||
"runtime/std",
|
||||
"substrate-test-runtime/std",
|
||||
]
|
||||
wasm = ["runtime/wasm"]
|
||||
@@ -0,0 +1,23 @@
|
||||
// Copyright 2019 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Substrate.
|
||||
|
||||
// Substrate 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.
|
||||
|
||||
// Substrate 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! A Cumulus test runtime.
|
||||
|
||||
#![cfg_attr(not(feature = "std"), no_std)]
|
||||
|
||||
pub use substrate_test_runtime::*;
|
||||
|
||||
runtime::register_validate_block!(Block, system::BlockExecutor);
|
||||
Generated
+816
@@ -0,0 +1,816 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "arrayvec"
|
||||
version = "0.4.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "bitmask"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "blake2-rfc"
|
||||
version = "0.2.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "constant_time_eq"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "crunchy"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "cumulus-runtime"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"hash-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hashbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"memory-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-io 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-executive 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-trie 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"trie-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cumulus-test-runtime"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cumulus-runtime 0.1.0",
|
||||
"substrate-test-runtime 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cumulus-test-runtime-wasm"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cumulus-test-runtime 0.1.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "elastic-array"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "fixed-hash"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hash-db"
|
||||
version = "0.12.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "hash256-std-hasher"
|
||||
version = "0.12.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashmap_core"
|
||||
version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "hex-literal"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"hex-literal-impl 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hex-literal-impl"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "impl-codec"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "integer-sqrt"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.51"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memory-db"
|
||||
version = "0.12.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"hash-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hashmap_core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nodrop"
|
||||
version = "0.1.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "num-traits"
|
||||
version = "0.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "parity-codec"
|
||||
version = "3.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec-derive 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parity-codec-derive"
|
||||
version = "3.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro-crate 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "paste"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"paste-impl 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro-hack 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "paste-impl"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro-hack 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "primitive-types"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"fixed-hash 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"impl-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"uint 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-crate"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-hack"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-hack"
|
||||
version = "0.5.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-hack-impl"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "0.4.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "0.6.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.6.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "rand_hc"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_isaac"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_jitter"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_pcg"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_xorshift"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hex"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "rustc_version"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "safe-mix"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "semver-parser"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.90"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "sr-api-macros"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro-crate 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sr-io"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"hash-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sr-primitives"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-io 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sr-std"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sr-version"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "srml-executive"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-io 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-support 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-system 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "srml-metadata"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "srml-support"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"bitmask 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"paste 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-io 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-metadata 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-support-procedural 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-inherents 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "srml-support-procedural"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-api-macros 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-support-procedural-tools 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "srml-support-procedural-tools"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"proc-macro-crate 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"srml-support-procedural-tools-derive 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "srml-support-procedural-tools-derive"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "srml-system"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"hex-literal 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-io 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-support 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "static_assertions"
|
||||
version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "substrate-client"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"hash-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-api-macros 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-version 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-inherents 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "substrate-consensus-aura-primitives"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-client 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "substrate-consensus-authorities"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-io 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-version 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-support 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-client 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "substrate-inherents"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "substrate-offchain-primitives"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-client 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "substrate-primitives"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hash-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hash256-std-hasher 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"primitive-types 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "substrate-test-runtime"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"memory-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-io 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"sr-version 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-executive 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"srml-support 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-client 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-consensus-aura-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-consensus-authorities 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-inherents 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-offchain-primitives 0.1.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"substrate-trie 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"trie-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "substrate-trie"
|
||||
version = "1.0.0"
|
||||
source = "git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch#7bdf1e90acbb495c3e2dd4f30ad981b1d3c989c3"
|
||||
dependencies = [
|
||||
"hash-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"memory-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)",
|
||||
"trie-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"trie-root 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "0.15.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.4.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "trie-db"
|
||||
version = "0.12.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"elastic-array 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hash-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hashmap_core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "trie-root"
|
||||
version = "0.12.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"hash-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uint"
|
||||
version = "0.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[metadata]
|
||||
"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71"
|
||||
"checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799"
|
||||
"checksum bitmask 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5da9b3d9f6f585199287a473f4f8dfab6566cf827d15c00c219f53c645687ead"
|
||||
"checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400"
|
||||
"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb"
|
||||
"checksum cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "11d43355396e872eefb45ce6342e4374ed7bc2b3a502d1b28e36d6e23c05d1f4"
|
||||
"checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e"
|
||||
"checksum crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c240f247c278fa08a6d4820a6a222bfc6e0d999e51ba67be94f44c905b2161f2"
|
||||
"checksum elastic-array 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "073be79b6538296faf81c631872676600616073817dd9a440c477ad09b408983"
|
||||
"checksum fixed-hash 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a557e80084b05c32b455963ff565a9de6f2866da023d6671705c6aff6f65e01c"
|
||||
"checksum hash-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ba7fb417e5c470acdd61068c79767d0e65962e70836cf6c9dfd2409f06345ce0"
|
||||
"checksum hash256-std-hasher 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f8b2027c19ec91eb304999abae7307d225cf93be42af53b0039f76e98ed5af86"
|
||||
"checksum hashbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da"
|
||||
"checksum hashmap_core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8e04cb7a5051270ef3fa79f8c7604d581ecfa73d520e74f554e45541c4b5881a"
|
||||
"checksum hex-literal 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ddc2928beef125e519d69ae1baa8c37ea2e0d3848545217f6db0179c5eb1d639"
|
||||
"checksum hex-literal-impl 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "520870c3213943eb8d7803e80180d12a6c7ceb4ae74602544529d1643dc4ddda"
|
||||
"checksum impl-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2050d823639fbeae26b2b5ba09aca8907793117324858070ade0673c49f793b"
|
||||
"checksum integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ea155abb3ba6f382a75f1418988c05fe82959ed9ce727de427f9cfd425b0c903"
|
||||
"checksum libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)" = "bedcc7a809076656486ffe045abeeac163da1b558e963a31e29fbfbeba916917"
|
||||
"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
|
||||
"checksum memory-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7623b01a4f1b7acb7cf8e3f678f05e15e6ae26cb0b738dfeb5cc186fd6b82ef4"
|
||||
"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
|
||||
"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
|
||||
"checksum parity-codec 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2edd80cdaf3b9c7b7f524299586bb4eae43cc5eb20c7b41aa0cd741200000e38"
|
||||
"checksum parity-codec-derive 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "00a486fd383382ddcb2de928364b1f82571c1e48274fc43b7667a4738ee4056c"
|
||||
"checksum paste 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1f4a4a1c555c6505821f9d58b8779d0f630a6b7e4e1be24ba718610acf01fa79"
|
||||
"checksum paste-impl 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "26e796e623b8b257215f27e6c80a5478856cae305f5b59810ff9acdaa34570e6"
|
||||
"checksum primitive-types 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edb92f1ebfc177432c03287b15d48c202e6e2c95993a7af3ba039abb43b1492e"
|
||||
"checksum proc-macro-crate 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4c6cf4e5b00300d151dfffae39f529dfa5188f42eeb14201229aa420d6aad10c"
|
||||
"checksum proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c725b36c99df7af7bf9324e9c999b9e37d92c8f8caf106d82e1d7953218d2d8"
|
||||
"checksum proc-macro-hack 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3e90aa19cd73dedc2d0e1e8407473f073d735fef0ab521438de6da8ee449ab66"
|
||||
"checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a"
|
||||
"checksum proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)" = "4d317f9caece796be1980837fd5cb3dfec5613ebdb04ad0956deea83ce168915"
|
||||
"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db"
|
||||
"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
|
||||
"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
|
||||
"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
|
||||
"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0"
|
||||
"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
|
||||
"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
|
||||
"checksum rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b9ea758282efe12823e0d952ddb269d2e1897227e464919a554f2a03ef1b832"
|
||||
"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
|
||||
"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
|
||||
"checksum rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "403bb3a286107a04825a5f82e1270acc1e14028d3d554d7a1e08914549575ab8"
|
||||
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
|
||||
"checksum safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f7bf422d23a88c16d5090d455f182bc99c60af4df6a345c63428acf5129e347"
|
||||
"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
|
||||
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
|
||||
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||
"checksum serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "aa5f7c20820475babd2c077c3ab5f8c77a31c15e16ea38687b4c02d3e48680f4"
|
||||
"checksum sr-api-macros 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum sr-io 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum sr-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum sr-std 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum sr-version 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum srml-executive 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum srml-metadata 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum srml-support 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum srml-support-procedural 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum srml-support-procedural-tools 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum srml-support-procedural-tools-derive 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum srml-system 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5"
|
||||
"checksum substrate-client 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum substrate-consensus-aura-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum substrate-consensus-authorities 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum substrate-inherents 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum substrate-offchain-primitives 0.1.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum substrate-primitives 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum substrate-test-runtime 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum substrate-trie 1.0.0 (git+https://github.com/paritytech/substrate?branch=bkchr-cumulus-branch)" = "<none>"
|
||||
"checksum syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)" = "66c8865bf5a7cbb662d8b011950060b3c8743dca141b054bf7195b20d314d8e2"
|
||||
"checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
|
||||
"checksum trie-db 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1ba73747fd3a64ab531274c04cb588dfa9d30d972d62990831e63fbce2cfec59"
|
||||
"checksum trie-root 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cfa2e20c4f1418ac2e71ddc418e35e1b56e34022e2146209ffdbf1b2de8b1bd9"
|
||||
"checksum uint 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e7780bb27fd8a22295e0d9d53ae3be253f715a0dccb1808527f478f1c2603708"
|
||||
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
|
||||
"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770"
|
||||
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
@@ -0,0 +1,23 @@
|
||||
[package]
|
||||
name = "cumulus-test-runtime-wasm"
|
||||
version = "0.1.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
name = "cumulus_test_runtime"
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
[dependencies]
|
||||
cumulus-test-runtime = { path = "..", default-features = false }
|
||||
|
||||
[features]
|
||||
default = ["wasm"]
|
||||
wasm = ["cumulus-test-runtime/wasm"]
|
||||
|
||||
[profile.release]
|
||||
panic = "abort"
|
||||
lto = true
|
||||
|
||||
[workspace]
|
||||
members = []
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
if cargo --version | grep -q "nightly"; then
|
||||
CARGO_CMD="cargo"
|
||||
else
|
||||
CARGO_CMD="cargo +nightly"
|
||||
fi
|
||||
CARGO_INCREMENTAL=0 RUSTFLAGS="-C link-arg=--export-table" $CARGO_CMD build --target=wasm32-unknown-unknown --release
|
||||
for i in cumulus_test_runtime
|
||||
do
|
||||
wasm-gc target/wasm32-unknown-unknown/release/$i.wasm target/wasm32-unknown-unknown/release/$i.compact.wasm
|
||||
done
|
||||
@@ -0,0 +1,21 @@
|
||||
// Copyright 2019 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Substrate.
|
||||
|
||||
// Substrate 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.
|
||||
|
||||
// Substrate 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! The Cumulus test runtime reexported for WebAssembly compile.
|
||||
|
||||
#![cfg_attr(not(feature = "std"), no_std)]
|
||||
|
||||
pub use cumulus_test_runtime::*;
|
||||
Reference in New Issue
Block a user