refactor(applying): unify approach for protocol params access (#432)

This commit is contained in:
Maico Leberle 2024-04-11 21:41:27 -03:00 committed by GitHub
parent df3291bef5
commit fb8b7402fe
45 changed files with 2056 additions and 1520 deletions

View file

@ -1,73 +1,289 @@
//! Types used for representing the environment required for validation in each
//! era.
use pallas_codec::minicbor::{self, Decode, Encode};
use pallas_primitives::{
alonzo::{
Coin, CostMdls, Epoch, ExUnitPrices, ExUnits, Nonce, ProtocolVersion, RationalNumber,
UnitInterval,
},
babbage::CostMdls as BabbageCostMdls,
};
#[derive(Debug, Clone, Encode, Decode)]
#[non_exhaustive]
pub enum MultiEraProtocolParameters {
#[n(0)]
Byron(#[n(1)] ByronProtParams),
#[n(2)]
Shelley(#[n(3)] ShelleyProtParams),
#[n(4)]
Alonzo(#[n(5)] AlonzoProtParams),
#[n(6)]
Babbage(#[n(7)] BabbageProtParams),
}
#[derive(Debug, Clone, Encode, Decode)]
pub struct ByronProtParams {
#[n(0)]
pub script_version: u16,
#[n(1)]
pub slot_duration: u64,
#[n(2)]
pub max_block_size: u64,
#[n(3)]
pub max_header_size: u64,
#[n(4)]
pub max_tx_size: u64,
#[n(5)]
pub max_proposal_size: u64,
#[n(6)]
pub mpc_thd: u64,
#[n(7)]
pub heavy_del_thd: u64,
#[n(8)]
pub update_vote_thd: u64,
#[n(9)]
pub update_proposal_thd: u64,
#[n(10)]
pub update_implicit: u64,
#[n(11)]
pub soft_fork_rule: (u64, u64, u64),
#[n(12)]
pub summand: u64,
#[n(13)]
pub multiplier: u64,
#[n(14)]
pub unlock_stake_epoch: u64,
}
#[derive(Debug, Clone, Encode, Decode)]
pub struct ShelleyProtParams {
#[n(0)]
pub minfee_a: u32,
#[n(1)]
pub minfee_b: u32,
#[n(2)]
pub max_block_body_size: u32,
#[n(3)]
pub max_transaction_size: u32,
#[n(4)]
pub max_block_header_size: u32,
#[n(5)]
pub key_deposit: Coin,
#[n(6)]
pub pool_deposit: Coin,
#[n(7)]
pub maximum_epoch: Epoch,
#[n(8)]
pub desired_number_of_stake_pools: u32,
#[n(9)]
pub pool_pledge_influence: RationalNumber,
#[n(10)]
pub expansion_rate: UnitInterval,
#[n(11)]
pub treasury_growth_rate: UnitInterval,
#[n(12)]
pub decentralization_constant: UnitInterval,
#[n(13)]
pub extra_entropy: Nonce,
#[n(14)]
pub protocol_version: ProtocolVersion,
#[n(15)]
pub min_utxo_value: Coin,
}
#[derive(Debug, Clone, Encode, Decode)]
pub struct AlonzoProtParams {
#[n(0)]
pub minfee_a: u32,
#[n(1)]
pub minfee_b: u32,
#[n(2)]
pub max_block_body_size: u32,
#[n(3)]
pub max_transaction_size: u32,
#[n(4)]
pub max_block_header_size: u32,
#[n(5)]
pub key_deposit: Coin,
#[n(6)]
pub pool_deposit: Coin,
#[n(7)]
pub maximum_epoch: Epoch,
#[n(8)]
pub desired_number_of_stake_pools: u32,
#[n(9)]
pub pool_pledge_influence: RationalNumber,
#[n(10)]
pub expansion_rate: UnitInterval,
#[n(11)]
pub treasury_growth_rate: UnitInterval,
#[n(12)]
pub decentralization_constant: UnitInterval,
#[n(13)]
pub extra_entropy: Nonce,
#[n(14)]
pub protocol_version: ProtocolVersion,
#[n(15)]
pub min_pool_cost: Coin,
#[n(16)]
pub ada_per_utxo_byte: Coin,
#[n(17)]
pub cost_models_for_script_languages: CostMdls,
#[n(18)]
pub execution_costs: ExUnitPrices,
#[n(19)]
pub max_tx_ex_units: ExUnits,
#[n(20)]
pub max_block_ex_units: ExUnits,
#[n(21)]
pub max_value_size: u32,
#[n(22)]
pub collateral_percentage: u32,
#[n(24)]
pub max_collateral_inputs: u32,
}
#[derive(Debug, Clone, Encode, Decode)]
pub struct BabbageProtParams {
#[n(0)]
pub minfee_a: u32,
#[n(1)]
pub minfee_b: u32,
#[n(2)]
pub max_block_body_size: u32,
#[n(3)]
pub max_transaction_size: u32,
#[n(4)]
pub max_block_header_size: u32,
#[n(5)]
pub key_deposit: Coin,
#[n(6)]
pub pool_deposit: Coin,
#[n(7)]
pub maximum_epoch: Epoch,
#[n(8)]
pub desired_number_of_stake_pools: u32,
#[n(9)]
pub pool_pledge_influence: RationalNumber,
#[n(10)]
pub expansion_rate: UnitInterval,
#[n(11)]
pub treasury_growth_rate: UnitInterval,
#[n(12)]
pub decentralization_constant: UnitInterval,
#[n(13)]
pub extra_entropy: Nonce,
#[n(14)]
pub protocol_version: ProtocolVersion,
#[n(15)]
pub min_pool_cost: Coin,
#[n(16)]
pub ada_per_utxo_byte: Coin,
#[n(17)]
pub cost_models_for_script_languages: BabbageCostMdls,
#[n(18)]
pub execution_costs: ExUnitPrices,
#[n(19)]
pub max_tx_ex_units: ExUnits,
#[n(20)]
pub max_block_ex_units: ExUnits,
#[n(21)]
pub max_value_size: u32,
#[n(22)]
pub collateral_percentage: u32,
#[n(24)]
pub max_collateral_inputs: u32,
}
#[derive(Debug)]
pub struct Environment {
pub prot_params: MultiEraProtParams,
pub prot_params: MultiEraProtocolParameters,
pub prot_magic: u32,
pub block_slot: u64,
pub network_id: u8,
}
// TODO: add variants for the other eras.
#[derive(Debug)]
#[non_exhaustive]
pub enum MultiEraProtParams {
Byron(ByronProtParams),
Shelley(ShelleyProtParams),
Alonzo(AlonzoProtParams),
Babbage(BabbageProtParams),
}
#[derive(Debug, Clone)]
pub struct ByronProtParams {
pub fee_policy: FeePolicy,
pub max_tx_size: u64,
}
#[derive(Debug, Clone)]
pub struct ShelleyProtParams {
pub fee_policy: FeePolicy,
pub max_tx_size: u64,
pub min_lovelace: u64,
}
#[derive(Debug, Clone)]
pub struct FeePolicy {
pub summand: u64,
pub multiplier: u64,
}
#[derive(Debug, Clone)]
pub struct AlonzoProtParams {
pub fee_policy: FeePolicy,
pub max_tx_size: u64,
pub max_block_ex_mem: u64,
pub max_block_ex_steps: u64,
pub max_tx_ex_mem: u32,
pub max_tx_ex_steps: u64,
pub max_val_size: u64,
pub collateral_percent: u64,
pub max_collateral_inputs: u64,
pub coins_per_utxo_word: u64,
}
#[derive(Debug, Clone)]
pub struct BabbageProtParams {
pub fee_policy: FeePolicy,
pub max_tx_size: u64,
pub max_block_ex_mem: u64,
pub max_block_ex_steps: u64,
pub max_tx_ex_mem: u32,
pub max_tx_ex_steps: u64,
pub max_val_size: u64,
pub collateral_percent: u64,
pub max_collateral_inputs: u64,
pub coins_per_utxo_word: u64,
}
impl Environment {
pub fn prot_params(&self) -> &MultiEraProtParams {
pub fn prot_params(&self) -> &MultiEraProtocolParameters {
&self.prot_params
}

View file

@ -4,6 +4,7 @@
#[non_exhaustive]
pub enum ValidationError {
TxAndProtParamsDiffer,
UnknownProtParams,
Byron(ByronError),
ShelleyMA(ShelleyMAError),
Alonzo(AlonzoError),