add NodeFeatures field to HostConfiguration and runtime API (#2177)

Adds a `NodeFeatures` bitfield value to the runtime `HostConfiguration`,
with the purpose of coordinating the enabling of node-side features,
such as: https://github.com/paritytech/polkadot-sdk/issues/628 and
https://github.com/paritytech/polkadot-sdk/issues/598.
These are features that require all validators enable them at the same
time, assuming all/most nodes have upgraded their node versions.

This PR doesn't add any feature yet. These are coming in future PRs.

Also adds a runtime API for querying the state of the client features
and an extrinsic for setting/unsetting a feature by its index in the bitfield.

Note: originally part of:
https://github.com/paritytech/polkadot-sdk/pull/1644, but posted as
standalone to be reused by other PRs until the initial PR is merged
This commit is contained in:
Alin Dima
2023-11-14 20:48:32 +02:00
committed by GitHub
parent 31c38cea3d
commit fc12f435e3
25 changed files with 709 additions and 131 deletions
@@ -17,9 +17,9 @@
//! Autogenerated weights for `runtime_parachains::configuration`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
//! DATE: 2023-08-11, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! DATE: 2023-11-10, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `runner-fljshgub-project-163-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("westend-dev")`, DB CACHE: 1024
// Executed Command:
@@ -31,11 +31,11 @@
// --extrinsic=*
// --wasm-execution=compiled
// --heap-pages=4096
// --json-file=/builds/parity/mirrors/polkadot/.git/.artifacts/bench.json
// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json
// --pallet=runtime_parachains::configuration
// --chain=westend-dev
// --header=./file_header.txt
// --output=./runtime/westend/src/weights/
// --header=./polkadot/file_header.txt
// --output=./polkadot/runtime/westend/src/weights/
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
@@ -56,11 +56,11 @@ impl<T: frame_system::Config> runtime_parachains::configuration::WeightInfo for
/// Proof: `ParasShared::CurrentSessionIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
fn set_config_with_block_number() -> Weight {
// Proof Size summary in bytes:
// Measured: `127`
// Estimated: `1612`
// Minimum execution time: 9_616_000 picoseconds.
Weight::from_parts(9_961_000, 0)
.saturating_add(Weight::from_parts(0, 1612))
// Measured: `151`
// Estimated: `1636`
// Minimum execution time: 8_065_000 picoseconds.
Weight::from_parts(8_389_000, 0)
.saturating_add(Weight::from_parts(0, 1636))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(1))
}
@@ -72,11 +72,11 @@ impl<T: frame_system::Config> runtime_parachains::configuration::WeightInfo for
/// Proof: `ParasShared::CurrentSessionIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
fn set_config_with_u32() -> Weight {
// Proof Size summary in bytes:
// Measured: `127`
// Estimated: `1612`
// Minimum execution time: 9_587_000 picoseconds.
Weight::from_parts(9_964_000, 0)
.saturating_add(Weight::from_parts(0, 1612))
// Measured: `151`
// Estimated: `1636`
// Minimum execution time: 8_038_000 picoseconds.
Weight::from_parts(8_463_000, 0)
.saturating_add(Weight::from_parts(0, 1636))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(1))
}
@@ -88,11 +88,11 @@ impl<T: frame_system::Config> runtime_parachains::configuration::WeightInfo for
/// Proof: `ParasShared::CurrentSessionIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
fn set_config_with_option_u32() -> Weight {
// Proof Size summary in bytes:
// Measured: `127`
// Estimated: `1612`
// Minimum execution time: 9_650_000 picoseconds.
Weight::from_parts(9_960_000, 0)
.saturating_add(Weight::from_parts(0, 1612))
// Measured: `151`
// Estimated: `1636`
// Minimum execution time: 7_843_000 picoseconds.
Weight::from_parts(8_216_000, 0)
.saturating_add(Weight::from_parts(0, 1636))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(1))
}
@@ -114,11 +114,11 @@ impl<T: frame_system::Config> runtime_parachains::configuration::WeightInfo for
/// Proof: `ParasShared::CurrentSessionIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
fn set_config_with_balance() -> Weight {
// Proof Size summary in bytes:
// Measured: `127`
// Estimated: `1612`
// Minimum execution time: 9_545_000 picoseconds.
Weight::from_parts(9_845_000, 0)
.saturating_add(Weight::from_parts(0, 1612))
// Measured: `151`
// Estimated: `1636`
// Minimum execution time: 7_969_000 picoseconds.
Weight::from_parts(8_362_000, 0)
.saturating_add(Weight::from_parts(0, 1636))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(1))
}
@@ -130,11 +130,11 @@ impl<T: frame_system::Config> runtime_parachains::configuration::WeightInfo for
/// Proof: `ParasShared::CurrentSessionIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
fn set_config_with_executor_params() -> Weight {
// Proof Size summary in bytes:
// Measured: `127`
// Estimated: `1612`
// Minimum execution time: 10_258_000 picoseconds.
Weight::from_parts(10_607_000, 0)
.saturating_add(Weight::from_parts(0, 1612))
// Measured: `151`
// Estimated: `1636`
// Minimum execution time: 10_084_000 picoseconds.
Weight::from_parts(10_451_000, 0)
.saturating_add(Weight::from_parts(0, 1636))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(1))
}
@@ -146,11 +146,27 @@ impl<T: frame_system::Config> runtime_parachains::configuration::WeightInfo for
/// Proof: `ParasShared::CurrentSessionIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
fn set_config_with_perbill() -> Weight {
// Proof Size summary in bytes:
// Measured: `127`
// Estimated: `1612`
// Minimum execution time: 9_502_000 picoseconds.
Weight::from_parts(9_902_000, 0)
.saturating_add(Weight::from_parts(0, 1612))
// Measured: `151`
// Estimated: `1636`
// Minimum execution time: 7_948_000 picoseconds.
Weight::from_parts(8_268_000, 0)
.saturating_add(Weight::from_parts(0, 1636))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(1))
}
/// Storage: `Configuration::PendingConfigs` (r:1 w:1)
/// Proof: `Configuration::PendingConfigs` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
/// Storage: `Configuration::BypassConsistencyCheck` (r:1 w:0)
/// Proof: `Configuration::BypassConsistencyCheck` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
/// Storage: `ParasShared::CurrentSessionIndex` (r:1 w:0)
/// Proof: `ParasShared::CurrentSessionIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
fn set_node_feature() -> Weight {
// Proof Size summary in bytes:
// Measured: `151`
// Estimated: `1636`
// Minimum execution time: 10_257_000 picoseconds.
Weight::from_parts(10_584_000, 0)
.saturating_add(Weight::from_parts(0, 1636))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(1))
}