diff --git a/src/mapper/byron.rs b/src/mapper/byron.rs index d0f58ac5..aca3df78 100644 --- a/src/mapper/byron.rs +++ b/src/mapper/byron.rs @@ -52,6 +52,7 @@ impl EventWriter { assets: None, datum_hash: None, inline_datum: None, + reference_script: None, }) } diff --git a/src/mapper/conway.rs b/src/mapper/conway.rs index fb385b08..8650d93e 100644 --- a/src/mapper/conway.rs +++ b/src/mapper/conway.rs @@ -4,12 +4,12 @@ use pallas_primitives::conway::{ AuxiliaryData, Certificate, Coin, MintedBlock, MintedDatumOption, MintedPostAlonzoTransactionOutput, MintedTransactionBody, MintedTransactionOutput, MintedWitnessSet, Multiasset, NetworkId, RedeemerTag, RedeemersKey, RedeemersValue, - RewardAccount, Value, + RewardAccount, ScriptRef, Value, }; use pallas_crypto::hash::Hash; use pallas_primitives::ToCanonicalJson as _; -use pallas_traverse::OriginalHash; +use pallas_traverse::{ComputeHash, OriginalHash}; use crate::model::{ BlockRecord, Era, MintRecord, OutputAssetRecord, PlutusRedeemerRecord, TransactionRecord, @@ -84,6 +84,14 @@ impl EventWriter { Some(MintedDatumOption::Data(x)) => Some(self.to_plutus_datum_record(x)?), _ => None, }, + reference_script: output.script_ref.as_ref().map(|x| { + match ScriptRef::from(x.0.clone()) { + ScriptRef::NativeScript(script) => script.compute_hash().to_hex(), + ScriptRef::PlutusV1Script(script) => script.compute_hash().to_hex(), + ScriptRef::PlutusV2Script(script) => script.compute_hash().to_hex(), + ScriptRef::PlutusV3Script(script) => script.compute_hash().to_hex(), + } + }), }) } diff --git a/src/mapper/map.rs b/src/mapper/map.rs index 79be068b..e5460e99 100644 --- a/src/mapper/map.rs +++ b/src/mapper/map.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use pallas_codec::utils::KeepRaw; use pallas_crypto::hash::Hash; use pallas_primitives::alonzo::MintedWitnessSet; -use pallas_primitives::babbage::MintedDatumOption; +use pallas_primitives::babbage::{MintedDatumOption, ScriptRef}; use pallas_traverse::{ComputeHash, OriginalHash}; use pallas_primitives::{ @@ -178,6 +178,7 @@ impl EventWriter { assets: self.collect_asset_records(&output.amount).into(), datum_hash: output.datum_hash.map(|hash| hash.to_string()), inline_datum: None, + reference_script: None, }) } @@ -200,6 +201,13 @@ impl EventWriter { Some(MintedDatumOption::Data(x)) => Some(self.to_plutus_datum_record(x)?), _ => None, }, + reference_script: output.script_ref.as_ref().map(|x| { + match ScriptRef::from(x.0.clone()) { + ScriptRef::NativeScript(script) => script.compute_hash().to_hex(), + ScriptRef::PlutusV1Script(script) => script.compute_hash().to_hex(), + ScriptRef::PlutusV2Script(script) => script.compute_hash().to_hex(), + } + }), }) } diff --git a/src/model.rs b/src/model.rs index 89f894b4..61a11a62 100644 --- a/src/model.rs +++ b/src/model.rs @@ -132,6 +132,7 @@ pub struct TxOutputRecord { pub assets: Option>, pub datum_hash: Option, pub inline_datum: Option, + pub reference_script: Option, } impl From for EventData {