feat(interop): implement u5c pparams mapping (#504)
This commit is contained in:
parent
42c0169945
commit
78627d0d2a
3 changed files with 159 additions and 4 deletions
|
|
@ -15,10 +15,12 @@ pallas-traverse = { version = "=0.29.0", path = "../pallas-traverse" }
|
||||||
pallas-primitives = { version = "=0.29.0", path = "../pallas-primitives" }
|
pallas-primitives = { version = "=0.29.0", path = "../pallas-primitives" }
|
||||||
pallas-codec = { version = "=0.29.0", path = "../pallas-codec" }
|
pallas-codec = { version = "=0.29.0", path = "../pallas-codec" }
|
||||||
pallas-crypto = { version = "=0.29.0", path = "../pallas-crypto" }
|
pallas-crypto = { version = "=0.29.0", path = "../pallas-crypto" }
|
||||||
|
|
||||||
utxorpc-spec = { version = "0.9.0" }
|
utxorpc-spec = { version = "0.9.0" }
|
||||||
prost-types = "0.13.1"
|
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]
|
[dev-dependencies]
|
||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
serde_json = "1.0.120"
|
serde_json = "1.0.120"
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ pub use utxorpc_spec::utxorpc::v1alpha as spec;
|
||||||
|
|
||||||
use utxorpc_spec::utxorpc::v1alpha::cardano as u5c;
|
use utxorpc_spec::utxorpc::v1alpha::cardano as u5c;
|
||||||
|
|
||||||
|
mod params;
|
||||||
|
|
||||||
pub type TxHash = Hash<32>;
|
pub type TxHash = Hash<32>;
|
||||||
pub type TxoIndex = u32;
|
pub type TxoIndex = u32;
|
||||||
pub type TxoRef = (TxHash, TxoIndex);
|
pub type TxoRef = (TxHash, TxoIndex);
|
||||||
|
|
@ -26,14 +28,14 @@ pub trait LedgerContext: Clone {
|
||||||
#[derive(Default, Clone)]
|
#[derive(Default, Clone)]
|
||||||
pub struct Mapper<C: LedgerContext> {
|
pub struct Mapper<C: LedgerContext> {
|
||||||
ledger: Option<C>,
|
ledger: Option<C>,
|
||||||
mask: FieldMask,
|
_mask: FieldMask,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C: LedgerContext> Mapper<C> {
|
impl<C: LedgerContext> Mapper<C> {
|
||||||
pub fn new(ledger: C) -> Self {
|
pub fn new(ledger: C) -> Self {
|
||||||
Self {
|
Self {
|
||||||
ledger: Some(ledger),
|
ledger: Some(ledger),
|
||||||
mask: FieldMask { paths: vec![] },
|
_mask: FieldMask { paths: vec![] },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -41,7 +43,7 @@ impl<C: LedgerContext> Mapper<C> {
|
||||||
pub fn masked(&self, mask: FieldMask) -> Self {
|
pub fn masked(&self, mask: FieldMask) -> Self {
|
||||||
Self {
|
Self {
|
||||||
ledger: self.ledger.clone(),
|
ledger: self.ledger.clone(),
|
||||||
mask,
|
_mask: mask,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
151
pallas-utxorpc/src/params.rs
Normal file
151
pallas-utxorpc/src/params.rs
Normal file
|
|
@ -0,0 +1,151 @@
|
||||||
|
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 }),
|
||||||
|
plutus_v2: params
|
||||||
|
.cost_models_for_script_languages
|
||||||
|
.plutus_v2
|
||||||
|
.map(|values| u5c::CostModel { values }),
|
||||||
|
}
|
||||||
|
.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!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue