From f3d26c9cd80028e2110c2008ee3d11b9880c98d7 Mon Sep 17 00:00:00 2001 From: alessandrokonrad Date: Wed, 28 Dec 2022 17:38:26 +0100 Subject: [PATCH] Fixed bug regarding inline datum; updated examples --- src/examples/always_succeeds.ts | 4 +-- src/examples/mint_simple_NFT.ts | 6 ++-- src/examples/parameterized_script.ts | 2 +- src/examples/sign_message.ts | 4 +-- src/plutus/data.ts | 2 +- src/provider/simulator.ts | 48 +++++++--------------------- src/utils/utils.ts | 2 +- 7 files changed, 21 insertions(+), 47 deletions(-) diff --git a/src/examples/always_succeeds.ts b/src/examples/always_succeeds.ts index e6dc1be8..13ac3ae1 100644 --- a/src/examples/always_succeeds.ts +++ b/src/examples/always_succeeds.ts @@ -38,8 +38,8 @@ const alwaysSucceedAddress: Address = lucid.utils.validatorToAddress( alwaysSucceedScript, ); -const Datum = () => Data.empty(); -const Redeemer = () => Data.empty(); +const Datum = () => Data.void(); +const Redeemer = () => Data.void(); export async function lockUtxo( lovelace: Lovelace, diff --git a/src/examples/mint_simple_NFT.ts b/src/examples/mint_simple_NFT.ts index bbfad0bf..9e177a38 100644 --- a/src/examples/mint_simple_NFT.ts +++ b/src/examples/mint_simple_NFT.ts @@ -1,11 +1,11 @@ import { Blockfrost, + fromText, Lucid, MintingPolicy, PolicyId, TxHash, Unit, - utf8ToHex, } from "../mod.ts"; /* @@ -46,7 +46,7 @@ const policyId: PolicyId = lucid.utils.mintingPolicyToId( export async function mintNFT( name: string, ): Promise { - const unit: Unit = policyId + utf8ToHex(name); + const unit: Unit = policyId + fromText(name); const tx = await lucid .newTx() @@ -65,7 +65,7 @@ export async function mintNFT( export async function burnNFT( name: string, ): Promise { - const unit: Unit = policyId + utf8ToHex(name); + const unit: Unit = policyId + fromText(name); const tx = await lucid .newTx() diff --git a/src/examples/parameterized_script.ts b/src/examples/parameterized_script.ts index a3c087ec..84894fa7 100644 --- a/src/examples/parameterized_script.ts +++ b/src/examples/parameterized_script.ts @@ -43,7 +43,7 @@ export async function mint( const tx = await lucid .newTx() - .mintAssets({ [unit]: 1n }, Data.empty()) + .mintAssets({ [unit]: 1n }, Data.void()) .attachMintingPolicy(mintingPolicy) .complete(); diff --git a/src/examples/sign_message.ts b/src/examples/sign_message.ts index 968c4815..b75db707 100644 --- a/src/examples/sign_message.ts +++ b/src/examples/sign_message.ts @@ -1,4 +1,4 @@ -import { Lucid, utf8ToHex } from "../../mod.ts"; +import { fromText, Lucid } from "../../mod.ts"; // Sign a message and verify it. @@ -7,7 +7,7 @@ const lucid = await Lucid.new(); lucid.selectWalletFromSeed("car rare ..."); const address = await lucid.wallet.address(); -const payload = utf8ToHex("Hello from Lucid!"); +const payload = fromText("Hello from Lucid!"); const signedMessage = await lucid.newMessage(address, payload).sign(); diff --git a/src/plutus/data.ts b/src/plutus/data.ts index 354c5cde..a063fdc2 100644 --- a/src/plutus/data.ts +++ b/src/plutus/data.ts @@ -91,7 +91,7 @@ export const Data = { * Note: Constructor cannot be used here, also only bytes/integers as Json keys. */ toJson, - empty: function (): Datum | Redeemer { + void: function (): Datum | Redeemer { return "d87980"; }, castFrom, diff --git a/src/provider/simulator.ts b/src/provider/simulator.ts index a225a362..41df5230 100644 --- a/src/provider/simulator.ts +++ b/src/provider/simulator.ts @@ -331,13 +331,13 @@ export class Simulator implements Provider { const redeemers = (() => { const tagMap: Record = { - 0: "Mint", - 1: "Spend", + 0: "Spend", + 1: "Mint", 2: "Cert", 3: "Reward", }; const collected = []; - for (let i = 0; i < (witnesses.redeemers()?.len || 0); i++) { + for (let i = 0; i < (witnesses.redeemers()?.len() || 0); i++) { const redeemer = witnesses.redeemers()!.get(i); collected.push({ tag: tagMap[redeemer.tag().kind()], @@ -351,9 +351,10 @@ export class Simulator implements Provider { function checkAndConsumeHash( credential: Credential, + tag: string, index: number, ) { - switch (credential?.type) { + switch (credential.type) { case "Key": { if (!keyHashes.includes(credential.hash)) { throw new Error( @@ -370,7 +371,7 @@ export class Simulator implements Provider { } else if (plutusHashes.includes(credential.hash)) { if ( redeemers.find((redeemer) => - redeemer.tag === "Reward" && redeemer.index === index + redeemer.tag === tag && redeemer.index === index ) ) { consumedHashes.add(credential.hash); @@ -387,7 +388,7 @@ export class Simulator implements Provider { for (let index = 0; index < (body.mint()?.keys().len() || 0); index++) { const policyId = body.mint()!.keys().get(index).to_hex(); - checkAndConsumeHash({ type: "Script", hash: policyId }, index); + checkAndConsumeHash({ type: "Script", hash: policyId }, "Mint", index); } // Check withdrawal witnesses @@ -407,7 +408,7 @@ export class Simulator implements Provider { const { stakeCredential } = getAddressDetails( rewardAddress, ); - checkAndConsumeHash(stakeCredential!, index); + checkAndConsumeHash(stakeCredential!, "Reward", index); if (this.chain[rewardAddress]?.delegation.rewards !== withdrawal) { throw new Error( "Withdrawal amount doesn't match actual reward balance.", @@ -457,7 +458,7 @@ export class Simulator implements Provider { ).to_address().to_bech32(undefined); const { stakeCredential } = getAddressDetails(rewardAddress); - checkAndConsumeHash(stakeCredential!, index); + checkAndConsumeHash(stakeCredential!, "Cert", index); if (!this.chain[rewardAddress]?.registeredStake) { throw new Error( @@ -476,7 +477,7 @@ export class Simulator implements Provider { const poolId = delegation.pool_keyhash().to_bech32("pool"); const { stakeCredential } = getAddressDetails(rewardAddress); - checkAndConsumeHash(stakeCredential!, index); + checkAndConsumeHash(stakeCredential!, "Cert", index); if ( !this.chain[rewardAddress]?.registeredStake && @@ -529,34 +530,7 @@ export class Simulator implements Provider { resolvedInputs.forEach(({ entry: { utxo } }, index) => { const { paymentCredential } = getAddressDetails(utxo.address); - switch (paymentCredential?.type) { - case "Key": { - if (!keyHashes.includes(paymentCredential.hash)) { - throw new Error( - `Missing vkey witness. Key hash: ${paymentCredential.hash}`, - ); - } - consumedHashes.add(paymentCredential.hash); - break; - } - case "Script": - if (nativeHashes.includes(paymentCredential.hash)) { - consumedHashes.add(paymentCredential.hash); - break; - } else if (plutusHashes.includes(paymentCredential.hash)) { - if ( - redeemers.find((redeemer) => - redeemer.tag === "Spend" && redeemer.index === index - ) - ) { - consumedHashes.add(paymentCredential.hash); - break; - } - } - throw new Error( - `Missing script witness. Script hash: ${paymentCredential.hash}`, - ); - } + checkAndConsumeHash(paymentCredential!, "Spend", index); }); if (!keyHashes.every((keyHash) => consumedHashes.has(keyHash))) { diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 52cc3371..1f773890 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -508,7 +508,7 @@ export function coreToUtxo(coreUtxo: Core.TransactionUnspentOutput): UTxO { : coreUtxo.output().address().to_bech32(undefined), datumHash: coreUtxo.output()?.datum()?.as_data_hash()?.to_hex(), datum: coreUtxo.output()?.datum()?.as_data() && - toHex(coreUtxo.output().datum()!.as_data()!.to_bytes()), + toHex(coreUtxo.output().datum()!.as_data()!.get().to_bytes()), scriptRef: coreUtxo.output()?.script_ref() && fromScriptRef(coreUtxo.output().script_ref()!), };