Skip to content

Commit

Permalink
feat(interop): implement u5c pparams mapping
Browse files Browse the repository at this point in the history
  • Loading branch information
scarmuega committed Aug 15, 2024
1 parent d9824ff commit 2815182
Show file tree
Hide file tree
Showing 3 changed files with 159 additions and 1 deletion.
4 changes: 3 additions & 1 deletion pallas-utxorpc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ pallas-traverse = { version = "=0.29.0", path = "../pallas-traverse" }
pallas-primitives = { version = "=0.29.0", path = "../pallas-primitives" }
pallas-codec = { version = "=0.29.0", path = "../pallas-codec" }
pallas-crypto = { version = "=0.29.0", path = "../pallas-crypto" }

utxorpc-spec = { version = "0.9.0" }
prost-types = "0.13.1"

# TODO: remove this dep once we have multiera params in traverse
pallas-applying = { version = "=0.29.0", path = "../pallas-applying" }

[dev-dependencies]
hex = "0.4.3"
serde_json = "1.0.120"
Expand Down
2 changes: 2 additions & 0 deletions pallas-utxorpc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ pub use utxorpc_spec::utxorpc::v1alpha as spec;

use utxorpc_spec::utxorpc::v1alpha::cardano as u5c;

mod params;

pub type TxHash = Hash<32>;
pub type TxoIndex = u32;
pub type TxoRef = (TxHash, TxoIndex);
Expand Down
154 changes: 154 additions & 0 deletions pallas-utxorpc/src/params.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
use pallas_applying::MultiEraProtocolParameters;
use utxorpc_spec::utxorpc::v1alpha::cardano::{self as u5c, CostModel};

use crate::{LedgerContext, Mapper};

