mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 19:21:13 +00:00
test-runtime: GenesisBuilder runtime API impl + tests (#14310)
* test-runtime: GenesisBuilder runtime API impl + tests This PR provides implementation of `GenesisBuilder` API for `substrate-test-runtime`, can be considered as reference imiplementation for other runtimes. The `GenesisBuilder` implementation is gated by `gensis-config` feature. Tested scenarios: - default `GenesisConfig` to JSON blob, - deserialization of `GenesisConfig` from custom JSON, and storing its keys into the Storage (genesis storage creation). - creation of genesis storage using partial JSON definition, - checking if invalid/renamed JSON files causes the runtime to panic, * missing file added * client: GenesisBuilder helper added * feature renamed: genesis-config -> genesis-builder * Update Cargo.toml * Update Cargo.toml * Update Cargo.toml * Update Cargo.toml * redundant function removed * genesis builder helper: introduced RuntimeGenesisBuild * test-runtime: get rid of unused T * redundant bound removed * helper: use GenesisBuild again * tests adjusted for on_genesis * test-runtime: support for BuildGenesisConfig * helper: BuildGenesisConfig support * Update client/genesis-builder/src/lib.rs Co-authored-by: Davide Galassi <davxy@datawok.net> * Update test-utils/runtime/src/test_json/readme.md Co-authored-by: Davide Galassi <davxy@datawok.net> * Update test-utils/runtime/src/test_json/readme.md Co-authored-by: Davide Galassi <davxy@datawok.net> * Update test-utils/runtime/src/genesismap.rs Co-authored-by: Davide Galassi <davxy@datawok.net> * jsons are now human-friendly * fix * improvements * jsons fixed * helper: no_defaults added * test-runtime: no_defaults added * test-runtime: patching fn removed * helper: patching fn removed * helper: moved to frame_support * test-runtime: fixes * Cargo.lock updated * fmt + naming * test-runtime: WasmExecutor used * helper / test-runtime: struct removed * test-runtime: merge fixes * Cargo.lock + test-utils/runtime/Cargo.toml updated * doc fixed * client/rpc: test fixed (new rt api) * client/rpc-spec-v2: test fix * doc fix * test-runtime: disable-genesis-builder feature * fix * fix * ".git/.scripts/commands/fmt/fmt.sh" * test-runtime: rerun added to build script --------- Co-authored-by: Davide Galassi <davxy@datawok.net> Co-authored-by: parity-processbot <>
This commit is contained in:
committed by
GitHub
parent
7fdcb83117
commit
53cbda1de6
@@ -40,11 +40,12 @@ log = { version = "0.4.17", default-features = false }
|
||||
sp-core-hashing-proc-macro = { version = "9.0.0", path = "../../primitives/core/hashing/proc-macro" }
|
||||
k256 = { version = "0.13.0", default-features = false, features = ["ecdsa"] }
|
||||
environmental = { version = "1.1.4", default-features = false }
|
||||
sp-genesis-builder = { version = "0.1.0", default-features=false, path = "../../primitives/genesis-builder" }
|
||||
serde_json = { version = "1.0.85", default-features = false, features = ["alloc"] }
|
||||
|
||||
aquamarine = { version = "0.3.2" }
|
||||
|
||||
[dev-dependencies]
|
||||
serde_json = "1.0.85"
|
||||
assert_matches = "1.3.0"
|
||||
pretty_assertions = "1.2.1"
|
||||
frame-system = { version = "4.0.0-dev", path = "../system" }
|
||||
@@ -72,6 +73,7 @@ std = [
|
||||
"frame-support-procedural/std",
|
||||
"log/std",
|
||||
"environmental/std",
|
||||
"sp-genesis-builder/std"
|
||||
]
|
||||
runtime-benchmarks = [
|
||||
"frame-system/runtime-benchmarks",
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
// This file is part of Substrate.
|
||||
|
||||
// Copyright (C) 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.
|
||||
|
||||
//! Helper functions for implementing [`sp_genesis_builder::GenesisBuilder`] for runtimes.
|
||||
//!
|
||||
//! Provides common logic. For more info refer to [`sp_genesis_builder::GenesisBuilder`].
|
||||
|
||||
use frame_support::traits::BuildGenesisConfig;
|
||||
use sp_genesis_builder::Result as BuildResult;
|
||||
use sp_runtime::format_runtime_string;
|
||||
|
||||
/// Get the default `GenesisConfig` as a JSON blob. For more info refer to
|
||||
/// [`sp_genesis_builder::GenesisBuilder::create_default_config`]
|
||||
pub fn create_default_config<GC: BuildGenesisConfig>() -> sp_std::vec::Vec<u8> {
|
||||
serde_json::to_string(&GC::default())
|
||||
.expect("serialization to json is expected to work. qed.")
|
||||
.into_bytes()
|
||||
}
|
||||
|
||||
/// Build `GenesisConfig` from a JSON blob not using any defaults and store it in the storage. For
|
||||
/// more info refer to [`sp_genesis_builder::GenesisBuilder::build_config`].
|
||||
pub fn build_config<GC: BuildGenesisConfig>(json: sp_std::vec::Vec<u8>) -> BuildResult {
|
||||
let gc = serde_json::from_slice::<GC>(&json)
|
||||
.map_err(|e| format_runtime_string!("Invalid JSON blob: {}", e))?;
|
||||
<GC as BuildGenesisConfig>::build(&gc);
|
||||
Ok(())
|
||||
}
|
||||
@@ -2915,3 +2915,6 @@ pub use frame_support_procedural::register_default_impl;
|
||||
|
||||
// Generate a macro that will enable/disable code based on `std` feature being active.
|
||||
sp_core::generate_feature_enabled_macro!(std_enabled, feature = "std", $);
|
||||
|
||||
// Helper for implementing GenesisBuilder runtime API
|
||||
pub mod genesis_builder_helper;
|
||||
|
||||
Reference in New Issue
Block a user