Skip to content

Commit

Permalink
feat: ppt params interfaces adapted to new updates in pallas
Browse files Browse the repository at this point in the history
  • Loading branch information
mikarasv committed Apr 18, 2024
1 parent c17c69a commit e82e8e2
Show file tree
Hide file tree
Showing 12 changed files with 380 additions and 135 deletions.
2 changes: 1 addition & 1 deletion napi-pallas/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ hex = "0.4.3"
# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix
napi = { version = "2.12.2", default-features = false, features = ["napi4"] }
napi-derive = "2.12.2"
pallas = { git = "https://github.com/txpipe/pallas.git", rev = "2f97cbe" , features = ["unstable"]}
pallas = { git = "https://github.com/txpipe/pallas.git", rev = "9f5713c" , features = ["unstable"]}

[build-dependencies]
napi-build = "2.0.1"
Expand Down
21 changes: 14 additions & 7 deletions napi-pallas/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,24 @@ export interface ValidationContext {
poolDeposit: number
eMax: number
nOpt: number
a0: number
rho: number
tau: number
decentralisationParam: number
extraEntropy: number
a0Numerator: number
a0Denominator: number
rhoNumerator: number
rhoDenominator: number
tauNumerator: number
tauDenominator: number
decentralisationParamNumerator: number
decentralisationParamDenominator: number
extraEntropyNumerator: number
extraEntropyDenominator: number
protocolMajorVer: number
protocolMinorVer: number
minUtxo: number
minPoolCost: number
priceMem: number
priceStep: number
priceMemNumerator: number
priceMemDenominator: number
priceStepNumerator: number
priceStepDenominator: number
maxTxExMem: number
maxTxExSteps: number
maxBlockExMem: number
Expand Down
45 changes: 26 additions & 19 deletions napi-pallas/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,40 +13,47 @@ mod validations;
#[derive(Default)]
#[napi(object)]
pub struct ValidationContext {
pub epoch: i64,
pub min_fee_a: i64,
pub min_fee_b: i64,
pub max_block_size: i64,
pub max_tx_size: i64,
pub max_block_header_size: i64,
pub epoch: u32,
pub min_fee_a: u32,
pub min_fee_b: u32,
pub max_block_size: u32,
pub max_tx_size: u32,
pub max_block_header_size: u32,
pub key_deposit: i64,
pub pool_deposit: i64,
pub e_max: i64,
pub n_opt: i64,
pub a0: i64,
pub rho: i64,
pub tau: i64,
pub decentralisation_param: i64,
pub extra_entropy: i64,
pub n_opt: u32,
pub a0_numerator: i64,
pub a0_denominator: i64,
pub rho_numerator: i64,
pub rho_denominator: i64,
pub tau_numerator: i64,
pub tau_denominator: i64,
pub decentralisation_param_numerator: i64,
pub decentralisation_param_denominator: i64,
pub extra_entropy_numerator: u32,
pub extra_entropy_denominator: u32,
pub protocol_major_ver: i64,
pub protocol_minor_ver: i64,
pub min_utxo: i64,
pub min_pool_cost: i64,
pub price_mem: i64,
pub price_step: i64,
pub price_mem_numerator: i64,
pub price_mem_denominator: i64,
pub price_step_numerator: i64,
pub price_step_denominator: i64,
pub max_tx_ex_mem: u32,
pub max_tx_ex_steps: i64,
pub max_block_ex_mem: i64,
pub max_block_ex_mem: u32,
pub max_block_ex_steps: i64,
pub max_val_size: i64,
pub collateral_percent: i64,
pub max_collateral_inputs: i64,
pub max_val_size: u32,
pub collateral_percent: u32,
pub max_collateral_inputs: u32,
pub coins_per_utxo_size: i64,
pub coins_per_utxo_word: i64,

pub network: String,
pub era: String,
pub block_slot: i64,
pub block_slot: u32,
}

#[derive(Default)]
Expand Down
86 changes: 67 additions & 19 deletions napi-pallas/src/validations/alonzo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,22 @@ use pallas::{
check_preservation_of_value, check_script_data_hash, check_tx_ex_units, check_tx_size,
check_tx_validity_interval, check_witness_set,
},
utils::{get_alonzo_comp_tx_size, AlonzoProtParams, FeePolicy},
Environment, MultiEraProtParams, UTxOs,
utils::{get_alonzo_comp_tx_size, AlonzoProtParams},
Environment, MultiEraProtocolParameters, UTxOs,
},
ledger::primitives::{
alonzo::{ExUnitPrices, Language, MintedTx, TransactionBody},
conway::{ExUnits, Nonce, NonceVariant, RationalNumber},
},
ledger::primitives::alonzo::{MintedTx, TransactionBody},
};

