Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
inspect-key: Adds support for expect-public (#10430)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
bkchr and andresilva committed Dec 11, 2021
1 parent 5f49f14 commit a991b0a
Show file tree
Hide file tree
Showing 152 changed files with 413 additions and 165 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion bin/node-template/node/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ name = "node-template"
structopt = "0.3.25"

sc-cli = { version = "0.10.0-dev", path = "../../../client/cli", features = ["wasmtime"] }
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
sc-executor = { version = "0.10.0-dev", path = "../../../client/executor", features = ["wasmtime"] }
sc-service = { version = "0.10.0-dev", path = "../../../client/service", features = ["wasmtime"] }
sc-telemetry = { version = "4.0.0-dev", path = "../../../client/telemetry" }
Expand Down
2 changes: 1 addition & 1 deletion bin/node-template/pallets/template/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ frame-system = { default-features = false, version = "4.0.0-dev", path = "../../
frame-benchmarking = { default-features = false, version = "4.0.0-dev", path = "../../../../frame/benchmarking", optional = true }

[dev-dependencies]
sp-core = { default-features = false, version = "4.0.0", path = "../../../../primitives/core" }
sp-core = { default-features = false, version = "4.1.0-dev", path = "../../../../primitives/core" }
sp-io = { default-features = false, version = "4.0.0-dev", path = "../../../../primitives/io" }
sp-runtime = { default-features = false, version = "4.0.0-dev", path = "../../../../primitives/runtime" }

Expand Down
2 changes: 1 addition & 1 deletion bin/node-template/runtime/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ frame-executive = { version = "4.0.0-dev", default-features = false, path = "../
sp-api = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/api" }
sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "4.0.0-dev"}
sp-consensus-aura = { version = "0.10.0-dev", default-features = false, path = "../../../primitives/consensus/aura" }
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-inherents = { path = "../../../primitives/inherents", default-features = false, version = "4.0.0-dev"}
sp-offchain = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/offchain" }
sp-runtime = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/runtime" }
Expand Down
2 changes: 1 addition & 1 deletion bin/node/bench/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ derive_more = "0.99.16"
kvdb = "0.10.0"
kvdb-rocksdb = "0.14.0"
sp-trie = { version = "4.0.0-dev", path = "../../../primitives/trie" }
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
sc-basic-authorship = { version = "0.10.0-dev", path = "../../../client/basic-authorship" }
sp-inherents = { version = "4.0.0-dev", path = "../../../primitives/inherents" }
Expand Down
2 changes: 1 addition & 1 deletion bin/node/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ sp-authority-discovery = { version = "4.0.0-dev", path = "../../../primitives/au
sp-consensus-babe = { version = "0.10.0-dev", path = "../../../primitives/consensus/babe" }
grandpa-primitives = { version = "4.0.0-dev", package = "sp-finality-grandpa", path = "../../../primitives/finality-grandpa" }
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-timestamp = { version = "4.0.0-dev", path = "../../../primitives/timestamp" }
sp-authorship = { version = "4.0.0-dev", path = "../../../primitives/authorship" }
Expand Down
2 changes: 1 addition & 1 deletion bin/node/executor/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ scale-info = { version = "1.0", features = ["derive"] }
node-primitives = { version = "2.0.0", path = "../primitives" }
node-runtime = { version = "3.0.0-dev", path = "../runtime" }
sc-executor = { version = "0.10.0-dev", path = "../../../client/executor" }
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-state-machine = { version = "0.10.0-dev", path = "../../../primitives/state-machine" }
sp-tracing = { version = "4.0.0", path = "../../../primitives/tracing" }
Expand Down
2 changes: 1 addition & 1 deletion bin/node/inspect/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ sc-client-api = { version = "4.0.0-dev", path = "../../../client/api" }
sc-executor = { version = "0.10.0-dev", path = "../../../client/executor" }
sc-service = { version = "0.10.0-dev", default-features = false, path = "../../../client/service" }
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" }
structopt = "0.3.8"
2 changes: 1 addition & 1 deletion bin/node/primitives/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ codec = { package = "parity-scale-codec", version = "2.0.0", default-features =
scale-info = { version = "1.0", default-features = false, features = ["derive"] }
frame-system = { version = "4.0.0-dev", default-features = false, path = "../../../frame/system" }
sp-application-crypto = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/application-crypto" }
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-runtime = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/runtime" }

[features]
Expand Down
2 changes: 1 addition & 1 deletion bin/node/runtime/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ sp-block-builder = { path = "../../../primitives/block-builder", default-feature
sp-inherents = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/inherents" }
node-primitives = { version = "2.0.0", default-features = false, path = "../primitives" }
sp-offchain = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/offchain" }
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-std = { version = "4.0.0", default-features = false, path = "../../../primitives/std" }
sp-api = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/api" }
sp-runtime = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/runtime" }
Expand Down
2 changes: 1 addition & 1 deletion bin/node/testing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ sp-keyring = { version = "4.0.0-dev", path = "../../../primitives/keyring" }
node-executor = { version = "3.0.0-dev", path = "../executor" }
node-primitives = { version = "2.0.0", path = "../primitives" }
node-runtime = { version = "3.0.0-dev", path = "../runtime" }
sp-core = { version = "4.0.0", path = "../../../primitives/core" }
sp-core = { version = "4.1.0-dev", path = "../../../primitives/core" }
sp-io = { version = "4.0.0-dev", path = "../../../primitives/io" }
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
sc-executor = { version = "0.10.0-dev", path = "../../../client/executor", features = [
Expand Down
2 changes: 1 addition & 1 deletion bin/utils/chain-spec-builder/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ ansi_term = "0.12.1"
sc-keystore = { version = "4.0.0-dev", path = "../../../client/keystore" }
sc-chain-spec = { version = "4.0.0-dev", path = "../../../client/chain-spec" }
node-cli = { version = "3.0.0-dev", path = "../../node/cli" }
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" }
rand = "0.7.2"
structopt = "0.3.25"
2 changes: 1 addition & 1 deletion client/allocator/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
2 changes: 1 addition & 1 deletion client/api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down
2 changes: 1 addition & 1 deletion client/authority-discovery/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down
2 changes: 1 addition & 1 deletion client/basic-authorship/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down
2 changes: 1 addition & 1 deletion client/beefy/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }

Expand Down
2 changes: 1 addition & 1 deletion client/beefy/rpc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "../." }
Expand Down
2 changes: 1 addition & 1 deletion client/block-builder/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down
2 changes: 1 addition & 1 deletion client/chain-spec/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down
2 changes: 1 addition & 1 deletion client/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down
149 changes: 149 additions & 0 deletions client/cli/src/commands/inspect_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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 {
Expand All @@ -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(
Expand All @@ -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]
Expand All @@ -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,
);
}
}
2 changes: 1 addition & 1 deletion client/consensus/aura/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down
2 changes: 1 addition & 1 deletion client/consensus/babe/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Loading

0 comments on commit a991b0a

Please sign in to comment.