mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 08:11:04 +00:00
inspect-key: Adds support for expect-public (#10430)
* Introduce `SecretUri` * `inspect-key`: Adds support for `expect-public` `expect-public` can be used to check that a given secret uri corresponds to the given public key. This is mainly useful when the secret uri is protected by a password and a new derived account should be generated. With `--expect-public` the user can pass the public key/account-id of the "base" secret uri aka the one without any derivation to ensure the correct password was inserted. * Fixes * 🤦 * Apply suggestions from code review Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> * Review feedback * FMT * Bump the versions Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
This commit is contained in:
@@ -14,7 +14,7 @@ readme = "README.md"
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
||||
[dependencies]
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-wasm-interface = { version = "4.0.0", path = "../../primitives/wasm-interface" }
|
||||
log = "0.4.11"
|
||||
thiserror = "1.0.30"
|
||||
|
||||
@@ -27,7 +27,7 @@ sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||
log = "0.4.8"
|
||||
parking_lot = "0.11.1"
|
||||
sp-database = { version = "4.0.0-dev", path = "../../primitives/database" }
|
||||
sp-core = { version = "4.0.0", default-features = false, path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", default-features = false, path = "../../primitives/core" }
|
||||
sp-keystore = { version = "0.10.0-dev", default-features = false, path = "../../primitives/keystore" }
|
||||
sp-api = { version = "4.0.0-dev", path = "../../primitives/api" }
|
||||
sc-utils = { version = "4.0.0-dev", path = "../utils" }
|
||||
|
||||
@@ -32,7 +32,7 @@ sc-client-api = { version = "4.0.0-dev", path = "../api" }
|
||||
sc-network = { version = "0.10.0-dev", path = "../network" }
|
||||
sp-authority-discovery = { version = "4.0.0-dev", path = "../../primitives/authority-discovery" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-keystore = { version = "0.10.0-dev", path = "../../primitives/keystore" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sp-api = { version = "4.0.0-dev", path = "../../primitives/api" }
|
||||
|
||||
@@ -20,7 +20,7 @@ log = "0.4.8"
|
||||
prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.10.0-dev"}
|
||||
sp-api = { version = "4.0.0-dev", path = "../../primitives/api" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../api" }
|
||||
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
||||
|
||||
@@ -22,7 +22,7 @@ sp-api = { version = "4.0.0-dev", path = "../../primitives/api" }
|
||||
sp-application-crypto = { version = "4.0.0-dev", path = "../../primitives/application-crypto" }
|
||||
sp-arithmetic = { version = "4.0.0-dev", path = "../../primitives/arithmetic" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-keystore = { version = "0.10.0-dev", path = "../../primitives/keystore" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ codec = { version = "2.2.0", package = "parity-scale-codec", features = ["derive
|
||||
|
||||
sc-rpc = { version = "4.0.0-dev", path = "../../rpc" }
|
||||
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
||||
|
||||
beefy-gadget = { version = "4.0.0-dev", path = "../." }
|
||||
|
||||
@@ -18,7 +18,7 @@ sp-state-machine = { version = "0.10.0-dev", path = "../../primitives/state-mach
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sp-api = { version = "4.0.0-dev", path = "../../primitives/api" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-block-builder = { version = "4.0.0-dev", path = "../../primitives/block-builder" }
|
||||
sp-inherents = { version = "4.0.0-dev", path = "../../primitives/inherents" }
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../api" }
|
||||
|
||||
@@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
||||
sc-chain-spec-derive = { version = "4.0.0-dev", path = "./derive" }
|
||||
impl-trait-for-tuples = "0.2.1"
|
||||
sc-network = { version = "0.10.0-dev", path = "../network" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
serde = { version = "1.0.126", features = ["derive"] }
|
||||
serde_json = "1.0.71"
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
|
||||
@@ -32,7 +32,7 @@ sc-network = { version = "0.10.0-dev", path = "../network" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sc-utils = { version = "4.0.0-dev", path = "../utils" }
|
||||
sp-version = { version = "4.0.0-dev", path = "../../primitives/version" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-keystore = { version = "0.10.0-dev", path = "../../primitives/keystore" }
|
||||
sc-service = { version = "0.10.0-dev", default-features = false, path = "../service" }
|
||||
sc-telemetry = { version = "4.0.0-dev", path = "../telemetry" }
|
||||
|
||||
@@ -21,7 +21,10 @@ use crate::{
|
||||
utils::{self, print_from_public, print_from_uri},
|
||||
with_crypto_scheme, CryptoSchemeFlag, Error, KeystoreParams, NetworkSchemeFlag, OutputTypeFlag,
|
||||
};
|
||||
use sp_core::crypto::{ExposeSecret, SecretString, SecretUri, Ss58Codec};
|
||||
use std::str::FromStr;
|
||||
use structopt::StructOpt;
|
||||
|
||||
/// The `inspect` command
|
||||
#[derive(Debug, StructOpt)]
|
||||
#[structopt(
|
||||
@@ -59,6 +62,18 @@ pub struct InspectKeyCmd {
|
||||
#[allow(missing_docs)]
|
||||
#[structopt(flatten)]
|
||||
pub crypto_scheme: CryptoSchemeFlag,
|
||||
|
||||
/// Expect that `--uri` has the given public key/account-id.
|
||||
///
|
||||
/// If `--uri` has any derivations, the public key is checked against the base `uri`, i.e. the
|
||||
/// `uri` without any derivation applied. However, if `uri` has a password or there is one
|
||||
/// given by `--password`, it will be used to decrypt `uri` before comparing the public
|
||||
/// key/account-id.
|
||||
///
|
||||
/// If there is no derivation in `--uri`, the public key will be checked against the public key
|
||||
/// of `--uri` directly.
|
||||
#[structopt(long, conflicts_with = "public")]
|
||||
pub expect_public: Option<String>,
|
||||
}
|
||||
|
||||
impl InspectKeyCmd {
|
||||
@@ -77,6 +92,13 @@ impl InspectKeyCmd {
|
||||
)
|
||||
)?;
|
||||
} else {
|
||||
if let Some(ref expect_public) = self.expect_public {
|
||||
with_crypto_scheme!(
|
||||
self.crypto_scheme.scheme,
|
||||
expect_public_from_phrase(&&expect_public, &uri, password.as_ref(),)
|
||||
)?;
|
||||
}
|
||||
|
||||
with_crypto_scheme!(
|
||||
self.crypto_scheme.scheme,
|
||||
print_from_uri(
|
||||
@@ -92,9 +114,50 @@ impl InspectKeyCmd {
|
||||
}
|
||||
}
|
||||
|
||||
/// Checks that `expect_public` is the public key of `suri`.
|
||||
///
|
||||
/// If `suri` has any derivations, `expect_public` is checked against the public key of the "bare"
|
||||
/// `suri`, i.e. without any derivations.
|
||||
///
|
||||
/// Returns an error if the public key does not match.
|
||||
fn expect_public_from_phrase<Pair: sp_core::Pair>(
|
||||
expect_public: &str,
|
||||
suri: &str,
|
||||
password: Option<&SecretString>,
|
||||
) -> Result<(), Error> {
|
||||
let secret_uri = SecretUri::from_str(suri).map_err(|e| format!("{:?}", e))?;
|
||||
let expected_public = if let Some(public) = expect_public.strip_prefix("0x") {
|
||||
let hex_public = hex::decode(&public)
|
||||
.map_err(|_| format!("Invalid expected public key hex: `{}`", expect_public))?;
|
||||
Pair::Public::try_from(&hex_public)
|
||||
.map_err(|_| format!("Invalid expected public key: `{}`", expect_public))?
|
||||
} else {
|
||||
Pair::Public::from_string_with_version(expect_public)
|
||||
.map_err(|_| format!("Invalid expected account id: `{}`", expect_public))?
|
||||
.0
|
||||
};
|
||||
|
||||
let pair = Pair::from_string_with_seed(
|
||||
secret_uri.phrase.expose_secret().as_str(),
|
||||
password
|
||||
.or_else(|| secret_uri.password.as_ref())
|
||||
.map(|p| p.expose_secret().as_str()),
|
||||
)
|
||||
.map_err(|_| format!("Invalid secret uri: {}", suri))?
|
||||
.0;
|
||||
|
||||
if pair.public() == expected_public {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(format!("Expected public ({}) key does not match.", expect_public).into())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use sp_core::crypto::{Pair, Public};
|
||||
use sp_runtime::traits::IdentifyAccount;
|
||||
use structopt::StructOpt;
|
||||
|
||||
#[test]
|
||||
@@ -117,4 +180,90 @@ mod tests {
|
||||
let inspect = InspectKeyCmd::from_iter(&["inspect-key", "--public", public]);
|
||||
assert!(inspect.run().is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn inspect_with_expected_public_key() {
|
||||
let check_cmd = |seed, expected_public, success| {
|
||||
let inspect = InspectKeyCmd::from_iter(&[
|
||||
"inspect-key",
|
||||
"--expect-public",
|
||||
expected_public,
|
||||
seed,
|
||||
]);
|
||||
let res = inspect.run();
|
||||
|
||||
if success {
|
||||
assert!(res.is_ok());
|
||||
} else {
|
||||
assert!(res.unwrap_err().to_string().contains(&format!(
|
||||
"Expected public ({}) key does not match.",
|
||||
expected_public
|
||||
)));
|
||||
}
|
||||
};
|
||||
|
||||
let seed =
|
||||
"remember fiber forum demise paper uniform squirrel feel access exclude casual effort";
|
||||
let invalid_public = "0x12e76e0ae8ce41b6516cce52b3f23a08dcb4cfeed53c6ee8f5eb9f7367341069";
|
||||
let valid_public = sp_core::sr25519::Pair::from_string_with_seed(seed, None)
|
||||
.expect("Valid")
|
||||
.0
|
||||
.public();
|
||||
let valid_public_hex = format!("0x{}", hex::encode(valid_public.as_slice()));
|
||||
let valid_accountid = format!("{}", valid_public.into_account());
|
||||
|
||||
// It should fail with the invalid public key
|
||||
check_cmd(seed, invalid_public, false);
|
||||
|
||||
// It should work with the valid public key & account id
|
||||
check_cmd(seed, &valid_public_hex, true);
|
||||
check_cmd(seed, &valid_accountid, true);
|
||||
|
||||
let password = "test12245";
|
||||
let seed_with_password = format!("{}///{}", seed, password);
|
||||
let valid_public_with_password =
|
||||
sp_core::sr25519::Pair::from_string_with_seed(&seed_with_password, Some(password))
|
||||
.expect("Valid")
|
||||
.0
|
||||
.public();
|
||||
let valid_public_hex_with_password =
|
||||
format!("0x{}", hex::encode(&valid_public_with_password.as_slice()));
|
||||
let valid_accountid_with_password =
|
||||
format!("{}", &valid_public_with_password.into_account());
|
||||
|
||||
// Only the public key that corresponds to the seed with password should be accepted.
|
||||
check_cmd(&seed_with_password, &valid_public_hex, false);
|
||||
check_cmd(&seed_with_password, &valid_accountid, false);
|
||||
|
||||
check_cmd(&seed_with_password, &valid_public_hex_with_password, true);
|
||||
check_cmd(&seed_with_password, &valid_accountid_with_password, true);
|
||||
|
||||
let seed_with_password_and_derivation = format!("{}//test//account///{}", seed, password);
|
||||
|
||||
let valid_public_with_password_and_derivation =
|
||||
sp_core::sr25519::Pair::from_string_with_seed(
|
||||
&seed_with_password_and_derivation,
|
||||
Some(password),
|
||||
)
|
||||
.expect("Valid")
|
||||
.0
|
||||
.public();
|
||||
let valid_public_hex_with_password_and_derivation =
|
||||
format!("0x{}", hex::encode(&valid_public_with_password_and_derivation.as_slice()));
|
||||
|
||||
// They should still be valid, because we check the base secret key.
|
||||
check_cmd(&seed_with_password_and_derivation, &valid_public_hex_with_password, true);
|
||||
check_cmd(&seed_with_password_and_derivation, &valid_accountid_with_password, true);
|
||||
|
||||
// And these should be invalid.
|
||||
check_cmd(&seed_with_password_and_derivation, &valid_public_hex, false);
|
||||
check_cmd(&seed_with_password_and_derivation, &valid_accountid, false);
|
||||
|
||||
// The public of the derived account should fail.
|
||||
check_cmd(
|
||||
&seed_with_password_and_derivation,
|
||||
&valid_public_hex_with_password_and_derivation,
|
||||
false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ derive_more = "0.99.16"
|
||||
futures = "0.3.9"
|
||||
sp-inherents = { version = "4.0.0-dev", path = "../../../primitives/inherents" }
|
||||
log = "0.4.8"
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
||||
sc-consensus-slots = { version = "0.10.0-dev", path = "../slots" }
|
||||
sp-api = { version = "4.0.0-dev", path = "../../../primitives/api" }
|
||||
|
||||
@@ -19,7 +19,7 @@ codec = { package = "parity-scale-codec", version = "2.0.0", features = [
|
||||
] }
|
||||
sp-consensus-babe = { version = "0.10.0-dev", path = "../../../primitives/consensus/babe" }
|
||||
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sp-application-crypto = { version = "4.0.0-dev", path = "../../../primitives/application-crypto" }
|
||||
sp-keystore = { version = "0.10.0-dev", path = "../../../primitives/keystore" }
|
||||
num-bigint = "0.2.3"
|
||||
|
||||
@@ -27,7 +27,7 @@ futures = "0.3.16"
|
||||
derive_more = "0.99.16"
|
||||
sp-api = { version = "4.0.0-dev", path = "../../../../primitives/api" }
|
||||
sp-consensus = { version = "0.10.0-dev", path = "../../../../primitives/consensus/common" }
|
||||
sp-core = { version = "4.0.0", path = "../../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../../primitives/core" }
|
||||
sp-application-crypto = { version = "4.0.0-dev", path = "../../../../primitives/application-crypto" }
|
||||
sp-keystore = { version = "0.10.0-dev", path = "../../../../primitives/keystore" }
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ futures = { version = "0.3.1", features = ["thread-pool"] }
|
||||
futures-timer = "3.0.1"
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../../api" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
||||
sp-core = { path = "../../../primitives/core", version = "4.0.0" }
|
||||
sp-core = { path = "../../../primitives/core", version = "4.1.0-dev" }
|
||||
sp-consensus = { path = "../../../primitives/consensus/common", version = "0.10.0-dev" }
|
||||
sp-state-machine = { version = "0.10.0-dev", path = "../../../primitives/state-machine" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
||||
|
||||
@@ -36,7 +36,7 @@ sp-consensus = { path = "../../../primitives/consensus/common", version = "0.10.
|
||||
sp-consensus-slots = { path = "../../../primitives/consensus/slots", version = "0.10.0-dev" }
|
||||
sp-inherents = { path = "../../../primitives/inherents", version = "4.0.0-dev" }
|
||||
sp-runtime = { path = "../../../primitives/runtime", version = "4.0.0-dev" }
|
||||
sp-core = { path = "../../../primitives/core", version = "4.0.0" }
|
||||
sp-core = { path = "../../../primitives/core", version = "4.1.0-dev" }
|
||||
sp-keystore = { path = "../../../primitives/keystore", version = "0.10.0-dev" }
|
||||
sp-api = { path = "../../../primitives/api", version = "4.0.0-dev" }
|
||||
sc-transaction-pool-api = { path = "../../../client/transaction-pool/api", version = "4.0.0-dev" }
|
||||
|
||||
@@ -14,7 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
||||
[dependencies]
|
||||
codec = { package = "parity-scale-codec", version = "2.0.0", features = ["derive"] }
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
||||
sp-api = { version = "4.0.0-dev", path = "../../../primitives/api" }
|
||||
|
||||
@@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
||||
[dependencies]
|
||||
codec = { package = "parity-scale-codec", version = "2.0.0" }
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../../api" }
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sp-arithmetic = { version = "4.0.0-dev", path = "../../../primitives/arithmetic" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
||||
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||
|
||||
@@ -26,7 +26,7 @@ codec = { package = "parity-scale-codec", version = "2.0.0", features = [
|
||||
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../api" }
|
||||
sp-arithmetic = { version = "4.0.0-dev", path = "../../primitives/arithmetic" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sp-state-machine = { version = "0.10.0-dev", path = "../../primitives/state-machine" }
|
||||
sc-state-db = { version = "0.10.0-dev", path = "../state-db" }
|
||||
|
||||
@@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
||||
[dependencies]
|
||||
codec = { package = "parity-scale-codec", version = "2.0.0" }
|
||||
sp-io = { version = "4.0.0-dev", path = "../../primitives/io" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-tasks = { version = "4.0.0-dev", path = "../../primitives/tasks" }
|
||||
sp-trie = { version = "4.0.0-dev", path = "../../primitives/trie" }
|
||||
sp-version = { version = "4.0.0-dev", path = "../../primitives/version" }
|
||||
|
||||
@@ -18,7 +18,7 @@ derive_more = "0.99.16"
|
||||
pwasm-utils = "0.18.2"
|
||||
codec = { package = "parity-scale-codec", version = "2.0.0" }
|
||||
wasmi = "0.9.1"
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sc-allocator = { version = "4.1.0-dev", path = "../../allocator" }
|
||||
sp-wasm-interface = { version = "4.0.0", path = "../../../primitives/wasm-interface" }
|
||||
sp-maybe-compressed-blob = { version = "4.1.0-dev", path = "../../../primitives/maybe-compressed-blob" }
|
||||
|
||||
@@ -13,7 +13,7 @@ repository = "https://github.com/paritytech/substrate/"
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
||||
[dependencies]
|
||||
sp-core = { version = "4.0.0", default-features = false, path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", default-features = false, path = "../../../primitives/core" }
|
||||
sp-io = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/io" }
|
||||
sp-runtime = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/runtime" }
|
||||
sp-sandbox = { version = "0.10.0-dev", default-features = false, path = "../../../primitives/sandbox" }
|
||||
|
||||
@@ -21,5 +21,5 @@ sc-executor-common = { version = "0.10.0-dev", path = "../common" }
|
||||
sc-allocator = { version = "4.1.0-dev", path = "../../allocator" }
|
||||
sp-wasm-interface = { version = "4.0.0", path = "../../../primitives/wasm-interface" }
|
||||
sp-runtime-interface = { version = "4.0.0", path = "../../../primitives/runtime-interface" }
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
scoped-tls = "1.0"
|
||||
|
||||
@@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "2.0.0" }
|
||||
sc-executor-common = { version = "0.10.0-dev", path = "../common" }
|
||||
sp-wasm-interface = { version = "4.0.0", path = "../../../primitives/wasm-interface" }
|
||||
sp-runtime-interface = { version = "4.0.0", path = "../../../primitives/runtime-interface" }
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sc-allocator = { version = "4.1.0-dev", path = "../../allocator" }
|
||||
wasmtime = { version = "0.31.0", default-features = false, features = [
|
||||
"cache",
|
||||
|
||||
@@ -30,7 +30,7 @@ sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sc-utils = { version = "4.0.0-dev", path = "../utils" }
|
||||
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
||||
sc-consensus = { version = "0.10.0-dev", path = "../consensus/common" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-keystore = { version = "0.10.0-dev", path = "../../primitives/keystore" }
|
||||
sp-api = { version = "4.0.0-dev", path = "../../primitives/api" }
|
||||
sc-telemetry = { version = "4.0.0-dev", path = "../telemetry" }
|
||||
|
||||
@@ -12,7 +12,7 @@ readme = "README.md"
|
||||
sc-finality-grandpa = { version = "0.10.0-dev", path = "../" }
|
||||
sc-rpc = { version = "4.0.0-dev", path = "../../rpc" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
||||
finality-grandpa = { version = "0.14.4", features = ["derive-codec"] }
|
||||
jsonrpc-core = "18.0.0"
|
||||
@@ -32,7 +32,7 @@ sc-block-builder = { version = "0.10.0-dev", path = "../../block-builder" }
|
||||
sc-rpc = { version = "4.0.0-dev", path = "../../rpc", features = [
|
||||
"test-helpers",
|
||||
] }
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sp-finality-grandpa = { version = "4.0.0-dev", path = "../../../primitives/finality-grandpa" }
|
||||
sp-keyring = { version = "4.0.0-dev", path = "../../../primitives/keyring" }
|
||||
substrate-test-runtime-client = { version = "2.0.0", path = "../../../test-utils/runtime/client" }
|
||||
|
||||
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
||||
async-trait = "0.1.50"
|
||||
derive_more = "0.99.16"
|
||||
sp-application-crypto = { version = "4.0.0-dev", path = "../../primitives/application-crypto" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-keystore = { version = "0.10.0-dev", path = "../../primitives/keystore" }
|
||||
hex = "0.4.0"
|
||||
parking_lot = "0.11.1"
|
||||
|
||||
@@ -53,7 +53,7 @@ sp-arithmetic = { version = "4.0.0-dev", path = "../../primitives/arithmetic" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
||||
sc-consensus = { version = "0.10.0-dev", path = "../consensus/common" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sc-utils = { version = "4.0.0-dev", path = "../utils" }
|
||||
sp-finality-grandpa = { version = "4.0.0-dev", path = "../../primitives/finality-grandpa" }
|
||||
|
||||
@@ -26,7 +26,7 @@ sc-consensus = { version = "0.10.0-dev", path = "../../consensus/common" }
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../../api" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sc-block-builder = { version = "0.10.0-dev", path = "../../block-builder" }
|
||||
sp-consensus-babe = { version = "0.10.0-dev", path = "../../../primitives/consensus/babe" }
|
||||
substrate-test-runtime-client = { version = "2.0.0", path = "../../../test-utils/runtime/client" }
|
||||
|
||||
@@ -25,7 +25,7 @@ rand = "0.7.2"
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../api" }
|
||||
sc-network = { version = "0.10.0-dev", path = "../network" }
|
||||
sp-api = { version = "4.0.0-dev", path = "../../primitives/api" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-offchain = { version = "4.0.0-dev", path = "../../primitives/offchain" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sc-utils = { version = "4.0.0-dev", path = "../utils" }
|
||||
|
||||
@@ -23,7 +23,7 @@ log = "0.4.8"
|
||||
parking_lot = "0.11.1"
|
||||
thiserror = "1.0"
|
||||
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-version = { version = "4.0.0-dev", path = "../../primitives/version" }
|
||||
sp-runtime = { path = "../../primitives/runtime", version = "4.0.0-dev" }
|
||||
sc-chain-spec = { path = "../chain-spec", version = "4.0.0-dev" }
|
||||
|
||||
@@ -20,7 +20,7 @@ codec = { package = "parity-scale-codec", version = "2.0.0" }
|
||||
futures = "0.3.16"
|
||||
jsonrpc-pubsub = "18.0.0"
|
||||
log = "0.4.8"
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
rpc = { package = "jsonrpc-core", version = "18.0.0" }
|
||||
sp-version = { version = "4.0.0-dev", path = "../../primitives/version" }
|
||||
serde_json = "1.0.71"
|
||||
|
||||
@@ -42,7 +42,7 @@ sp-externalities = { version = "0.10.0", path = "../../primitives/externalities"
|
||||
sc-utils = { version = "4.0.0-dev", path = "../utils" }
|
||||
sp-version = { version = "4.0.0-dev", path = "../../primitives/version" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-keystore = { version = "0.10.0-dev", path = "../../primitives/keystore" }
|
||||
sp-session = { version = "4.0.0-dev", path = "../../primitives/session" }
|
||||
sp-state-machine = { version = "0.10.0-dev", path = "../../primitives/state-machine" }
|
||||
|
||||
@@ -32,7 +32,7 @@ sc-network = { version = "0.10.0-dev", path = "../../network" }
|
||||
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
||||
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
||||
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
|
||||
sc-transaction-pool-api = { version = "4.0.0-dev", path = "../../../client/transaction-pool/api" }
|
||||
substrate-test-runtime = { version = "2.0.0", path = "../../../test-utils/runtime" }
|
||||
substrate-test-runtime-client = { version = "2.0.0", path = "../../../test-utils/runtime/client" }
|
||||
|
||||
@@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
||||
parking_lot = "0.11.1"
|
||||
log = "0.4.11"
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../api" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
codec = { package = "parity-scale-codec", version = "2.0.0", features = ["derive"] }
|
||||
parity-util-mem = { version = "0.10.2", default-features = false, features = ["primitive-types"] }
|
||||
parity-util-mem-derive = "0.1.0"
|
||||
|
||||
@@ -33,7 +33,7 @@ sp-rpc = { version = "4.0.0-dev", path = "../../primitives/rpc" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||
sp-api = { version = "4.0.0-dev", path = "../../primitives/api" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../api" }
|
||||
sc-tracing-proc-macro = { version = "4.0.0-dev", path = "./proc-macro" }
|
||||
sc-rpc-server = { version = "4.0.0-dev", path = "../rpc-servers" }
|
||||
|
||||
@@ -23,7 +23,7 @@ parking_lot = "0.11.1"
|
||||
prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.10.0-dev"}
|
||||
sc-client-api = { version = "4.0.0-dev", path = "../api" }
|
||||
sp-api = { version = "4.0.0-dev", path = "../../primitives/api" }
|
||||
sp-core = { version = "4.0.0", path = "../../primitives/core" }
|
||||
sp-core = { version = "4.1.0-dev", path = "../../primitives/core" }
|
||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||
sp-tracing = { version = "4.0.0", path = "../../primitives/tracing" }
|
||||
sp-transaction-pool = { version = "4.0.0-dev", path = "../../primitives/transaction-pool" }
|
||||
|
||||
Reference in New Issue
Block a user