mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-09 20:11:09 +00:00
Node template folders restructuring (#4811)
* Restructure node-template so it is clear that node, runtime, and pallets are separated * Separating to mock and tests * restructuring runtime to top-level * updated release script * updated Cargo.lock
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use structopt::StructOpt;
|
||||
|
||||
use std::{
|
||||
path::{PathBuf, Path}, collections::HashMap, fs::{File, self}, io::{Read, Write},
|
||||
path::{PathBuf, Path}, collections::HashMap, fs::{File, OpenOptions, self}, io::{Read, Write},
|
||||
process::Command
|
||||
};
|
||||
|
||||
@@ -88,7 +88,7 @@ fn replace_path_dependencies_with_git(cargo_toml_path: &Path, commit_id: &str, c
|
||||
// remove `Cargo.toml`
|
||||
cargo_toml_path.pop();
|
||||
|
||||
for &table in &["dependencies", "build-dependencies"] {
|
||||
for &table in &["dependencies", "build-dependencies", "dev-dependencies"] {
|
||||
let mut dependencies: toml::value::Table = match cargo_toml
|
||||
.remove(table)
|
||||
.and_then(|v| v.try_into().ok()) {
|
||||
@@ -212,11 +212,21 @@ fn main() {
|
||||
let node_template_path = build_dir.path().join(node_template_folder);
|
||||
|
||||
copy_node_template(&options.node_template, build_dir.path());
|
||||
let cargo_tomls = find_cargo_tomls(build_dir.path().to_owned());
|
||||
let mut cargo_tomls = find_cargo_tomls(build_dir.path().to_owned());
|
||||
|
||||
let commit_id = get_git_commit_id(&options.node_template);
|
||||
let top_level_cargo_toml_path = node_template_path.join("Cargo.toml");
|
||||
|
||||
// Check if top level Cargo.toml exists. If not, create one in the destination
|
||||
if !cargo_tomls.contains(&top_level_cargo_toml_path) {
|
||||
// create the top_level_cargo_toml
|
||||
OpenOptions::new().create(true).write(true).open(top_level_cargo_toml_path.clone())
|
||||
.expect("Create root level `Cargo.toml` failed.");
|
||||
|
||||
// push into our data structure
|
||||
cargo_tomls.push(PathBuf::from(top_level_cargo_toml_path.clone()));
|
||||
}
|
||||
|
||||
cargo_tomls.iter().for_each(|t| {
|
||||
let mut cargo_toml = parse_cargo_toml(&t);
|
||||
replace_path_dependencies_with_git(&t, &commit_id, &mut cargo_toml);
|
||||
|
||||
Generated
+14
@@ -3554,6 +3554,7 @@ dependencies = [
|
||||
"pallet-indices",
|
||||
"pallet-randomness-collective-flip",
|
||||
"pallet-sudo",
|
||||
"pallet-template",
|
||||
"pallet-timestamp",
|
||||
"pallet-transaction-payment",
|
||||
"parity-scale-codec",
|
||||
@@ -4337,6 +4338,19 @@ dependencies = [
|
||||
"sp-std",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pallet-template"
|
||||
version = "2.0.0"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"frame-system",
|
||||
"parity-scale-codec",
|
||||
"safe-mix",
|
||||
"sp-core",
|
||||
"sp-io",
|
||||
"sp-runtime",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pallet-timestamp"
|
||||
version = "2.0.0"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
[workspace]
|
||||
members = [
|
||||
"bin/node-template",
|
||||
"bin/node-template/node",
|
||||
"bin/node-template/runtime",
|
||||
"bin/node-template/pallets/template",
|
||||
"bin/node/cli",
|
||||
"bin/node/executor",
|
||||
"bin/node/primitives",
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
[package]
|
||||
name = "node-template"
|
||||
version = "2.0.0"
|
||||
authors = ["Anonymous"]
|
||||
build = "build.rs"
|
||||
edition = "2018"
|
||||
license = "Unlicense"
|
||||
|
||||
[[bin]]
|
||||
name = "node-template"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
futures = "0.3.1"
|
||||
log = "0.4.8"
|
||||
sc-cli = { version = "0.8.0", path = "../../client/cli" }
|
||||
sp-core = { version = "2.0.0", path = "../../primitives/core" }
|
||||
sc-executor = { version = "0.8", path = "../../client/executor" }
|
||||
sc-service = { version = "0.8", path = "../../client/service" }
|
||||
sp-inherents = { version = "2.0.0", path = "../../primitives/inherents" }
|
||||
sc-transaction-pool = { version = "2.0.0", path = "../../client/transaction-pool" }
|
||||
sp-transaction-pool = { version = "2.0.0", path = "../../primitives/transaction-pool" }
|
||||
sc-network = { version = "0.8", path = "../../client/network" }
|
||||
sc-consensus-aura = { version = "0.8", path = "../../client/consensus/aura" }
|
||||
sp-consensus-aura = { version = "0.8", path = "../../primitives/consensus/aura" }
|
||||
sp-consensus = { version = "0.8", path = "../../primitives/consensus/common" }
|
||||
grandpa = { version = "0.8", package = "sc-finality-grandpa", path = "../../client/finality-grandpa" }
|
||||
grandpa-primitives = { version = "2.0.0", package = "sp-finality-grandpa", path = "../../primitives/finality-grandpa" }
|
||||
sc-client = { version = "0.8", path = "../../client/" }
|
||||
node-template-runtime = { version = "2.0.0", path = "runtime" }
|
||||
sp-runtime = { version = "2.0.0", path = "../../primitives/runtime" }
|
||||
sc-basic-authorship = { path = "../../client/basic-authorship" }
|
||||
structopt = "0.3.8"
|
||||
|
||||
[build-dependencies]
|
||||
vergen = "3.0.4"
|
||||
build-script-utils = { version = "2.0.0", package = "substrate-build-script-utils", path = "../../utils/build-script-utils" }
|
||||
@@ -0,0 +1,38 @@
|
||||
[package]
|
||||
name = "node-template"
|
||||
version = "2.0.0"
|
||||
authors = ["Anonymous"]
|
||||
edition = "2018"
|
||||
license = "Unlicense"
|
||||
build = "build.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "node-template"
|
||||
|
||||
[dependencies]
|
||||
futures = "0.3.1"
|
||||
log = "0.4.8"
|
||||
structopt = "0.3.8"
|
||||
|
||||
sc-cli = { version = "0.8.0", path = "../../../client/cli" }
|
||||
sp-core = { version = "2.0.0", path = "../../../primitives/core" }
|
||||
sc-executor = { version = "0.8", path = "../../../client/executor" }
|
||||
sc-service = { version = "0.8", path = "../../../client/service" }
|
||||
sp-inherents = { version = "2.0.0", path = "../../../primitives/inherents" }
|
||||
sc-transaction-pool = { version = "2.0.0", path = "../../../client/transaction-pool" }
|
||||
sp-transaction-pool = { version = "2.0.0", path = "../../../primitives/transaction-pool" }
|
||||
sc-network = { version = "0.8", path = "../../../client/network" }
|
||||
sc-consensus-aura = { version = "0.8", path = "../../../client/consensus/aura" }
|
||||
sp-consensus-aura = { version = "0.8", path = "../../../primitives/consensus/aura" }
|
||||
sp-consensus = { version = "0.8", path = "../../../primitives/consensus/common" }
|
||||
grandpa = { version = "0.8", package = "sc-finality-grandpa", path = "../../../client/finality-grandpa" }
|
||||
grandpa-primitives = { version = "2.0.0", package = "sp-finality-grandpa", path = "../../../primitives/finality-grandpa" }
|
||||
sc-client = { version = "0.8", path = "../../../client/" }
|
||||
sp-runtime = { version = "2.0.0", path = "../../../primitives/runtime" }
|
||||
sc-basic-authorship = { path = "../../../client/basic-authorship" }
|
||||
|
||||
node-template-runtime = { version = "2.0.0", path = "../runtime" }
|
||||
|
||||
[build-dependencies]
|
||||
vergen = "3.0.4"
|
||||
build-script-utils = { version = "2.0.0", package = "substrate-build-script-utils", path = "../../../utils/build-script-utils" }
|
||||
@@ -0,0 +1,44 @@
|
||||
[package]
|
||||
authors = ['Anonymous']
|
||||
edition = '2018'
|
||||
name = 'pallet-template'
|
||||
version = '2.0.0'
|
||||
|
||||
[dependencies]
|
||||
codec = { package = "parity-scale-codec", version = "1.0.0", default-features = false, features = ["derive"] }
|
||||
safe-mix = { default-features = false, version = '1.0.0' }
|
||||
|
||||
[dependencies.frame-support]
|
||||
default-features = false
|
||||
version = '2.0.0'
|
||||
path = "../../../../frame/support"
|
||||
|
||||
[dependencies.system]
|
||||
default-features = false
|
||||
package = 'frame-system'
|
||||
version = '2.0.0'
|
||||
path = "../../../../frame/system"
|
||||
|
||||
[dev-dependencies.sp-core]
|
||||
default-features = false
|
||||
version = '2.0.0'
|
||||
path = "../../../../primitives/core"
|
||||
|
||||
[dev-dependencies.sp-io]
|
||||
default-features = false
|
||||
version = '2.0.0'
|
||||
path = "../../../../primitives/io"
|
||||
|
||||
[dev-dependencies.sp-runtime]
|
||||
default-features = false
|
||||
version = '2.0.0'
|
||||
path = "../../../../primitives/runtime"
|
||||
|
||||
[features]
|
||||
default = ['std']
|
||||
std = [
|
||||
'codec/std',
|
||||
'frame-support/std',
|
||||
'safe-mix/std',
|
||||
'system/std'
|
||||
]
|
||||
+8
-80
@@ -1,16 +1,23 @@
|
||||
#![cfg_attr(not(feature = "std"), no_std)]
|
||||
|
||||
/// A runtime module template with necessary imports
|
||||
|
||||
/// Feel free to remove or edit this file as needed.
|
||||
/// If you change the name of this file, make sure to update its references in runtime/src/lib.rs
|
||||
/// If you remove this file, you can remove those references
|
||||
|
||||
|
||||
/// For more guidance on Substrate modules, see the example module
|
||||
/// https://github.com/paritytech/substrate/blob/master/frame/example/src/lib.rs
|
||||
|
||||
use frame_support::{decl_module, decl_storage, decl_event, decl_error, dispatch};
|
||||
use system::ensure_signed;
|
||||
|
||||
#[cfg(test)]
|
||||
mod mock;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
/// The pallet's configuration trait.
|
||||
pub trait Trait: system::Trait {
|
||||
// Add other types and constants required to configure this pallet.
|
||||
@@ -95,82 +102,3 @@ decl_module! {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Tests for this pallet
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
use sp_core::H256;
|
||||
use frame_support::{impl_outer_origin, assert_ok, assert_noop, parameter_types, weights::Weight};
|
||||
use sp_runtime::{
|
||||
traits::{BlakeTwo256, IdentityLookup}, testing::Header, Perbill,
|
||||
};
|
||||
|
||||
impl_outer_origin! {
|
||||
pub enum Origin for Test {}
|
||||
}
|
||||
|
||||
// For testing the module, we construct most of a mock runtime. This means
|
||||
// first constructing a configuration type (`Test`) which `impl`s each of the
|
||||
// configuration traits of modules we want to use.
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
pub struct Test;
|
||||
parameter_types! {
|
||||
pub const BlockHashCount: u64 = 250;
|
||||
pub const MaximumBlockWeight: Weight = 1024;
|
||||
pub const MaximumBlockLength: u32 = 2 * 1024;
|
||||
pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);
|
||||
}
|
||||
impl system::Trait for Test {
|
||||
type Origin = Origin;
|
||||
type Call = ();
|
||||
type Index = u64;
|
||||
type BlockNumber = u64;
|
||||
type Hash = H256;
|
||||
type Hashing = BlakeTwo256;
|
||||
type AccountId = u64;
|
||||
type Lookup = IdentityLookup<Self::AccountId>;
|
||||
type Header = Header;
|
||||
type Event = ();
|
||||
type BlockHashCount = BlockHashCount;
|
||||
type MaximumBlockWeight = MaximumBlockWeight;
|
||||
type MaximumBlockLength = MaximumBlockLength;
|
||||
type AvailableBlockRatio = AvailableBlockRatio;
|
||||
type Version = ();
|
||||
type ModuleToIndex = ();
|
||||
}
|
||||
impl Trait for Test {
|
||||
type Event = ();
|
||||
}
|
||||
type TemplateModule = Module<Test>;
|
||||
|
||||
// This function basically just builds a genesis storage key/value store according to
|
||||
// our desired mockup.
|
||||
fn new_test_ext() -> sp_io::TestExternalities {
|
||||
system::GenesisConfig::default().build_storage::<Test>().unwrap().into()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn it_works_for_default_value() {
|
||||
new_test_ext().execute_with(|| {
|
||||
// Just a dummy test for the dummy funtion `do_something`
|
||||
// calling the `do_something` function with a value 42
|
||||
assert_ok!(TemplateModule::do_something(Origin::signed(1), 42));
|
||||
// asserting that the stored value is equal to what we stored
|
||||
assert_eq!(TemplateModule::something(), Some(42));
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn correct_error_for_none_value() {
|
||||
new_test_ext().execute_with(|| {
|
||||
// Ensure the correct error is thrown on None value
|
||||
assert_noop!(
|
||||
TemplateModule::cause_error(Origin::signed(1)),
|
||||
Error::<Test>::NoneValue
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
// Creating mock runtime here
|
||||
|
||||
use crate::{Module, Trait};
|
||||
use sp_core::H256;
|
||||
use frame_support::{impl_outer_origin, parameter_types, weights::Weight};
|
||||
use sp_runtime::{
|
||||
traits::{BlakeTwo256, IdentityLookup}, testing::Header, Perbill,
|
||||
};
|
||||
|
||||
impl_outer_origin! {
|
||||
pub enum Origin for Test {}
|
||||
}
|
||||
|
||||
// For testing the module, we construct most of a mock runtime. This means
|
||||
// first constructing a configuration type (`Test`) which `impl`s each of the
|
||||
// configuration traits of modules we want to use.
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
pub struct Test;
|
||||
parameter_types! {
|
||||
pub const BlockHashCount: u64 = 250;
|
||||
pub const MaximumBlockWeight: Weight = 1024;
|
||||
pub const MaximumBlockLength: u32 = 2 * 1024;
|
||||
pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);
|
||||
}
|
||||
impl system::Trait for Test {
|
||||
type Origin = Origin;
|
||||
type Call = ();
|
||||
type Index = u64;
|
||||
type BlockNumber = u64;
|
||||
type Hash = H256;
|
||||
type Hashing = BlakeTwo256;
|
||||
type AccountId = u64;
|
||||
type Lookup = IdentityLookup<Self::AccountId>;
|
||||
type Header = Header;
|
||||
type Event = ();
|
||||
type BlockHashCount = BlockHashCount;
|
||||
type MaximumBlockWeight = MaximumBlockWeight;
|
||||
type MaximumBlockLength = MaximumBlockLength;
|
||||
type AvailableBlockRatio = AvailableBlockRatio;
|
||||
type Version = ();
|
||||
type ModuleToIndex = ();
|
||||
}
|
||||
impl Trait for Test {
|
||||
type Event = ();
|
||||
}
|
||||
pub type TemplateModule = Module<Test>;
|
||||
|
||||
// This function basically just builds a genesis storage key/value store according to
|
||||
// our desired mockup.
|
||||
pub fn new_test_ext() -> sp_io::TestExternalities {
|
||||
system::GenesisConfig::default().build_storage::<Test>().unwrap().into()
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// Tests to be written here
|
||||
|
||||
use crate::{Error, mock::*};
|
||||
use frame_support::{assert_ok, assert_noop};
|
||||
|
||||
#[test]
|
||||
fn it_works_for_default_value() {
|
||||
new_test_ext().execute_with(|| {
|
||||
// Just a dummy test for the dummy funtion `do_something`
|
||||
// calling the `do_something` function with a value 42
|
||||
assert_ok!(TemplateModule::do_something(Origin::signed(1), 42));
|
||||
// asserting that the stored value is equal to what we stored
|
||||
assert_eq!(TemplateModule::something(), Some(42));
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn correct_error_for_none_value() {
|
||||
new_test_ext().execute_with(|| {
|
||||
// Ensure the correct error is thrown on None value
|
||||
assert_noop!(
|
||||
TemplateModule::cause_error(Origin::signed(1)),
|
||||
Error::<Test>::NoneValue
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -6,6 +6,8 @@ edition = "2018"
|
||||
license = "Unlicense"
|
||||
|
||||
[dependencies]
|
||||
codec = { package = "parity-scale-codec", version = "1.0.0", default-features = false, features = ["derive"] }
|
||||
|
||||
aura = { version = "2.0.0", default-features = false, package = "pallet-aura", path = "../../../frame/aura" }
|
||||
balances = { version = "2.0.0", default-features = false, package = "pallet-balances", path = "../../../frame/balances" }
|
||||
frame-support = { version = "2.0.0", default-features = false, path = "../../../frame/support" }
|
||||
@@ -16,8 +18,6 @@ sudo = { version = "2.0.0", default-features = false, package = "pallet-sudo", p
|
||||
system = { version = "2.0.0", default-features = false, package = "frame-system", path = "../../../frame/system" }
|
||||
timestamp = { version = "2.0.0", default-features = false, package = "pallet-timestamp", path = "../../../frame/timestamp" }
|
||||
transaction-payment = { version = "2.0.0", default-features = false, package = "pallet-transaction-payment", path = "../../../frame/transaction-payment" }
|
||||
|
||||
codec = { package = "parity-scale-codec", version = "1.0.0", default-features = false, features = ["derive"] }
|
||||
frame-executive = { version = "2.0.0", default-features = false, path = "../../../frame/executive" }
|
||||
serde = { version = "1.0.101", optional = true, features = ["derive"] }
|
||||
sp-api = { version = "2.0.0", default-features = false, path = "../../../primitives/api" }
|
||||
@@ -33,6 +33,8 @@ sp-std = { version = "2.0.0", default-features = false, path = "../../../primiti
|
||||
sp-transaction-pool = { version = "2.0.0", default-features = false, path = "../../../primitives/transaction-pool" }
|
||||
sp-version = { version = "2.0.0", default-features = false, path = "../../../primitives/version" }
|
||||
|
||||
template = { version = "2.0.0", default-features = false, path = "../pallets/template", package = "pallet-template" }
|
||||
|
||||
[build-dependencies]
|
||||
wasm-builder-runner = { version = "1.0.4", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" }
|
||||
|
||||
@@ -64,4 +66,5 @@ std = [
|
||||
"system/std",
|
||||
"timestamp/std",
|
||||
"transaction-payment/std",
|
||||
"template/std",
|
||||
]
|
||||
|
||||
@@ -37,6 +37,9 @@ pub use frame_support::{
|
||||
weights::Weight,
|
||||
};
|
||||
|
||||
/// Importing a template pallet
|
||||
pub use template;
|
||||
|
||||
/// An index to a block.
|
||||
pub type BlockNumber = u32;
|
||||
|
||||
@@ -63,9 +66,6 @@ pub type Hash = sp_core::H256;
|
||||
/// Digest item type.
|
||||
pub type DigestItem = generic::DigestItem<Hash>;
|
||||
|
||||
/// Used for the module template in `./template.rs`
|
||||
mod template;
|
||||
|
||||
/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know
|
||||
/// the specifics of the runtime. They can then be made to be agnostic over specific formats
|
||||
/// of data like extrinsics, allowing for them to continue syncing the network through upgrades
|
||||
|
||||
Reference in New Issue
Block a user