use crate::{Validation, ValidationContext, Validations};

use super::validate::set_description;
use pallas::codec::utils::KeyValuePairs;

// & The following validation requires the size and the protocol params
fn validate_alonzo_tx_size(size: &Option<u64>, prot_pps: &AlonzoProtParams) -> Validation {
fn validate_alonzo_tx_size(size: &Option<u32>, prot_pps: &AlonzoProtParams) -> Validation {
match size {
Some(size_value) => {
let res = check_tx_size(&size_value, &prot_pps);
Expand Down Expand Up @@ -206,7 +210,7 @@ fn validate_alonzo_witness_set(mtx_a: &MintedTx, utxos: &UTxOs) -> Validation {
// & The following validation requires the transaction, its utxos and the protocol params
fn validate_alonzo_fee(mtx_a: &MintedTx, utxos: &UTxOs, prot_pps: &AlonzoProtParams) -> Validation {
let tx_body: &TransactionBody = &mtx_a.transaction_body;
let size: &Option<u64> = &get_alonzo_comp_tx_size(tx_body);
let size: &Option<u32> = &get_alonzo_comp_tx_size(tx_body);
match size {
Some(size_value) => {
let res = check_fee(tx_body, size_value, mtx_a, utxos, prot_pps);
Expand All @@ -231,21 +235,65 @@ fn validate_alonzo_fee(mtx_a: &MintedTx, utxos: &UTxOs, prot_pps: &AlonzoProtPar

pub fn validate_alonzo(mtx_a: &MintedTx, context: ValidationContext) -> Validations {
let tx_body: &TransactionBody = &mtx_a.transaction_body;
let size: &Option<u64> = &get_alonzo_comp_tx_size(tx_body);
let size: &Option<u32> = &get_alonzo_comp_tx_size(tx_body);
let prot_params = AlonzoProtParams {
fee_policy: FeePolicy {
summand: context.min_fee_b as u64,
multiplier: context.min_fee_a as u64,
minfee_a: context.min_fee_a,
minfee_b: context.min_fee_b,
max_block_body_size: context.max_block_size,
max_transaction_size: context.max_tx_size,
max_block_header_size: context.max_block_header_size,
key_deposit: context.key_deposit as u64,
pool_deposit: context.pool_deposit as u64,
maximum_epoch: context.e_max as u64,
desired_number_of_stake_pools: context.n_opt,
pool_pledge_influence: RationalNumber {
numerator: context.a0_numerator as u64,
denominator: context.a0_denominator as u64,
},
expansion_rate: RationalNumber {
numerator: context.rho_numerator as u64,
denominator: context.rho_denominator as u64,
},
treasury_growth_rate: RationalNumber {
numerator: context.tau_numerator as u64,
denominator: context.tau_denominator as u64,
},
decentralization_constant: RationalNumber {
numerator: context.decentralisation_param_numerator as u64,
denominator: context.decentralisation_param_denominator as u64,
},
extra_entropy: Nonce {
variant: NonceVariant::NeutralNonce,
hash: None,
},
protocol_version: (
context.protocol_minor_ver as u64,
context.protocol_major_ver as u64,
),
min_pool_cost: context.min_pool_cost as u64,
cost_models_for_script_languages: KeyValuePairs::Def(vec![(Language::PlutusV1, vec![])]),
ada_per_utxo_byte: context.coins_per_utxo_size as u64,
execution_costs: ExUnitPrices {
mem_price: RationalNumber {
numerator: context.price_mem_numerator as u64,
denominator: context.price_mem_denominator as u64,
},
step_price: RationalNumber {
numerator: context.price_step_numerator as u64,
denominator: context.price_step_denominator as u64,
},
},
max_tx_ex_units: ExUnits {
mem: context.max_tx_ex_mem,
steps: context.max_tx_ex_steps as u64,
},
max_block_ex_units: ExUnits {
mem: context.max_block_ex_mem,
steps: context.max_block_ex_steps as u64,
},
max_tx_size: context.max_tx_size as u64,
max_block_ex_mem: context.max_block_ex_mem as u64,
max_block_ex_steps: context.max_block_ex_steps as u64,
max_tx_ex_mem: context.max_tx_ex_mem,
max_tx_ex_steps: context.max_tx_ex_steps as u64,
max_val_size: context.max_val_size as u64,
collateral_percent: context.collateral_percent as u64,
max_collateral_inputs: context.max_collateral_inputs as u64,
coins_per_utxo_word: context.coins_per_utxo_word as u64,
max_value_size: context.max_val_size,
collateral_percentage: context.collateral_percent,
max_collateral_inputs: context.max_collateral_inputs,
};

let mut magic = 764824073; // For mainnet
Expand All @@ -261,7 +309,7 @@ pub fn validate_alonzo(mtx_a: &MintedTx, context: ValidationContext) -> Validati
}

let env: Environment = Environment {
prot_params: MultiEraProtParams::Alonzo(prot_params.clone()),
prot_params: MultiEraProtocolParameters::Alonzo(prot_params.clone()),
prot_magic: magic,
block_slot: context.block_slot as u64,
network_id: net_id,
Expand Down
92 changes: 73 additions & 19 deletions napi-pallas/src/validations/babbage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,17 @@ use pallas::{
check_preservation_of_value, check_script_data_hash, check_tx_ex_units, check_tx_size,
check_tx_validity_interval, check_well_formedness, check_witness_set,
},
utils::{get_babbage_tx_size, BabbageProtParams, FeePolicy},
Environment, MultiEraProtParams, UTxOs,
utils::{get_babbage_tx_size, BabbageProtParams},
Environment, MultiEraProtocolParameters, UTxOs,
},
ledger::{
primitives::{
alonzo::ExUnitPrices,
babbage::{CostMdls, MintedTransactionBody, MintedTx as BabbageMintedTx},
conway::{Nonce, NonceVariant, RationalNumber},
},
traverse::update::ExUnits,
},
ledger::primitives::babbage::{MintedTransactionBody, MintedTx as BabbageMintedTx},
};

use super::validate::set_description;
Expand Down Expand Up @@ -115,7 +122,7 @@ fn validate_babbage_tx_ex_units(mtx: &BabbageMintedTx, prot_pps: &BabbageProtPar
}

// &The following validation also requires the tx size
fn validate_babbage_tx_size(size: &Option<u64>, prot_pps: &BabbageProtParams) -> Validation {
fn validate_babbage_tx_size(size: &Option<u32>, prot_pps: &BabbageProtParams) -> Validation {
match size {
Some(size_value) => {
let res = check_tx_size(size_value, prot_pps);
Expand All @@ -142,7 +149,7 @@ fn validate_babbage_tx_size(size: &Option<u64>, prot_pps: &BabbageProtParams) ->
// &The following validation also requires the tx utxos
fn validate_babbage_fee(
mtx: &BabbageMintedTx,
size: &Option<u64>,
size: &Option<u32>,
utxos: &UTxOs,
prot_pps: &BabbageProtParams,
) -> Validation {
Expand Down Expand Up @@ -282,21 +289,68 @@ fn validate_babbage_network_id(mtx: &BabbageMintedTx, network_id: u8) -> Validat

pub fn validate_babbage(mtx_b: &BabbageMintedTx, context: ValidationContext) -> Validations {
let tx_body: &MintedTransactionBody = &mtx_b.transaction_body.clone();
let size: &Option<u64> = &get_babbage_tx_size(tx_body);
let size: &Option<u32> = &get_babbage_tx_size(tx_body);
let prot_params = BabbageProtParams {
fee_policy: FeePolicy {
summand: context.min_fee_b as u64,
multiplier: context.min_fee_a as u64,
minfee_a: context.min_fee_a,
minfee_b: context.min_fee_b,
max_block_body_size: context.max_block_size,
max_transaction_size: context.max_tx_size,
max_block_header_size: context.max_block_header_size,
key_deposit: context.key_deposit as u64,
pool_deposit: context.pool_deposit as u64,
maximum_epoch: context.e_max as u64,
desired_number_of_stake_pools: context.n_opt,
pool_pledge_influence: RationalNumber {
numerator: context.a0_numerator as u64,
denominator: context.a0_denominator as u64, // ?
},
expansion_rate: RationalNumber {
numerator: context.rho_numerator as u64,
denominator: context.rho_denominator as u64, // ?
},
treasury_growth_rate: RationalNumber {
numerator: context.tau_numerator as u64,
denominator: context.tau_denominator as u64, // ?
},
decentralization_constant: RationalNumber {
numerator: context.decentralisation_param_numerator as u64,
denominator: context.decentralisation_param_denominator as u64, // ?
},
extra_entropy: Nonce {
variant: NonceVariant::NeutralNonce,
hash: None,
},
protocol_version: (
context.protocol_minor_ver as u64,
context.protocol_major_ver as u64,
),
min_pool_cost: context.min_pool_cost as u64,
cost_models_for_script_languages: CostMdls {
plutus_v1: None,
plutus_v2: None,
},
ada_per_utxo_byte: context.coins_per_utxo_size as u64,
execution_costs: ExUnitPrices {
mem_price: RationalNumber {
numerator: context.price_mem_numerator as u64,
denominator: context.price_mem_denominator as u64, // ?
},
step_price: RationalNumber {
numerator: context.price_step_numerator as u64,
denominator: context.price_step_denominator as u64, // ?
},
},
max_tx_ex_units: ExUnits {
mem: context.max_tx_ex_mem,
steps: context.max_tx_ex_steps as u64,
},
max_block_ex_units: ExUnits {
mem: context.max_block_ex_mem,
steps: context.max_block_ex_steps as u64,
},
max_tx_size: context.max_tx_size as u64,
max_block_ex_mem: context.max_block_ex_mem as u64,
max_block_ex_steps: context.max_block_ex_steps as u64,
max_tx_ex_mem: context.max_tx_ex_mem,
max_tx_ex_steps: context.max_tx_ex_steps as u64,
max_val_size: context.max_val_size as u64,
collateral_percent: context.collateral_percent as u64,
max_collateral_inputs: context.max_collateral_inputs as u64,
coins_per_utxo_word: context.coins_per_utxo_word as u64,
max_value_size: context.max_val_size,
collateral_percentage: context.collateral_percent,
max_collateral_inputs: context.max_collateral_inputs,
};

let mut magic = 764824073; // For mainnet
Expand All @@ -312,7 +366,7 @@ pub fn validate_babbage(mtx_b: &BabbageMintedTx, context: ValidationContext) ->
}

let env: Environment = Environment {
prot_params: MultiEraProtParams::Babbage(prot_params.clone()),
prot_params: MultiEraProtocolParameters::Babbage(prot_params.clone()),
prot_magic: magic,
block_slot: context.block_slot as u64,
network_id: net_id,
Expand Down
Loading

0 comments on commit e82e8e2

Please sign in to comment.