Skip to content

Commit f910a15

Browse files
michalkucharczykskunertkianenigmaggwpez
authored
GenesisConfig presets for runtime (#2714)
The runtime now can provide a number of predefined presets of `RuntimeGenesisConfig` struct. This presets are intended to be used in different deployments, e.g.: `local`, `staging`, etc, and should be included into the corresponding chain-specs. Having `GenesisConfig` presets in runtime allows to fully decouple node from runtime types (the problem is described in #1984). **Summary of changes:** - The `GenesisBuilder` API was adjusted to enable this functionality (and provide better naming - #150): ```rust fn preset_names() -> Vec<PresetId>; fn get_preset(id: Option<PresetId>) -> Option<serde_json::Value>; //`None` means default fn build_state(value: serde_json::Value); pub struct PresetId(Vec<u8>); ``` - **Breaking change**: Old `create_default_config` method was removed, `build_config` was renamed to `build_state`. As a consequence a node won't be able to interact with genesis config for older runtimes. The cleanup was made for sake of API simplicity. Also IMO maintaining compatibility with old API is not so crucial. - Reference implementation was provided for `substrate-test-runtime` and `rococo` runtimes. For rococo new [`genesis_configs_presets`](https://github.com/paritytech/polkadot-sdk/blob/3b41d66b97c5ff0ec4a1989da5ffd8b9f3f588e3/polkadot/runtime/rococo/src/genesis_config_presets.rs#L530) module was added and is used in `GenesisBuilder` [_presets-related_](https://github.com/paritytech/polkadot-sdk/blob/3b41d66b97c5ff0ec4a1989da5ffd8b9f3f588e3/polkadot/runtime/rococo/src/lib.rs#L2462-L2485) methods. - The `chain-spec-builder` util was also improved and allows to ([_doc_](https://github.com/paritytech/polkadot-sdk/blob/3b41d66b97c5ff0ec4a1989da5ffd8b9f3f588e3/substrate/bin/utils/chain-spec-builder/src/lib.rs#L19)): - list presets provided by given runtime (`list-presets`), - display preset or default config provided by the runtime (`display-preset`), - build chain-spec using named preset (`create ... named-preset`), - The `ChainSpecBuilder` is extended with [`with_genesis_config_preset_name`](https://github.com/paritytech/polkadot-sdk/blob/3b41d66b97c5ff0ec4a1989da5ffd8b9f3f588e3/substrate/client/chain-spec/src/chain_spec.rs#L447) method which allows to build chain-spec using named preset provided by the runtime. Sample usage on the node side [here](https://github.com/paritytech/polkadot-sdk/blob/2caffaae803e08a3d5b46c860e8016da023ff4ce/polkadot/node/service/src/chain_spec.rs#L404). Implementation of #1984. fixes: #150 part of: #25 --------- Co-authored-by: Sebastian Kunert <skunert49@gmail.com> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
1 parent 9d052b7 commit f910a15

File tree

47 files changed

+1458
-659
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1458
-659
lines changed

Cargo.lock

+11-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ use cumulus_primitives_core::ParaId;
5555
use frame_support::{
5656
construct_runtime, derive_impl,
5757
dispatch::DispatchClass,
58-
genesis_builder_helper::{build_config, create_default_config},
58+
genesis_builder_helper::{build_state, get_preset},
5959
ord_parameter_types, parameter_types,
6060
traits::{
6161
fungible, fungibles, tokens::imbalance::ResolveAssetTo, AsEnsureOriginWithArg, ConstBool,
@@ -1649,12 +1649,16 @@ impl_runtime_apis! {
16491649
}
16501650

16511651
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
1652-
fn create_default_config() -> Vec<u8> {
1653-
create_default_config::<RuntimeGenesisConfig>()
1652+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
1653+
build_state::<RuntimeGenesisConfig>(config)
16541654
}
16551655

1656-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
1657-
build_config::<RuntimeGenesisConfig>(config)
1656+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
1657+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
1658+
}
1659+
1660+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
1661+
vec![]
16581662
}
16591663
}
16601664
}

cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
3737
use frame_support::{
3838
construct_runtime, derive_impl,
3939
dispatch::DispatchClass,
40-
genesis_builder_helper::{build_config, create_default_config},
40+
genesis_builder_helper::{build_state, get_preset},
4141
ord_parameter_types, parameter_types,
4242
traits::{
4343
fungible, fungibles,
@@ -1726,12 +1726,16 @@ impl_runtime_apis! {
17261726
}
17271727

17281728
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
1729-
fn create_default_config() -> Vec<u8> {
1730-
create_default_config::<RuntimeGenesisConfig>()
1729+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
1730+
build_state::<RuntimeGenesisConfig>(config)
17311731
}
17321732

1733-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
1734-
build_config::<RuntimeGenesisConfig>(config)
1733+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
1734+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
1735+
}
1736+
1737+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
1738+
vec![]
17351739
}
17361740
}
17371741
}

cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ use cumulus_primitives_core::ParaId;
6161
use frame_support::{
6262
construct_runtime, derive_impl,
6363
dispatch::DispatchClass,
64-
genesis_builder_helper::{build_config, create_default_config},
64+
genesis_builder_helper::{build_state, get_preset},
6565
parameter_types,
6666
traits::{ConstBool, ConstU32, ConstU64, ConstU8, TransformOrigin},
6767
weights::{ConstantMultiplier, Weight},
@@ -1451,12 +1451,16 @@ impl_runtime_apis! {
14511451
}
14521452

14531453
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
1454-
fn create_default_config() -> Vec<u8> {
1455-
create_default_config::<RuntimeGenesisConfig>()
1454+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
1455+
build_state::<RuntimeGenesisConfig>(config)
14561456
}
14571457

1458-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
1459-
build_config::<RuntimeGenesisConfig>(config)
1458+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
1459+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
1460+
}
1461+
1462+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
1463+
vec![]
14601464
}
14611465
}
14621466
}

cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ use bridge_hub_common::{
5555
use frame_support::{
5656
construct_runtime, derive_impl,
5757
dispatch::DispatchClass,
58-
genesis_builder_helper::{build_config, create_default_config},
58+
genesis_builder_helper::{build_state, get_preset},
5959
parameter_types,
6060
traits::{ConstBool, ConstU32, ConstU64, ConstU8, TransformOrigin},
6161
weights::{ConstantMultiplier, Weight},
@@ -1112,12 +1112,16 @@ impl_runtime_apis! {
11121112
}
11131113

11141114
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
1115-
fn create_default_config() -> Vec<u8> {
1116-
create_default_config::<RuntimeGenesisConfig>()
1115+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
1116+
build_state::<RuntimeGenesisConfig>(config)
11171117
}
11181118

1119-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
1120-
build_config::<RuntimeGenesisConfig>(config)
1119+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
1120+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
1121+
}
1122+
1123+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
1124+
vec![]
11211125
}
11221126
}
11231127
}

cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
6666
use frame_support::{
6767
construct_runtime, derive_impl,
6868
dispatch::DispatchClass,
69-
genesis_builder_helper::{build_config, create_default_config},
69+
genesis_builder_helper::{build_state, get_preset},
7070
parameter_types,
7171
traits::{
7272
fungible::HoldConsideration, ConstBool, ConstU16, ConstU32, ConstU64, ConstU8,
@@ -1062,12 +1062,16 @@ impl_runtime_apis! {
10621062
}
10631063

10641064
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
1065-
fn create_default_config() -> Vec<u8> {
1066-
create_default_config::<RuntimeGenesisConfig>()
1065+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
1066+
build_state::<RuntimeGenesisConfig>(config)
10671067
}
10681068

1069-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
1070-
build_config::<RuntimeGenesisConfig>(config)
1069+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
1070+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
1071+
}
1072+
1073+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
1074+
vec![]
10711075
}
10721076
}
10731077
}

cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ use sp_version::RuntimeVersion;
4848
use frame_support::{
4949
construct_runtime, derive_impl,
5050
dispatch::DispatchClass,
51-
genesis_builder_helper::{build_config, create_default_config},
51+
genesis_builder_helper::{build_state, get_preset},
5252
parameter_types,
5353
traits::{ConstBool, ConstU16, ConstU32, ConstU64, ConstU8},
5454
weights::{ConstantMultiplier, Weight},
@@ -794,12 +794,16 @@ impl_runtime_apis! {
794794
}
795795

796796
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
797-
fn create_default_config() -> Vec<u8> {
798-
create_default_config::<RuntimeGenesisConfig>()
797+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
798+
build_state::<RuntimeGenesisConfig>(config)
799799
}
800800

801-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
802-
build_config::<RuntimeGenesisConfig>(config)
801+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
802+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
803+
}
804+
805+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
806+
vec![]
803807
}
804808
}
805809
}

cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
3838
use frame_support::{
3939
construct_runtime, derive_impl,
4040
dispatch::DispatchClass,
41-
genesis_builder_helper::{build_config, create_default_config},
41+
genesis_builder_helper::{build_state, get_preset},
4242
parameter_types,
4343
traits::{ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, TransformOrigin},
4444
weights::{ConstantMultiplier, Weight},
@@ -878,12 +878,16 @@ impl_runtime_apis! {
878878
}
879879

880880
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
881-
fn create_default_config() -> Vec<u8> {
882-
create_default_config::<RuntimeGenesisConfig>()
881+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
882+
build_state::<RuntimeGenesisConfig>(config)
883883
}
884884

885-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
886-
build_config::<RuntimeGenesisConfig>(config)
885+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
886+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
887+
}
888+
889+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
890+
vec![]
887891
}
888892
}
889893
}

cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
3838
use frame_support::{
3939
construct_runtime, derive_impl,
4040
dispatch::DispatchClass,
41-
genesis_builder_helper::{build_config, create_default_config},
41+
genesis_builder_helper::{build_state, get_preset},
4242
parameter_types,
4343
traits::{ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, TransformOrigin},
4444
weights::{ConstantMultiplier, Weight},
@@ -869,12 +869,16 @@ impl_runtime_apis! {
869869
}
870870

871871
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
872-
fn create_default_config() -> Vec<u8> {
873-
create_default_config::<RuntimeGenesisConfig>()
872+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
873+
build_state::<RuntimeGenesisConfig>(config)
874874
}
875875

876-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
877-
build_config::<RuntimeGenesisConfig>(config)
876+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
877+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
878+
}
879+
880+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
881+
vec![]
878882
}
879883
}
880884
}

cumulus/parachains/runtimes/glutton/glutton-westend/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ use cumulus_primitives_core::AggregateMessageOrigin;
6666
pub use frame_support::{
6767
construct_runtime, derive_impl,
6868
dispatch::DispatchClass,
69-
genesis_builder_helper::{build_config, create_default_config},
69+
genesis_builder_helper::{build_state, get_preset},
7070
parameter_types,
7171
traits::{
7272
ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything, IsInVec, Randomness,
@@ -474,12 +474,16 @@ impl_runtime_apis! {
474474
}
475475

476476
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
477-
fn create_default_config() -> Vec<u8> {
478-
create_default_config::<RuntimeGenesisConfig>()
477+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
478+
build_state::<RuntimeGenesisConfig>(config)
479479
}
480480

481-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
482-
build_config::<RuntimeGenesisConfig>(config)
481+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
482+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
483+
}
484+
485+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
486+
vec![]
483487
}
484488
}
485489
}

cumulus/parachains/runtimes/people/people-rococo/src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
2727
use frame_support::{
2828
construct_runtime, derive_impl,
2929
dispatch::DispatchClass,
30-
genesis_builder_helper::{build_config, create_default_config},
30+
genesis_builder_helper::{build_state, get_preset},
3131
parameter_types,
3232
traits::{
3333
ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything, TransformOrigin,
@@ -851,12 +851,16 @@ impl_runtime_apis! {
851851
}
852852

853853
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
854-
fn create_default_config() -> Vec<u8> {
855-
create_default_config::<RuntimeGenesisConfig>()
854+
fn build_state(config: Vec<u8>) -> sp_genesis_builder::Result {
855+
build_state::<RuntimeGenesisConfig>(config)
856856
}
857857

858-
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
859-
build_config::<RuntimeGenesisConfig>(config)
858+
fn get_preset(id: &Option<sp_genesis_builder::PresetId>) -> Option<Vec<u8>> {
859+
get_preset::<RuntimeGenesisConfig>(id, |_| None)
860+
}
861+
862+
fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
863+
vec![]
860864
}
861865
}
862866
}

0 commit comments

Comments
 (0)