impl<C: LedgerContext> Mapper<C> {
pub fn map_pparams(&self, pparams: MultiEraProtocolParameters) -> u5c::PParams {
match pparams {
MultiEraProtocolParameters::Alonzo(params) => u5c::PParams {
max_tx_size: params.max_transaction_size.into(),
max_block_body_size: params.max_block_body_size.into(),
max_block_header_size: params.max_block_header_size.into(),
min_fee_coefficient: params.minfee_a.into(),
min_fee_constant: params.minfee_b.into(),
coins_per_utxo_byte: params.ada_per_utxo_byte,
stake_key_deposit: params.key_deposit,
pool_deposit: params.pool_deposit,
desired_number_of_pools: params.desired_number_of_stake_pools.into(),
pool_influence: Some(u5c::RationalNumber {
numerator: params.pool_pledge_influence.numerator as i32,
denominator: params.pool_pledge_influence.denominator as u32,
}),
monetary_expansion: Some(u5c::RationalNumber {
numerator: params.expansion_rate.numerator as i32,
denominator: params.expansion_rate.denominator as u32,
}),
treasury_expansion: Some(u5c::RationalNumber {
numerator: params.treasury_growth_rate.numerator as i32,
denominator: params.treasury_growth_rate.denominator as u32,
}),
min_pool_cost: params.min_pool_cost,
protocol_version: Some(u5c::ProtocolVersion {
major: params.protocol_version.0 as u32,
minor: params.protocol_version.1 as u32,
}),
max_value_size: params.max_value_size.into(),
collateral_percentage: params.collateral_percentage.into(),
max_collateral_inputs: params.max_collateral_inputs.into(),
max_execution_units_per_transaction: Some(u5c::ExUnits {
memory: params.max_tx_ex_units.mem,
steps: params.max_tx_ex_units.steps,
}),
max_execution_units_per_block: Some(u5c::ExUnits {
memory: params.max_block_ex_units.mem,
steps: params.max_block_ex_units.steps,
}),
cost_models: u5c::CostModels {
// Only plutusv1.
plutus_v1: params
.cost_models_for_script_languages
.first()
.map(|(_, data)| CostModel {
values: data.to_vec(),
}),
..Default::default()
}
.into(),
..Default::default()
},
MultiEraProtocolParameters::Shelley(params) => u5c::PParams {
max_tx_size: params.max_transaction_size.into(),
max_block_body_size: params.max_block_body_size.into(),
max_block_header_size: params.max_block_header_size.into(),
min_fee_coefficient: params.minfee_a.into(),
min_fee_constant: params.minfee_b.into(),
stake_key_deposit: params.key_deposit,
pool_deposit: params.pool_deposit,
desired_number_of_pools: params.desired_number_of_stake_pools.into(),
pool_influence: Some(u5c::RationalNumber {
numerator: params.pool_pledge_influence.numerator as i32,
denominator: params.pool_pledge_influence.denominator as u32,
}),
monetary_expansion: Some(u5c::RationalNumber {
numerator: params.expansion_rate.numerator as i32,
denominator: params.expansion_rate.denominator as u32,
}),
treasury_expansion: Some(u5c::RationalNumber {
numerator: params.treasury_growth_rate.numerator as i32,
denominator: params.treasury_growth_rate.denominator as u32,
}),
min_pool_cost: params.min_pool_cost,
protocol_version: Some(u5c::ProtocolVersion {
major: params.protocol_version.0 as u32,
minor: params.protocol_version.1 as u32,
}),
..Default::default()
},
MultiEraProtocolParameters::Babbage(params) => u5c::PParams {
max_tx_size: params.max_transaction_size.into(),
max_block_body_size: params.max_block_body_size.into(),
max_block_header_size: params.max_block_header_size.into(),
min_fee_coefficient: params.minfee_a.into(),
min_fee_constant: params.minfee_b.into(),
coins_per_utxo_byte: params.ada_per_utxo_byte,
stake_key_deposit: params.key_deposit,
pool_deposit: params.pool_deposit,
desired_number_of_pools: params.desired_number_of_stake_pools.into(),
pool_influence: Some(u5c::RationalNumber {
numerator: params.pool_pledge_influence.numerator as i32,
denominator: params.pool_pledge_influence.denominator as u32,
}),
monetary_expansion: u5c::RationalNumber {
numerator: params.expansion_rate.numerator as i32,
denominator: params.expansion_rate.denominator as u32,
}
.into(),
treasury_expansion: Some(u5c::RationalNumber {
numerator: params.treasury_growth_rate.numerator as i32,
denominator: params.treasury_growth_rate.denominator as u32,
}),
min_pool_cost: params.min_pool_cost,
protocol_version: u5c::ProtocolVersion {
major: params.protocol_version.0 as u32,
minor: params.protocol_version.1 as u32,
}
.into(),
max_value_size: params.max_value_size.into(),
collateral_percentage: params.collateral_percentage.into(),
max_collateral_inputs: params.max_collateral_inputs.into(),
max_execution_units_per_transaction: Some(u5c::ExUnits {
memory: params.max_tx_ex_units.mem,
steps: params.max_tx_ex_units.steps,
}),
max_execution_units_per_block: Some(u5c::ExUnits {
memory: params.max_block_ex_units.mem,
steps: params.max_block_ex_units.steps,
}),
cost_models: u5c::CostModels {
plutus_v1: params
.cost_models_for_script_languages
.plutus_v1
.map(|values| u5c::CostModel { values })
.into(),
plutus_v2: params
.cost_models_for_script_languages
.plutus_v2
.map(|values| u5c::CostModel { values })
.into(),
..Default::default()
}
.into(),
..Default::default()
},
MultiEraProtocolParameters::Byron(params) => u5c::PParams {
max_tx_size: params.max_tx_size,
max_block_body_size: params.max_block_size - params.max_header_size,
max_block_header_size: params.max_header_size,
..Default::default()
},

_ => unimplemented!(),
}
}
}

0 comments on commit 2815182

Please sign in to comment.