mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 08:41:07 +00:00
Fix MultiSigner, simplify tests (#2033)
* Fix MultiSigner, use `into_signed_tx` * Rebuild.
This commit is contained in:
committed by
Gavin Wood
parent
b483c5608f
commit
08fda211d8
Generated
+1
@@ -4057,6 +4057,7 @@ version = "1.0.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"hex-literal 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hex-literal 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"sr-primitives 1.0.0",
|
||||||
"strum 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"strum 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"strum_macros 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"strum_macros 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"substrate-primitives 1.0.0",
|
"substrate-primitives 1.0.0",
|
||||||
|
|||||||
@@ -291,7 +291,6 @@ impl<Block, C, A> Proposer<Block, C, A> where
|
|||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
use codec::Encode;
|
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use consensus_common::{Environment, Proposer};
|
use consensus_common::{Environment, Proposer};
|
||||||
use test_client::{self, runtime::{Extrinsic, Transfer}, AccountKeyring};
|
use test_client::{self, runtime::{Extrinsic, Transfer}, AccountKeyring};
|
||||||
@@ -303,8 +302,7 @@ mod tests {
|
|||||||
from: AccountKeyring::Alice.into(),
|
from: AccountKeyring::Alice.into(),
|
||||||
to: Default::default(),
|
to: Default::default(),
|
||||||
};
|
};
|
||||||
let signature = AccountKeyring::from_public(&tx.from).unwrap().sign(&tx.encode()).into();
|
tx.into_signed_tx()
|
||||||
Extrinsic::Transfer(tx, signature)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ mod tests {
|
|||||||
use state_machine::backend::InMemory;
|
use state_machine::backend::InMemory;
|
||||||
use test_client::{
|
use test_client::{
|
||||||
runtime::genesismap::{GenesisConfig, additional_storage_with_genesis},
|
runtime::genesismap::{GenesisConfig, additional_storage_with_genesis},
|
||||||
runtime::{Hash, Transfer, Block, BlockNumber, Header, Digest, Extrinsic},
|
runtime::{Hash, Transfer, Block, BlockNumber, Header, Digest},
|
||||||
AccountKeyring, AuthorityKeyring
|
AccountKeyring, AuthorityKeyring
|
||||||
};
|
};
|
||||||
use runtime_primitives::traits::BlakeTwo256;
|
use runtime_primitives::traits::BlakeTwo256;
|
||||||
@@ -68,12 +68,7 @@ mod tests {
|
|||||||
) -> (Vec<u8>, Hash) {
|
) -> (Vec<u8>, Hash) {
|
||||||
use trie::ordered_trie_root;
|
use trie::ordered_trie_root;
|
||||||
|
|
||||||
let transactions = txs.into_iter().map(|tx| {
|
let transactions = txs.into_iter().map(|tx| tx.into_signed_tx()).collect::<Vec<_>>();
|
||||||
let signature = AccountKeyring::from_public(&tx.from).unwrap()
|
|
||||||
.sign(&tx.encode()).into();
|
|
||||||
|
|
||||||
Extrinsic::Transfer(tx, signature)
|
|
||||||
}).collect::<Vec<_>>();
|
|
||||||
|
|
||||||
let extrinsics_root = ordered_trie_root::<Blake2Hasher, _, _>(transactions.iter().map(Encode::encode)).into();
|
let extrinsics_root = ordered_trie_root::<Blake2Hasher, _, _>(transactions.iter().map(Encode::encode)).into();
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
substrate-primitives = { path = "../primitives" }
|
substrate-primitives = { path = "../primitives" }
|
||||||
|
sr-primitives = { path = "../sr-primitives" }
|
||||||
hex-literal = { version = "0.1.0" }
|
hex-literal = { version = "0.1.0" }
|
||||||
lazy_static = { version = "1.0" }
|
lazy_static = { version = "1.0" }
|
||||||
strum = "0.14.0"
|
strum = "0.14.0"
|
||||||
|
|||||||
@@ -100,6 +100,12 @@ impl From<Keyring> for &'static str {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Keyring> for sr_primitives::MultiSigner {
|
||||||
|
fn from(x: Keyring) -> Self {
|
||||||
|
sr_primitives::MultiSigner::Ed25519(x.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref PRIVATE_KEYS: HashMap<Keyring, Pair> = {
|
static ref PRIVATE_KEYS: HashMap<Keyring, Pair> = {
|
||||||
Keyring::iter().map(|i| (i, i.pair())).collect()
|
Keyring::iter().map(|i| (i, i.pair())).collect()
|
||||||
|
|||||||
@@ -96,6 +96,12 @@ impl From<Keyring> for &'static str {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Keyring> for sr_primitives::MultiSigner {
|
||||||
|
fn from(x: Keyring) -> Self {
|
||||||
|
sr_primitives::MultiSigner::Sr25519(x.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref PRIVATE_KEYS: HashMap<Keyring, Pair> = {
|
static ref PRIVATE_KEYS: HashMap<Keyring, Pair> = {
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ mod sync;
|
|||||||
|
|
||||||
use std::collections::{HashMap, HashSet, VecDeque};
|
use std::collections::{HashMap, HashSet, VecDeque};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::AtomicBool;
|
||||||
|
|
||||||
use log::trace;
|
use log::trace;
|
||||||
use client;
|
use client;
|
||||||
@@ -39,7 +39,6 @@ use futures::Future;
|
|||||||
use futures::sync::{mpsc, oneshot};
|
use futures::sync::{mpsc, oneshot};
|
||||||
use crate::message::Message;
|
use crate::message::Message;
|
||||||
use network_libp2p::PeerId;
|
use network_libp2p::PeerId;
|
||||||
use parity_codec::Encode;
|
|
||||||
use parking_lot::{Mutex, RwLock};
|
use parking_lot::{Mutex, RwLock};
|
||||||
use primitives::{H256, ed25519::Public as AuthorityId};
|
use primitives::{H256, ed25519::Public as AuthorityId};
|
||||||
use crate::protocol::{ConnectedPeer, Context, FromNetworkMsg, Protocol, ProtocolMsg};
|
use crate::protocol::{ConnectedPeer, Context, FromNetworkMsg, Protocol, ProtocolMsg};
|
||||||
@@ -333,14 +332,16 @@ impl<D, S: NetworkSpecialization<Block>> Peer<D, S> {
|
|||||||
self.net_proto_channel.send_from_client(ProtocolMsg::BlockImported(hash, header.clone()));
|
self.net_proto_channel.send_from_client(ProtocolMsg::BlockImported(hash, header.clone()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// SyncOracle: are we connected to any peer?
|
/// SyncOracle: are we connected to any peer?
|
||||||
|
#[cfg(test)]
|
||||||
pub fn is_offline(&self) -> bool {
|
pub fn is_offline(&self) -> bool {
|
||||||
self.is_offline.load(Ordering::Relaxed)
|
self.is_offline.load(std::sync::atomic::Ordering::Relaxed)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SyncOracle: are we in the process of catching-up with the chain?
|
/// SyncOracle: are we in the process of catching-up with the chain?
|
||||||
|
#[cfg(test)]
|
||||||
pub fn is_major_syncing(&self) -> bool {
|
pub fn is_major_syncing(&self) -> bool {
|
||||||
self.is_major_syncing.load(Ordering::Relaxed)
|
self.is_major_syncing.load(std::sync::atomic::Ordering::Relaxed)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Called on connection to other indicated peer.
|
/// Called on connection to other indicated peer.
|
||||||
@@ -533,8 +534,7 @@ impl<D, S: NetworkSpecialization<Block>> Peer<D, S> {
|
|||||||
amount: 1,
|
amount: 1,
|
||||||
nonce,
|
nonce,
|
||||||
};
|
};
|
||||||
let signature = AccountKeyring::from_public(&transfer.from).unwrap().sign(&transfer.encode()).into();
|
builder.push(transfer.into_signed_tx()).unwrap();
|
||||||
builder.push(Extrinsic::Transfer(transfer, signature)).unwrap();
|
|
||||||
nonce = nonce + 1;
|
nonce = nonce + 1;
|
||||||
builder.bake().unwrap()
|
builder.bake().unwrap()
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -34,8 +34,7 @@ fn uxt(sender: AccountKeyring, nonce: u64) -> Extrinsic {
|
|||||||
from: sender.into(),
|
from: sender.into(),
|
||||||
to: Default::default(),
|
to: Default::default(),
|
||||||
};
|
};
|
||||||
let signature = AccountKeyring::from_public(&tx.from).unwrap().sign(&tx.encode()).into();
|
tx.into_signed_tx()
|
||||||
Extrinsic::Transfer(tx, signature)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -106,8 +105,7 @@ fn should_watch_extrinsic() {
|
|||||||
from: AccountKeyring::Alice.into(),
|
from: AccountKeyring::Alice.into(),
|
||||||
to: Default::default(),
|
to: Default::default(),
|
||||||
};
|
};
|
||||||
let signature = AccountKeyring::from_public(&tx.from).unwrap().sign(&tx.encode()).into();
|
tx.into_signed_tx()
|
||||||
Extrinsic::Transfer(tx, signature)
|
|
||||||
};
|
};
|
||||||
AuthorApi::submit_extrinsic(&p, replacement.encode().into()).unwrap();
|
AuthorApi::submit_extrinsic(&p, replacement.encode().into()).unwrap();
|
||||||
let (res, data) = runtime.block_on(data.into_future()).unwrap();
|
let (res, data) = runtime.block_on(data.into_future()).unwrap();
|
||||||
|
|||||||
@@ -561,9 +561,8 @@ impl<Factory: ServiceFactory> Components for LightComponents<Factory> {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use parity_codec::Encode;
|
|
||||||
use consensus_common::BlockOrigin;
|
use consensus_common::BlockOrigin;
|
||||||
use substrate_test_client::{self, TestClient, AccountKeyring, runtime::{Extrinsic, Transfer}};
|
use substrate_test_client::{self, TestClient, AccountKeyring, runtime::Transfer};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_remove_transactions_from_the_pool() {
|
fn should_remove_transactions_from_the_pool() {
|
||||||
@@ -576,8 +575,7 @@ mod tests {
|
|||||||
from: AccountKeyring::Alice.into(),
|
from: AccountKeyring::Alice.into(),
|
||||||
to: Default::default(),
|
to: Default::default(),
|
||||||
};
|
};
|
||||||
let signature = AccountKeyring::from_public(&transfer.from).unwrap().sign(&transfer.encode()).into();
|
transfer.into_signed_tx()
|
||||||
Extrinsic::Transfer(transfer, signature)
|
|
||||||
};
|
};
|
||||||
// store the transaction in the pool
|
// store the transaction in the pool
|
||||||
pool.submit_one(&BlockId::hash(client.best_block_header().unwrap().hash()), transaction.clone()).unwrap();
|
pool.submit_one(&BlockId::hash(client.best_block_header().unwrap().hash()), transaction.clone()).unwrap();
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ pub use serde_derive;
|
|||||||
pub use runtime_io::{StorageOverlay, ChildrenStorageOverlay};
|
pub use runtime_io::{StorageOverlay, ChildrenStorageOverlay};
|
||||||
|
|
||||||
use rstd::prelude::*;
|
use rstd::prelude::*;
|
||||||
use substrate_primitives::{ed25519, sr25519, hash::H512};
|
use substrate_primitives::{crypto, ed25519, sr25519, hash::{H256, H512}};
|
||||||
use codec::{Encode, Decode};
|
use codec::{Encode, Decode};
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
@@ -310,6 +310,18 @@ pub enum MultiSignature {
|
|||||||
Sr25519(sr25519::Signature),
|
Sr25519(sr25519::Signature),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<ed25519::Signature> for MultiSignature {
|
||||||
|
fn from(x: ed25519::Signature) -> Self {
|
||||||
|
MultiSignature::Ed25519(x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<sr25519::Signature> for MultiSignature {
|
||||||
|
fn from(x: sr25519::Signature) -> Self {
|
||||||
|
MultiSignature::Sr25519(x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Default for MultiSignature {
|
impl Default for MultiSignature {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
MultiSignature::Ed25519(Default::default())
|
MultiSignature::Ed25519(Default::default())
|
||||||
@@ -332,6 +344,45 @@ impl Default for MultiSigner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// NOTE: This implementations is required by `SimpleAddressDeterminator`,
|
||||||
|
/// we convert the hash into some AccountId, it's fine to use any scheme.
|
||||||
|
impl<T: Into<H256>> crypto::UncheckedFrom<T> for MultiSigner {
|
||||||
|
fn unchecked_from(x: T) -> Self {
|
||||||
|
ed25519::Public::unchecked_from(x.into()).into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsRef<[u8]> for MultiSigner {
|
||||||
|
fn as_ref(&self) -> &[u8] {
|
||||||
|
match *self {
|
||||||
|
MultiSigner::Ed25519(ref who) => who.as_ref(),
|
||||||
|
MultiSigner::Sr25519(ref who) => who.as_ref(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<ed25519::Public> for MultiSigner {
|
||||||
|
fn from(x: ed25519::Public) -> Self {
|
||||||
|
MultiSigner::Ed25519(x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<sr25519::Public> for MultiSigner {
|
||||||
|
fn from(x: sr25519::Public) -> Self {
|
||||||
|
MultiSigner::Sr25519(x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
impl std::fmt::Display for MultiSigner {
|
||||||
|
fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||||
|
match *self {
|
||||||
|
MultiSigner::Ed25519(ref who) => write!(fmt, "ed25519: {}", who),
|
||||||
|
MultiSigner::Sr25519(ref who) => write!(fmt, "sr25519: {}", who),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Verify for MultiSignature {
|
impl Verify for MultiSignature {
|
||||||
type Signer = MultiSigner;
|
type Signer = MultiSigner;
|
||||||
fn verify<L: Lazy<[u8]>>(&self, msg: L, signer: &Self::Signer) -> bool {
|
fn verify<L: Lazy<[u8]>>(&self, msg: L, signer: &Self::Signer) -> bool {
|
||||||
@@ -357,8 +408,14 @@ impl Verify for AnySignature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl From<sr25519::Signature> for AnySignature {
|
impl From<sr25519::Signature> for AnySignature {
|
||||||
fn from(s: sr25519::Signature) -> AnySignature {
|
fn from(s: sr25519::Signature) -> Self {
|
||||||
AnySignature(s.0.into())
|
AnySignature(s.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<ed25519::Signature> for AnySignature {
|
||||||
|
fn from(s: ed25519::Signature) -> Self {
|
||||||
|
AnySignature(s.into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
//! Block Builder extensions for tests.
|
//! Block Builder extensions for tests.
|
||||||
|
|
||||||
use client;
|
use client;
|
||||||
use super::AccountKeyring;
|
|
||||||
use runtime;
|
use runtime;
|
||||||
use runtime_primitives::traits::ProvideRuntimeApi;
|
use runtime_primitives::traits::ProvideRuntimeApi;
|
||||||
use client::block_builder::api::BlockBuilder;
|
use client::block_builder::api::BlockBuilder;
|
||||||
@@ -33,13 +32,6 @@ impl<'a, A> BlockBuilderExt for client::block_builder::BlockBuilder<'a, runtime:
|
|||||||
A::Api: BlockBuilder<runtime::Block>
|
A::Api: BlockBuilder<runtime::Block>
|
||||||
{
|
{
|
||||||
fn push_transfer(&mut self, transfer: runtime::Transfer) -> Result<(), client::error::Error> {
|
fn push_transfer(&mut self, transfer: runtime::Transfer) -> Result<(), client::error::Error> {
|
||||||
self.push(sign_tx(transfer))
|
self.push(transfer.into_signed_tx())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sign_tx(transfer: runtime::Transfer) -> runtime::Extrinsic {
|
|
||||||
let signature = AccountKeyring::from_public(&transfer.from)
|
|
||||||
.unwrap()
|
|
||||||
.sign(&parity_codec::Encode::encode(&transfer));
|
|
||||||
runtime::Extrinsic::Transfer(transfer, signature)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ use runtime_primitives::{
|
|||||||
create_runtime_str,
|
create_runtime_str,
|
||||||
traits::{
|
traits::{
|
||||||
BlindCheckable, BlakeTwo256, Block as BlockT, Extrinsic as ExtrinsicT,
|
BlindCheckable, BlakeTwo256, Block as BlockT, Extrinsic as ExtrinsicT,
|
||||||
GetNodeBlockType, GetRuntimeBlockType, AuthorityIdFor,
|
GetNodeBlockType, GetRuntimeBlockType, AuthorityIdFor, Verify,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use runtime_version::RuntimeVersion;
|
use runtime_version::RuntimeVersion;
|
||||||
@@ -142,14 +142,14 @@ impl Extrinsic {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The identity type used by authorities.
|
/// The signature type used by authorities.
|
||||||
pub type AuthorityId = ed25519::Public;
|
|
||||||
// The signature type used by authorities.
|
|
||||||
pub type AuthoritySignature = ed25519::Signature;
|
pub type AuthoritySignature = ed25519::Signature;
|
||||||
/// An identifier for an account on this system.
|
/// The identity type used by authorities.
|
||||||
pub type AccountId = sr25519::Public;
|
pub type AuthorityId = <AuthoritySignature as Verify>::Signer;
|
||||||
// The signature type used by accounts/transactions.
|
/// The signature type used by accounts/transactions.
|
||||||
pub type AccountSignature = sr25519::Signature;
|
pub type AccountSignature = sr25519::Signature;
|
||||||
|
/// An identifier for an account on this system.
|
||||||
|
pub type AccountId = <AccountSignature as Verify>::Signer;
|
||||||
/// A simple hash type for all our hashing.
|
/// A simple hash type for all our hashing.
|
||||||
pub type Hash = H256;
|
pub type Hash = H256;
|
||||||
/// The block number type used in this runtime.
|
/// The block number type used in this runtime.
|
||||||
|
|||||||
+1
@@ -2373,6 +2373,7 @@ version = "1.0.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"hex-literal 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hex-literal 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"sr-primitives 1.0.0",
|
||||||
"strum 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"strum 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"strum_macros 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"strum_macros 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"substrate-primitives 1.0.0",
|
"substrate-primitives 1.0.0",
|
||||||
|
|||||||
+1
@@ -2535,6 +2535,7 @@ version = "1.0.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"hex-literal 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hex-literal 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"sr-primitives 1.0.0",
|
||||||
"strum 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"strum 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"strum_macros 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"strum_macros 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"substrate-primitives 1.0.0",
|
"substrate-primitives 1.0.0",
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
|||||||
impl_name: create_runtime_str!("substrate-node"),
|
impl_name: create_runtime_str!("substrate-node"),
|
||||||
authoring_version: 10,
|
authoring_version: 10,
|
||||||
spec_version: 63,
|
spec_version: 63,
|
||||||
impl_version: 65,
|
impl_version: 66,
|
||||||
apis: RUNTIME_API_VERSIONS,
|
apis: RUNTIME_API_VERSIONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Generated
+1
@@ -2690,6 +2690,7 @@ version = "1.0.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"hex-literal 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hex-literal 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"sr-primitives 1.0.0",
|
||||||
"strum 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"strum 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"strum_macros 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"strum_macros 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"substrate-primitives 1.0.0",
|
"substrate-primitives 1.0.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user