fix: redeemers in the script context are sorted by redeemer ptr not data hash

This commit is contained in:
microproofs 2023-06-16 12:24:44 -04:00
parent e72a9f8e0b
commit 93135cebbb
1 changed files with 15 additions and 2 deletions

View File

@ -12,7 +12,7 @@ use pallas_primitives::babbage::{
StakeCredential, TransactionInput, TransactionOutput, Value, Withdrawals, StakeCredential, TransactionInput, TransactionOutput, Value, Withdrawals,
}; };
use pallas_traverse::{ComputeHash, OriginalHash}; use pallas_traverse::{ComputeHash, OriginalHash};
use std::{collections::HashMap, convert::TryInto, ops::Deref, vec}; use std::{cmp::Ordering, collections::HashMap, convert::TryInto, ops::Deref, vec};
use super::{ use super::{
script_context::{ script_context::{
@ -417,7 +417,20 @@ fn get_tx_info_v2(
.as_ref() .as_ref()
.unwrap_or(&MaybeIndefArray::Indef(vec![])) .unwrap_or(&MaybeIndefArray::Indef(vec![]))
.iter() .iter()
.sorted_by(|a, b| a.data.compute_hash().cmp(&b.data.compute_hash())) .sorted_by(|a, b| -> Ordering {
if a.tag == b.tag {
a.index.cmp(&b.index)
} else {
match (&a.tag, &b.tag) {
(RedeemerTag::Spend, _) => Ordering::Greater,
(RedeemerTag::Mint, RedeemerTag::Spend) => Ordering::Less,
(RedeemerTag::Mint, _) => Ordering::Greater,
(RedeemerTag::Cert, RedeemerTag::Reward) => Ordering::Greater,
(RedeemerTag::Cert, _) => Ordering::Less,
(RedeemerTag::Reward, _) => Ordering::Less,
}
}
})
.map(|r| { .map(|r| {
( (
get_script_purpose( get_script_purpose(