refactor: support roundtrip encoding for script data hash components (#526)

This commit is contained in:
Santiago Carmuega 2024-10-22 10:09:37 -03:00 committed by GitHub
parent 969d5612b7
commit 537cd45c23
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 84 additions and 119 deletions

View file

@ -566,24 +566,22 @@ fn mk_plutus_script_redeemer_pointers(
}
}
}
match mint {
Some(minted_value) => {
let sorted_policies: Vec<PolicyId> = sort_policies(minted_value);
for (index, policy) in sorted_policies.iter().enumerate() {
for plutus_script in plutus_scripts.iter() {
let hashed_script: PolicyId =
compute_plutus_v1_script_hash(plutus_script);
if *policy == hashed_script {
res.push(RedeemerPointer {
tag: RedeemerTag::Mint,
index: index as u32,
})
}
if let Some(minted_value) = mint {
let sorted_policies: Vec<PolicyId> = sort_policies(minted_value);
for (index, policy) in sorted_policies.iter().enumerate() {
for plutus_script in plutus_scripts.iter() {
let hashed_script: PolicyId = compute_plutus_v1_script_hash(plutus_script);
if *policy == hashed_script {
res.push(RedeemerPointer {
tag: RedeemerTag::Mint,
index: index as u32,
})
}
}
}
None => (),
}
res
}
None => Vec::new(),
@ -727,10 +725,11 @@ fn check_vkey_input_wits(
let tx_hash: &Vec<u8> = &Vec::from(mtx.transaction_body.original_hash().as_ref());
let mut inputs_and_collaterals: Vec<TransactionInput> = Vec::new();
inputs_and_collaterals.extend(tx_body.inputs.clone());
match &tx_body.collateral {
Some(collaterals) => inputs_and_collaterals.extend(collaterals.clone()),
None => (),
if let Some(collaterals) = &tx_body.collateral {
inputs_and_collaterals.extend(collaterals.clone());
}
for input in inputs_and_collaterals.iter() {
match utxos.get(&MultiEraInput::from_alonzo_compatible(input)) {
Some(multi_era_output) => {

View file

@ -27,6 +27,8 @@ use std::borrow::Cow;
#[cfg(test)]
mod alonzo_tests {
use pallas_primitives::MaybeIndefArray;
use super::*;
#[test]
@ -2046,7 +2048,7 @@ mod alonzo_tests {
);
let mut tx_wits: MintedWitnessSet = mtx.transaction_witness_set.unwrap().clone();
let old_datum: KeepRaw<PlutusData> = tx_wits.plutus_data.unwrap().pop().unwrap();
let new_datum: PlutusData = PlutusData::Array(Vec::new());
let new_datum: PlutusData = PlutusData::Array(MaybeIndefArray::Def(Vec::new()));
let mut new_datum_buf: Vec<u8> = Vec::new();
let _ = encode(new_datum, &mut new_datum_buf);
let keep_raw_new_datum: KeepRaw<PlutusData> =
@ -2171,7 +2173,7 @@ mod alonzo_tests {
let new_redeemer: Redeemer = Redeemer {
tag: RedeemerTag::Spend,
index: 15,
data: PlutusData::Array(Vec::new()),
data: PlutusData::Array(MaybeIndefArray::Def(Vec::new())),
ex_units: ExUnits { mem: 0, steps: 0 },
};
tx_wits.redeemer = Some(vec![old_redeemer, new_redeemer]);

View file

@ -29,6 +29,8 @@ use std::borrow::Cow;
#[cfg(test)]
mod babbage_tests {
use pallas_primitives::MaybeIndefArray;
use super::*;
#[test]
@ -2150,7 +2152,7 @@ mod babbage_tests {
add_collateral_babbage(&mtx.transaction_body, &mut utxos, collateral_info);
let mut tx_wits: MintedWitnessSet = mtx.transaction_witness_set.unwrap().clone();
let old_datum: KeepRaw<PlutusData> = tx_wits.plutus_data.unwrap().pop().unwrap();
let new_datum: PlutusData = PlutusData::Array(Vec::new());
let new_datum: PlutusData = PlutusData::Array(MaybeIndefArray::Def(Vec::new()));
let mut new_datum_buf: Vec<u8> = Vec::new();
let _ = encode(new_datum, &mut new_datum_buf);
let keep_raw_new_datum: KeepRaw<PlutusData> =
@ -2245,7 +2247,7 @@ mod babbage_tests {
let new_redeemer: Redeemer = Redeemer {
tag: RedeemerTag::Spend,
index: 15,
data: PlutusData::Array(Vec::new()),
data: PlutusData::Array(MaybeIndefArray::Def(Vec::new())),
ex_units: ExUnits { mem: 0, steps: 0 },
};
tx_wits.redeemer = Some(vec![old_redeemer, new_redeemer]);