From dfe644033664252c9d0e41e61b1d97fdd934ed96 Mon Sep 17 00:00:00 2001 From: Santiago Carmuega Date: Tue, 27 Aug 2024 14:44:05 -0300 Subject: [PATCH] chore: bump Pallas to v0.30.1 --- Cargo.lock | 30 +++++++++--------- Cargo.toml | 10 +++--- src/mapper/conway.rs | 73 ++++++++++++++++++++++++++++++++++++++------ 3 files changed, 84 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 14b4af02..7c947a6d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2257,7 +2257,7 @@ dependencies = [ "net2", "openssl", "pallas-addresses", - "pallas-codec 0.29.0", + "pallas-codec 0.30.1", "pallas-crypto", "pallas-miniprotocols", "pallas-multiplexer", @@ -2294,16 +2294,16 @@ dependencies = [ [[package]] name = "pallas-addresses" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d628ad58404ddd733e8fe46fe9986489b46258a2ab1bb7b1c4b8e406b91b7cff" +checksum = "c38fac39e0da3b0fc4c859635c72e97584f01f3a0f4f1508b0851c02d6d52f15" dependencies = [ "base58", "bech32", "crc", "cryptoxide", "hex", - "pallas-codec 0.29.0", + "pallas-codec 0.30.1", "pallas-crypto", "thiserror", ] @@ -2321,9 +2321,9 @@ dependencies = [ [[package]] name = "pallas-codec" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da003a7360fa032b80d38b4a15573f885f412f2b3868772d49fb072197a9d5f9" +checksum = "ea8a4b87dbc8bcb8aeb865f7cca5e1eb29744330e23b307169fc30537648b264" dependencies = [ "hex", "minicbor 0.20.0", @@ -2333,13 +2333,13 @@ dependencies = [ [[package]] name = "pallas-crypto" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9248ed0e594bcb0f548393264519c7adea88874d8bd7cc86f894e8ba4e918c2" +checksum = "7b98c3f204299d47d9b581ab425043789caff1f491c078ee3d3f109d6556f725" dependencies = [ "cryptoxide", "hex", - "pallas-codec 0.29.0", + "pallas-codec 0.30.1", "rand_core", "serde", "thiserror", @@ -2376,15 +2376,15 @@ dependencies = [ [[package]] name = "pallas-primitives" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fa55305212f7828651c8db024e1e286198c2fccb028bbb697c68990c044959" +checksum = "9f64835dd9cbdd75a38961a190b983f02746c872340daf1a921eada8c525a4b6" dependencies = [ "base58", "bech32", "hex", "log", - "pallas-codec 0.29.0", + "pallas-codec 0.30.1", "pallas-crypto", "serde", "serde_json", @@ -2392,14 +2392,14 @@ dependencies = [ [[package]] name = "pallas-traverse" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49459bd0d2ba86fd909890a81e6238eaf051952d7e38ad63195301e72e8f458e" +checksum = "ad516b05ba7d838ee84f9998d7b2b4ff7acc178cb052bcfd5fea9edc2ef6023f" dependencies = [ "hex", "itertools 0.13.0", "pallas-addresses", - "pallas-codec 0.29.0", + "pallas-codec 0.30.1", "pallas-crypto", "pallas-primitives", "paste", diff --git a/Cargo.toml b/Cargo.toml index 4e4cad33..e37dba42 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,11 +14,11 @@ authors = ["Santiago Carmuega "] [dependencies] pallas-multiplexer = "0.18.2" pallas-miniprotocols = "0.18.2" -pallas-primitives = "0.29.0" -pallas-traverse = "0.29.0" -pallas-addresses = "0.29.0" -pallas-codec = "0.29.0" -pallas-crypto = "0.29.0" +pallas-primitives = "0.30.1" +pallas-traverse = "0.30.1" +pallas-addresses = "0.30.1" +pallas-codec = "0.30.1" +pallas-crypto = "0.30.1" # pallas = { git = "https://github.com/txpipe/pallas" } # pallas = { path = "../pallas/pallas" } hex = "0.4.3" diff --git a/src/mapper/conway.rs b/src/mapper/conway.rs index 8b07fc9e..fb385b08 100644 --- a/src/mapper/conway.rs +++ b/src/mapper/conway.rs @@ -1,9 +1,10 @@ -use pallas_codec::utils::{KeepRaw, NonZeroInt}; +use pallas_codec::utils::{KeepRaw, NonEmptyKeyValuePairs, NonZeroInt}; use pallas_primitives::conway::{ - AuxiliaryData, Certificate, MintedBlock, MintedDatumOption, MintedPostAlonzoTransactionOutput, - MintedTransactionBody, MintedTransactionOutput, MintedWitnessSet, Multiasset, NetworkId, - RedeemerTag, RedeemersKey, RedeemersValue, + AuxiliaryData, Certificate, Coin, MintedBlock, MintedDatumOption, + MintedPostAlonzoTransactionOutput, MintedTransactionBody, MintedTransactionOutput, + MintedWitnessSet, Multiasset, NetworkId, RedeemerTag, RedeemersKey, RedeemersValue, + RewardAccount, Value, }; use pallas_crypto::hash::Hash; @@ -11,7 +12,8 @@ use pallas_primitives::ToCanonicalJson as _; use pallas_traverse::OriginalHash; use crate::model::{ - BlockRecord, Era, MintRecord, PlutusRedeemerRecord, TransactionRecord, TxOutputRecord, + BlockRecord, Era, MintRecord, OutputAssetRecord, PlutusRedeemerRecord, TransactionRecord, + TxOutputRecord, WithdrawalRecord, }; use crate::utils::time::TimeProvider; use crate::{ @@ -22,6 +24,27 @@ use crate::{ use super::{map::ToHex, EventWriter}; impl EventWriter { + pub fn collect_conway_coin_value(&self, amount: &Value) -> u64 { + match amount { + Value::Coin(x) => *x, + Value::Multiasset(x, _) => *x, + } + } + + pub fn collect_conway_asset_records(&self, amount: &Value) -> Vec { + match amount { + Value::Coin(_) => vec![], + Value::Multiasset(_, policies) => policies + .iter() + .flat_map(|(policy, assets)| { + assets.iter().map(|(asset, amount)| { + self.to_transaction_output_asset_record(policy, asset, u64::from(amount)) + }) + }) + .collect(), + } + } + pub fn collect_conway_mint_records(&self, mint: &Multiasset) -> Vec { mint.iter() .flat_map(|(policy, assets)| { @@ -50,8 +73,8 @@ impl EventWriter { Ok(TxOutputRecord { address: address.to_string(), - amount: super::map::get_tx_output_coin_value(&output.value), - assets: self.collect_asset_records(&output.value).into(), + amount: self.collect_conway_coin_value(&output.value), + assets: self.collect_conway_asset_records(&output.value).into(), datum_hash: match &output.datum_option { Some(MintedDatumOption::Hash(x)) => Some(x.to_string()), Some(MintedDatumOption::Data(x)) => Some(x.original_hash().to_hex()), @@ -98,6 +121,22 @@ impl EventWriter { .collect() } + pub fn collect_conway_withdrawal_records( + &self, + withdrawls: &NonEmptyKeyValuePairs, + ) -> Vec { + withdrawls + .iter() + .map(|(reward_account, coin)| WithdrawalRecord { + reward_account: { + let hex = reward_account.to_hex(); + hex.strip_prefix("e1").map(|x| x.to_string()).unwrap_or(hex) + }, + coin: *coin, + }) + .collect() + } + pub fn to_conway_tx_size( &self, body: &KeepRaw, @@ -243,7 +282,7 @@ impl EventWriter { } if let Some(withdrawals) = &body.withdrawals { - record.withdrawals = self.collect_withdrawal_records(withdrawals).into(); + record.withdrawals = self.collect_conway_withdrawal_records(withdrawals).into(); } } @@ -317,6 +356,22 @@ impl EventWriter { .collect() } + pub fn crawl_conway_transaction_output_amount(&self, amount: &Value) -> Result<(), Error> { + if let Value::Multiasset(_, policies) = amount { + for (policy, assets) in policies.iter() { + for (asset, amount) in assets.iter() { + self.append_from(self.to_transaction_output_asset_record( + policy, + asset, + u64::from(amount), + ))?; + } + } + } + + Ok(()) + } + fn crawl_conway_output(&self, output: &MintedPostAlonzoTransactionOutput) -> Result<(), Error> { let record = self.to_conway_output_record(output)?; self.append(record.into())?; @@ -328,7 +383,7 @@ impl EventWriter { ..EventContext::default() }); - child.crawl_transaction_output_amount(&output.value)?; + child.crawl_conway_transaction_output_amount(&output.value)?; if let Some(MintedDatumOption::Data(datum)) = &output.datum_option { let record = self.to_plutus_datum_record(datum)?;