├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── build.rs ├── build.sh ├── init.sh ├── runtime ├── Cargo.toml ├── src │ ├── adex_outpace │ │ ├── channel.rs │ │ └── mod.rs │ └── lib.rs └── wasm │ ├── Cargo.lock │ ├── Cargo.toml │ ├── build.sh │ └── src └── src ├── chain_spec.rs ├── cli.rs ├── cli.yml ├── error.rs ├── main.rs └── service.rs /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | **/target/ 4 | 5 | # These are backup files generated by rustfmt 6 | **/*.rs.bk 7 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "adex-protocol-substrate" 3 | version = "0.9.0" 4 | authors = ["Parity Technologies "] 5 | build = "build.rs" 6 | 7 | [[bin]] 8 | name = "adex-protocol-substrate" 9 | path = "src/main.rs" 10 | 11 | [dependencies] 12 | error-chain = "0.12" 13 | futures = "0.1" 14 | ctrlc = { version = "3.0", features = ["termination"] } 15 | log = "0.4" 16 | tokio = "0.1.7" 17 | exit-future = "0.1" 18 | parking_lot = "0.4" 19 | hex-literal = "0.1" 20 | slog = "^2" 21 | parity-codec = { version = "2.1" } 22 | trie-root = { git = "https://github.com/paritytech/trie" } 23 | sr-io = { git = "https://github.com/paritytech/substrate" } 24 | sr-primitives = { git = "https://github.com/paritytech/substrate" } 25 | substrate-cli = { git = "https://github.com/paritytech/substrate" } 26 | substrate-primitives = { git = "https://github.com/paritytech/substrate" } 27 | substrate-executor = { git = "https://github.com/paritytech/substrate" } 28 | substrate-service = { git = "https://github.com/paritytech/substrate" } 29 | substrate-transaction-pool = { git = "https://github.com/paritytech/substrate" } 30 | substrate-network = { git = "https://github.com/paritytech/substrate" } 31 | substrate-consensus-aura = { git = "https://github.com/paritytech/substrate" } 32 | substrate-client = { git = "https://github.com/paritytech/substrate", default-features = false } 33 | substrate-finality-grandpa = { git = "https://github.com/paritytech/substrate" } 34 | adex-protocol-substrate-runtime = { path = "runtime" } 35 | structopt = "0.2.13" 36 | 37 | [build-dependencies] 38 | vergen = "2" 39 | 40 | [workspace] 41 | members = [ "runtime" ] 42 | exclude = [ "runtime/wasm" ] 43 | 44 | [profile.release] 45 | # Substrate runtime requires unwinding. 46 | panic = "unwind" 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # adex-protocol-substrate 2 | 3 | The [AdEx Protocol](https://github.com/AdExNetwork/adex-protocol) implemented on top of Substrate. Bootstrapped from [substrate-node-template](https://github.com/paritytech/substrate-node-template). 4 | 5 | 6 | ## What is it? 7 | 8 | ### OUTPACE 9 | 10 | The [`AdExOUTPACE`](https://github.com/AdExNetwork/adex-protocol-substrate/tree/rebase/runtime/src/adex_outpace) module implements **O**ffchain **U**nidirectional **T**rustless **Pa**yment **C**hann**e**ls described here: https://github.com/AdExNetwork/adex-protocol/blob/master/OUTPACE.md 11 | 12 | The OUTPACE module consists of: 13 | 14 | * `channel_open`: opens a channel, therefore locking up a deposit 15 | * `channel_withdraw_expired`: after the channel is expired, the creator may invoke this to withdraw the remainder of their deposit 16 | * `channel_withdraw`: at any time before expiry, anyone who earned from this channel may withdraw their earnings 17 | 18 | ### Registry 19 | 20 | The upcoming `AdExRegistry` module implements the AdEx registry. 21 | 22 | It is a component where AdEx validators can stake tokens to get exposure. Furhermore, users may launch challenges against validators to prove their misbehavior. Most of the challenges involve replicating the off-chain behavior of the [validator stack](https://github.com/adexnetwork/adex-validator-stack-js), employing a pattern referred to as counterfactuality. 23 | 24 | For more details, read https://github.com/AdExNetwork/adex-protocol/issues/7 25 | 26 | ## Build and run 27 | 28 | ``` 29 | ./build.sh 30 | cargo run -- --dev 31 | ``` 32 | 33 | With some old Rust crates, you might need to do `export PKG_CONFIG_PATH=/usr/lib/openssl-1.0/pkgconfig` if you're running OpenSSL 1.1 34 | 35 | 36 | ## Bootstrap an UI 37 | 38 | First, complete the "Prerequisites" step from https://substrate.readme.io/docs/creating-a-custom-substrate-chain 39 | 40 | Then, execute: 41 | 42 | ``` 43 | substrate-ui-new adex-protocol-substrate 44 | ``` 45 | -------------------------------------------------------------------------------- /build.rs: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2018 Parity Technologies (UK) Ltd. 2 | // This file is part of Substrate. 3 | 4 | // Substrate is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | 9 | // Substrate is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | 14 | // You should have received a copy of the GNU General Public License 15 | // along with Substrate. If not, see . 16 | 17 | extern crate vergen; 18 | 19 | use vergen::{ConstantsFlags, Vergen}; 20 | 21 | const ERROR_MSG: &'static str = "Failed to generate metadata files"; 22 | 23 | fn main() { 24 | let vergen = Vergen::new(ConstantsFlags::all()).expect(ERROR_MSG); 25 | 26 | for (k, v) in vergen.build_info() { 27 | println!("cargo:rustc-env={}={}", k.name(), v); 28 | } 29 | 30 | println!("cargo:rerun-if-changed=.git/HEAD"); 31 | } 32 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | PROJECT_ROOT=`git rev-parse --show-toplevel` 6 | 7 | export CARGO_INCREMENTAL=0 8 | 9 | bold=$(tput bold) 10 | normal=$(tput sgr0) 11 | 12 | # Save current directory. 13 | pushd . >/dev/null 14 | 15 | cd $ROOT 16 | 17 | for SRC in runtime/wasm 18 | do 19 | echo "${bold}Building webassembly binary in $SRC...${normal}" 20 | cd "$PROJECT_ROOT/$SRC" 21 | 22 | ./build.sh 23 | 24 | cd - >> /dev/null 25 | done 26 | 27 | # Restore initial directory. 28 | popd >/dev/null 29 | -------------------------------------------------------------------------------- /init.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | echo "*** Initialising WASM build environment" 6 | 7 | if [ -z $CI_PROJECT_NAME ] ; then 8 | rustup update nightly 9 | rustup update stable 10 | fi 11 | 12 | rustup target add wasm32-unknown-unknown --toolchain nightly 13 | 14 | # Install wasm-gc. It's useful for stripping slimming down wasm binaries. 15 | command -v wasm-gc || \ 16 | cargo +nightly install --git https://github.com/alexcrichton/wasm-gc --force 17 | -------------------------------------------------------------------------------- /runtime/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "adex-protocol-substrate-runtime" 3 | version = "0.9.0" 4 | authors = ["Parity Technologies "] 5 | 6 | [dependencies] 7 | rustc-hex = "1.0" 8 | hex-literal = "0.1.0" 9 | serde = { version = "1.0", default-features = false } 10 | serde_derive = { version = "1.0", optional = true } 11 | safe-mix = { version = "1.0", default-features = false } 12 | parity-codec = "2.0" 13 | parity-codec-derive = "2.0" 14 | sr-std = { git = "https://github.com/paritytech/substrate" } 15 | sr-io = { git = "https://github.com/paritytech/substrate" } 16 | srml-support = { git = "https://github.com/paritytech/substrate" } 17 | substrate-primitives = { git = "https://github.com/paritytech/substrate" } 18 | substrate-keyring = { git = "https://github.com/paritytech/substrate" } 19 | srml-balances = { git = "https://github.com/paritytech/substrate" } 20 | srml-consensus = { git = "https://github.com/paritytech/substrate" } 21 | srml-executive = { git = "https://github.com/paritytech/substrate" } 22 | sr-primitives = { git = "https://github.com/paritytech/substrate" } 23 | srml-system = { git = "https://github.com/paritytech/substrate" } 24 | srml-timestamp = { git = "https://github.com/paritytech/substrate" } 25 | srml-upgrade-key = { git = "https://github.com/paritytech/substrate" } 26 | substrate-client = { git = "https://github.com/paritytech/substrate", optional = true } 27 | sr-version = { git = "https://github.com/paritytech/substrate" } 28 | 29 | [features] 30 | default = ["std"] 31 | std = [ 32 | "parity-codec/std", 33 | "substrate-primitives/std", 34 | "substrate-client/std", 35 | "sr-std/std", 36 | "sr-io/std", 37 | "srml-support/std", 38 | "srml-balances/std", 39 | "srml-consensus/std", 40 | "srml-executive/std", 41 | "sr-primitives/std", 42 | "srml-system/std", 43 | "srml-timestamp/std", 44 | "srml-upgrade-key/std", 45 | "sr-version/std", 46 | "serde_derive", 47 | "serde/std", 48 | "safe-mix/std", 49 | "substrate-client" 50 | ] 51 | -------------------------------------------------------------------------------- /runtime/src/adex_outpace/channel.rs: -------------------------------------------------------------------------------- 1 | use primitives::H256; 2 | use rstd::prelude::*; 3 | 4 | #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] 5 | #[derive(Encode, Decode, Clone, PartialEq, Eq)] 6 | pub struct Channel { 7 | pub creator: AccountId, 8 | pub deposit: Balance, 9 | pub valid_until: Moment, 10 | pub validators: Vec, 11 | pub spec: Vec, 12 | } 13 | impl Channel 14 | where Moment: PartialOrd 15 | { 16 | pub fn is_valid(&self) -> bool { 17 | self.validators.len() >= 2 18 | && self.validators.len() <= 256 19 | } 20 | } 21 | 22 | #[derive(Decode, Encode, PartialEq)] 23 | pub enum ChannelState { Active, Expired } 24 | -------------------------------------------------------------------------------- /runtime/src/adex_outpace/mod.rs: -------------------------------------------------------------------------------- 1 | use srml_support::{StorageMap, dispatch::Result}; 2 | use {balances, timestamp, system::ensure_signed}; 3 | use runtime_primitives::traits::Hash; 4 | 5 | #[cfg(test)] 6 | extern crate sr_io as runtime_io; 7 | use runtime_io::ed25519_verify; 8 | 9 | extern crate sr_std as rstd; 10 | use rstd::prelude::*; 11 | 12 | pub mod channel; 13 | 14 | use self::channel::{Channel, ChannelState}; 15 | 16 | pub trait Trait: balances::Trait + timestamp::Trait { 17 | type Event: From> + Into<::Event>; 18 | } 19 | 20 | #[derive(Encode, Decode)] 21 | struct Two (A, B); 22 | impl Two where T: AsRef<[u8]> { 23 | fn combine_sorted(a: T, b: T) -> Self { 24 | if a.as_ref() < b.as_ref() { 25 | Two(a, b) 26 | } else { 27 | Two(b, a) 28 | } 29 | } 30 | } 31 | 32 | type Signature = primitives::H512; 33 | 34 | // Implements OUTPACE: https://github.com/AdExNetwork/adex-protocol/blob/master/OUTPACE.md 35 | // Off-chain Unidirectional Trustless PAyment ChannEls 36 | 37 | decl_module! { 38 | pub struct Module for enum Call where origin: T::Origin { 39 | fn deposit_event() = default; 40 | 41 | fn channel_open(origin, channel: Channel) -> Result { 42 | ensure!(ensure_signed(origin)? == channel.creator, "the sender must be channel.creator"); 43 | ensure!(channel.is_valid(), "the channel must be valid"); 44 | 45 | let channel_hash = T::Hashing::hash_of(&channel); 46 | ensure!( 47 | !>::exists(&channel_hash), 48 | "channel must not already exist" 49 | ); 50 | >::insert(&channel_hash, ChannelState::Active); 51 | >::decrease_free_balance(&channel.creator, channel.deposit)?; 52 | Self::deposit_event(RawEvent::ChannelOpen(channel_hash)); 53 | Ok(()) 54 | } 55 | 56 | fn channel_withdraw_expired(origin, channel: Channel) -> Result { 57 | ensure!( 58 | ensure_signed(origin)? == channel.creator, 59 | "the sender must be channel.creator" 60 | ); 61 | let channel_hash = T::Hashing::hash_of(&channel); 62 | ensure!( 63 | >::get(&channel_hash) == Some(ChannelState::Active), 64 | "channel must be active" 65 | ); 66 | ensure!( 67 | >::get() > channel.valid_until, 68 | "channel must be expired" 69 | ); 70 | 71 | let to_withdraw = channel.deposit - Self::withdrawn(&channel_hash); 72 | 73 | >::insert(channel_hash, ChannelState::Expired); 74 | >::increase_free_balance_creating(&channel.creator, to_withdraw); 75 | 76 | Self::deposit_event(RawEvent::ChannelWithdrawExpired(channel_hash, to_withdraw)); 77 | Ok(()) 78 | } 79 | 80 | fn channel_withdraw( 81 | origin, 82 | channel: Channel, 83 | state_root: T::Hash, 84 | signatures: Vec, 85 | proof: Vec, 86 | amount_in_tree: T::Balance 87 | ) -> Result { 88 | let sender = ensure_signed(origin)?; 89 | let channel_hash = T::Hashing::hash_of(&channel); 90 | 91 | // Check if the channel is in an Active state and not expired 92 | ensure!( 93 | >::get(&channel_hash) == Some(ChannelState::Active), 94 | "channel must be active" 95 | ); 96 | ensure!( 97 | >::get() <= channel.valid_until, 98 | "channel must not be expired" 99 | ); 100 | 101 | // Check if the state is signed by a supermajority of validators 102 | ensure!( 103 | signatures.len() == channel.validators.len(), 104 | "signatures must be as many as validators" 105 | ); 106 | let to_sign = T::Hashing::hash_of(&Two(channel_hash, state_root)); 107 | let valid_sigs = signatures.iter() 108 | .zip(channel.validators.iter()) 109 | .filter(|(sig, validator)| { 110 | ed25519_verify(&sig.to_fixed_bytes(), to_sign.as_ref(), validator.to_fixed_bytes()) 111 | }) 112 | .count(); 113 | ensure!( 114 | valid_sigs*3 >= channel.validators.len()*2, 115 | "state must be signed by a validator supermajority" 116 | ); 117 | 118 | // Check the merkle inclusion proof for the balance leaf 119 | let balance_leaf = T::Hashing::hash_of(&Two(sender.clone(), amount_in_tree)); 120 | let is_contained = state_root == proof.iter() 121 | .fold(balance_leaf, |a, b| { 122 | T::Hashing::hash_of(&Two::combine_sorted(a.clone(), b.clone())) 123 | }); 124 | ensure!(is_contained, "balance leaf not found"); 125 | 126 | // Calculate how much the user has left to withdraw 127 | let withdrawn_key = (channel_hash.clone(), sender.clone()); 128 | let withdrawn_so_far = Self::withdrawn_per_user(&withdrawn_key); 129 | ensure!( 130 | amount_in_tree > withdrawn_so_far, 131 | "amount_in_tree should be larger than withdrawn_so_far" 132 | ); 133 | let to_withdraw = amount_in_tree - withdrawn_so_far; 134 | 135 | // Ensure it's not possible to withdraw more than the channel balance 136 | let withdrawn_total = Self::withdrawn(&channel_hash) + to_withdraw; 137 | ensure!( 138 | withdrawn_total <= channel.deposit, 139 | "total withdrawn must not exceed channel deposit" 140 | ); 141 | 142 | >::insert(&withdrawn_key, amount_in_tree); 143 | >::insert(&channel_hash, withdrawn_total); 144 | >::increase_free_balance_creating(&sender, to_withdraw); 145 | 146 | Self::deposit_event(RawEvent::ChannelWithdraw(sender, channel_hash, to_withdraw)); 147 | Ok(()) 148 | } 149 | } 150 | } 151 | 152 | decl_storage! { 153 | trait Store for Module as AdExOUTPACE { 154 | pub State get(state): map T::Hash => Option; 155 | pub Withdrawn get(withdrawn): map T::Hash => T::Balance; 156 | pub WithdrawnPerUser get(withdrawn_per_user): map (T::Hash, T::AccountId) => T::Balance; 157 | } 158 | } 159 | 160 | decl_event!( 161 | pub enum Event where 162 | ::Hash, 163 | ::AccountId, 164 | ::Balance 165 | { 166 | ChannelOpen(Hash), 167 | ChannelWithdrawExpired(Hash, Balance), 168 | ChannelWithdraw(AccountId, Hash, Balance), 169 | } 170 | ); 171 | 172 | impl Module {} 173 | 174 | -------------------------------------------------------------------------------- /runtime/src/lib.rs: -------------------------------------------------------------------------------- 1 | //! The Substrate Node Template runtime. This can be compiled with `#[no_std]`, ready for Wasm. 2 | 3 | #![cfg_attr(not(feature = "std"), no_std)] 4 | #![cfg_attr(not(feature = "std"), feature(alloc))] 5 | // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. 6 | #![recursion_limit="256"] 7 | 8 | extern crate sr_std as rstd; 9 | extern crate sr_io as runtime_io; 10 | #[macro_use] 11 | extern crate substrate_client as client; 12 | #[macro_use] 13 | extern crate srml_support; 14 | #[macro_use] 15 | extern crate sr_primitives as runtime_primitives; 16 | #[cfg(feature = "std")] 17 | #[macro_use] 18 | extern crate serde_derive; 19 | extern crate substrate_primitives as primitives; 20 | extern crate parity_codec; 21 | #[macro_use] 22 | extern crate parity_codec_derive; 23 | #[macro_use] 24 | extern crate sr_version as version; 25 | extern crate srml_system as system; 26 | extern crate srml_executive as executive; 27 | extern crate srml_consensus as consensus; 28 | extern crate srml_timestamp as timestamp; 29 | extern crate srml_balances as balances; 30 | extern crate srml_upgrade_key as upgrade_key; 31 | 32 | #[cfg(feature = "std")] 33 | use parity_codec::{Encode, Decode}; 34 | use rstd::prelude::*; 35 | #[cfg(feature = "std")] 36 | use primitives::bytes; 37 | use primitives::AuthorityId; 38 | use primitives::OpaqueMetadata; 39 | use runtime_primitives::{ApplyResult, transaction_validity::TransactionValidity, 40 | Ed25519Signature, generic, traits::{self, BlakeTwo256, Block as BlockT} 41 | }; 42 | #[cfg(feature = "std")] 43 | use runtime_primitives::traits::ApiRef; 44 | use client::{block_builder::api::runtime::*, runtime_api::{runtime::*, id::*}}; 45 | #[cfg(feature = "std")] 46 | use client::runtime_api::ApiExt; 47 | use version::RuntimeVersion; 48 | #[cfg(feature = "std")] 49 | use version::NativeVersion; 50 | 51 | // A few exports that help ease life for downstream crates. 52 | #[cfg(any(feature = "std", test))] 53 | pub use runtime_primitives::BuildStorage; 54 | pub use consensus::Call as ConsensusCall; 55 | pub use timestamp::Call as TimestampCall; 56 | pub use balances::Call as BalancesCall; 57 | pub use runtime_primitives::{Permill, Perbill}; 58 | pub use timestamp::BlockPeriod; 59 | pub use srml_support::{StorageValue, RuntimeMetadata}; 60 | 61 | mod adex_outpace; 62 | 63 | /// Alias to Ed25519 pubkey that identifies an account on the chain. 64 | pub type AccountId = primitives::H256; 65 | 66 | /// A hash of some data used by the chain. 67 | pub type Hash = primitives::H256; 68 | 69 | /// Index of a block number in the chain. 70 | pub type BlockNumber = u64; 71 | 72 | /// Index of an account's extrinsic in the chain. 73 | pub type Nonce = u64; 74 | 75 | /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know 76 | /// the specifics of the runtime. They can then be made to be agnostic over specific formats 77 | /// of data like extrinsics, allowing for them to continue syncing the network through upgrades 78 | /// to even the core datastructures. 79 | pub mod opaque { 80 | use super::*; 81 | 82 | /// Opaque, encoded, unchecked extrinsic. 83 | #[derive(PartialEq, Eq, Clone, Default, Encode, Decode)] 84 | #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] 85 | pub struct UncheckedExtrinsic(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); 86 | impl traits::Extrinsic for UncheckedExtrinsic { 87 | fn is_signed(&self) -> Option { 88 | None 89 | } 90 | } 91 | /// Opaque block header type. 92 | pub type Header = generic::Header>; 93 | /// Opaque block type. 94 | pub type Block = generic::Block; 95 | /// Opaque block identifier type. 96 | pub type BlockId = generic::BlockId; 97 | } 98 | 99 | /// This runtime version. 100 | pub const VERSION: RuntimeVersion = RuntimeVersion { 101 | spec_name: ver_str!("adex-protocol-substrate"), 102 | impl_name: ver_str!("adex-protocol-substrate"), 103 | authoring_version: 1, 104 | spec_version: 1, 105 | impl_version: 0, 106 | apis: apis_vec!([ 107 | (BLOCK_BUILDER, 1), 108 | (TAGGED_TRANSACTION_QUEUE, 1), 109 | (METADATA, 1) 110 | ]), 111 | }; 112 | 113 | /// The version infromation used to identify this runtime when compiled natively. 114 | #[cfg(feature = "std")] 115 | pub fn native_version() -> NativeVersion { 116 | NativeVersion { 117 | runtime_version: VERSION, 118 | can_author_with: Default::default(), 119 | } 120 | } 121 | 122 | impl system::Trait for Runtime { 123 | /// The identifier used to distinguish between accounts. 124 | type AccountId = AccountId; 125 | /// The index type for storing how many extrinsics an account has signed. 126 | type Index = Nonce; 127 | /// The index type for blocks. 128 | type BlockNumber = BlockNumber; 129 | /// The type for hashing blocks and tries. 130 | type Hash = Hash; 131 | /// The hashing algorithm used. 132 | type Hashing = BlakeTwo256; 133 | /// The header digest type. 134 | type Digest = generic::Digest; 135 | /// The header type. 136 | type Header = generic::Header; 137 | /// The ubiquitous event type. 138 | type Event = Event; 139 | /// The ubiquitous log type. 140 | type Log = Log; 141 | /// The ubiquitous origin type. 142 | type Origin = Origin; 143 | } 144 | 145 | impl consensus::Trait for Runtime { 146 | /// The position in the block's extrinsics that the note-offline inherent must be placed. 147 | const NOTE_OFFLINE_POSITION: u32 = 1; 148 | /// The identifier we use to refer to authorities. 149 | type SessionKey = AuthorityId; 150 | /// No action in case an authority was determined to be offline. 151 | type OnOfflineValidator = (); 152 | /// The ubiquitous log type. 153 | type Log = Log; 154 | } 155 | 156 | impl timestamp::Trait for Runtime { 157 | /// The position in the block's extrinsics that the timestamp-set inherent must be placed. 158 | const TIMESTAMP_SET_POSITION: u32 = 0; 159 | /// A timestamp: seconds since the unix epoch. 160 | type Moment = u64; 161 | } 162 | 163 | impl balances::Trait for Runtime { 164 | /// The type for recording an account's balance. 165 | type Balance = u128; 166 | /// The type for recording indexing into the account enumeration. If this ever overflows, there 167 | /// will be problems! 168 | type AccountIndex = u32; 169 | /// What to do if an account's free balance gets zeroed. 170 | type OnFreeBalanceZero = (); 171 | /// Restrict whether an account can transfer funds. We don't place any further restrictions. 172 | type EnsureAccountLiquid = (); 173 | /// The uniquitous event type. 174 | type Event = Event; 175 | } 176 | 177 | impl upgrade_key::Trait for Runtime { 178 | /// The uniquitous event type. 179 | type Event = Event; 180 | } 181 | 182 | impl adex_outpace::Trait for Runtime { 183 | type Event = Event; 184 | } 185 | 186 | construct_runtime!( 187 | pub enum Runtime with Log(InternalLog: DigestItem) where 188 | Block = Block, 189 | UncheckedExtrinsic = UncheckedExtrinsic 190 | { 191 | System: system::{default, Log(ChangesTrieRoot)}, 192 | Timestamp: timestamp::{Module, Call, Storage, Config, Inherent}, 193 | Consensus: consensus::{Module, Call, Storage, Config, Log(AuthoritiesChange), Inherent}, 194 | Balances: balances, 195 | AdExOUTPACE: adex_outpace::{Module, Call, Storage, Event}, 196 | UpgradeKey: upgrade_key, 197 | } 198 | ); 199 | 200 | /// The type used as a helper for interpreting the sender of transactions. 201 | type Context = balances::ChainContext; 202 | /// The address format for describing accounts. 203 | type Address = balances::Address; 204 | /// Block header type as expected by this runtime. 205 | pub type Header = generic::Header; 206 | /// Block type as expected by this runtime. 207 | pub type Block = generic::Block; 208 | /// BlockId type as expected by this runtime. 209 | pub type BlockId = generic::BlockId; 210 | /// Unchecked extrinsic type as expected by this runtime. 211 | pub type UncheckedExtrinsic = generic::UncheckedMortalExtrinsic; 212 | /// Extrinsic type that has already been checked. 213 | pub type CheckedExtrinsic = generic::CheckedExtrinsic; 214 | /// Executive: handles dispatch to the various modules. 215 | pub type Executive = executive::Executive; 216 | 217 | #[cfg(feature = "std")] 218 | use opaque::Block as GBlock; 219 | 220 | #[cfg(feature = "std")] 221 | pub struct ClientWithApi { 222 | call: ::std::ptr::NonNull>, 223 | commit_on_success: ::std::cell::RefCell, 224 | initialised_block: ::std::cell::RefCell>, 225 | changes: ::std::cell::RefCell, 226 | } 227 | 228 | #[cfg(feature = "std")] 229 | unsafe impl Send for ClientWithApi {} 230 | #[cfg(feature = "std")] 231 | unsafe impl Sync for ClientWithApi {} 232 | 233 | #[cfg(feature = "std")] 234 | impl ApiExt for ClientWithApi { 235 | fn map_api_result Result, R, E>(&self, map_call: F) -> Result { 236 | *self.commit_on_success.borrow_mut() = false; 237 | let res = map_call(self); 238 | *self.commit_on_success.borrow_mut() = true; 239 | 240 | self.commit_on_ok(&res); 241 | 242 | res 243 | } 244 | } 245 | 246 | #[cfg(feature = "std")] 247 | impl client::runtime_api::ConstructRuntimeApi for ClientWithApi { 248 | fn construct_runtime_api<'a, T: client::runtime_api::CallApiAt>(call: &'a T) -> ApiRef<'a, Self> { 249 | ClientWithApi { 250 | call: unsafe { 251 | ::std::ptr::NonNull::new_unchecked( 252 | ::std::mem::transmute( 253 | call as &client::runtime_api::CallApiAt 254 | ) 255 | ) 256 | }, 257 | commit_on_success: true.into(), 258 | initialised_block: None.into(), 259 | changes: Default::default(), 260 | }.into() 261 | } 262 | } 263 | 264 | #[cfg(feature = "std")] 265 | impl ClientWithApi { 266 | fn call_api_at( 267 | &self, 268 | at: &GBlockId, 269 | function: &'static str, 270 | args: &A 271 | ) -> client::error::Result { 272 | let res = unsafe { 273 | self.call.as_ref().call_api_at( 274 | at, 275 | function, 276 | args.encode(), 277 | &mut *self.changes.borrow_mut(), 278 | &mut *self.initialised_block.borrow_mut() 279 | ).and_then(|r| 280 | R::decode(&mut &r[..]) 281 | .ok_or_else(|| 282 | client::error::ErrorKind::CallResultDecode(function).into() 283 | ) 284 | ) 285 | }; 286 | 287 | self.commit_on_ok(&res); 288 | res 289 | } 290 | 291 | fn commit_on_ok(&self, res: &Result) { 292 | if *self.commit_on_success.borrow() { 293 | if res.is_err() { 294 | self.changes.borrow_mut().discard_prospective(); 295 | } else { 296 | self.changes.borrow_mut().commit_prospective(); 297 | } 298 | } 299 | } 300 | } 301 | 302 | #[cfg(feature = "std")] 303 | type GBlockId = generic::BlockId; 304 | 305 | #[cfg(feature = "std")] 306 | impl client::runtime_api::Core for ClientWithApi { 307 | fn version(&self, at: &GBlockId) -> Result { 308 | self.call_api_at(at, "version", &()) 309 | } 310 | 311 | fn authorities(&self, at: &GBlockId) -> Result, client::error::Error> { 312 | self.call_api_at(at, "authorities", &()) 313 | } 314 | 315 | fn execute_block(&self, at: &GBlockId, block: &GBlock) -> Result<(), client::error::Error> { 316 | self.call_api_at(at, "execute_block", block) 317 | } 318 | 319 | fn initialise_block(&self, at: &GBlockId, header: &::Header) -> Result<(), client::error::Error> { 320 | self.call_api_at(at, "initialise_block", header) 321 | } 322 | } 323 | 324 | #[cfg(feature = "std")] 325 | impl client::block_builder::api::BlockBuilder for ClientWithApi { 326 | fn apply_extrinsic(&self, at: &GBlockId, extrinsic: &::Extrinsic) -> Result { 327 | self.call_api_at(at, "apply_extrinsic", extrinsic) 328 | } 329 | 330 | fn finalise_block(&self, at: &GBlockId) -> Result<::Header, client::error::Error> { 331 | self.call_api_at(at, "finalise_block", &()) 332 | } 333 | 334 | fn inherent_extrinsics( 335 | &self, at: &GBlockId, inherent: &Inherent 336 | ) -> Result, client::error::Error> { 337 | self.call_api_at(at, "inherent_extrinsics", inherent) 338 | } 339 | 340 | fn check_inherents(&self, at: &GBlockId, block: &GBlock, inherent: &Inherent) -> Result, client::error::Error> { 341 | self.call_api_at(at, "check_inherents", &(block, inherent)) 342 | } 343 | 344 | fn random_seed(&self, at: &GBlockId) -> Result<::Hash, client::error::Error> { 345 | self.call_api_at(at, "random_seed", &()) 346 | } 347 | } 348 | 349 | #[cfg(feature = "std")] 350 | impl client::runtime_api::TaggedTransactionQueue for ClientWithApi { 351 | fn validate_transaction( 352 | &self, 353 | at: &GBlockId, 354 | utx: &::Extrinsic 355 | ) -> Result { 356 | self.call_api_at(at, "validate_transaction", utx) 357 | } 358 | } 359 | 360 | #[cfg(feature = "std")] 361 | impl client::runtime_api::Metadata for ClientWithApi { 362 | fn metadata(&self, at: &GBlockId) -> Result { 363 | self.call_api_at(at, "metadata", &()) 364 | } 365 | } 366 | 367 | // Implement our runtime API endpoints. This is just a bunch of proxying. 368 | impl_runtime_apis! { 369 | impl Core for Runtime { 370 | fn version() -> RuntimeVersion { 371 | VERSION 372 | } 373 | 374 | fn authorities() -> Vec { 375 | Consensus::authorities() 376 | } 377 | 378 | fn execute_block(block: Block) { 379 | Executive::execute_block(block) 380 | } 381 | 382 | fn initialise_block(header: ::Header) { 383 | Executive::initialise_block(&header) 384 | } 385 | } 386 | 387 | impl Metadata for Runtime { 388 | fn metadata() -> OpaqueMetadata { 389 | Runtime::metadata().into() 390 | } 391 | } 392 | 393 | impl BlockBuilder for Runtime { 394 | fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyResult { 395 | Executive::apply_extrinsic(extrinsic) 396 | } 397 | 398 | fn finalise_block() -> ::Header { 399 | Executive::finalise_block() 400 | } 401 | 402 | fn inherent_extrinsics(data: InherentData) -> Vec { 403 | data.create_inherent_extrinsics() 404 | } 405 | 406 | fn check_inherents(block: Block, data: InherentData) -> Result<(), InherentError> { 407 | data.check_inherents(block) 408 | } 409 | 410 | fn random_seed() -> ::Hash { 411 | System::random_seed() 412 | } 413 | } 414 | 415 | impl TaggedTransactionQueue for Runtime { 416 | fn validate_transaction(tx: ::Extrinsic) -> TransactionValidity { 417 | Executive::validate_transaction(tx) 418 | } 419 | } 420 | } 421 | -------------------------------------------------------------------------------- /runtime/wasm/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "adex-protocol-substrate-runtime" 5 | version = "0.9.0" 6 | dependencies = [ 7 | "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", 8 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 9 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 10 | "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 11 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 12 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 13 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 14 | "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", 15 | "srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)", 16 | "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", 17 | "srml-executive 0.1.0 (git+https://github.com/paritytech/substrate)", 18 | "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", 19 | "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", 20 | "srml-timestamp 0.1.0 (git+https://github.com/paritytech/substrate)", 21 | "srml-upgrade-key 0.1.0 (git+https://github.com/paritytech/substrate)", 22 | "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", 23 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 24 | ] 25 | 26 | [[package]] 27 | name = "arrayvec" 28 | version = "0.4.7" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | dependencies = [ 31 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 32 | ] 33 | 34 | [[package]] 35 | name = "backtrace" 36 | version = "0.3.9" 37 | source = "registry+https://github.com/rust-lang/crates.io-index" 38 | dependencies = [ 39 | "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", 40 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 41 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 42 | "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 43 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 44 | ] 45 | 46 | [[package]] 47 | name = "backtrace-sys" 48 | version = "0.1.24" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | dependencies = [ 51 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 52 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 53 | ] 54 | 55 | [[package]] 56 | name = "base58" 57 | version = "0.1.0" 58 | source = "registry+https://github.com/rust-lang/crates.io-index" 59 | 60 | [[package]] 61 | name = "bitflags" 62 | version = "1.0.4" 63 | source = "registry+https://github.com/rust-lang/crates.io-index" 64 | 65 | [[package]] 66 | name = "blake2-rfc" 67 | version = "0.2.18" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | dependencies = [ 70 | "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", 71 | "constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 72 | ] 73 | 74 | [[package]] 75 | name = "byteorder" 76 | version = "1.2.7" 77 | source = "registry+https://github.com/rust-lang/crates.io-index" 78 | 79 | [[package]] 80 | name = "bytes" 81 | version = "0.4.11" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | dependencies = [ 84 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 85 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 86 | ] 87 | 88 | [[package]] 89 | name = "cc" 90 | version = "1.0.25" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | 93 | [[package]] 94 | name = "cfg-if" 95 | version = "0.1.6" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | 98 | [[package]] 99 | name = "chrono" 100 | version = "0.4.6" 101 | source = "registry+https://github.com/rust-lang/crates.io-index" 102 | dependencies = [ 103 | "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 104 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 105 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 106 | ] 107 | 108 | [[package]] 109 | name = "cloudabi" 110 | version = "0.0.3" 111 | source = "registry+https://github.com/rust-lang/crates.io-index" 112 | dependencies = [ 113 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 114 | ] 115 | 116 | [[package]] 117 | name = "constant_time_eq" 118 | version = "0.1.3" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | 121 | [[package]] 122 | name = "crossbeam" 123 | version = "0.2.12" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | 126 | [[package]] 127 | name = "crossbeam-deque" 128 | version = "0.2.0" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | dependencies = [ 131 | "crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 132 | "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 133 | ] 134 | 135 | [[package]] 136 | name = "crossbeam-deque" 137 | version = "0.6.2" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | dependencies = [ 140 | "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 141 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 142 | ] 143 | 144 | [[package]] 145 | name = "crossbeam-epoch" 146 | version = "0.3.1" 147 | source = "registry+https://github.com/rust-lang/crates.io-index" 148 | dependencies = [ 149 | "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", 150 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 151 | "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 152 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 153 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 154 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 155 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 156 | ] 157 | 158 | [[package]] 159 | name = "crossbeam-epoch" 160 | version = "0.6.1" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | dependencies = [ 163 | "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", 164 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 165 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 166 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 167 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 168 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 169 | ] 170 | 171 | [[package]] 172 | name = "crossbeam-utils" 173 | version = "0.2.2" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | dependencies = [ 176 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 177 | ] 178 | 179 | [[package]] 180 | name = "crossbeam-utils" 181 | version = "0.6.1" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | dependencies = [ 184 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 185 | ] 186 | 187 | [[package]] 188 | name = "crunchy" 189 | version = "0.1.6" 190 | source = "registry+https://github.com/rust-lang/crates.io-index" 191 | 192 | [[package]] 193 | name = "crunchy" 194 | version = "0.2.1" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | 197 | [[package]] 198 | name = "elastic-array" 199 | version = "0.10.0" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | dependencies = [ 202 | "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 203 | ] 204 | 205 | [[package]] 206 | name = "environmental" 207 | version = "1.0.0" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | 210 | [[package]] 211 | name = "error-chain" 212 | version = "0.12.0" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | dependencies = [ 215 | "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 216 | ] 217 | 218 | [[package]] 219 | name = "fixed-hash" 220 | version = "0.3.0" 221 | source = "registry+https://github.com/rust-lang/crates.io-index" 222 | dependencies = [ 223 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 224 | "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 225 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 226 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 227 | "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 228 | "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 229 | ] 230 | 231 | [[package]] 232 | name = "fnv" 233 | version = "1.0.6" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | 236 | [[package]] 237 | name = "foreign-types" 238 | version = "0.3.2" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | dependencies = [ 241 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 242 | ] 243 | 244 | [[package]] 245 | name = "foreign-types-shared" 246 | version = "0.1.1" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | 249 | [[package]] 250 | name = "fuchsia-zircon" 251 | version = "0.3.3" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | dependencies = [ 254 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 255 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 256 | ] 257 | 258 | [[package]] 259 | name = "fuchsia-zircon-sys" 260 | version = "0.3.3" 261 | source = "registry+https://github.com/rust-lang/crates.io-index" 262 | 263 | [[package]] 264 | name = "futures" 265 | version = "0.1.25" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | 268 | [[package]] 269 | name = "gcc" 270 | version = "0.3.55" 271 | source = "registry+https://github.com/rust-lang/crates.io-index" 272 | 273 | [[package]] 274 | name = "hash-db" 275 | version = "0.9.0" 276 | source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" 277 | 278 | [[package]] 279 | name = "hash256-std-hasher" 280 | version = "0.9.0" 281 | source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" 282 | dependencies = [ 283 | "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 284 | ] 285 | 286 | [[package]] 287 | name = "heapsize" 288 | version = "0.4.2" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | dependencies = [ 291 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 292 | ] 293 | 294 | [[package]] 295 | name = "hex-literal" 296 | version = "0.1.1" 297 | source = "registry+https://github.com/rust-lang/crates.io-index" 298 | dependencies = [ 299 | "hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 300 | "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 301 | ] 302 | 303 | [[package]] 304 | name = "hex-literal-impl" 305 | version = "0.1.1" 306 | source = "registry+https://github.com/rust-lang/crates.io-index" 307 | dependencies = [ 308 | "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 309 | ] 310 | 311 | [[package]] 312 | name = "httparse" 313 | version = "1.3.3" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | 316 | [[package]] 317 | name = "idna" 318 | version = "0.1.5" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | dependencies = [ 321 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 322 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 323 | "unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 324 | ] 325 | 326 | [[package]] 327 | name = "integer-sqrt" 328 | version = "0.1.0" 329 | source = "git+https://github.com/paritytech/integer-sqrt-rs.git#886e9cb983c46498003878afe965d55caa762025" 330 | 331 | [[package]] 332 | name = "integer-sqrt" 333 | version = "0.1.2" 334 | source = "registry+https://github.com/rust-lang/crates.io-index" 335 | 336 | [[package]] 337 | name = "iovec" 338 | version = "0.1.2" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | dependencies = [ 341 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 342 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 343 | ] 344 | 345 | [[package]] 346 | name = "itoa" 347 | version = "0.4.3" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | 350 | [[package]] 351 | name = "kernel32-sys" 352 | version = "0.2.2" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | dependencies = [ 355 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 356 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 357 | ] 358 | 359 | [[package]] 360 | name = "kvdb" 361 | version = "0.1.0" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | dependencies = [ 364 | "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 365 | "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 366 | ] 367 | 368 | [[package]] 369 | name = "lazy_static" 370 | version = "0.2.11" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | 373 | [[package]] 374 | name = "lazy_static" 375 | version = "1.2.0" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | 378 | [[package]] 379 | name = "lazycell" 380 | version = "1.2.0" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | 383 | [[package]] 384 | name = "libc" 385 | version = "0.2.44" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | 388 | [[package]] 389 | name = "lock_api" 390 | version = "0.1.5" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | dependencies = [ 393 | "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 394 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 395 | ] 396 | 397 | [[package]] 398 | name = "log" 399 | version = "0.3.9" 400 | source = "registry+https://github.com/rust-lang/crates.io-index" 401 | dependencies = [ 402 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 403 | ] 404 | 405 | [[package]] 406 | name = "log" 407 | version = "0.4.6" 408 | source = "registry+https://github.com/rust-lang/crates.io-index" 409 | dependencies = [ 410 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 411 | ] 412 | 413 | [[package]] 414 | name = "mashup" 415 | version = "0.1.9" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | dependencies = [ 418 | "mashup-impl 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 419 | "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 420 | ] 421 | 422 | [[package]] 423 | name = "mashup-impl" 424 | version = "0.1.9" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | dependencies = [ 427 | "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 428 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 429 | ] 430 | 431 | [[package]] 432 | name = "matches" 433 | version = "0.1.8" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | 436 | [[package]] 437 | name = "memoffset" 438 | version = "0.2.1" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | 441 | [[package]] 442 | name = "memory-db" 443 | version = "0.9.0" 444 | source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" 445 | dependencies = [ 446 | "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", 447 | "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 448 | ] 449 | 450 | [[package]] 451 | name = "memory_units" 452 | version = "0.3.0" 453 | source = "registry+https://github.com/rust-lang/crates.io-index" 454 | 455 | [[package]] 456 | name = "mio" 457 | version = "0.6.16" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | dependencies = [ 460 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 461 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 462 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 463 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 464 | "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 465 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 466 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 467 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 468 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 469 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 470 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 471 | ] 472 | 473 | [[package]] 474 | name = "mio-extras" 475 | version = "2.0.5" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | dependencies = [ 478 | "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 479 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 480 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 481 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 482 | ] 483 | 484 | [[package]] 485 | name = "mio-uds" 486 | version = "0.6.7" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | dependencies = [ 489 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 490 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 491 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 492 | ] 493 | 494 | [[package]] 495 | name = "miow" 496 | version = "0.2.1" 497 | source = "registry+https://github.com/rust-lang/crates.io-index" 498 | dependencies = [ 499 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 500 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 501 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 502 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 503 | ] 504 | 505 | [[package]] 506 | name = "net2" 507 | version = "0.2.33" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | dependencies = [ 510 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 511 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 512 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 513 | ] 514 | 515 | [[package]] 516 | name = "nodrop" 517 | version = "0.1.13" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | 520 | [[package]] 521 | name = "num-integer" 522 | version = "0.1.39" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | dependencies = [ 525 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 526 | ] 527 | 528 | [[package]] 529 | name = "num-traits" 530 | version = "0.2.6" 531 | source = "registry+https://github.com/rust-lang/crates.io-index" 532 | 533 | [[package]] 534 | name = "num_cpus" 535 | version = "1.8.0" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | dependencies = [ 538 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 539 | ] 540 | 541 | [[package]] 542 | name = "openssl" 543 | version = "0.10.15" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | dependencies = [ 546 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 547 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 548 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 549 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 550 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 551 | "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", 552 | ] 553 | 554 | [[package]] 555 | name = "openssl-sys" 556 | version = "0.9.39" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | dependencies = [ 559 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 560 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 561 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 562 | "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 563 | ] 564 | 565 | [[package]] 566 | name = "owning_ref" 567 | version = "0.3.3" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | dependencies = [ 570 | "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 571 | ] 572 | 573 | [[package]] 574 | name = "owning_ref" 575 | version = "0.4.0" 576 | source = "registry+https://github.com/rust-lang/crates.io-index" 577 | dependencies = [ 578 | "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 579 | ] 580 | 581 | [[package]] 582 | name = "parity-bytes" 583 | version = "0.1.0" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | 586 | [[package]] 587 | name = "parity-codec" 588 | version = "2.1.5" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | dependencies = [ 591 | "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", 592 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 593 | ] 594 | 595 | [[package]] 596 | name = "parity-codec-derive" 597 | version = "2.1.0" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | dependencies = [ 600 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 601 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 602 | "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", 603 | ] 604 | 605 | [[package]] 606 | name = "parity-wasm" 607 | version = "0.31.3" 608 | source = "registry+https://github.com/rust-lang/crates.io-index" 609 | dependencies = [ 610 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 611 | ] 612 | 613 | [[package]] 614 | name = "parking_lot" 615 | version = "0.4.8" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | dependencies = [ 618 | "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 619 | "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 620 | ] 621 | 622 | [[package]] 623 | name = "parking_lot" 624 | version = "0.6.4" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | dependencies = [ 627 | "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 628 | "parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 629 | ] 630 | 631 | [[package]] 632 | name = "parking_lot_core" 633 | version = "0.2.14" 634 | source = "registry+https://github.com/rust-lang/crates.io-index" 635 | dependencies = [ 636 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 637 | "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 638 | "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 639 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 640 | ] 641 | 642 | [[package]] 643 | name = "parking_lot_core" 644 | version = "0.3.1" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | dependencies = [ 647 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 648 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 649 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 650 | "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 651 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 652 | ] 653 | 654 | [[package]] 655 | name = "percent-encoding" 656 | version = "1.0.1" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | 659 | [[package]] 660 | name = "pkg-config" 661 | version = "0.3.14" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | 664 | [[package]] 665 | name = "proc-macro-hack" 666 | version = "0.4.1" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | dependencies = [ 669 | "proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 670 | ] 671 | 672 | [[package]] 673 | name = "proc-macro-hack-impl" 674 | version = "0.4.1" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | 677 | [[package]] 678 | name = "proc-macro2" 679 | version = "0.4.24" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | dependencies = [ 682 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 683 | ] 684 | 685 | [[package]] 686 | name = "quote" 687 | version = "0.6.10" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | dependencies = [ 690 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 691 | ] 692 | 693 | [[package]] 694 | name = "rand" 695 | version = "0.4.3" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | dependencies = [ 698 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 699 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 700 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 701 | ] 702 | 703 | [[package]] 704 | name = "rand" 705 | version = "0.5.5" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | dependencies = [ 708 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 709 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 710 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 711 | "rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 712 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 713 | ] 714 | 715 | [[package]] 716 | name = "rand" 717 | version = "0.6.0" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | dependencies = [ 720 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 721 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 722 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 723 | "rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 724 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 725 | "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 726 | "rand_isaac 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 727 | "rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 728 | "rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 729 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 730 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 731 | ] 732 | 733 | [[package]] 734 | name = "rand_chacha" 735 | version = "0.1.0" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | dependencies = [ 738 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 739 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 740 | ] 741 | 742 | [[package]] 743 | name = "rand_core" 744 | version = "0.2.2" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | dependencies = [ 747 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 748 | ] 749 | 750 | [[package]] 751 | name = "rand_core" 752 | version = "0.3.0" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | 755 | [[package]] 756 | name = "rand_hc" 757 | version = "0.1.0" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | dependencies = [ 760 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 761 | ] 762 | 763 | [[package]] 764 | name = "rand_isaac" 765 | version = "0.1.0" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | dependencies = [ 768 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 769 | ] 770 | 771 | [[package]] 772 | name = "rand_pcg" 773 | version = "0.1.1" 774 | source = "registry+https://github.com/rust-lang/crates.io-index" 775 | dependencies = [ 776 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 777 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 778 | ] 779 | 780 | [[package]] 781 | name = "rand_xorshift" 782 | version = "0.1.0" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | dependencies = [ 785 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 786 | ] 787 | 788 | [[package]] 789 | name = "rayon" 790 | version = "0.8.2" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | dependencies = [ 793 | "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 794 | ] 795 | 796 | [[package]] 797 | name = "rayon-core" 798 | version = "1.4.1" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | dependencies = [ 801 | "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 802 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 803 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 804 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 805 | ] 806 | 807 | [[package]] 808 | name = "redox_syscall" 809 | version = "0.1.42" 810 | source = "registry+https://github.com/rust-lang/crates.io-index" 811 | 812 | [[package]] 813 | name = "ring" 814 | version = "0.12.1" 815 | source = "registry+https://github.com/rust-lang/crates.io-index" 816 | dependencies = [ 817 | "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)", 818 | "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 819 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 820 | "rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", 821 | "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 822 | ] 823 | 824 | [[package]] 825 | name = "rustc-demangle" 826 | version = "0.1.9" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | 829 | [[package]] 830 | name = "rustc-hex" 831 | version = "2.0.1" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | 834 | [[package]] 835 | name = "rustc_version" 836 | version = "0.2.3" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | dependencies = [ 839 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 840 | ] 841 | 842 | [[package]] 843 | name = "ryu" 844 | version = "0.2.7" 845 | source = "registry+https://github.com/rust-lang/crates.io-index" 846 | 847 | [[package]] 848 | name = "safe-mix" 849 | version = "1.0.0" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | dependencies = [ 852 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 853 | ] 854 | 855 | [[package]] 856 | name = "scopeguard" 857 | version = "0.3.3" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | 860 | [[package]] 861 | name = "semver" 862 | version = "0.9.0" 863 | source = "registry+https://github.com/rust-lang/crates.io-index" 864 | dependencies = [ 865 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 866 | ] 867 | 868 | [[package]] 869 | name = "semver-parser" 870 | version = "0.7.0" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | 873 | [[package]] 874 | name = "serde" 875 | version = "1.0.80" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | 878 | [[package]] 879 | name = "serde_derive" 880 | version = "1.0.80" 881 | source = "registry+https://github.com/rust-lang/crates.io-index" 882 | dependencies = [ 883 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 884 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 885 | "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)", 886 | ] 887 | 888 | [[package]] 889 | name = "serde_json" 890 | version = "1.0.33" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | dependencies = [ 893 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 894 | "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 895 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 896 | ] 897 | 898 | [[package]] 899 | name = "sha1" 900 | version = "0.6.0" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | 903 | [[package]] 904 | name = "slab" 905 | version = "0.4.1" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | 908 | [[package]] 909 | name = "slog" 910 | version = "2.4.1" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | 913 | [[package]] 914 | name = "slog-async" 915 | version = "2.3.0" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | dependencies = [ 918 | "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 919 | "take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 920 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 921 | ] 922 | 923 | [[package]] 924 | name = "slog-json" 925 | version = "2.2.0" 926 | source = "registry+https://github.com/rust-lang/crates.io-index" 927 | dependencies = [ 928 | "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 929 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 930 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 931 | "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 932 | ] 933 | 934 | [[package]] 935 | name = "slog-scope" 936 | version = "4.0.1" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | dependencies = [ 939 | "crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", 940 | "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 941 | "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 942 | ] 943 | 944 | [[package]] 945 | name = "smallvec" 946 | version = "0.6.6" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | dependencies = [ 949 | "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 950 | ] 951 | 952 | [[package]] 953 | name = "sr-io" 954 | version = "0.1.0" 955 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 956 | dependencies = [ 957 | "environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 958 | "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", 959 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 960 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 961 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 962 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 963 | "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", 964 | "substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)", 965 | ] 966 | 967 | [[package]] 968 | name = "sr-primitives" 969 | version = "0.1.0" 970 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 971 | dependencies = [ 972 | "integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 973 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 974 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 975 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 976 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 977 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 978 | "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 979 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 980 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 981 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 982 | ] 983 | 984 | [[package]] 985 | name = "sr-std" 986 | version = "0.1.0" 987 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 988 | dependencies = [ 989 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 990 | ] 991 | 992 | [[package]] 993 | name = "sr-version" 994 | version = "0.1.0" 995 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 996 | dependencies = [ 997 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 998 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 999 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1000 | "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1001 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1002 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1003 | ] 1004 | 1005 | [[package]] 1006 | name = "srml-balances" 1007 | version = "0.1.0" 1008 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1009 | dependencies = [ 1010 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1011 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1012 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1013 | "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1014 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1015 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 1016 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1017 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1018 | "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", 1019 | "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", 1020 | "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", 1021 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1022 | ] 1023 | 1024 | [[package]] 1025 | name = "srml-consensus" 1026 | version = "0.1.0" 1027 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1028 | dependencies = [ 1029 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1030 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1031 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1032 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1033 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 1034 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1035 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1036 | "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", 1037 | "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", 1038 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1039 | ] 1040 | 1041 | [[package]] 1042 | name = "srml-executive" 1043 | version = "0.1.0" 1044 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1045 | dependencies = [ 1046 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1047 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1048 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1049 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1050 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 1051 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1052 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1053 | "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", 1054 | "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", 1055 | ] 1056 | 1057 | [[package]] 1058 | name = "srml-metadata" 1059 | version = "0.1.0" 1060 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1061 | dependencies = [ 1062 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1063 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1064 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1065 | "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1066 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1067 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1068 | ] 1069 | 1070 | [[package]] 1071 | name = "srml-support" 1072 | version = "0.1.0" 1073 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1074 | dependencies = [ 1075 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1076 | "mashup 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1077 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1078 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1079 | "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1080 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 1081 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1082 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1083 | "srml-metadata 0.1.0 (git+https://github.com/paritytech/substrate)", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "srml-system" 1088 | version = "0.1.0" 1089 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1090 | dependencies = [ 1091 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1092 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1093 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1094 | "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1095 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1096 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 1097 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1098 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1099 | "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", 1100 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1101 | ] 1102 | 1103 | [[package]] 1104 | name = "srml-timestamp" 1105 | version = "0.1.0" 1106 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1107 | dependencies = [ 1108 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1109 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1110 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1111 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1112 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 1113 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1114 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1115 | "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", 1116 | "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", 1117 | "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", 1118 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1119 | ] 1120 | 1121 | [[package]] 1122 | name = "srml-upgrade-key" 1123 | version = "0.1.0" 1124 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1125 | dependencies = [ 1126 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1127 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1128 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1129 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1130 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 1131 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1132 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1133 | "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", 1134 | "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", 1135 | "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", 1136 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1137 | ] 1138 | 1139 | [[package]] 1140 | name = "stable_deref_trait" 1141 | version = "1.1.1" 1142 | source = "registry+https://github.com/rust-lang/crates.io-index" 1143 | 1144 | [[package]] 1145 | name = "static_assertions" 1146 | version = "0.2.5" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | 1149 | [[package]] 1150 | name = "substrate-client" 1151 | version = "0.1.0" 1152 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1153 | dependencies = [ 1154 | "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", 1155 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 1156 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1157 | "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", 1158 | "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1159 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1160 | "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1161 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1162 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1163 | "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1164 | "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1165 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1166 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1167 | "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", 1168 | "substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)", 1169 | "substrate-executor 0.1.0 (git+https://github.com/paritytech/substrate)", 1170 | "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", 1171 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1172 | "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", 1173 | "substrate-telemetry 0.3.0 (git+https://github.com/paritytech/substrate)", 1174 | "substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)", 1175 | ] 1176 | 1177 | [[package]] 1178 | name = "substrate-consensus-common" 1179 | version = "0.1.0" 1180 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1181 | dependencies = [ 1182 | "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", 1183 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1184 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1185 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1186 | "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1187 | "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", 1188 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1189 | "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 1190 | ] 1191 | 1192 | [[package]] 1193 | name = "substrate-executor" 1194 | version = "0.1.0" 1195 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1196 | dependencies = [ 1197 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1198 | "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", 1199 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1200 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1201 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1202 | "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1203 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1204 | "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1205 | "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", 1206 | "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", 1207 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1208 | "substrate-serializer 0.1.0 (git+https://github.com/paritytech/substrate)", 1209 | "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", 1210 | "substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)", 1211 | "wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "substrate-keyring" 1216 | version = "0.1.0" 1217 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1218 | dependencies = [ 1219 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1220 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1221 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1222 | ] 1223 | 1224 | [[package]] 1225 | name = "substrate-primitives" 1226 | version = "0.1.0" 1227 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1228 | dependencies = [ 1229 | "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1230 | "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", 1231 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1232 | "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1233 | "fixed-hash 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1234 | "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", 1235 | "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", 1236 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1237 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1238 | "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1239 | "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", 1240 | "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1241 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1242 | "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1243 | "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", 1244 | "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1245 | "uint 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 1246 | "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1247 | "wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1248 | ] 1249 | 1250 | [[package]] 1251 | name = "substrate-serializer" 1252 | version = "0.1.0" 1253 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1254 | dependencies = [ 1255 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1256 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "substrate-state-machine" 1261 | version = "0.1.0" 1262 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1263 | dependencies = [ 1264 | "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", 1265 | "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1266 | "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1267 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1268 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1269 | "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1270 | "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", 1271 | "substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)", 1272 | "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", 1273 | "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", 1274 | ] 1275 | 1276 | [[package]] 1277 | name = "substrate-telemetry" 1278 | version = "0.3.0" 1279 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1280 | dependencies = [ 1281 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1282 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1283 | "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1284 | "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1285 | "slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1286 | "slog-json 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1287 | "slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1288 | "ws 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", 1289 | ] 1290 | 1291 | [[package]] 1292 | name = "substrate-trie" 1293 | version = "0.4.0" 1294 | source = "git+https://github.com/paritytech/substrate#3a8a3925c5cc9a10cbdd2253391e6956b9026332" 1295 | dependencies = [ 1296 | "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", 1297 | "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", 1298 | "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1299 | "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", 1300 | "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", 1301 | ] 1302 | 1303 | [[package]] 1304 | name = "syn" 1305 | version = "0.14.9" 1306 | source = "registry+https://github.com/rust-lang/crates.io-index" 1307 | dependencies = [ 1308 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 1309 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1310 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1311 | ] 1312 | 1313 | [[package]] 1314 | name = "syn" 1315 | version = "0.15.21" 1316 | source = "registry+https://github.com/rust-lang/crates.io-index" 1317 | dependencies = [ 1318 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 1319 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1320 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1321 | ] 1322 | 1323 | [[package]] 1324 | name = "take_mut" 1325 | version = "0.2.2" 1326 | source = "registry+https://github.com/rust-lang/crates.io-index" 1327 | 1328 | [[package]] 1329 | name = "thread_local" 1330 | version = "0.3.6" 1331 | source = "registry+https://github.com/rust-lang/crates.io-index" 1332 | dependencies = [ 1333 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "time" 1338 | version = "0.1.40" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | dependencies = [ 1341 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1342 | "redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", 1343 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1344 | ] 1345 | 1346 | [[package]] 1347 | name = "tokio" 1348 | version = "0.1.13" 1349 | source = "registry+https://github.com/rust-lang/crates.io-index" 1350 | dependencies = [ 1351 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1352 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1353 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1354 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1355 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1356 | "tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1357 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1358 | "tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1359 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1360 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1361 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1362 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1363 | "tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1364 | "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1365 | "tokio-uds 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 1366 | ] 1367 | 1368 | [[package]] 1369 | name = "tokio-codec" 1370 | version = "0.1.1" 1371 | source = "registry+https://github.com/rust-lang/crates.io-index" 1372 | dependencies = [ 1373 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1374 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1375 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "tokio-current-thread" 1380 | version = "0.1.4" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | dependencies = [ 1383 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1384 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "tokio-executor" 1389 | version = "0.1.5" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | dependencies = [ 1392 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1393 | ] 1394 | 1395 | [[package]] 1396 | name = "tokio-fs" 1397 | version = "0.1.4" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | dependencies = [ 1400 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1401 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1402 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1403 | ] 1404 | 1405 | [[package]] 1406 | name = "tokio-io" 1407 | version = "0.1.10" 1408 | source = "registry+https://github.com/rust-lang/crates.io-index" 1409 | dependencies = [ 1410 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1411 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1412 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1413 | ] 1414 | 1415 | [[package]] 1416 | name = "tokio-reactor" 1417 | version = "0.1.7" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | dependencies = [ 1420 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1421 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1422 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1423 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1424 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1425 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1426 | "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1427 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1428 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1429 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1430 | ] 1431 | 1432 | [[package]] 1433 | name = "tokio-tcp" 1434 | version = "0.1.2" 1435 | source = "registry+https://github.com/rust-lang/crates.io-index" 1436 | dependencies = [ 1437 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1438 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1439 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1440 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1441 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1442 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1443 | ] 1444 | 1445 | [[package]] 1446 | name = "tokio-threadpool" 1447 | version = "0.1.9" 1448 | source = "registry+https://github.com/rust-lang/crates.io-index" 1449 | dependencies = [ 1450 | "crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 1451 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1452 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1453 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1454 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1455 | "rand 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 1456 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1457 | ] 1458 | 1459 | [[package]] 1460 | name = "tokio-timer" 1461 | version = "0.2.8" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | dependencies = [ 1464 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1465 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1466 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1467 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1468 | ] 1469 | 1470 | [[package]] 1471 | name = "tokio-udp" 1472 | version = "0.1.3" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | dependencies = [ 1475 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1476 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1477 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1478 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1479 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1480 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1481 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1482 | ] 1483 | 1484 | [[package]] 1485 | name = "tokio-uds" 1486 | version = "0.2.4" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | dependencies = [ 1489 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1490 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1491 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1492 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1493 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1494 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1495 | "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", 1496 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1497 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1498 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1499 | ] 1500 | 1501 | [[package]] 1502 | name = "trie-db" 1503 | version = "0.9.0" 1504 | source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" 1505 | dependencies = [ 1506 | "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 1507 | "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", 1508 | "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 1509 | "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1510 | ] 1511 | 1512 | [[package]] 1513 | name = "trie-root" 1514 | version = "0.9.0" 1515 | source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" 1516 | dependencies = [ 1517 | "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", 1518 | ] 1519 | 1520 | [[package]] 1521 | name = "twox-hash" 1522 | version = "1.1.1" 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" 1524 | dependencies = [ 1525 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 1526 | ] 1527 | 1528 | [[package]] 1529 | name = "uint" 1530 | version = "0.5.0" 1531 | source = "registry+https://github.com/rust-lang/crates.io-index" 1532 | dependencies = [ 1533 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1534 | "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1535 | "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1536 | ] 1537 | 1538 | [[package]] 1539 | name = "unicode-bidi" 1540 | version = "0.3.4" 1541 | source = "registry+https://github.com/rust-lang/crates.io-index" 1542 | dependencies = [ 1543 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1544 | ] 1545 | 1546 | [[package]] 1547 | name = "unicode-normalization" 1548 | version = "0.1.7" 1549 | source = "registry+https://github.com/rust-lang/crates.io-index" 1550 | 1551 | [[package]] 1552 | name = "unicode-xid" 1553 | version = "0.1.0" 1554 | source = "registry+https://github.com/rust-lang/crates.io-index" 1555 | 1556 | [[package]] 1557 | name = "unreachable" 1558 | version = "1.0.0" 1559 | source = "registry+https://github.com/rust-lang/crates.io-index" 1560 | dependencies = [ 1561 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1562 | ] 1563 | 1564 | [[package]] 1565 | name = "untrusted" 1566 | version = "0.5.1" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | 1569 | [[package]] 1570 | name = "url" 1571 | version = "1.7.2" 1572 | source = "registry+https://github.com/rust-lang/crates.io-index" 1573 | dependencies = [ 1574 | "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1575 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1576 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "vcpkg" 1581 | version = "0.2.6" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | 1584 | [[package]] 1585 | name = "void" 1586 | version = "1.0.2" 1587 | source = "registry+https://github.com/rust-lang/crates.io-index" 1588 | 1589 | [[package]] 1590 | name = "wasmi" 1591 | version = "0.4.2" 1592 | source = "registry+https://github.com/rust-lang/crates.io-index" 1593 | dependencies = [ 1594 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1595 | "memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1596 | "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", 1597 | ] 1598 | 1599 | [[package]] 1600 | name = "winapi" 1601 | version = "0.2.8" 1602 | source = "registry+https://github.com/rust-lang/crates.io-index" 1603 | 1604 | [[package]] 1605 | name = "winapi" 1606 | version = "0.3.6" 1607 | source = "registry+https://github.com/rust-lang/crates.io-index" 1608 | dependencies = [ 1609 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1610 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1611 | ] 1612 | 1613 | [[package]] 1614 | name = "winapi-build" 1615 | version = "0.1.1" 1616 | source = "registry+https://github.com/rust-lang/crates.io-index" 1617 | 1618 | [[package]] 1619 | name = "winapi-i686-pc-windows-gnu" 1620 | version = "0.4.0" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | 1623 | [[package]] 1624 | name = "winapi-x86_64-pc-windows-gnu" 1625 | version = "0.4.0" 1626 | source = "registry+https://github.com/rust-lang/crates.io-index" 1627 | 1628 | [[package]] 1629 | name = "ws" 1630 | version = "0.7.9" 1631 | source = "registry+https://github.com/rust-lang/crates.io-index" 1632 | dependencies = [ 1633 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1634 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1635 | "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1636 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1637 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1638 | "mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 1639 | "openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)", 1640 | "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1641 | "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 1642 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1643 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 1644 | ] 1645 | 1646 | [[package]] 1647 | name = "ws2_32-sys" 1648 | version = "0.2.1" 1649 | source = "registry+https://github.com/rust-lang/crates.io-index" 1650 | dependencies = [ 1651 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1652 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1653 | ] 1654 | 1655 | [metadata] 1656 | "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" 1657 | "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" 1658 | "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0" 1659 | "checksum base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" 1660 | "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" 1661 | "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" 1662 | "checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" 1663 | "checksum bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "40ade3d27603c2cb345eb0912aec461a6dec7e06a4ae48589904e808335c7afa" 1664 | "checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" 1665 | "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" 1666 | "checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" 1667 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1668 | "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e" 1669 | "checksum crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be" 1670 | "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" 1671 | "checksum crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4fe1b6f945f824c7a25afe44f62e25d714c0cc523f8e99d8db5cd1026e1269d3" 1672 | "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" 1673 | "checksum crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" 1674 | "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" 1675 | "checksum crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c55913cc2799171a550e307918c0a360e8c16004820291bf3b638969b4a01816" 1676 | "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" 1677 | "checksum crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c240f247c278fa08a6d4820a6a222bfc6e0d999e51ba67be94f44c905b2161f2" 1678 | "checksum elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" 1679 | "checksum environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db746025e3ea695bfa0ae744dbacd5fcfc8db51b9760cf8bd0ab69708bb93c49" 1680 | "checksum error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07e791d3be96241c77c43846b665ef1384606da2cd2a48730abe606a12906e02" 1681 | "checksum fixed-hash 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a557e80084b05c32b455963ff565a9de6f2866da023d6671705c6aff6f65e01c" 1682 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1683 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1684 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1685 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1686 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1687 | "checksum futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b" 1688 | "checksum gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)" = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" 1689 | "checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" 1690 | "checksum hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)" = "" 1691 | "checksum heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" 1692 | "checksum hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4da5f0e01bd8a71a224a4eedecaacfcabda388dbb7a80faf04d3514287572d95" 1693 | "checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" 1694 | "checksum httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" 1695 | "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" 1696 | "checksum integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)" = "" 1697 | "checksum integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ea155abb3ba6f382a75f1418988c05fe82959ed9ce727de427f9cfd425b0c903" 1698 | "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" 1699 | "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" 1700 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1701 | "checksum kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "72ae89206cea31c32014b39d5a454b96135894221610dbfd19cf4d2d044fa546" 1702 | "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" 1703 | "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" 1704 | "checksum lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddba4c30a78328befecec92fc94970e53b3ae385827d28620f0f5bb2493081e0" 1705 | "checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311" 1706 | "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" 1707 | "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" 1708 | "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" 1709 | "checksum mashup 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f2d82b34c7fb11bb41719465c060589e291d505ca4735ea30016a91f6fc79c3b" 1710 | "checksum mashup-impl 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "aa607bfb674b4efb310512527d64266b065de3f894fc52f84efcbf7eaa5965fb" 1711 | "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 1712 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" 1713 | "checksum memory-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" 1714 | "checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" 1715 | "checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432" 1716 | "checksum mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "46e73a04c2fa6250b8d802134d56d554a9ec2922bf977777c805ea5def61ce40" 1717 | "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" 1718 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1719 | "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 1720 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" 1721 | "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" 1722 | "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" 1723 | "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" 1724 | "checksum openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "5e1309181cdcbdb51bc3b6bedb33dfac2a83b3d585033d3f6d9e22e8c1928613" 1725 | "checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106" 1726 | "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" 1727 | "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" 1728 | "checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" 1729 | "checksum parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dca389ea5e1632c89b2ce54f7e2b4a8a8c9d278042222a91e0bf95451218cb4c" 1730 | "checksum parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffa42c2cb493b60b12c75b26e8c94cb734af4df4d7f2cc229dc04c1953dac189" 1731 | "checksum parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" 1732 | "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" 1733 | "checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" 1734 | "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" 1735 | "checksum parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" 1736 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1737 | "checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" 1738 | "checksum proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c725b36c99df7af7bf9324e9c999b9e37d92c8f8caf106d82e1d7953218d2d8" 1739 | "checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a" 1740 | "checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09" 1741 | "checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c" 1742 | "checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd" 1743 | "checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c" 1744 | "checksum rand 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de3f08319b5395bd19b70e73c4c465329495db02dafeb8ca711a20f1c2bd058c" 1745 | "checksum rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "771b009e3a508cb67e8823dda454aaa5368c7bc1c16829fb77d3e980440dd34a" 1746 | "checksum rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372" 1747 | "checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db" 1748 | "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1749 | "checksum rand_isaac 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2d6ecfe9ebf36acd47a49d150990b047a5f7db0a7236ee2414b7ff5cc1097c7b" 1750 | "checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05" 1751 | "checksum rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effa3fcaa47e18db002bdde6060944b6d2f9cfd8db471c30e873448ad9187be3" 1752 | "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" 1753 | "checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" 1754 | "checksum redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "cf8fb82a4d1c9b28f1c26c574a5b541f5ffb4315f6c9a791fa47b6a04438fe93" 1755 | "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" 1756 | "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" 1757 | "checksum rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "403bb3a286107a04825a5f82e1270acc1e14028d3d554d7a1e08914549575ab8" 1758 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1759 | "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" 1760 | "checksum safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f7bf422d23a88c16d5090d455f182bc99c60af4df6a345c63428acf5129e347" 1761 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" 1762 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1763 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1764 | "checksum serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef" 1765 | "checksum serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "225de307c6302bec3898c51ca302fc94a7a1697ef0845fcee6448f33c032249c" 1766 | "checksum serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = "c37ccd6be3ed1fdf419ee848f7c758eb31b054d7cd3ae3600e3bae0adf569811" 1767 | "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" 1768 | "checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" 1769 | "checksum slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1a2eec401952cd7b12a84ea120e2d57281329940c3f93c2bf04f462539508e" 1770 | "checksum slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e544d16c6b230d84c866662fe55e31aacfca6ae71e6fc49ae9a311cb379bfc2f" 1771 | "checksum slog-json 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddd14b8df2df39378b3e933c79784350bf715b11444d99f903df0253bbe524e5" 1772 | "checksum slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "053344c94c0e2b22da6305efddb698d7c485809427cf40555dc936085f67a9df" 1773 | "checksum smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "622df2d454c29a4d89b30dc3b27b42d7d90d6b9e587dbf8f67652eb7514da484" 1774 | "checksum sr-io 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1775 | "checksum sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1776 | "checksum sr-std 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1777 | "checksum sr-version 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1778 | "checksum srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1779 | "checksum srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1780 | "checksum srml-executive 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1781 | "checksum srml-metadata 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1782 | "checksum srml-support 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1783 | "checksum srml-system 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1784 | "checksum srml-timestamp 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1785 | "checksum srml-upgrade-key 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1786 | "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" 1787 | "checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" 1788 | "checksum substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1789 | "checksum substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1790 | "checksum substrate-executor 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1791 | "checksum substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1792 | "checksum substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1793 | "checksum substrate-serializer 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1794 | "checksum substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)" = "" 1795 | "checksum substrate-telemetry 0.3.0 (git+https://github.com/paritytech/substrate)" = "" 1796 | "checksum substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)" = "" 1797 | "checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" 1798 | "checksum syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)" = "816b7af21405b011a23554ea2dc3f6576dc86ca557047c34098c1d741f10f823" 1799 | "checksum take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" 1800 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 1801 | "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" 1802 | "checksum tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "a7817d4c98cc5be21360b3b37d6036fe9b7aefa5b7a201b7b16ff33423822f7d" 1803 | "checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" 1804 | "checksum tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "331c8acc267855ec06eb0c94618dcbbfea45bed2d20b77252940095273fb58f6" 1805 | "checksum tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c117b6cf86bb730aab4834f10df96e4dd586eff2c3c27d3781348da49e255bde" 1806 | "checksum tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "60ae25f6b17d25116d2cba342083abe5255d3c2c79cb21ea11aa049c53bf7c75" 1807 | "checksum tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "7392fe0a70d5ce0c882c4778116c519bd5dbaa8a7c3ae3d04578b3afafdcda21" 1808 | "checksum tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "502b625acb4ee13cbb3b90b8ca80e0addd263ddacf6931666ef751e610b07fb5" 1809 | "checksum tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad235e9dadd126b2d47f6736f65aa1fdcd6420e66ca63f44177bc78df89f912" 1810 | "checksum tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "56c5556262383032878afad66943926a1d1f0967f17e94bd7764ceceb3b70e7f" 1811 | "checksum tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "4f37f0111d76cc5da132fe9bc0590b9b9cfd079bc7e75ac3846278430a299ff8" 1812 | "checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" 1813 | "checksum tokio-uds 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "99ce87382f6c1a24b513a72c048b2c8efe66cb5161c9061d00bee510f08dc168" 1814 | "checksum trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" 1815 | "checksum trie-root 0.9.0 (git+https://github.com/paritytech/trie)" = "" 1816 | "checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" 1817 | "checksum uint 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "082df6964410f6aa929a61ddfafc997e4f32c62c22490e439ac351cec827f436" 1818 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1819 | "checksum unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25" 1820 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1821 | "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" 1822 | "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" 1823 | "checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" 1824 | "checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" 1825 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1826 | "checksum wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8a60b9508cff2b7c27ed41200dd668806280740fadc8c88440e9c88625e84f1a" 1827 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1828 | "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" 1829 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1830 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1831 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1832 | "checksum ws 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)" = "329d3e6dd450a9c5c73024e1047f0be7e24121a68484eb0b5368977bee3cf8c3" 1833 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 1834 | -------------------------------------------------------------------------------- /runtime/wasm/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "adex-protocol-substrate-runtime" 3 | version = "0.9.0" 4 | authors = ["Parity Technologies "] 5 | 6 | [lib] 7 | crate-type = ["cdylib"] 8 | 9 | [dependencies] 10 | integer-sqrt = { git = "https://github.com/paritytech/integer-sqrt-rs.git" } 11 | safe-mix = { version = "1.0", default-features = false} 12 | parity-codec-derive = { version = "^2.1" } 13 | parity-codec = { version = "^2.1", default-features = false } 14 | substrate-primitives = { git = "https://github.com/paritytech/substrate", default-features = false } 15 | substrate-client = { git = "https://github.com/paritytech/substrate", default-features = false } 16 | sr-std = { git = "https://github.com/paritytech/substrate", default-features = false } 17 | sr-io = { git = "https://github.com/paritytech/substrate", default-features = false } 18 | srml-support = { git = "https://github.com/paritytech/substrate", default-features = false } 19 | srml-balances = { git = "https://github.com/paritytech/substrate", default-features = false } 20 | srml-consensus = { git = "https://github.com/paritytech/substrate", default-features = false } 21 | srml-executive = { git = "https://github.com/paritytech/substrate", default-features = false } 22 | sr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false } 23 | srml-system = { git = "https://github.com/paritytech/substrate", default-features = false } 24 | srml-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false } 25 | srml-upgrade-key = { git = "https://github.com/paritytech/substrate", default-features = false } 26 | sr-version = { git = "https://github.com/paritytech/substrate", default-features = false } 27 | 28 | [features] 29 | default = [] 30 | std = [ 31 | "safe-mix/std", 32 | "parity-codec/std", 33 | "substrate-primitives/std", 34 | "substrate-client/std", 35 | "sr-std/std", 36 | "sr-io/std", 37 | "srml-support/std", 38 | "srml-balances/std", 39 | "srml-consensus/std", 40 | "srml-executive/std", 41 | "sr-primitives/std", 42 | "srml-system/std", 43 | "srml-timestamp/std", 44 | "srml-upgrade-key/std", 45 | "sr-version/std", 46 | ] 47 | 48 | [profile.release] 49 | panic = "abort" 50 | lto = true 51 | 52 | [workspace] 53 | members = [] 54 | -------------------------------------------------------------------------------- /runtime/wasm/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | if cargo --version | grep -q "nightly"; then 5 | CARGO_CMD="cargo" 6 | else 7 | CARGO_CMD="cargo +nightly" 8 | fi 9 | $CARGO_CMD build --target=wasm32-unknown-unknown --release 10 | for i in adex_protocol_substrate_runtime 11 | do 12 | wasm-gc target/wasm32-unknown-unknown/release/$i.wasm target/wasm32-unknown-unknown/release/$i.compact.wasm 13 | done 14 | -------------------------------------------------------------------------------- /runtime/wasm/src: -------------------------------------------------------------------------------- 1 | ../src -------------------------------------------------------------------------------- /src/chain_spec.rs: -------------------------------------------------------------------------------- 1 | use primitives::{AuthorityId, ed25519}; 2 | use adex_protocol_substrate_runtime::{AccountId, GenesisConfig, ConsensusConfig, TimestampConfig, BalancesConfig, UpgradeKeyConfig}; 3 | use substrate_service; 4 | 5 | // Note this is the URL for the telemetry server 6 | //const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; 7 | 8 | /// Specialised `ChainSpec`. This is a specialisation of the general Substrate ChainSpec type. 9 | pub type ChainSpec = substrate_service::ChainSpec; 10 | 11 | /// The chain specification option. This is expected to come in from the CLI and 12 | /// is little more than one of a number of alternatives which can easily be converted 13 | /// from a string (`--chain=...`) into a `ChainSpec`. 14 | #[derive(Clone, Debug)] 15 | pub enum Alternative { 16 | /// Whatever the current runtime is, with just Alice as an auth. 17 | Development, 18 | /// Whatever the current runtime is, with simple Alice/Bob auths. 19 | LocalTestnet, 20 | } 21 | 22 | impl Alternative { 23 | /// Get an actual chain config from one of the alternatives. 24 | pub(crate) fn load(self) -> Result { 25 | Ok(match self { 26 | Alternative::Development => ChainSpec::from_genesis( 27 | "Development", 28 | "development", 29 | || testnet_genesis(vec![ 30 | ed25519::Pair::from_seed(b"Alice ").public().into(), 31 | ], vec![ 32 | ed25519::Pair::from_seed(b"Alice ").public().0.into(), 33 | ], 34 | ed25519::Pair::from_seed(b"Alice ").public().0.into() 35 | ), 36 | vec![], 37 | None, 38 | None, 39 | None, 40 | None 41 | ), 42 | Alternative::LocalTestnet => ChainSpec::from_genesis( 43 | "Local Testnet", 44 | "local_testnet", 45 | || testnet_genesis(vec![ 46 | ed25519::Pair::from_seed(b"Alice ").public().into(), 47 | ed25519::Pair::from_seed(b"Bob ").public().into(), 48 | ], vec![ 49 | ed25519::Pair::from_seed(b"Alice ").public().0.into(), 50 | ed25519::Pair::from_seed(b"Bob ").public().0.into(), 51 | ed25519::Pair::from_seed(b"Charlie ").public().0.into(), 52 | ed25519::Pair::from_seed(b"Dave ").public().0.into(), 53 | ed25519::Pair::from_seed(b"Eve ").public().0.into(), 54 | ed25519::Pair::from_seed(b"Ferdie ").public().0.into(), 55 | ], 56 | ed25519::Pair::from_seed(b"Alice ").public().0.into() 57 | ), 58 | vec![], 59 | None, 60 | None, 61 | None, 62 | None 63 | ), 64 | }) 65 | } 66 | 67 | pub(crate) fn from(s: &str) -> Option { 68 | match s { 69 | "dev" => Some(Alternative::Development), 70 | "local" => Some(Alternative::LocalTestnet), 71 | _ => None, 72 | } 73 | } 74 | } 75 | 76 | fn testnet_genesis(initial_authorities: Vec, endowed_accounts: Vec, upgrade_key: AccountId) -> GenesisConfig { 77 | GenesisConfig { 78 | consensus: Some(ConsensusConfig { 79 | code: include_bytes!("../runtime/wasm/target/wasm32-unknown-unknown/release/adex_protocol_substrate_runtime.compact.wasm").to_vec(), 80 | authorities: initial_authorities.clone(), 81 | _genesis_phantom_data: Default::default(), 82 | }), 83 | system: None, 84 | timestamp: Some(TimestampConfig { 85 | period: 5, // 5 second block time. 86 | _genesis_phantom_data: Default::default(), 87 | }), 88 | balances: Some(BalancesConfig { 89 | transaction_base_fee: 1, 90 | transaction_byte_fee: 0, 91 | existential_deposit: 500, 92 | transfer_fee: 0, 93 | creation_fee: 0, 94 | reclaim_rebate: 0, 95 | balances: endowed_accounts.iter().map(|&k|(k, (1 << 60))).collect(), 96 | _genesis_phantom_data: Default::default(), 97 | }), 98 | upgrade_key: Some(UpgradeKeyConfig { 99 | key: upgrade_key, 100 | _genesis_phantom_data: Default::default(), 101 | }), 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /src/cli.rs: -------------------------------------------------------------------------------- 1 | use service; 2 | use futures::{future, Future, sync::oneshot}; 3 | use std::cell::RefCell; 4 | use tokio::runtime::Runtime; 5 | pub use substrate_cli::{VersionInfo, IntoExit, error}; 6 | use substrate_cli::{Action, informant, parse_matches, execute_default, CoreParams}; 7 | use substrate_service::{ServiceFactory, Roles as ServiceRoles}; 8 | use chain_spec; 9 | use std::ops::Deref; 10 | use structopt::StructOpt; 11 | 12 | /// Extend params for Node 13 | #[derive(Debug, StructOpt)] 14 | pub struct NodeParams { 15 | /// Should run as a GRANDPA authority node 16 | #[structopt(long = "grandpa-authority", help = "Run Node as a GRANDPA authority, implies --validator")] 17 | grandpa_authority: bool, 18 | 19 | /// Should run as a GRANDPA authority node only 20 | #[structopt(long = "grandpa-authority-only", help = "Run Node as a GRANDPA authority only, don't as a usual validator, implies --grandpa-authority")] 21 | grandpa_authority_only: bool, 22 | 23 | #[structopt(flatten)] 24 | core: CoreParams 25 | } 26 | 27 | /// Parse command line arguments into service configuration. 28 | pub fn run(args: I, exit: E, version: VersionInfo) -> error::Result<()> where 29 | I: IntoIterator, 30 | T: Into + Clone, 31 | E: IntoExit, 32 | { 33 | let full_version = substrate_service::config::full_version_from_strs( 34 | version.version, 35 | version.commit 36 | ); 37 | 38 | let matches = match NodeParams::clap() 39 | .name(version.executable_name) 40 | .author(version.author) 41 | .about(version.description) 42 | .version(&(full_version + "\n")[..]) 43 | .get_matches_from_safe(args) { 44 | Ok(m) => m, 45 | Err(e) => e.exit(), 46 | }; 47 | 48 | let (spec, mut config) = parse_matches::(load_spec, version, "substrate-node", &matches)?; 49 | 50 | if matches.is_present("grandpa_authority_only") { 51 | config.custom.grandpa_authority = true; 52 | config.custom.grandpa_authority_only = true; 53 | // Authority Setup is only called if validator is set as true 54 | config.roles = ServiceRoles::AUTHORITY; 55 | } else if matches.is_present("grandpa_authority") { 56 | config.custom.grandpa_authority = true; 57 | // Authority Setup is only called if validator is set as true 58 | config.roles = ServiceRoles::AUTHORITY; 59 | } 60 | 61 | match execute_default::(spec, exit, &matches)? { 62 | Action::ExecutedInternally => (), 63 | Action::RunService(exit) => { 64 | info!("Substrate Node"); 65 | info!(" version {}", config.full_version()); 66 | info!(" by Parity Technologies, 2017, 2018"); 67 | info!("Chain specification: {}", config.chain_spec.name()); 68 | info!("Node name: {}", config.name); 69 | info!("Roles: {:?}", config.roles); 70 | let mut runtime = Runtime::new()?; 71 | let executor = runtime.executor(); 72 | match config.roles == ServiceRoles::LIGHT { 73 | true => run_until_exit(&mut runtime, service::Factory::new_light(config, executor)?, exit)?, 74 | false => run_until_exit(&mut runtime, service::Factory::new_full(config, executor)?, exit)?, 75 | } 76 | } 77 | } 78 | 79 | Ok(()) 80 | } 81 | 82 | fn load_spec(id: &str) -> Result, String> { 83 | Ok(match chain_spec::Alternative::from(id) { 84 | Some(spec) => Some(spec.load()?), 85 | None => None, 86 | }) 87 | } 88 | 89 | fn run_until_exit( 90 | runtime: &mut Runtime, 91 | service: T, 92 | e: E, 93 | ) -> error::Result<()> 94 | where 95 | T: Deref>, 96 | C: substrate_service::Components, 97 | E: IntoExit, 98 | { 99 | let (exit_send, exit) = exit_future::signal(); 100 | 101 | let executor = runtime.executor(); 102 | informant::start(&service, exit.clone(), executor.clone()); 103 | 104 | let _ = runtime.block_on(e.into_exit()); 105 | exit_send.fire(); 106 | Ok(()) 107 | } 108 | 109 | // handles ctrl-c 110 | pub struct Exit; 111 | impl IntoExit for Exit { 112 | type Exit = future::MapErr, fn(oneshot::Canceled) -> ()>; 113 | fn into_exit(self) -> Self::Exit { 114 | // can't use signal directly here because CtrlC takes only `Fn`. 115 | let (exit_send, exit) = oneshot::channel(); 116 | 117 | let exit_send_cell = RefCell::new(Some(exit_send)); 118 | ctrlc::set_handler(move || { 119 | if let Some(exit_send) = exit_send_cell.try_borrow_mut().expect("signal handler not reentrant; qed").take() { 120 | exit_send.send(()).expect("Error sending exit notification"); 121 | } 122 | }).expect("Error setting Ctrl-C handler"); 123 | 124 | exit.map_err(drop) 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /src/cli.yml: -------------------------------------------------------------------------------- 1 | name: adex-protocol-substrate 2 | author: "AdEx Network" 3 | about: adex-protocol-substrate 4 | args: 5 | - log: 6 | short: l 7 | value_name: LOG_PATTERN 8 | help: Sets a custom logging 9 | takes_value: true 10 | subcommands: 11 | - validator: 12 | about: Run validator node 13 | -------------------------------------------------------------------------------- /src/error.rs: -------------------------------------------------------------------------------- 1 | //! Initialization errors. 2 | 3 | use client; 4 | 5 | error_chain! { 6 | foreign_links { 7 | Io(::std::io::Error) #[doc="IO error"]; 8 | Cli(::clap::Error) #[doc="CLI error"]; 9 | } 10 | links { 11 | Client(client::error::Error, client::error::ErrorKind) #[doc="Client error"]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | //! Substrate Node Template CLI library. 2 | 3 | #![warn(missing_docs)] 4 | #![warn(unused_extern_crates)] 5 | 6 | extern crate futures; 7 | #[macro_use] 8 | extern crate error_chain; 9 | extern crate tokio; 10 | #[macro_use] 11 | extern crate log; 12 | extern crate substrate_cli; 13 | extern crate substrate_primitives as primitives; 14 | extern crate substrate_consensus_aura as consensus; 15 | extern crate substrate_client as client; 16 | #[macro_use] 17 | extern crate substrate_network as network; 18 | #[macro_use] 19 | extern crate substrate_executor; 20 | extern crate substrate_transaction_pool as transaction_pool; 21 | extern crate substrate_finality_grandpa as grandpa; 22 | #[macro_use] 23 | extern crate substrate_service; 24 | extern crate adex_protocol_substrate_runtime; 25 | extern crate structopt; 26 | 27 | mod chain_spec; 28 | mod service; 29 | mod cli; 30 | 31 | pub use substrate_cli::{VersionInfo, IntoExit, error}; 32 | 33 | fn run() -> cli::error::Result<()> { 34 | let version = VersionInfo { 35 | commit: env!("VERGEN_SHA_SHORT"), 36 | version: env!("CARGO_PKG_VERSION"), 37 | executable_name: "adex-protocol-substrate", 38 | author: "AdEx Network", 39 | description: "adex-protocol-substrate", 40 | }; 41 | cli::run(::std::env::args(), cli::Exit, version) 42 | } 43 | 44 | quick_main!(run); 45 | -------------------------------------------------------------------------------- /src/service.rs: -------------------------------------------------------------------------------- 1 | //! Service and ServiceFactory implementation. Specialized wrapper over Substrate service. 2 | 3 | #![warn(unused_extern_crates)] 4 | 5 | use std::{sync::Arc, time::Duration}; 6 | use transaction_pool::{self, txpool::{Pool as TransactionPool}}; 7 | use adex_protocol_substrate_runtime::{self, GenesisConfig, opaque::Block, ClientWithApi}; 8 | use substrate_service::{ 9 | FactoryFullConfiguration, LightComponents, FullComponents, FullBackend, 10 | FullClient, LightClient, LightBackend, FullExecutor, LightExecutor, 11 | TaskExecutor, 12 | }; 13 | use consensus::{import_queue, start_aura, Config as AuraConfig, AuraImportQueue, NothingExtra}; 14 | use client; 15 | use grandpa; 16 | use primitives::ed25519::Pair; 17 | 18 | pub use substrate_executor::NativeExecutor; 19 | // Our native executor instance. 20 | native_executor_instance!( 21 | pub Executor, 22 | adex_protocol_substrate_runtime::api::dispatch, 23 | adex_protocol_substrate_runtime::native_version, 24 | include_bytes!("../runtime/wasm/target/wasm32-unknown-unknown/release/adex_protocol_substrate_runtime.compact.wasm") 25 | ); 26 | 27 | const AURA_SLOT_DURATION: u64 = 6; 28 | 29 | construct_simple_protocol! { 30 | /// Demo protocol attachment for substrate. 31 | pub struct NodeProtocol where Block = Block { } 32 | } 33 | 34 | /// Node specific configuration 35 | pub struct NodeConfig { 36 | /// should run as a grandpa authority 37 | pub grandpa_authority: bool, 38 | /// should run as a grandpa authority only, don't validate as usual 39 | pub grandpa_authority_only: bool, 40 | /// grandpa connection to import block 41 | 42 | // FIXME: rather than putting this on the config, let's have an actual intermediate setup state 43 | // https://github.com/paritytech/substrate/issues/1134 44 | pub grandpa_link_half: Option>, 45 | } 46 | 47 | impl Default for NodeConfig where F: substrate_service::ServiceFactory { 48 | fn default() -> NodeConfig { 49 | NodeConfig { 50 | grandpa_authority: false, 51 | grandpa_authority_only: false, 52 | grandpa_link_half: None 53 | } 54 | } 55 | } 56 | 57 | construct_service_factory! { 58 | struct Factory { 59 | Block = Block, 60 | RuntimeApi = ClientWithApi, 61 | NetworkProtocol = NodeProtocol { |config| Ok(NodeProtocol::new()) }, 62 | RuntimeDispatch = Executor, 63 | FullTransactionPoolApi = transaction_pool::ChainApi, FullExecutor, Block, ClientWithApi>, Block> 64 | { |config, client| Ok(TransactionPool::new(config, transaction_pool::ChainApi::new(client))) }, 65 | LightTransactionPoolApi = transaction_pool::ChainApi, LightExecutor, Block, ClientWithApi>, Block> 66 | { |config, client| Ok(TransactionPool::new(config, transaction_pool::ChainApi::new(client))) }, 67 | Genesis = GenesisConfig, 68 | Configuration = NodeConfig, 69 | FullService = FullComponents 70 | { |config: FactoryFullConfiguration, executor: TaskExecutor| 71 | FullComponents::::new(config, executor) }, 72 | AuthoritySetup = { 73 | |service: Self::FullService, executor: TaskExecutor, key: Arc| { 74 | if service.config.custom.grandpa_authority { 75 | info!("Running Grandpa session as Authority {}", key.public()); 76 | let link_half = service.config().custom.grandpa_link_half.as_ref().take() 77 | .expect("Link Half is present for Full Services or setup failed before. qed"); 78 | let grandpa_fut = grandpa::run_grandpa( 79 | grandpa::Config { 80 | gossip_duration: Duration::new(4, 0), // FIXME: make this available through chainspec? 81 | local_key: Some(key.clone()), 82 | name: Some(service.config().name.clone()) 83 | }, 84 | (*link_half).clone(), 85 | grandpa::NetworkBridge::new(service.network()) 86 | )?; 87 | 88 | executor.spawn(grandpa_fut); 89 | } 90 | if !service.config.custom.grandpa_authority_only { 91 | info!("Using authority key {}", key.public()); 92 | executor.spawn(start_aura( 93 | AuraConfig { 94 | local_key: Some(key), 95 | slot_duration: AURA_SLOT_DURATION, 96 | }, 97 | service.client(), 98 | service.proposer(), 99 | service.network(), 100 | )); 101 | } 102 | Ok(service) 103 | } 104 | }, 105 | LightService = LightComponents 106 | { |config, executor| >::new(config, executor) }, 107 | FullImportQueue = AuraImportQueue, NothingExtra> 108 | { |config, client| Ok(import_queue(AuraConfig { 109 | local_key: None, 110 | slot_duration: 5 111 | }, 112 | client, 113 | NothingExtra 114 | )) }, 115 | LightImportQueue = AuraImportQueue, NothingExtra> 116 | { |config, client| Ok(import_queue(AuraConfig { 117 | local_key: None, 118 | slot_duration: 5 119 | }, 120 | client, 121 | NothingExtra 122 | )) }, 123 | } 124 | } 125 | --------------------------------------------------------------------------------