mirror of
https://github.com/datahaven-xyz/datahaven
synced 2026-05-24 09:50:01 +00:00
feat: set POV gas limit ratio to zero for solo chain (#313)
Set `GasLimitPovSizeRatio` to 0 across all runtime environments (mainnet, stagenet, testnet) since DataHaven operates as a solo chain and doesn't need to account for Proof-of-Validity size constraints that parachains require. ## ⚠️ Breaking Changes ⚠️ - `GasLimitPovSizeRatio` is now set to 0 across all runtimes - Gas calculations will no longer account for POV size constraints
This commit is contained in:
parent
71b5e5185f
commit
0618e84268
12 changed files with 18 additions and 58 deletions
|
|
@ -123,7 +123,6 @@ pub type PCall = BatchPrecompileCall<Runtime>;
|
|||
mock_account!(Batch, |_| MockAccount::from_u64(1));
|
||||
mock_account!(Revert, |_| MockAccount::from_u64(2));
|
||||
|
||||
const MAX_POV_SIZE: u64 = 5 * 1024 * 1024;
|
||||
/// Block storage limit in bytes. Set to 40 KB.
|
||||
const BLOCK_STORAGE_LIMIT: u64 = 40 * 1024;
|
||||
|
||||
|
|
@ -131,10 +130,7 @@ parameter_types! {
|
|||
pub BlockGasLimit: U256 = U256::from(u64::MAX);
|
||||
pub PrecompilesValue: Precompiles<Runtime> = Precompiles::new();
|
||||
pub const WeightPerGas: Weight = Weight::from_parts(1, 0);
|
||||
pub GasLimitPovSizeRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(MAX_POV_SIZE)
|
||||
};
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
pub GasLimitStorageGrowthRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(BLOCK_STORAGE_LIMIT)
|
||||
|
|
|
|||
|
|
@ -124,7 +124,6 @@ pub type Precompiles<R> = PrecompileSetBuilder<
|
|||
|
||||
pub type PCall = CollectivePrecompileCall<Runtime, pallet_collective::Instance1>;
|
||||
|
||||
const MAX_POV_SIZE: u64 = 5 * 1024 * 1024;
|
||||
/// Block storage limit in bytes. Set to 40 KB.
|
||||
const BLOCK_STORAGE_LIMIT: u64 = 40 * 1024;
|
||||
|
||||
|
|
@ -132,10 +131,7 @@ parameter_types! {
|
|||
pub BlockGasLimit: U256 = U256::from(u64::MAX);
|
||||
pub PrecompilesValue: Precompiles<Runtime> = Precompiles::new();
|
||||
pub const WeightPerGas: Weight = Weight::from_parts(1, 0);
|
||||
pub GasLimitPovSizeRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(MAX_POV_SIZE)
|
||||
};
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
pub GasLimitStorageGrowthRatio : u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(BLOCK_STORAGE_LIMIT)
|
||||
|
|
|
|||
|
|
@ -109,7 +109,6 @@ impl pallet_balances::Config for Runtime {
|
|||
type DoneSlashHandler = ();
|
||||
}
|
||||
|
||||
const MAX_POV_SIZE: u64 = 5 * 1024 * 1024;
|
||||
/// Block storage limit in bytes. Set to 40 KB.
|
||||
const BLOCK_STORAGE_LIMIT: u64 = 40 * 1024;
|
||||
|
||||
|
|
@ -117,10 +116,7 @@ parameter_types! {
|
|||
pub BlockGasLimit: U256 = U256::from(u64::MAX);
|
||||
pub PrecompilesValue: Precompiles<Runtime> = Precompiles::new();
|
||||
pub const WeightPerGas: Weight = Weight::from_parts(1, 0);
|
||||
pub GasLimitPovSizeRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(MAX_POV_SIZE)
|
||||
};
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
pub GasLimitStorageGrowthRatio : u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(BLOCK_STORAGE_LIMIT)
|
||||
|
|
|
|||
|
|
@ -108,7 +108,6 @@ pub type Precompiles<R> = PrecompileSetBuilder<
|
|||
|
||||
pub type PCall = Erc20BalancesPrecompileCall<Runtime, NativeErc20Metadata, ()>;
|
||||
|
||||
const MAX_POV_SIZE: u64 = 5 * 1024 * 1024;
|
||||
/// Block storage limit in bytes. Set to 40 KB.
|
||||
const BLOCK_STORAGE_LIMIT: u64 = 40 * 1024;
|
||||
|
||||
|
|
@ -116,10 +115,7 @@ parameter_types! {
|
|||
pub BlockGasLimit: U256 = U256::from(u64::MAX);
|
||||
pub PrecompilesValue: Precompiles<Runtime> = Precompiles::new();
|
||||
pub const WeightPerGas: Weight = Weight::from_parts(1, 0);
|
||||
pub GasLimitPovSizeRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(MAX_POV_SIZE)
|
||||
};
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
pub GasLimitStorageGrowthRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(BLOCK_STORAGE_LIMIT)
|
||||
|
|
|
|||
|
|
@ -110,7 +110,6 @@ impl pallet_balances::Config for Runtime {
|
|||
type DoneSlashHandler = ();
|
||||
}
|
||||
|
||||
const MAX_POV_SIZE: u64 = 5 * 1024 * 1024;
|
||||
/// Block storage limit in bytes. Set to 40 KB.
|
||||
const BLOCK_STORAGE_LIMIT: u64 = 40 * 1024;
|
||||
|
||||
|
|
@ -118,10 +117,7 @@ parameter_types! {
|
|||
pub BlockGasLimit: U256 = U256::from(u64::MAX);
|
||||
pub PrecompilesValue: Precompiles<Runtime> = Precompiles::new();
|
||||
pub const WeightPerGas: Weight = Weight::from_parts(1, 0);
|
||||
pub GasLimitPovSizeRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(MAX_POV_SIZE)
|
||||
};
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
pub GasLimitStorageGrowthRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(BLOCK_STORAGE_LIMIT)
|
||||
|
|
|
|||
|
|
@ -101,7 +101,6 @@ impl pallet_balances::Config for Runtime {
|
|||
type DoneSlashHandler = ();
|
||||
}
|
||||
|
||||
const MAX_POV_SIZE: u64 = 5 * 1024 * 1024;
|
||||
/// Block storage limit in bytes. Set to 40 KB.
|
||||
const BLOCK_STORAGE_LIMIT: u64 = 40 * 1024;
|
||||
|
||||
|
|
@ -109,10 +108,7 @@ parameter_types! {
|
|||
pub BlockGasLimit: U256 = U256::from(u64::MAX);
|
||||
pub PrecompilesValue: Precompiles<Runtime> = Precompiles::new();
|
||||
pub const WeightPerGas: Weight = Weight::from_parts(1, 0);
|
||||
pub GasLimitPovSizeRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(MAX_POV_SIZE)
|
||||
};
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
pub GasLimitStorageGrowthRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(BLOCK_STORAGE_LIMIT)
|
||||
|
|
|
|||
|
|
@ -150,7 +150,6 @@ impl<OuterOrigin> EnsureAddressOrigin<OuterOrigin> for EnsureAddressAlways {
|
|||
}
|
||||
}
|
||||
|
||||
const MAX_POV_SIZE: u64 = 5 * 1024 * 1024;
|
||||
/// Block storage limit in bytes. Set to 40 KB.
|
||||
const BLOCK_STORAGE_LIMIT: u64 = 40 * 1024;
|
||||
|
||||
|
|
@ -158,10 +157,7 @@ parameter_types! {
|
|||
pub BlockGasLimit: U256 = U256::from(u64::MAX);
|
||||
pub PrecompilesValue: Precompiles<Runtime> = Precompiles::new();
|
||||
pub const WeightPerGas: Weight = Weight::from_parts(1, 0);
|
||||
pub GasLimitPovSizeRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(MAX_POV_SIZE)
|
||||
};
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
pub GasLimitStorageGrowthRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(BLOCK_STORAGE_LIMIT)
|
||||
|
|
|
|||
|
|
@ -152,10 +152,7 @@ parameter_types! {
|
|||
pub BlockGasLimit: U256 = U256::from(u64::MAX);
|
||||
pub PrecompilesValue: TestPrecompiles<Runtime> = TestPrecompiles::new();
|
||||
pub const WeightPerGas: Weight = Weight::from_parts(1, 0);
|
||||
pub GasLimitPovSizeRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(MAX_POV_SIZE)
|
||||
};
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
pub GasLimitStorageGrowthRatio: u64 = {
|
||||
let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64();
|
||||
block_gas_limit.saturating_div(BLOCK_STORAGE_LIMIT)
|
||||
|
|
|
|||
|
|
@ -995,13 +995,10 @@ parameter_types! {
|
|||
pub PrecompilesValue: Precompiles = DataHavenPrecompiles::<Runtime>::new();
|
||||
pub WeightPerGas: Weight = Weight::from_parts(WEIGHT_PER_GAS, 0);
|
||||
pub SuicideQuickClearLimit: u32 = 0;
|
||||
/// The amount of gas per pov. A ratio of 16 if we convert ref_time to gas and we compare
|
||||
/// it with the pov_size for a block. E.g.
|
||||
/// ceil(
|
||||
/// (max_extrinsic.ref_time() / max_extrinsic.proof_size()) / WEIGHT_PER_GAS
|
||||
/// )
|
||||
/// The amount of gas per pov. Set to 0 because DataHaven is a solo chain and we don't
|
||||
/// account for POV (Proof-of-Validity) size constraints like parachains do.
|
||||
/// We should re-check `xcm_config::Erc20XcmBridgeTransferGasLimit` when changing this value
|
||||
pub const GasLimitPovSizeRatio: u64 = 16;
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
/// The amount of gas per storage (in bytes): BLOCK_GAS_LIMIT / BLOCK_STORAGE_LIMIT
|
||||
/// (60_000_000 / 160 kb)
|
||||
pub GasLimitStorageGrowthRatio: u64 = 366;
|
||||
|
|
|
|||
|
|
@ -992,13 +992,10 @@ parameter_types! {
|
|||
pub PrecompilesValue: Precompiles = DataHavenPrecompiles::<Runtime>::new();
|
||||
pub WeightPerGas: Weight = Weight::from_parts(WEIGHT_PER_GAS, 0);
|
||||
pub SuicideQuickClearLimit: u32 = 0;
|
||||
/// The amount of gas per pov. A ratio of 16 if we convert ref_time to gas and we compare
|
||||
/// it with the pov_size for a block. E.g.
|
||||
/// ceil(
|
||||
/// (max_extrinsic.ref_time() / max_extrinsic.proof_size()) / WEIGHT_PER_GAS
|
||||
/// )
|
||||
/// The amount of gas per pov. Set to 0 because DataHaven is a solo chain and we don't
|
||||
/// account for POV (Proof-of-Validity) size constraints like parachains do.
|
||||
/// We should re-check `xcm_config::Erc20XcmBridgeTransferGasLimit` when changing this value
|
||||
pub const GasLimitPovSizeRatio: u64 = 16;
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
/// The amount of gas per storage (in bytes): BLOCK_GAS_LIMIT / BLOCK_STORAGE_LIMIT
|
||||
/// (60_000_000 / 160 kb)
|
||||
pub GasLimitStorageGrowthRatio: u64 = 366;
|
||||
|
|
|
|||
|
|
@ -995,13 +995,10 @@ parameter_types! {
|
|||
pub PrecompilesValue: Precompiles = DataHavenPrecompiles::<Runtime>::new();
|
||||
pub WeightPerGas: Weight = Weight::from_parts(WEIGHT_PER_GAS, 0);
|
||||
pub SuicideQuickClearLimit: u32 = 0;
|
||||
/// The amount of gas per pov. A ratio of 16 if we convert ref_time to gas and we compare
|
||||
/// it with the pov_size for a block. E.g.
|
||||
/// ceil(
|
||||
/// (max_extrinsic.ref_time() / max_extrinsic.proof_size()) / WEIGHT_PER_GAS
|
||||
/// )
|
||||
/// The amount of gas per pov. Set to 0 because DataHaven is a solo chain and we don't
|
||||
/// account for POV (Proof-of-Validity) size constraints like parachains do.
|
||||
/// We should re-check `xcm_config::Erc20XcmBridgeTransferGasLimit` when changing this value
|
||||
pub const GasLimitPovSizeRatio: u64 = 16;
|
||||
pub const GasLimitPovSizeRatio: u64 = 0;
|
||||
/// The amount of gas per storage (in bytes): BLOCK_GAS_LIMIT / BLOCK_STORAGE_LIMIT
|
||||
/// (60_000_000 / 160 kb)
|
||||
pub GasLimitStorageGrowthRatio: u64 = 366;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ describeSuite({
|
|||
feeResults.baseFeePerGas.length,
|
||||
"baseFeePerGas should always the requested block range + 1 (the next derived base fee)"
|
||||
).toBe(block_count + 1);
|
||||
expect(feeResults.gasUsedRatio).to.be.deep.eq(Array(block_count).fill(0.0105225));
|
||||
expect(feeResults.gasUsedRatio).to.be.deep.eq(Array(block_count).fill(0.00773915));
|
||||
expect(
|
||||
feeResults.reward.length,
|
||||
"should return two-dimensional reward list for the requested block range"
|
||||
|
|
|
|||
Loading…
Reference in a new issue