Commits on Source (19)
...@@ -810,7 +810,8 @@ deploy-kubernetes-alerting-rules: ...@@ -810,7 +810,8 @@ deploy-kubernetes-alerting-rules:
refs: refs:
- master - master
changes: changes:
- "${RULES}" - .gitlab-ci.yml
- .maintain/monitoring/
......
...@@ -395,9 +395,9 @@ dependencies = [ ...@@ -395,9 +395,9 @@ dependencies = [
[[package]] [[package]]
name = "bindgen" name = "bindgen"
version = "0.53.3" version = "0.54.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c72a978d268b1d70b0e963217e60fdabd9523a941457a6c42a7315d15c7e89e5" checksum = "66c0bb6167449588ff70803f4127f0684f9063097eca5016f37eb52b92c2cf36"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cexpr", "cexpr",
...@@ -776,6 +776,15 @@ dependencies = [ ...@@ -776,6 +776,15 @@ dependencies = [
"bitflags", "bitflags",
] ]
[[package]]
name = "cloudabi"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467"
dependencies = [
"bitflags",
]
[[package]] [[package]]
name = "cmake" name = "cmake"
version = "0.1.44" version = "0.1.44"
...@@ -1486,9 +1495,9 @@ checksum = "36a9cb09840f81cd211e435d00a4e487edd263dc3c8ff815c32dd76ad668ebed" ...@@ -1486,9 +1495,9 @@ checksum = "36a9cb09840f81cd211e435d00a4e487edd263dc3c8ff815c32dd76ad668ebed"
[[package]] [[package]]
name = "fdlimit" name = "fdlimit"
version = "0.1.4" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0da54a593b34c71b889ee45f5b5bb900c74148c5f7f8c6a9479ee7899f69603c" checksum = "47bc6e222b8349b2bd0acb85a1d16d22852376b3ceed2a7f09c2692c3d8a78d0"
dependencies = [ dependencies = [
"libc", "libc",
] ]
...@@ -2474,6 +2483,12 @@ dependencies = [ ...@@ -2474,6 +2483,12 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "instant"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485"
[[package]] [[package]]
name = "integer-sqrt" name = "integer-sqrt"
version = "0.1.3" version = "0.1.3"
...@@ -2735,9 +2750,9 @@ dependencies = [ ...@@ -2735,9 +2750,9 @@ dependencies = [
[[package]] [[package]]
name = "kvdb-rocksdb" name = "kvdb-rocksdb"
version = "0.9.0" version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c341ef15cfb1f923fa3b5138bfbd2d4813a2c1640b473727a53351c7f0b0fa2" checksum = "44947dd392f09475af614d740fe0320b66d01cb5b977f664bbbb5e45a70ea4c1"
dependencies = [ dependencies = [
"fs-swap", "fs-swap",
"kvdb", "kvdb",
...@@ -3246,9 +3261,9 @@ dependencies = [ ...@@ -3246,9 +3261,9 @@ dependencies = [
[[package]] [[package]]
name = "librocksdb-sys" name = "librocksdb-sys"
version = "6.7.4" version = "6.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "883213ae3d09bfc3d104aefe94b25ebb183b6f4d3a515b23b14817e1f4854005" checksum = "eb5b56f651c204634b936be2f92dbb42c36867e00ff7fe2405591f3b9fa66f09"
dependencies = [ dependencies = [
"bindgen", "bindgen",
"cc", "cc",
...@@ -3346,6 +3361,15 @@ dependencies = [ ...@@ -3346,6 +3361,15 @@ dependencies = [
"scopeguard 1.1.0", "scopeguard 1.1.0",
] ]
[[package]]
name = "lock_api"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28247cc5a5be2f05fbcd76dd0cf2c7d3b5400cb978a28042abcd4fa0b3f8261c"
dependencies = [
"scopeguard 1.1.0",
]
[[package]] [[package]]
name = "log" name = "log"
version = "0.4.11" version = "0.4.11"
...@@ -5277,6 +5301,17 @@ dependencies = [ ...@@ -5277,6 +5301,17 @@ dependencies = [
"parking_lot_core 0.7.2", "parking_lot_core 0.7.2",
] ]
[[package]]
name = "parking_lot"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4893845fa2ca272e647da5d0e46660a314ead9c2fdd9a883aabc32e481a8733"
dependencies = [
"instant",
"lock_api 0.4.1",
"parking_lot_core 0.8.0",
]
[[package]] [[package]]
name = "parking_lot_core" name = "parking_lot_core"
version = "0.4.0" version = "0.4.0"
...@@ -5297,7 +5332,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" ...@@ -5297,7 +5332,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"cloudabi", "cloudabi 0.0.3",
"libc", "libc",
"redox_syscall", "redox_syscall",
"rustc_version", "rustc_version",
...@@ -5312,7 +5347,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" ...@@ -5312,7 +5347,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"cloudabi", "cloudabi 0.0.3",
"libc",
"redox_syscall",
"smallvec 1.4.1",
"winapi 0.3.9",
]
[[package]]
name = "parking_lot_core"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b"
dependencies = [
"cfg-if",
"cloudabi 0.1.0",
"instant",
"libc", "libc",
"redox_syscall", "redox_syscall",
"smallvec 1.4.1", "smallvec 1.4.1",
...@@ -5573,14 +5623,15 @@ dependencies = [ ...@@ -5573,14 +5623,15 @@ dependencies = [
[[package]] [[package]]
name = "prometheus" name = "prometheus"
version = "0.9.0" version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd0ced56dee39a6e960c15c74dc48849d614586db2eaada6497477af7c7811cd" checksum = "30d70cf4412832bcac9cffe27906f4a66e450d323525e977168c70d1b36120ae"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"fnv", "fnv",
"lazy_static", "lazy_static",
"spin", "parking_lot 0.11.0",
"regex",
"thiserror", "thiserror",
] ]
...@@ -5719,7 +5770,7 @@ version = "0.5.6" ...@@ -5719,7 +5770,7 @@ version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"
dependencies = [ dependencies = [
"cloudabi", "cloudabi 0.0.3",
"fuchsia-cprng", "fuchsia-cprng",
"libc", "libc",
"rand_core 0.3.1", "rand_core 0.3.1",
...@@ -5847,7 +5898,7 @@ version = "0.1.3" ...@@ -5847,7 +5898,7 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
dependencies = [ dependencies = [
"cloudabi", "cloudabi 0.0.3",
"fuchsia-cprng", "fuchsia-cprng",
"libc", "libc",
"rand_core 0.4.2", "rand_core 0.4.2",
...@@ -6096,9 +6147,9 @@ dependencies = [ ...@@ -6096,9 +6147,9 @@ dependencies = [
[[package]] [[package]]
name = "rocksdb" name = "rocksdb"
version = "0.14.0" version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61aa17a99a2413cd71c1106691bf59dad7de0cd5099127f90e9d99c429c40d4a" checksum = "23d83c02c429044d58474eaf5ae31e062d0de894e21125b47437ec0edc1397e6"
dependencies = [ dependencies = [
"libc", "libc",
"librocksdb-sys", "librocksdb-sys",
...@@ -6911,6 +6962,7 @@ version = "0.8.0-rc6" ...@@ -6911,6 +6962,7 @@ version = "0.8.0-rc6"
dependencies = [ dependencies = [
"assert_matches", "assert_matches",
"async-std", "async-std",
"async-trait",
"bitflags", "bitflags",
"bs58", "bs58",
"bytes 0.5.6", "bytes 0.5.6",
...@@ -8619,14 +8671,15 @@ dependencies = [ ...@@ -8619,14 +8671,15 @@ dependencies = [
[[package]] [[package]]
name = "substrate-bip39" name = "substrate-bip39"
version = "0.4.1" version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c004e8166d6e0aa3a9d5fa673e5b7098ff25f930de1013a21341988151e681bb" checksum = "bed6646a0159b9935b5d045611560eeef842b78d7adc3ba36f5ca325a13a0236"
dependencies = [ dependencies = [
"hmac", "hmac",
"pbkdf2", "pbkdf2",
"schnorrkel", "schnorrkel",
"sha2 0.8.2", "sha2 0.8.2",
"zeroize",
] ]
[[package]] [[package]]
...@@ -9546,7 +9599,7 @@ version = "1.5.0" ...@@ -9546,7 +9599,7 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bfd5b7557925ce778ff9b9ef90e3ade34c524b5ff10e239c69a42d546d2af56" checksum = "3bfd5b7557925ce778ff9b9ef90e3ade34c524b5ff10e239c69a42d546d2af56"
dependencies = [ dependencies = [
"rand 0.5.6", "rand 0.7.3",
] ]
[[package]] [[package]]
......
use structopt::StructOpt; use structopt::StructOpt;
use sc_cli::{RunCmd, Subcommand}; use sc_cli::RunCmd;
#[derive(Debug, StructOpt)] #[derive(Debug, StructOpt)]
pub struct Cli { pub struct Cli {
...@@ -9,3 +9,27 @@ pub struct Cli { ...@@ -9,3 +9,27 @@ pub struct Cli {
#[structopt(flatten)] #[structopt(flatten)]
pub run: RunCmd, pub run: RunCmd,
} }
#[derive(Debug, StructOpt)]
pub enum Subcommand {
/// Build a chain specification.
BuildSpec(sc_cli::BuildSpecCmd),
/// Validate blocks.
CheckBlock(sc_cli::CheckBlockCmd),
/// Export blocks.
ExportBlocks(sc_cli::ExportBlocksCmd),
/// Export the state of a given block into a chain spec.
ExportState(sc_cli::ExportStateCmd),
/// Import blocks.
ImportBlocks(sc_cli::ImportBlocksCmd),
/// Remove the whole chain.
PurgeChain(sc_cli::PurgeChainCmd),
/// Revert the chain to a previous state.
Revert(sc_cli::RevertCmd),
}
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
// limitations under the License. // limitations under the License.
use crate::chain_spec; use crate::chain_spec;
use crate::cli::Cli; use crate::cli::{Cli, Subcommand};
use crate::service; use crate::service;
use sc_cli::{SubstrateCli, RuntimeVersion, Role, ChainSpec}; use sc_cli::{SubstrateCli, RuntimeVersion, Role, ChainSpec};
use sc_service::PartialComponents; use sc_service::PartialComponents;
...@@ -66,15 +66,55 @@ impl SubstrateCli for Cli { ...@@ -66,15 +66,55 @@ impl SubstrateCli for Cli {
pub fn run() -> sc_cli::Result<()> { pub fn run() -> sc_cli::Result<()> {
let cli = Cli::from_args(); let cli = Cli::from_args();
match cli.subcommand { match &cli.subcommand {
Some(ref subcommand) => { Some(Subcommand::BuildSpec(cmd)) => {
let runner = cli.create_runner(subcommand)?; let runner = cli.create_runner(cmd)?;
runner.run_subcommand(subcommand, |config| { runner.sync_run(|config| cmd.run(config.chain_spec, config.network))
let PartialComponents { client, backend, task_manager, import_queue, .. } },
Some(Subcommand::CheckBlock(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, import_queue, ..}
= new_partial(&config)?; = new_partial(&config)?;
Ok((client, backend, import_queue, task_manager)) Ok((cmd.run(client, import_queue), task_manager))
}) })
} },
Some(Subcommand::ExportBlocks(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, ..}
= new_partial(&config)?;
Ok((cmd.run(client, config.database), task_manager))
})
},
Some(Subcommand::ExportState(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, ..}
= new_partial(&config)?;
Ok((cmd.run(client, config.chain_spec), task_manager))
})
},
Some(Subcommand::ImportBlocks(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, import_queue, ..}
= new_partial(&config)?;
Ok((cmd.run(client, import_queue), task_manager))
})
},
Some(Subcommand::PurgeChain(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.sync_run(|config| cmd.run(config.database))
},
Some(Subcommand::Revert(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, backend, ..}
= new_partial(&config)?;
Ok((cmd.run(client, backend), task_manager))
})
},
None => { None => {
let runner = cli.create_runner(&cli.run)?; let runner = cli.create_runner(&cli.run)?;
runner.run_node_until_exit(|config| match config.role { runner.run_node_until_exit(|config| match config.role {
......
...@@ -22,7 +22,7 @@ serde_json = "1.0.41" ...@@ -22,7 +22,7 @@ serde_json = "1.0.41"
structopt = "0.3" structopt = "0.3"
derive_more = "0.99.2" derive_more = "0.99.2"
kvdb = "0.7" kvdb = "0.7"
kvdb-rocksdb = "0.9" kvdb-rocksdb = "0.9.1"
sp-trie = { version = "2.0.0-rc6", path = "../../../primitives/trie" } sp-trie = { version = "2.0.0-rc6", path = "../../../primitives/trie" }
sp-core = { version = "2.0.0-rc6", path = "../../../primitives/core" } sp-core = { version = "2.0.0-rc6", path = "../../../primitives/core" }
sp-consensus = { version = "0.8.0-rc6", path = "../../../primitives/consensus/common" } sp-consensus = { version = "0.8.0-rc6", path = "../../../primitives/consensus/common" }
......
#!/usr/bin/env sh #!/usr/bin/env sh
cargo +nightly build --release -p node-cli --target wasm32-unknown-unknown --no-default-features --features browser -Z features=itarget cargo +nightly build --release -p node-cli --target wasm32-unknown-unknown --no-default-features --features browser -Z features=itarget
wasm-bindgen ../../../../target/wasm32-unknown-unknown/release/node_cli.wasm --out-dir pkg --target web wasm-bindgen ../../../../target/wasm32-unknown-unknown/release/node_cli.wasm --out-dir pkg --target web
python -m SimpleHTTPServer 8000 python -m http.server 8000
...@@ -33,10 +33,6 @@ pub struct Cli { ...@@ -33,10 +33,6 @@ pub struct Cli {
/// Possible subcommands of the main binary. /// Possible subcommands of the main binary.
#[derive(Debug, StructOpt)] #[derive(Debug, StructOpt)]
pub enum Subcommand { pub enum Subcommand {
/// A set of base subcommands handled by `sc_cli`.
#[structopt(flatten)]
Base(sc_cli::Subcommand),
/// Key management cli utilities /// Key management cli utilities
Key(KeySubcommand), Key(KeySubcommand),
...@@ -59,4 +55,25 @@ pub enum Subcommand { ...@@ -59,4 +55,25 @@ pub enum Subcommand {
/// Sign a message, with a given (secret) key. /// Sign a message, with a given (secret) key.
Sign(SignCmd), Sign(SignCmd),
/// Build a chain specification.
BuildSpec(sc_cli::BuildSpecCmd),
/// Validate blocks.
CheckBlock(sc_cli::CheckBlockCmd),
/// Export blocks.
ExportBlocks(sc_cli::ExportBlocksCmd),
/// Export the state of a given block into a chain spec.
ExportState(sc_cli::ExportStateCmd),
/// Import blocks.
ImportBlocks(sc_cli::ImportBlocksCmd),
/// Remove the whole chain.
PurgeChain(sc_cli::PurgeChainCmd),
/// Revert the chain to a previous state.
Revert(sc_cli::RevertCmd),
} }
...@@ -97,13 +97,53 @@ pub fn run() -> Result<()> { ...@@ -97,13 +97,53 @@ pub fn run() -> Result<()> {
Some(Subcommand::Sign(cmd)) => cmd.run(), Some(Subcommand::Sign(cmd)) => cmd.run(),
Some(Subcommand::Verify(cmd)) => cmd.run(), Some(Subcommand::Verify(cmd)) => cmd.run(),
Some(Subcommand::Vanity(cmd)) => cmd.run(), Some(Subcommand::Vanity(cmd)) => cmd.run(),
Some(Subcommand::Base(subcommand)) => { Some(Subcommand::BuildSpec(cmd)) => {
let runner = cli.create_runner(subcommand)?; let runner = cli.create_runner(cmd)?;
runner.run_subcommand(subcommand, |config| { runner.sync_run(|config| cmd.run(config.chain_spec, config.network))
let PartialComponents { client, backend, task_manager, import_queue, ..} },
Some(Subcommand::CheckBlock(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, import_queue, ..}
= new_partial(&config)?; = new_partial(&config)?;
Ok((client, backend, import_queue, task_manager)) Ok((cmd.run(client, import_queue), task_manager))
}) })
} },
Some(Subcommand::ExportBlocks(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, ..}
= new_partial(&config)?;
Ok((cmd.run(client, config.database), task_manager))
})
},
Some(Subcommand::ExportState(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, ..}
= new_partial(&config)?;
Ok((cmd.run(client, config.chain_spec), task_manager))
})
},
Some(Subcommand::ImportBlocks(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, import_queue, ..}
= new_partial(&config)?;
Ok((cmd.run(client, import_queue), task_manager))
})
},
Some(Subcommand::PurgeChain(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.sync_run(|config| cmd.run(config.database))
},
Some(Subcommand::Revert(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, backend, ..}
= new_partial(&config)?;
Ok((cmd.run(client, backend), task_manager))
})
},
} }
} }
...@@ -509,6 +509,7 @@ impl pallet_democracy::Trait for Runtime { ...@@ -509,6 +509,7 @@ impl pallet_democracy::Trait for Runtime {
parameter_types! { parameter_types! {
pub const CouncilMotionDuration: BlockNumber = 5 * DAYS; pub const CouncilMotionDuration: BlockNumber = 5 * DAYS;
pub const CouncilMaxProposals: u32 = 100; pub const CouncilMaxProposals: u32 = 100;
pub const CouncilMaxMembers: u32 = 100;
} }
type CouncilCollective = pallet_collective::Instance1; type CouncilCollective = pallet_collective::Instance1;
...@@ -518,7 +519,8 @@ impl pallet_collective::Trait<CouncilCollective> for Runtime { ...@@ -518,7 +519,8 @@ impl pallet_collective::Trait<CouncilCollective> for Runtime {
type Event = Event; type Event = Event;
type MotionDuration = CouncilMotionDuration; type MotionDuration = CouncilMotionDuration;
type MaxProposals = CouncilMaxProposals; type MaxProposals = CouncilMaxProposals;
type WeightInfo = (); type MaxMembers = CouncilMaxMembers;
type WeightInfo = weights::pallet_collective::WeightInfo;
} }
parameter_types! { parameter_types! {
...@@ -530,8 +532,8 @@ parameter_types! { ...@@ -530,8 +532,8 @@ parameter_types! {
pub const ElectionsPhragmenModuleId: LockIdentifier = *b"phrelect"; pub const ElectionsPhragmenModuleId: LockIdentifier = *b"phrelect";
} }
// Make sure that there are no more than `MAX_MEMBERS` members elected via elections-phragmen. // Make sure that there are no more than `MaxMembers` members elected via elections-phragmen.
const_assert!(DesiredMembers::get() <= pallet_collective::MAX_MEMBERS); const_assert!(DesiredMembers::get() <= CouncilMaxMembers::get());
impl pallet_elections_phragmen::Trait for Runtime { impl pallet_elections_phragmen::Trait for Runtime {
type Event = Event; type Event = Event;
...@@ -556,6 +558,7 @@ impl pallet_elections_phragmen::Trait for Runtime { ...@@ -556,6 +558,7 @@ impl pallet_elections_phragmen::Trait for Runtime {
parameter_types! { parameter_types! {
pub const TechnicalMotionDuration: BlockNumber = 5 * DAYS; pub const TechnicalMotionDuration: BlockNumber = 5 * DAYS;
pub const TechnicalMaxProposals: u32 = 100; pub const TechnicalMaxProposals: u32 = 100;
pub const TechnicalMaxMembers: u32 = 100;
} }
type TechnicalCollective = pallet_collective::Instance2; type TechnicalCollective = pallet_collective::Instance2;
...@@ -565,7 +568,8 @@ impl pallet_collective::Trait<TechnicalCollective> for Runtime { ...@@ -565,7 +568,8 @@ impl pallet_collective::Trait<TechnicalCollective> for Runtime {
type Event = Event; type Event = Event;
type MotionDuration = TechnicalMotionDuration; type MotionDuration = TechnicalMotionDuration;
type MaxProposals = TechnicalMaxProposals; type MaxProposals = TechnicalMaxProposals;
type WeightInfo = (); type MaxMembers = TechnicalMaxMembers;
type WeightInfo = weights::pallet_collective::WeightInfo;
} }
type EnsureRootOrHalfCouncil = EnsureOneOf< type EnsureRootOrHalfCouncil = EnsureOneOf<
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
pub mod frame_system; pub mod frame_system;
pub mod pallet_balances; pub mod pallet_balances;
pub mod pallet_collective;
pub mod pallet_democracy; pub mod pallet_democracy;
pub mod pallet_proxy; pub mod pallet_proxy;
pub mod pallet_timestamp; pub mod pallet_timestamp;
......
// Copyright (C) 2020 Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: Apache-2.0
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0-rc6
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::weights::{Weight, constants::RocksDbWeight as DbWeight};
pub struct WeightInfo;
impl pallet_collective::WeightInfo for WeightInfo {
fn set_members(m: u32, n: u32, p: u32, ) -> Weight {
(0 as Weight)
.saturating_add((21040000 as Weight).saturating_mul(m as Weight))
.saturating_add((173000 as Weight).saturating_mul(n as Weight))
.saturating_add((31595000 as Weight).saturating_mul(p as Weight))
.saturating_add(DbWeight::get().reads(2 as Weight))
.saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(p as Weight)))
.saturating_add(DbWeight::get().writes(2 as Weight))
.saturating_add(DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight)))
}
fn execute(b: u32, m: u32, ) -> Weight {
(43359000 as Weight)
.saturating_add((4000 as Weight).saturating_mul(b as Weight))
.saturating_add((123000 as Weight).saturating_mul(m as Weight))
.saturating_add(DbWeight::get().reads(1 as Weight))
}
fn propose_execute(b: u32, m: u32, ) -> Weight {
(54134000 as Weight)
.saturating_add((4000 as Weight).saturating_mul(b as Weight))
.saturating_add((239000 as Weight).saturating_mul(m as Weight))
.saturating_add(DbWeight::get().reads(2 as Weight))
}
fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight {
(90650000 as Weight)
.saturating_add((5000 as Weight).saturating_mul(b as Weight))
.saturating_add((152000 as Weight).saturating_mul(m as Weight))
.saturating_add((970000 as Weight).saturating_mul(p as Weight))
.saturating_add(DbWeight::get().reads(4 as Weight))
.saturating_add(DbWeight::get().writes(4 as Weight))
}
fn vote(m: u32, ) -> Weight {
(74460000 as Weight)
.saturating_add((290000 as Weight).saturating_mul(m as Weight))
.saturating_add(DbWeight::get().reads(2 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
}
fn close_early_disapproved(m: u32, p: u32, ) -> Weight {
(86360000 as Weight)
.saturating_add((232000 as Weight).saturating_mul(m as Weight))
.saturating_add((954000 as Weight).saturating_mul(p as Weight))
.saturating_add(DbWeight::get().reads(3 as Weight))
.saturating_add(DbWeight::get().writes(3 as Weight))
}
fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight {
(123653000 as Weight)
.saturating_add((1000 as Weight).saturating_mul(b as Weight))
.saturating_add((287000 as Weight).saturating_mul(m as Weight))
.saturating_add((920000 as Weight).saturating_mul(p as Weight))
.saturating_add(DbWeight::get().reads(4 as Weight))
.saturating_add(DbWeight::get().writes(3 as Weight))
}
fn close_disapproved(m: u32, p: u32, ) -> Weight {
(95395000 as Weight)
.saturating_add((236000 as Weight).saturating_mul(m as Weight))
.saturating_add((965000 as Weight).saturating_mul(p as Weight))
.saturating_add(DbWeight::get().reads(4 as Weight))
.saturating_add(DbWeight::get().writes(3 as Weight))
}
fn close_approved(b: u32, m: u32, p: u32, ) -> Weight {
(135284000 as Weight)
.saturating_add((4000 as Weight).saturating_mul(b as Weight))
.saturating_add((218000 as Weight).saturating_mul(m as Weight))
.saturating_add((951000 as Weight).saturating_mul(p as Weight))
.saturating_add(DbWeight::get().reads(5 as Weight))
.saturating_add(DbWeight::get().writes(3 as Weight))
}
fn disapprove_proposal(p: u32, ) -> Weight {
(50500000 as Weight)
.saturating_add((966000 as Weight).saturating_mul(p as Weight))
.saturating_add(DbWeight::get().reads(1 as Weight))
.saturating_add(DbWeight::get().writes(3 as Weight))
}
}
...@@ -22,7 +22,7 @@ ansi_term = "0.12.1" ...@@ -22,7 +22,7 @@ ansi_term = "0.12.1"
lazy_static = "1.4.0" lazy_static = "1.4.0"
tokio = { version = "0.2.21", features = [ "signal", "rt-core", "rt-threaded", "blocking" ] } tokio = { version = "0.2.21", features = [ "signal", "rt-core", "rt-threaded", "blocking" ] }
futures = "0.3.4" futures = "0.3.4"
fdlimit = "0.1.4" fdlimit = "0.2.0"
libp2p = "0.24.0" libp2p = "0.24.0"
parity-scale-codec = "1.3.0" parity-scale-codec = "1.3.0"
hex = "0.4.2" hex = "0.4.2"
......
...@@ -34,9 +34,6 @@ mod inspect; ...@@ -34,9 +34,6 @@ mod inspect;
mod key; mod key;
pub mod utils; pub mod utils;
use std::fmt::Debug;
use structopt::StructOpt;
pub use self::{ pub use self::{
build_spec_cmd::BuildSpecCmd, build_spec_cmd::BuildSpecCmd,
check_block_cmd::CheckBlockCmd, check_block_cmd::CheckBlockCmd,
...@@ -56,403 +53,3 @@ pub use self::{ ...@@ -56,403 +53,3 @@ pub use self::{
revert_cmd::RevertCmd, revert_cmd::RevertCmd,
run_cmd::RunCmd, run_cmd::RunCmd,
}; };
/// All core commands that are provided by default.
///
/// The core commands are split into multiple subcommands and `Run` is the default subcommand. From
/// the CLI user perspective, it is not visible that `Run` is a subcommand. So, all parameters of
/// `Run` are exported as main executable parameters.
#[derive(Debug, StructOpt)]
pub enum Subcommand {
/// Build a spec.json file, outputs to stdout.
BuildSpec(BuildSpecCmd),
/// Export blocks to a file.
ExportBlocks(ExportBlocksCmd),
/// Import blocks from file.
ImportBlocks(ImportBlocksCmd),
/// Validate a single block.
CheckBlock(CheckBlockCmd),
/// Export state as raw chain spec.
ExportState(ExportStateCmd),
/// Revert chain to the previous state.
Revert(RevertCmd),
/// Remove the whole chain data.
PurgeChain(PurgeChainCmd),
}
/// Macro that helps implement CliConfiguration on an enum of subcommand automatically
///
/// # Example
///
/// ```
/// # #[macro_use] extern crate sc_cli;
///
/// # struct EmptyVariant {}
///
/// # impl sc_cli::CliConfiguration for EmptyVariant {
/// # fn shared_params(&self) -> &sc_cli::SharedParams { unimplemented!() }
/// # fn chain_id(&self, _: bool) -> sc_cli::Result<String> { Ok("test-chain-id".to_string()) }
/// # }
///
/// # fn main() {
/// enum Subcommand {
/// Variant1(EmptyVariant),
/// Variant2(EmptyVariant),
/// }
///
/// substrate_cli_subcommands!(
/// Subcommand => Variant1, Variant2
/// );
///
/// # use sc_cli::CliConfiguration;
/// # assert_eq!(Subcommand::Variant1(EmptyVariant {}).chain_id(false).unwrap(), "test-chain-id");
///
/// # }
/// ```
///
/// Which will expand to:
///
/// ```ignore
/// impl CliConfiguration for Subcommand {
/// fn base_path(&self) -> Result<Option<PathBuf>> {
/// match self {
/// Subcommand::Variant1(cmd) => cmd.base_path(),
/// Subcommand::Variant2(cmd) => cmd.base_path(),
/// }
/// }
///
/// fn is_dev(&self) -> Result<bool> {
/// match self {
/// Subcommand::Variant1(cmd) => cmd.is_dev(),
/// Subcommand::Variant2(cmd) => cmd.is_dev(),
/// }
/// }
///
/// // ...
/// }
/// ```
#[macro_export]
macro_rules! substrate_cli_subcommands {
($enum:ident => $($variant:ident),*) => {
impl $crate::CliConfiguration for $enum {
fn shared_params(&self) -> &$crate::SharedParams {
match self {
$($enum::$variant(cmd) => cmd.shared_params()),*
}
}
fn import_params(&self) -> Option<&$crate::ImportParams> {
match self {
$($enum::$variant(cmd) => cmd.import_params()),*
}
}
fn pruning_params(&self) -> Option<&$crate::PruningParams> {
match self {
$($enum::$variant(cmd) => cmd.pruning_params()),*
}
}
fn keystore_params(&self) -> Option<&$crate::KeystoreParams> {
match self {
$($enum::$variant(cmd) => cmd.keystore_params()),*
}
}
fn network_params(&self) -> Option<&$crate::NetworkParams> {
match self {
$($enum::$variant(cmd) => cmd.network_params()),*
}
}
fn offchain_worker_params(&self) -> Option<&$crate::OffchainWorkerParams> {
match self {
$($enum::$variant(cmd) => cmd.offchain_worker_params()),*
}
}
fn database_params(&self) -> Option<&$crate::DatabaseParams> {
match self {
$($enum::$variant(cmd) => cmd.database_params()),*
}
}
fn base_path(&self) -> $crate::Result<::std::option::Option<sc_service::config::BasePath>> {
match self {
$($enum::$variant(cmd) => cmd.base_path()),*
}
}
fn is_dev(&self) -> $crate::Result<bool> {
match self {
$($enum::$variant(cmd) => cmd.is_dev()),*
}
}
fn role(&self, is_dev: bool) -> $crate::Result<::sc_service::Role> {
match self {
$($enum::$variant(cmd) => cmd.role(is_dev)),*
}
}
fn transaction_pool(&self)
-> $crate::Result<::sc_service::config::TransactionPoolOptions> {
match self {
$($enum::$variant(cmd) => cmd.transaction_pool()),*
}
}
fn network_config(
&self,
chain_spec: &std::boxed::Box<dyn sc_service::ChainSpec>,
is_dev: bool,
net_config_dir: std::path::PathBuf,
client_id: &str,
node_name: &str,
node_key: sc_service::config::NodeKeyConfig,
default_listen_port: u16,
) -> $crate::Result<::sc_service::config::NetworkConfiguration> {
match self {
$(
$enum::$variant(cmd) => cmd.network_config(
chain_spec,
is_dev,
net_config_dir,
client_id,
node_name,
node_key,
default_listen_port,
)
),*
}
}
fn keystore_config(&self, base_path: &::std::path::PathBuf)
-> $crate::Result<::sc_service::config::KeystoreConfig> {
match self {
$($enum::$variant(cmd) => cmd.keystore_config(base_path)),*
}
}
fn database_cache_size(&self) -> $crate::Result<::std::option::Option<usize>> {
match self {
$($enum::$variant(cmd) => cmd.database_cache_size()),*
}
}
fn database_config(
&self,
base_path: &::std::path::PathBuf,
cache_size: usize,
database: $crate::Database,
) -> $crate::Result<::sc_service::config::DatabaseConfig> {
match self {
$($enum::$variant(cmd) => cmd.database_config(base_path, cache_size, database)),*
}
}
fn database(&self) -> $crate::Result<::std::option::Option<$crate::Database>> {
match self {
$($enum::$variant(cmd) => cmd.database()),*
}
}
fn state_cache_size(&self) -> $crate::Result<usize> {
match self {
$($enum::$variant(cmd) => cmd.state_cache_size()),*
}
}
fn state_cache_child_ratio(&self) -> $crate::Result<::std::option::Option<usize>> {
match self {
$($enum::$variant(cmd) => cmd.state_cache_child_ratio()),*
}
}
fn pruning(&self, unsafe_pruning: bool, role: &::sc_service::Role)
-> $crate::Result<::sc_service::config::PruningMode> {
match self {
$($enum::$variant(cmd) => cmd.pruning(unsafe_pruning, role)),*
}
}
fn chain_id(&self, is_dev: bool) -> $crate::Result<String> {
match self {
$($enum::$variant(cmd) => cmd.chain_id(is_dev)),*
}
}
fn init<C: $crate::SubstrateCli>(&self) -> $crate::Result<()> {
match self {
$($enum::$variant(cmd) => cmd.init::<C>()),*
}
}
fn node_name(&self) -> $crate::Result<String> {
match self {
$($enum::$variant(cmd) => cmd.node_name()),*
}
}
fn wasm_method(&self) -> $crate::Result<::sc_service::config::WasmExecutionMethod> {
match self {
$($enum::$variant(cmd) => cmd.wasm_method()),*
}
}
fn execution_strategies(&self, is_dev: bool, is_validator: bool)
-> $crate::Result<::sc_client_api::execution_extensions::ExecutionStrategies> {
match self {
$($enum::$variant(cmd) => cmd.execution_strategies(is_dev, is_validator)),*
}
}
fn rpc_ipc(&self) -> $crate::Result<::std::option::Option<::std::string::String>> {
match self {
$($enum::$variant(cmd) => cmd.rpc_ipc()),*
}
}
fn rpc_http(
&self,
default_listen_port: u16,
) -> $crate::Result<std::option::Option<std::net::SocketAddr>> {
match self {
$($enum::$variant(cmd) => cmd.rpc_http(default_listen_port)),*
}
}
fn rpc_ws(
&self,
default_listen_port: u16,
) -> $crate::Result<std::option::Option<std::net::SocketAddr>> {
match self {
$($enum::$variant(cmd) => cmd.rpc_ws(default_listen_port)),*
}
}
fn rpc_methods(&self) -> $crate::Result<sc_service::config::RpcMethods> {
match self {
$($enum::$variant(cmd) => cmd.rpc_methods()),*
}
}
fn rpc_ws_max_connections(&self) -> $crate::Result<::std::option::Option<usize>> {
match self {
$($enum::$variant(cmd) => cmd.rpc_ws_max_connections()),*
}
}
fn rpc_cors(&self, is_dev: bool)
-> $crate::Result<std::option::Option<std::vec::Vec<String>>> {
match self {
$($enum::$variant(cmd) => cmd.rpc_cors(is_dev)),*
}
}
fn prometheus_config(&self, default_listen_port: u16)
-> $crate::Result<std::option::Option<sc_service::config::PrometheusConfig>> {
match self {
$($enum::$variant(cmd) => cmd.prometheus_config(default_listen_port)),*
}
}
fn telemetry_endpoints(
&self,
chain_spec: &Box<dyn sc_service::ChainSpec>,
) -> $crate::Result<std::option::Option<sc_service::config::TelemetryEndpoints>> {
match self {
$($enum::$variant(cmd) => cmd.telemetry_endpoints(chain_spec)),*
}
}
fn telemetry_external_transport(&self)
-> $crate::Result<::std::option::Option<::sc_service::config::ExtTransport>> {
match self {
$($enum::$variant(cmd) => cmd.telemetry_external_transport()),*
}
}
fn default_heap_pages(&self) -> $crate::Result<::std::option::Option<u64>> {
match self {
$($enum::$variant(cmd) => cmd.default_heap_pages()),*
}
}
fn offchain_worker(
&self,
role: &::sc_service::Role,
) -> $crate::Result<::sc_service::config::OffchainWorkerConfig> {
match self {
$($enum::$variant(cmd) => cmd.offchain_worker(role)),*
}
}
fn force_authoring(&self) -> $crate::Result<bool> {
match self {
$($enum::$variant(cmd) => cmd.force_authoring()),*
}
}
fn disable_grandpa(&self) -> $crate::Result<bool> {
match self {
$($enum::$variant(cmd) => cmd.disable_grandpa()),*
}
}
fn dev_key_seed(&self, is_dev: bool) -> $crate::Result<::std::option::Option<String>> {
match self {
$($enum::$variant(cmd) => cmd.dev_key_seed(is_dev)),*
}
}
fn tracing_targets(&self) -> $crate::Result<::std::option::Option<String>> {
match self {
$($enum::$variant(cmd) => cmd.tracing_targets()),*
}
}
fn tracing_receiver(&self) -> $crate::Result<::sc_service::TracingReceiver> {
match self {
$($enum::$variant(cmd) => cmd.tracing_receiver()),*
}
}
fn node_key(&self, net_config_dir: &::std::path::PathBuf)
-> $crate::Result<::sc_service::config::NodeKeyConfig> {
match self {
$($enum::$variant(cmd) => cmd.node_key(net_config_dir)),*
}
}
fn max_runtime_instances(&self) -> $crate::Result<::std::option::Option<usize>> {
match self {
$($enum::$variant(cmd) => cmd.max_runtime_instances()),*
}
}
fn log_filters(&self) -> $crate::Result<String> {
match self {
$($enum::$variant(cmd) => cmd.log_filters()),*
}
}
}
}
}
substrate_cli_subcommands!(
Subcommand =>
BuildSpec,
ExportBlocks,
ExportState,
ImportBlocks,
CheckBlock,
Revert,
PurgeChain
);
...@@ -24,6 +24,7 @@ use crate::{ ...@@ -24,6 +24,7 @@ use crate::{
init_logger, DatabaseParams, ImportParams, KeystoreParams, NetworkParams, NodeKeyParams, init_logger, DatabaseParams, ImportParams, KeystoreParams, NetworkParams, NodeKeyParams,
OffchainWorkerParams, PruningParams, SharedParams, SubstrateCli, OffchainWorkerParams, PruningParams, SharedParams, SubstrateCli,
}; };
use log::warn;
use names::{Generator, Name}; use names::{Generator, Name};
use sc_client_api::execution_extensions::ExecutionStrategies; use sc_client_api::execution_extensions::ExecutionStrategies;
use sc_service::config::{ use sc_service::config::{
...@@ -38,9 +39,12 @@ use std::path::PathBuf; ...@@ -38,9 +39,12 @@ use std::path::PathBuf;
/// The maximum number of characters for a node name. /// The maximum number of characters for a node name.
pub(crate) const NODE_NAME_MAX_LENGTH: usize = 64; pub(crate) const NODE_NAME_MAX_LENGTH: usize = 64;
/// default sub directory to store network config /// Default sub directory to store network config.
pub(crate) const DEFAULT_NETWORK_CONFIG_PATH: &'static str = "network"; pub(crate) const DEFAULT_NETWORK_CONFIG_PATH: &'static str = "network";
/// The recommended open file descriptor limit to be configured for the process.
const RECOMMENDED_OPEN_FILE_DESCRIPTOR_LIMIT: u64 = 10_000;
/// Default configuration values used by Substrate /// Default configuration values used by Substrate
/// ///
/// These values will be used by [`CliConfiguritation`] to set /// These values will be used by [`CliConfiguritation`] to set
...@@ -531,17 +535,26 @@ pub trait CliConfiguration<DCV: DefaultConfigurationValues = ()>: Sized { ...@@ -531,17 +535,26 @@ pub trait CliConfiguration<DCV: DefaultConfigurationValues = ()>: Sized {
/// ///
/// This method: /// This method:
/// ///
/// 1. Set the panic handler /// 1. Sets the panic handler
/// 2. Raise the FD limit /// 2. Initializes the logger
/// 3. Initialize the logger /// 3. Raises the FD limit
fn init<C: SubstrateCli>(&self) -> Result<()> { fn init<C: SubstrateCli>(&self) -> Result<()> {
let logger_pattern = self.log_filters()?; let logger_pattern = self.log_filters()?;
sp_panic_handler::set(&C::support_url(), &C::impl_version()); sp_panic_handler::set(&C::support_url(), &C::impl_version());
fdlimit::raise_fd_limit();
init_logger(&logger_pattern); init_logger(&logger_pattern);
if let Some(new_limit) = fdlimit::raise_fd_limit() {
if new_limit < RECOMMENDED_OPEN_FILE_DESCRIPTOR_LIMIT {
warn!(
"Low open file descriptor limit configured for the process. \
Current value: {:?}, recommended value: {:?}.",
new_limit, RECOMMENDED_OPEN_FILE_DESCRIPTOR_LIMIT,
);
}
}
Ok(()) Ok(())
} }
} }
......
...@@ -148,6 +148,7 @@ impl NetworkParams { ...@@ -148,6 +148,7 @@ impl NetworkParams {
listen_addresses, listen_addresses,
public_addresses, public_addresses,
notifications_protocols: Vec::new(), notifications_protocols: Vec::new(),
request_response_protocols: Vec::new(),
node_key, node_key,
node_name: node_name.to_string(), node_name: node_name.to_string(),
client_version: client_id.to_string(), client_version: client_id.to_string(),
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
use crate::CliConfiguration; use crate::CliConfiguration;
use crate::Result; use crate::Result;
use crate::Subcommand;
use crate::SubstrateCli; use crate::SubstrateCli;
use chrono::prelude::*; use chrono::prelude::*;
use futures::pin_mut; use futures::pin_mut;
...@@ -26,10 +25,8 @@ use futures::select; ...@@ -26,10 +25,8 @@ use futures::select;
use futures::{future, future::FutureExt, Future}; use futures::{future, future::FutureExt, Future};
use log::info; use log::info;
use sc_service::{Configuration, TaskType, TaskManager}; use sc_service::{Configuration, TaskType, TaskManager};
use sp_runtime::traits::{Block as BlockT, Header as HeaderT};
use sp_utils::metrics::{TOKIO_THREADS_ALIVE, TOKIO_THREADS_TOTAL}; use sp_utils::metrics::{TOKIO_THREADS_ALIVE, TOKIO_THREADS_TOTAL};
use std::{fmt::Debug, marker::PhantomData, str::FromStr, sync::Arc}; use std::marker::PhantomData;
use sc_client_api::{UsageProvider, BlockBackend, StorageProvider};
#[cfg(target_family = "unix")] #[cfg(target_family = "unix")]
async fn main<F, E>(func: F) -> std::result::Result<(), Box<dyn std::error::Error>> async fn main<F, E>(func: F) -> std::result::Result<(), Box<dyn std::error::Error>>
...@@ -173,52 +170,6 @@ impl<C: SubstrateCli> Runner<C> { ...@@ -173,52 +170,6 @@ impl<C: SubstrateCli> Runner<C> {
info!("⛓ Native runtime: {}", C::native_runtime_version(&self.config.chain_spec)); info!("⛓ Native runtime: {}", C::native_runtime_version(&self.config.chain_spec));
} }
/// A helper function that runs a future with tokio and stops if the process receives the signal
/// `SIGTERM` or `SIGINT`.
pub fn run_subcommand<BU, B, BA, IQ, CL>(self, subcommand: &Subcommand, builder: BU)
-> Result<()>
where
BU: FnOnce(Configuration)
-> sc_service::error::Result<(Arc<CL>, Arc<BA>, IQ, TaskManager)>,
B: BlockT + for<'de> serde::Deserialize<'de>,
BA: sc_client_api::backend::Backend<B> + 'static,
IQ: sc_service::ImportQueue<B> + 'static,
<B as BlockT>::Hash: FromStr,
<<B as BlockT>::Hash as FromStr>::Err: Debug,
<<<B as BlockT>::Header as HeaderT>::Number as FromStr>::Err: Debug,
CL: UsageProvider<B> + BlockBackend<B> + StorageProvider<B, BA> + Send + Sync +
'static,
{
let chain_spec = self.config.chain_spec.cloned_box();
let network_config = self.config.network.clone();
let db_config = self.config.database.clone();
match subcommand {
Subcommand::BuildSpec(cmd) => cmd.run(chain_spec, network_config),
Subcommand::ExportBlocks(cmd) => {
let (client, _, _, task_manager) = builder(self.config)?;
run_until_exit(self.tokio_runtime, cmd.run(client, db_config), task_manager)
}
Subcommand::ImportBlocks(cmd) => {
let (client, _, import_queue, task_manager) = builder(self.config)?;
run_until_exit(self.tokio_runtime, cmd.run(client, import_queue), task_manager)
}
Subcommand::CheckBlock(cmd) => {
let (client, _, import_queue, task_manager) = builder(self.config)?;
run_until_exit(self.tokio_runtime, cmd.run(client, import_queue), task_manager)
}
Subcommand::Revert(cmd) => {
let (client, backend, _, task_manager) = builder(self.config)?;
run_until_exit(self.tokio_runtime, cmd.run(client, backend), task_manager)
},
Subcommand::PurgeChain(cmd) => cmd.run(db_config),
Subcommand::ExportState(cmd) => {
let (client, _, _, task_manager) = builder(self.config)?;
run_until_exit(self.tokio_runtime, cmd.run(client, chain_spec), task_manager)
},
}
}
/// A helper function that runs a node with tokio and stops if the process receives the signal /// A helper function that runs a node with tokio and stops if the process receives the signal
/// `SIGTERM` or `SIGINT`. /// `SIGTERM` or `SIGINT`.
pub fn run_node_until_exit( pub fn run_node_until_exit(
......
...@@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] ...@@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"]
parking_lot = "0.10.0" parking_lot = "0.10.0"
log = "0.4.8" log = "0.4.8"
kvdb = "0.7.0" kvdb = "0.7.0"
kvdb-rocksdb = { version = "0.9", optional = true } kvdb-rocksdb = { version = "0.9.1", optional = true }
kvdb-memorydb = "0.7.0" kvdb-memorydb = "0.7.0"
linked-hash-map = "0.5.2" linked-hash-map = "0.5.2"
hash-db = "0.15.2" hash-db = "0.15.2"
...@@ -42,7 +42,7 @@ sp-keyring = { version = "2.0.0-rc6", path = "../../primitives/keyring" } ...@@ -42,7 +42,7 @@ sp-keyring = { version = "2.0.0-rc6", path = "../../primitives/keyring" }
substrate-test-runtime-client = { version = "2.0.0-rc6", path = "../../test-utils/runtime/client" } substrate-test-runtime-client = { version = "2.0.0-rc6", path = "../../test-utils/runtime/client" }
env_logger = "0.7.0" env_logger = "0.7.0"
quickcheck = "0.9" quickcheck = "0.9"
kvdb-rocksdb = "0.9" kvdb-rocksdb = "0.9.1"
tempfile = "3" tempfile = "3"
[features] [features]
......
...@@ -178,6 +178,7 @@ impl<B: BlockT> BenchmarkingState<B> { ...@@ -178,6 +178,7 @@ impl<B: BlockT> BenchmarkingState<B> {
fn wipe_tracker(&self) { fn wipe_tracker(&self) {
*self.main_key_tracker.borrow_mut() = HashMap::new(); *self.main_key_tracker.borrow_mut() = HashMap::new();
*self.child_key_tracker.borrow_mut() = HashMap::new();
self.add_whitelist_to_tracker(); self.add_whitelist_to_tracker();
*self.read_write_tracker.borrow_mut() = Default::default(); *self.read_write_tracker.borrow_mut() = Default::default();
} }
...@@ -512,32 +513,36 @@ mod test { ...@@ -512,32 +513,36 @@ mod test {
let bench_state = BenchmarkingState::<crate::tests::Block>::new(Default::default(), None) let bench_state = BenchmarkingState::<crate::tests::Block>::new(Default::default(), None)
.unwrap(); .unwrap();
let child1 = sp_core::storage::ChildInfo::new_default(b"child1"); for _ in 0..2 {
let child2 = sp_core::storage::ChildInfo::new_default(b"child2"); let child1 = sp_core::storage::ChildInfo::new_default(b"child1");
let child2 = sp_core::storage::ChildInfo::new_default(b"child2");
bench_state.storage(b"foo").unwrap();
bench_state.child_storage(&child1, b"foo").unwrap(); bench_state.storage(b"foo").unwrap();
bench_state.child_storage(&child2, b"foo").unwrap(); bench_state.child_storage(&child1, b"foo").unwrap();
bench_state.child_storage(&child2, b"foo").unwrap();
bench_state.storage(b"bar").unwrap();
bench_state.child_storage(&child1, b"bar").unwrap(); bench_state.storage(b"bar").unwrap();
bench_state.child_storage(&child2, b"bar").unwrap(); bench_state.child_storage(&child1, b"bar").unwrap();
bench_state.child_storage(&child2, b"bar").unwrap();
bench_state.commit(
Default::default(), bench_state.commit(
Default::default(), Default::default(),
vec![ Default::default(),
("foo".as_bytes().to_vec(), None) vec![
], ("foo".as_bytes().to_vec(), None)
vec![ ],
("child1".as_bytes().to_vec(), vec![("foo".as_bytes().to_vec(), None)]) vec![
] ("child1".as_bytes().to_vec(), vec![("foo".as_bytes().to_vec(), None)])
).unwrap(); ]
).unwrap();
let rw_tracker = bench_state.read_write_tracker.borrow();
assert_eq!(rw_tracker.reads, 6); let rw_tracker = bench_state.read_write_tracker.borrow();
assert_eq!(rw_tracker.repeat_reads, 0); assert_eq!(rw_tracker.reads, 6);
assert_eq!(rw_tracker.writes, 2); assert_eq!(rw_tracker.repeat_reads, 0);
assert_eq!(rw_tracker.repeat_writes, 0); assert_eq!(rw_tracker.writes, 2);
assert_eq!(rw_tracker.repeat_writes, 0);
drop(rw_tracker);
bench_state.wipe().unwrap();
}
} }
} }
...@@ -69,7 +69,7 @@ mod periodic; ...@@ -69,7 +69,7 @@ mod periodic;
pub(crate) mod tests; pub(crate) mod tests;
pub use sp_finality_grandpa::GRANDPA_ENGINE_ID; pub use sp_finality_grandpa::GRANDPA_ENGINE_ID;
pub const GRANDPA_PROTOCOL_NAME: &[u8] = b"/paritytech/grandpa/1"; pub const GRANDPA_PROTOCOL_NAME: &'static str = "/paritytech/grandpa/1";
// cost scalars for reporting peers. // cost scalars for reporting peers.
mod cost { mod cost {
......
...@@ -61,7 +61,7 @@ impl sc_network_gossip::Network<Block> for TestNetwork { ...@@ -61,7 +61,7 @@ impl sc_network_gossip::Network<Block> for TestNetwork {
let _ = self.sender.unbounded_send(Event::WriteNotification(who, message)); let _ = self.sender.unbounded_send(Event::WriteNotification(who, message));
} }
fn register_notifications_protocol(&self, _: ConsensusEngineId, _: Cow<'static, [u8]>) {} fn register_notifications_protocol(&self, _: ConsensusEngineId, _: Cow<'static, str>) {}
fn announce(&self, block: Hash, _associated_data: Vec<u8>) { fn announce(&self, block: Hash, _associated_data: Vec<u8>) {
let _ = self.sender.unbounded_send(Event::Announce(block)); let _ = self.sender.unbounded_send(Event::Announce(block));
......