mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-06 21:58:06 +00:00
8ba7a6aba8
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>
243 lines
7.4 KiB
Rust
243 lines
7.4 KiB
Rust
// 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.
|
|
|
|
#![cfg_attr(not(feature = "std"), no_std)]
|
|
|
|
// Make the WASM binary available.
|
|
#[cfg(feature = "std")]
|
|
include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));
|
|
|
|
use frame::{
|
|
deps::frame_support::weights::{FixedFee, NoFee},
|
|
prelude::*,
|
|
runtime::{
|
|
apis::{
|
|
self, impl_runtime_apis, ApplyExtrinsicResult, CheckInherentsResult, OpaqueMetadata,
|
|
},
|
|
prelude::*,
|
|
},
|
|
};
|
|
use frame_support::genesis_builder_helper::{build_config, create_default_config};
|
|
|
|
#[runtime_version]
|
|
pub const VERSION: RuntimeVersion = RuntimeVersion {
|
|
spec_name: create_runtime_str!("minimal-runtime"),
|
|
impl_name: create_runtime_str!("minimal-runtime"),
|
|
authoring_version: 1,
|
|
spec_version: 0,
|
|
impl_version: 1,
|
|
apis: RUNTIME_API_VERSIONS,
|
|
transaction_version: 1,
|
|
state_version: 1,
|
|
};
|
|
|
|
/// The version information used to identify this runtime when compiled natively.
|
|
#[cfg(feature = "std")]
|
|
pub fn native_version() -> NativeVersion {
|
|
NativeVersion { runtime_version: VERSION, can_author_with: Default::default() }
|
|
}
|
|
|
|
type SignedExtra = (
|
|
frame_system::CheckNonZeroSender<Runtime>,
|
|
frame_system::CheckSpecVersion<Runtime>,
|
|
frame_system::CheckTxVersion<Runtime>,
|
|
frame_system::CheckGenesis<Runtime>,
|
|
frame_system::CheckEra<Runtime>,
|
|
frame_system::CheckNonce<Runtime>,
|
|
frame_system::CheckWeight<Runtime>,
|
|
pallet_transaction_payment::ChargeTransactionPayment<Runtime>,
|
|
);
|
|
|
|
construct_runtime!(
|
|
pub struct Runtime {
|
|
System: frame_system,
|
|
Timestamp: pallet_timestamp,
|
|
|
|
Balances: pallet_balances,
|
|
Sudo: pallet_sudo,
|
|
TransactionPayment: pallet_transaction_payment,
|
|
}
|
|
);
|
|
|
|
parameter_types! {
|
|
pub const Version: RuntimeVersion = VERSION;
|
|
}
|
|
|
|
#[derive_impl(frame_system::config_preludes::SolochainDefaultConfig as frame_system::DefaultConfig)]
|
|
impl frame_system::Config for Runtime {
|
|
type Block = Block;
|
|
type Version = Version;
|
|
type BlockHashCount = ConstU32<1024>;
|
|
type AccountData = pallet_balances::AccountData<<Runtime as pallet_balances::Config>::Balance>;
|
|
}
|
|
|
|
#[derive_impl(pallet_balances::config_preludes::TestDefaultConfig as pallet_balances::DefaultConfig)]
|
|
impl pallet_balances::Config for Runtime {
|
|
type AccountStore = System;
|
|
}
|
|
|
|
#[derive_impl(pallet_sudo::config_preludes::TestDefaultConfig as pallet_sudo::DefaultConfig)]
|
|
impl pallet_sudo::Config for Runtime {}
|
|
|
|
#[derive_impl(pallet_timestamp::config_preludes::TestDefaultConfig as pallet_timestamp::DefaultConfig)]
|
|
impl pallet_timestamp::Config for Runtime {}
|
|
|
|
#[derive_impl(pallet_transaction_payment::config_preludes::TestDefaultConfig as pallet_transaction_payment::DefaultConfig)]
|
|
impl pallet_transaction_payment::Config for Runtime {
|
|
type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, ()>;
|
|
type WeightToFee = NoFee<<Self as pallet_balances::Config>::Balance>;
|
|
type LengthToFee = FixedFee<1, <Self as pallet_balances::Config>::Balance>;
|
|
}
|
|
|
|
type Block = frame::runtime::types_common::BlockOf<Runtime, SignedExtra>;
|
|
type Header = HeaderFor<Runtime>;
|
|
|
|
type RuntimeExecutive =
|
|
Executive<Runtime, Block, frame_system::ChainContext<Runtime>, Runtime, AllPalletsWithSystem>;
|
|
|
|
use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo};
|
|
|
|
impl_runtime_apis! {
|
|
impl apis::Core<Block> for Runtime {
|
|
fn version() -> RuntimeVersion {
|
|
VERSION
|
|
}
|
|
|
|
fn execute_block(block: Block) {
|
|
RuntimeExecutive::execute_block(block)
|
|
}
|
|
|
|
fn initialize_block(header: &Header) {
|
|
RuntimeExecutive::initialize_block(header)
|
|
}
|
|
}
|
|
impl apis::Metadata<Block> for Runtime {
|
|
fn metadata() -> OpaqueMetadata {
|
|
OpaqueMetadata::new(Runtime::metadata().into())
|
|
}
|
|
|
|
fn metadata_at_version(version: u32) -> Option<OpaqueMetadata> {
|
|
Runtime::metadata_at_version(version)
|
|
}
|
|
|
|
fn metadata_versions() -> Vec<u32> {
|
|
Runtime::metadata_versions()
|
|
}
|
|
}
|
|
|
|
impl apis::BlockBuilder<Block> for Runtime {
|
|
fn apply_extrinsic(extrinsic: ExtrinsicFor<Runtime>) -> ApplyExtrinsicResult {
|
|
RuntimeExecutive::apply_extrinsic(extrinsic)
|
|
}
|
|
|
|
fn finalize_block() -> HeaderFor<Runtime> {
|
|
RuntimeExecutive::finalize_block()
|
|
}
|
|
|
|
fn inherent_extrinsics(data: InherentData) -> Vec<ExtrinsicFor<Runtime>> {
|
|
data.create_extrinsics()
|
|
}
|
|
|
|
fn check_inherents(
|
|
block: Block,
|
|
data: InherentData,
|
|
) -> CheckInherentsResult {
|
|
data.check_extrinsics(&block)
|
|
}
|
|
}
|
|
|
|
impl apis::TaggedTransactionQueue<Block> for Runtime {
|
|
fn validate_transaction(
|
|
source: TransactionSource,
|
|
tx: ExtrinsicFor<Runtime>,
|
|
block_hash: <Runtime as frame_system::Config>::Hash,
|
|
) -> TransactionValidity {
|
|
RuntimeExecutive::validate_transaction(source, tx, block_hash)
|
|
}
|
|
}
|
|
|
|
impl apis::OffchainWorkerApi<Block> for Runtime {
|
|
fn offchain_worker(header: &HeaderFor<Runtime>) {
|
|
RuntimeExecutive::offchain_worker(header)
|
|
}
|
|
}
|
|
|
|
impl apis::SessionKeys<Block> for Runtime {
|
|
fn generate_session_keys(_seed: Option<Vec<u8>>) -> Vec<u8> {
|
|
Default::default()
|
|
}
|
|
|
|
fn decode_session_keys(
|
|
_encoded: Vec<u8>,
|
|
) -> Option<Vec<(Vec<u8>, apis::KeyTypeId)>> {
|
|
Default::default()
|
|
}
|
|
}
|
|
|
|
impl apis::AccountNonceApi<Block, interface::AccountId, interface::Nonce> for Runtime {
|
|
fn account_nonce(account: interface::AccountId) -> interface::Nonce {
|
|
System::account_nonce(account)
|
|
}
|
|
}
|
|
|
|
impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<
|
|
Block,
|
|
interface::Balance,
|
|
> for Runtime {
|
|
fn query_info(uxt: ExtrinsicFor<Runtime>, len: u32) -> RuntimeDispatchInfo<interface::Balance> {
|
|
TransactionPayment::query_info(uxt, len)
|
|
}
|
|
fn query_fee_details(uxt: ExtrinsicFor<Runtime>, len: u32) -> FeeDetails<interface::Balance> {
|
|
TransactionPayment::query_fee_details(uxt, len)
|
|
}
|
|
fn query_weight_to_fee(weight: Weight) -> interface::Balance {
|
|
TransactionPayment::weight_to_fee(weight)
|
|
}
|
|
fn query_length_to_fee(length: u32) -> interface::Balance {
|
|
TransactionPayment::length_to_fee(length)
|
|
}
|
|
}
|
|
|
|
impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
|
|
fn create_default_config() -> Vec<u8> {
|
|
create_default_config::<RuntimeGenesisConfig>()
|
|
}
|
|
|
|
fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
|
|
build_config::<RuntimeGenesisConfig>(config)
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Some re-exports that the node side code needs to know. Some are useful in this context as well.
|
|
///
|
|
/// Other types should preferably be private.
|
|
// TODO: this should be standardized in some way, see:
|
|
// https://github.com/paritytech/substrate/issues/10579#issuecomment-1600537558
|
|
pub mod interface {
|
|
use super::Runtime;
|
|
use frame::deps::frame_system;
|
|
|
|
pub type Block = super::Block;
|
|
pub use frame::runtime::types_common::OpaqueBlock;
|
|
pub type AccountId = <Runtime as frame_system::Config>::AccountId;
|
|
pub type Nonce = <Runtime as frame_system::Config>::Nonce;
|
|
pub type Hash = <Runtime as frame_system::Config>::Hash;
|
|
pub type Balance = <Runtime as pallet_balances::Config>::Balance;
|
|
pub type MinimumBalance = <Runtime as pallet_balances::Config>::ExistentialDeposit;
|
|
}
|