import { ExUnits } from "./parameterUpdate"; import { PlutusData } from "./plutus"; type RedeemerTag = "Spending" | "Minting" | "Certifying" | "Rewarding" | "Voting" | "Proposing"; export type Redeemers = { purpose: RedeemerTag; index: number | bigint; data: any; exUnits: ExUnits }; export function parseRedeemers(redeemers: any[] | Map<[number, number], [any, ExUnits]>): Redeemers[] { const parsedRedeemers: Redeemers[] = []; if (Array.isArray(redeemers)) { redeemers.forEach((redeemer) => { const tag = redeemer[0]; switch (tag) { case 0: parsedRedeemers.push({ purpose: "Spending", index: redeemer[1], data: redeemer[3], exUnits: redeemer[4] }); break; case 1: parsedRedeemers.push({ purpose: "Minting", index: redeemer[1], data: redeemer[3], exUnits: redeemer[4] }); break; case 2: parsedRedeemers.push({ purpose: "Certifying", index: redeemer[1], data: redeemer[3], exUnits: redeemer[4] }); break; case 3: parsedRedeemers.push({ purpose: "Rewarding", index: redeemer[1], data: redeemer[3], exUnits: redeemer[4] }); break; case 4: parsedRedeemers.push({ purpose: "Voting", index: redeemer[1], data: redeemer[3], exUnits: redeemer[4] }); break; case 5: parsedRedeemers.push({ purpose: "Proposing", index: redeemer[1], data: redeemer[3], exUnits: redeemer[4] }); break; default: throw new Error(`Invalid Redeemer Tag: ${tag} `); } }); } else { redeemers.forEach((data_exUnits, tag_index) => { const tag = tag_index[0]; const index = tag_index[1]; const data = data_exUnits[0]; const exUnits = data_exUnits[1]; switch (tag) { case 0: parsedRedeemers.push({ purpose: "Spending", index: index, data: data, exUnits: exUnits }); break; case 1: parsedRedeemers.push({ purpose: "Minting", index: index, data: data, exUnits: exUnits }); break; case 2: parsedRedeemers.push({ purpose: "Certifying", index: index, data: data, exUnits: exUnits }); break; case 3: parsedRedeemers.push({ purpose: "Rewarding", index: index, data: data, exUnits: exUnits }); break; case 4: parsedRedeemers.push({ purpose: "Voting", index: index, data: data, exUnits: exUnits }); break; case 5: parsedRedeemers.push({ purpose: "Proposing", index: index, data: data, exUnits: exUnits }); break; default: throw new Error(`Invalid Redeemer Tag: ${tag} `); } }); } return parsedRedeemers; }