mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 17:31:05 +00:00
chain-spec: getting ready for native-runtime-free world (#1256)
This PR prepares chains specs for _native-runtime-free_ world. This PR has following changes: - `substrate`: - adds support for: - JSON based `GenesisConfig` to `ChainSpec` allowing interaction with runtime `GenesisBuilder` API. - interacting with arbitrary runtime wasm blob to[ `chain-spec-builder`](https://github.com/paritytech/substrate/blob/3ef576eaeb3f42610e85daecc464961cf1295570/bin/utils/chain-spec-builder/src/lib.rs#L46) command line util, - removes [`code`](https://github.com/paritytech/substrate/blob/3ef576eaeb3f42610e85daecc464961cf1295570/frame/system/src/lib.rs#L660) from `system_pallet` - adds `code` to the `ChainSpec` - deprecates [`ChainSpec::from_genesis`](https://github.com/paritytech/substrate/blob/3ef576eaeb3f42610e85daecc464961cf1295570/client/chain-spec/src/chain_spec.rs#L263), but also changes the signature of this method extending it with `code` argument. [`ChainSpec::builder()`](https://github.com/paritytech/substrate/blob/20bee680ed098be7239cf7a6b804cd4de267983e/client/chain-spec/src/chain_spec.rs#L507) should be used instead. - `polkadot`: - all references to `RuntimeGenesisConfig` in `node/service` are removed, - all `(kusama|polkadot|versi|rococo|wococo)_(staging|dev)_genesis_config` functions now return the JSON patch for default runtime `GenesisConfig`, - `ChainSpecBuilder` is used, `ChainSpec::from_genesis` is removed, - `cumulus`: - `ChainSpecBuilder` is used, `ChainSpec::from_genesis` is removed, - _JSON_ patch configuration used instead of `RuntimeGenesisConfig struct` in all chain specs. --------- Co-authored-by: command-bot <> Co-authored-by: Javier Viola <javier@parity.io> Co-authored-by: Davide Galassi <davxy@datawok.net> Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com> Co-authored-by: Kevin Krone <kevin@parity.io> Co-authored-by: Bastian Köcher <git@kchr.de>
This commit is contained in:
committed by
GitHub
parent
c46a7dbb61
commit
8ba7a6aba8
@@ -1,92 +1,6 @@
|
||||
Substrate chain configurations.
|
||||
|
||||
This crate contains structs and utilities to declare
|
||||
a runtime-specific configuration file (a.k.a chain spec).
|
||||
|
||||
Basic chain spec type containing all required parameters is
|
||||
[`ChainSpec`](https://docs.rs/sc-chain-spec/latest/sc_chain_spec/struct.GenericChainSpec.html). It can be extended with
|
||||
additional options that contain configuration specific to your chain.
|
||||
Usually the extension is going to be an amalgamate of types exposed
|
||||
by Substrate core modules. To allow the core modules to retrieve
|
||||
their configuration from your extension you should use `ChainSpecExtension`
|
||||
macro exposed by this crate.
|
||||
|
||||
```rust
|
||||
use std::collections::HashMap;
|
||||
use sc_chain_spec::{GenericChainSpec, ChainSpecExtension};
|
||||
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, ChainSpecExtension)]
|
||||
pub struct MyExtension {
|
||||
pub known_blocks: HashMap<u64, String>,
|
||||
}
|
||||
|
||||
pub type MyChainSpec<G> = GenericChainSpec<G, MyExtension>;
|
||||
```
|
||||
|
||||
Some parameters may require different values depending on the
|
||||
current blockchain height (a.k.a. forks). You can use `ChainSpecGroup`
|
||||
macro and provided [`Forks`](https://docs.rs/sc-chain-spec/latest/sc_chain_spec/struct.Forks.html) structure to put
|
||||
such parameters to your chain spec.
|
||||
This will allow to override a single parameter starting at specific
|
||||
block number.
|
||||
|
||||
```rust
|
||||
use sc_chain_spec::{Forks, ChainSpecGroup, ChainSpecExtension, GenericChainSpec};
|
||||
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, ChainSpecGroup)]
|
||||
pub struct ClientParams {
|
||||
max_block_size: usize,
|
||||
max_extrinsic_size: usize,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, ChainSpecGroup)]
|
||||
pub struct PoolParams {
|
||||
max_transaction_size: usize,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, ChainSpecGroup, ChainSpecExtension)]
|
||||
pub struct Extension {
|
||||
pub client: ClientParams,
|
||||
pub pool: PoolParams,
|
||||
}
|
||||
|
||||
pub type BlockNumber = u64;
|
||||
|
||||
/// A chain spec supporting forkable `ClientParams`.
|
||||
pub type MyChainSpec1<G> = GenericChainSpec<G, Forks<BlockNumber, ClientParams>>;
|
||||
|
||||
/// A chain spec supporting forkable `Extension`.
|
||||
pub type MyChainSpec2<G> = GenericChainSpec<G, Forks<BlockNumber, Extension>>;
|
||||
```
|
||||
|
||||
It's also possible to have a set of parameters that is allowed to change
|
||||
with block numbers (i.e. is forkable), and another set that is not subject to changes.
|
||||
This is also possible by declaring an extension that contains `Forks` within it.
|
||||
|
||||
|
||||
```rust
|
||||
use serde::{Serialize, Deserialize};
|
||||
use sc_chain_spec::{Forks, GenericChainSpec, ChainSpecGroup, ChainSpecExtension};
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, ChainSpecGroup)]
|
||||
pub struct ClientParams {
|
||||
max_block_size: usize,
|
||||
max_extrinsic_size: usize,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, ChainSpecGroup)]
|
||||
pub struct PoolParams {
|
||||
max_transaction_size: usize,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, ChainSpecExtension)]
|
||||
pub struct Extension {
|
||||
pub client: ClientParams,
|
||||
#[forks]
|
||||
pub pool: Forks<u64, PoolParams>,
|
||||
}
|
||||
|
||||
pub type MyChainSpec<G> = GenericChainSpec<G, Extension>;
|
||||
```
|
||||
This crate contains structs and utilities to declare a runtime-specific configuration file (a.k.a chain spec).
|
||||
Refer to crate documentation for details.
|
||||
|
||||
License: GPL-3.0-or-later WITH Classpath-exception-2.0
|
||||
|
||||
Reference in New Issue
Block a user