diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index db39e7fad29c..10e9da736b10 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -31,9 +31,11 @@ use primitives::BlockNumber; use sp_runtime::Perbill; use frame_support::{ parameter_types, traits::Currency, - weights::Weight, + weights::{Weight, constants::WEIGHT_PER_SECOND}, }; +pub use frame_support::weights::constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; + #[cfg(feature = "std")] pub use staking::StakerStatus; #[cfg(any(feature = "std", test))] @@ -50,9 +52,7 @@ pub type NegativeImbalance = as Currency< for WeightToFee { fn convert(x: Weight) -> Balance { - // in Kusama a weight of 10_000_000 (smallest non-zero weight) is mapped to 1/10 CENT: - Balance::from(x).saturating_mul(super::currency::CENTS / (10 * 10_000_000)) + // in Kusama, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: + Balance::from(x).saturating_mul(super::currency::CENTS / 10) / Balance::from(ExtrinsicBaseWeight::get()) } } } + +#[cfg(test)] +mod tests { + use sp_runtime::traits::Convert; + use runtime_common::{MaximumBlockWeight, ExtrinsicBaseWeight}; + use super::fee::WeightToFee; + use super::currency::{CENTS, DOLLARS}; + + #[test] + // This function tests that the fee for `MaximumBlockWeight` of weight is correct + fn full_block_fee_is_correct() { + // A full block should cost 16 DOLLARS + assert_eq!(WeightToFee::convert(MaximumBlockWeight::get()), 16 * DOLLARS) + } + + #[test] + // This function tests that the fee for `ExtrinsicBaseWeight` of weight is correct + fn extrinsic_base_fee_is_correct() { + // `ExtrinsicBaseWeight` should cost 1/10 of a CENT + assert_eq!(WeightToFee::convert(ExtrinsicBaseWeight::get()), CENTS / 10) + } +} diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 5cbf5ee163b1..1f631bf19e4a 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -30,7 +30,7 @@ use primitives::{ use runtime_common::{attestations, claims, parachains, registrar, slots, impls::{CurrencyToVoteHandler, TargetedFeeAdjustment, ToAuthor}, NegativeImbalance, BlockHashCount, MaximumBlockWeight, AvailableBlockRatio, - MaximumBlockLength, BlockExecutionWeight, ExtrinsicBaseWeight, + MaximumBlockLength, BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, ModuleId, @@ -55,7 +55,6 @@ use sp_staking::SessionIndex; use frame_support::{ parameter_types, construct_runtime, debug, traits::{KeyOwnerProofSystem, SplitTwoWays, Randomness, LockIdentifier}, - weights::RuntimeDbWeight, }; use im_online::sr25519::AuthorityId as ImOnlineId; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; @@ -84,7 +83,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("kusama"), impl_name: create_runtime_str!("parity-kusama"), authoring_version: 2, - spec_version: 1061, + spec_version: 1062, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -132,13 +131,6 @@ parameter_types! { pub const Version: RuntimeVersion = VERSION; } -parameter_types! { - pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 60_000_000, - write: 200_000_000, - }; -} - impl system::Trait for Runtime { type Origin = Origin; type Call = Call; @@ -152,7 +144,7 @@ impl system::Trait for Runtime { type Event = Event; type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = DbWeight; + type DbWeight = RocksDbWeight; type BlockExecutionWeight = BlockExecutionWeight; type ExtrinsicBaseWeight = ExtrinsicBaseWeight; type MaximumBlockLength = MaximumBlockLength; diff --git a/runtime/polkadot/src/constants.rs b/runtime/polkadot/src/constants.rs index 113d0c199754..a80d6fdc6e1e 100644 --- a/runtime/polkadot/src/constants.rs +++ b/runtime/polkadot/src/constants.rs @@ -46,6 +46,7 @@ pub mod fee { use primitives::Balance; use frame_support::weights::Weight; use sp_runtime::traits::Convert; + use runtime_common::ExtrinsicBaseWeight; /// The block saturation level. Fees will be updates based on this value. pub const TARGET_BLOCK_FULLNESS: Perbill = Perbill::from_percent(25); @@ -63,8 +64,30 @@ pub mod fee { pub struct WeightToFee; impl Convert for WeightToFee { fn convert(x: Weight) -> Balance { - // in Polkadot a weight of 10_000_000 (smallest non-zero weight) is mapped to 1/10 CENT: - Balance::from(x).saturating_mul(super::currency::CENTS / (10 * 10_000_000)) + // in Polkadot, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: + Balance::from(x).saturating_mul(super::currency::CENTS / 10) / Balance::from(ExtrinsicBaseWeight::get()) } } } + +#[cfg(test)] +mod tests { + use sp_runtime::traits::Convert; + use runtime_common::{MaximumBlockWeight, ExtrinsicBaseWeight}; + use super::fee::WeightToFee; + use super::currency::{CENTS, DOLLARS}; + + #[test] + // This function tests that the fee for `MaximumBlockWeight` of weight is correct + fn full_block_fee_is_correct() { + // A full block should cost 16 DOLLARS + assert_eq!(WeightToFee::convert(MaximumBlockWeight::get()), 16 * DOLLARS) + } + + #[test] + // This function tests that the fee for `ExtrinsicBaseWeight` of weight is correct + fn extrinsic_base_fee_is_correct() { + // `ExtrinsicBaseWeight` should cost 1/10 of a CENT + assert_eq!(WeightToFee::convert(ExtrinsicBaseWeight::get()), CENTS / 10) + } +} diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 7f629252a2bb..1d92a1a39f80 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -23,7 +23,7 @@ use runtime_common::{attestations, claims, parachains, registrar, slots, impls::{CurrencyToVoteHandler, TargetedFeeAdjustment, ToAuthor}, NegativeImbalance, BlockHashCount, MaximumBlockWeight, AvailableBlockRatio, - MaximumBlockLength, BlockExecutionWeight, ExtrinsicBaseWeight, + MaximumBlockLength, BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, }; use sp_std::prelude::*; @@ -57,7 +57,6 @@ use sp_staking::SessionIndex; use frame_support::{ parameter_types, construct_runtime, debug, traits::{KeyOwnerProofSystem, SplitTwoWays, Randomness, LockIdentifier}, - weights::RuntimeDbWeight, }; use im_online::sr25519::AuthorityId as ImOnlineId; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; @@ -87,7 +86,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("polkadot"), impl_name: create_runtime_str!("parity-polkadot"), authoring_version: 2, - spec_version: 1008, + spec_version: 1009, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -138,13 +137,6 @@ parameter_types! { pub const Version: RuntimeVersion = VERSION; } -parameter_types! { - pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 60_000_000, - write: 200_000_000, - }; -} - impl system::Trait for Runtime { type Origin = Origin; type Call = Call; @@ -158,7 +150,7 @@ impl system::Trait for Runtime { type Event = Event; type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = DbWeight; + type DbWeight = RocksDbWeight; type BlockExecutionWeight = BlockExecutionWeight; type ExtrinsicBaseWeight = ExtrinsicBaseWeight; type MaximumBlockLength = MaximumBlockLength; diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index baebe4c50df8..102e450eb74d 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -81,7 +81,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("polkadot-test-runtime"), impl_name: create_runtime_str!("parity-polkadot-test-runtime"), authoring_version: 2, - spec_version: 1051, + spec_version: 1052, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/runtime/westend/src/constants.rs b/runtime/westend/src/constants.rs index 18ad4e5b5d52..8310e770fa6e 100644 --- a/runtime/westend/src/constants.rs +++ b/runtime/westend/src/constants.rs @@ -46,6 +46,7 @@ pub mod fee { use primitives::Balance; use frame_support::weights::Weight; use sp_runtime::traits::Convert; + use runtime_common::ExtrinsicBaseWeight; /// The block saturation level. Fees will be updates based on this value. pub const TARGET_BLOCK_FULLNESS: Perbill = Perbill::from_percent(25); @@ -63,8 +64,30 @@ pub mod fee { pub struct WeightToFee; impl Convert for WeightToFee { fn convert(x: Weight) -> Balance { - // in Kusama a weight of 10_000 (smallest non-zero weight) is mapped to 1/10 CENT: - Balance::from(x).saturating_mul(super::currency::CENTS / (10 * 10_000)) + // in Westend, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: + Balance::from(x).saturating_mul(super::currency::CENTS / 10) / Balance::from(ExtrinsicBaseWeight::get()) } } } + +#[cfg(test)] +mod tests { + use sp_runtime::traits::Convert; + use runtime_common::{MaximumBlockWeight, ExtrinsicBaseWeight}; + use super::fee::WeightToFee; + use super::currency::{CENTS, DOLLARS}; + + #[test] + // This function tests that the fee for `MaximumBlockWeight` of weight is correct + fn full_block_fee_is_correct() { + // A full block should cost 16 DOLLARS + assert_eq!(WeightToFee::convert(MaximumBlockWeight::get()), 16 * DOLLARS) + } + + #[test] + // This function tests that the fee for `ExtrinsicBaseWeight` of weight is correct + fn extrinsic_base_fee_is_correct() { + // `ExtrinsicBaseWeight` should cost 1/10 of a CENT + assert_eq!(WeightToFee::convert(ExtrinsicBaseWeight::get()), CENTS / 10) + } +} diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index a74b95c2034a..d58289da923e 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -29,7 +29,7 @@ use primitives::{ use runtime_common::{attestations, parachains, registrar, impls::{CurrencyToVoteHandler, TargetedFeeAdjustment, ToAuthor}, BlockHashCount, MaximumBlockWeight, AvailableBlockRatio, MaximumBlockLength, - BlockExecutionWeight, ExtrinsicBaseWeight + BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, @@ -55,7 +55,6 @@ use sp_staking::SessionIndex; use frame_support::{ parameter_types, construct_runtime, debug, traits::{KeyOwnerProofSystem, Randomness}, - weights::RuntimeDbWeight, }; use im_online::sr25519::AuthorityId as ImOnlineId; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; @@ -84,7 +83,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westend"), impl_name: create_runtime_str!("parity-westend"), authoring_version: 2, - spec_version: 6, + spec_version: 7, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -132,13 +131,6 @@ parameter_types! { pub const Version: RuntimeVersion = VERSION; } -parameter_types! { - pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 60_000_000, - write: 200_000_000, - }; -} - impl system::Trait for Runtime { type Origin = Origin; type Call = Call; @@ -152,8 +144,8 @@ impl system::Trait for Runtime { type Event = Event; type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = DbWeight; - type BlockExecutionWeight = BlockExecutionWeight; + type DbWeight = RocksDbWeight; + type BlockExecutionWeight = BlockExecutionWeight; type ExtrinsicBaseWeight = ExtrinsicBaseWeight; type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio;