From 37b0d6e712474f941e066fae4372a040b12f79f5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 20:25:39 +0000 Subject: [PATCH 1/6] Initial plan From ac076cc2df6b1b36829f718ecf47e0b9e26230b2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 20:29:46 +0000 Subject: [PATCH 2/6] Fix missing redeemer in mintAssets causing script integrity hash error (3113) Co-authored-by: SynthLuvr <131367121+SynthLuvr@users.noreply.github.com> --- src/mint.ts | 1 + src/nft.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/mint.ts b/src/mint.ts index d1f180e..1ef6ff8 100644 --- a/src/mint.ts +++ b/src/mint.ts @@ -117,6 +117,7 @@ const program = new Command() .newTx() .mintAssets({ assets: Assets.fromRecord({ [token]: amount }), + redeemer: new Data.Constr({ index: 0n, fields: [] }), }) .readFrom({ referenceInputs: [refScript] }) .collectFrom({ inputs: [ref] }) diff --git a/src/nft.ts b/src/nft.ts index e20c722..1fa004a 100644 --- a/src/nft.ts +++ b/src/nft.ts @@ -117,6 +117,7 @@ const program = new Command() for (const token of tokens) mintBuilder.mintAssets({ assets: Assets.fromRecord({ [token]: 1n }), + redeemer: new Data.Constr({ index: 0n, fields: [] }), }); const mintResult = await mintBuilder From 00adb9e98d2c664e171e9280332d9d994fbf54ef Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 21:32:58 +0000 Subject: [PATCH 3/6] Fix error 3113: compute scriptDataHash for CIP-0069 no-redeemer Plutus reference scripts Co-authored-by: SynthLuvr <131367121+SynthLuvr@users.noreply.github.com> --- .../@evolution-sdk__evolution@0.3.19.patch | 66 +++++++++++++++++++ src/mint.ts | 9 +-- src/nft.ts | 1 - 3 files changed, 69 insertions(+), 7 deletions(-) diff --git a/patches/@evolution-sdk__evolution@0.3.19.patch b/patches/@evolution-sdk__evolution@0.3.19.patch index f3e2991..7c9e9e0 100644 --- a/patches/@evolution-sdk__evolution@0.3.19.patch +++ b/patches/@evolution-sdk__evolution@0.3.19.patch @@ -13,6 +13,31 @@ index 483bee1..472ca67 100644 return [txIn, txOut]; }) : []; const payload = { +diff --git a/dist/sdk/builders/TxBuilderImpl.js b/dist/sdk/builders/TxBuilderImpl.js +--- a/dist/sdk/builders/TxBuilderImpl.js ++++ b/dist/sdk/builders/TxBuilderImpl.js +@@ -510,8 +510,10 @@ + // Inline datums (InlineDatum) are NOT added to plutusData - they're already in the UTxO + } + // Compute scriptDataHash if there are Plutus scripts (redeemers present) ++ // Also compute for CIP-0069 no-redeemer scripts (Plutus reference inputs used for minting) ++ const hasPlutusRefScripts = state.referenceInputs.some(r => r.scriptRef && (r.scriptRef._tag === 'PlutusV1' || r.scriptRef._tag === 'PlutusV2' || r.scriptRef._tag === 'PlutusV3')); + let scriptDataHash; +- if (redeemers.length > 0) { ++ if (redeemers.length > 0 || hasPlutusRefScripts) { + // Get config to access provider for full protocol parameters + const config = yield* TxBuilderConfigTag; + if (!config.provider) { +@@ -972,7 +974,8 @@ + totalCollateral = state.collateral.totalAmount; + } + // Check if Plutus scripts are present (need scriptDataHash for accurate size) +- const hasPlutusScripts = fakeWitnessSet.plutusV1Scripts && fakeWitnessSet.plutusV1Scripts.length > 0 || fakeWitnessSet.plutusV2Scripts && fakeWitnessSet.plutusV2Scripts.length > 0 || fakeWitnessSet.plutusV3Scripts && fakeWitnessSet.plutusV3Scripts.length > 0; ++ // Also check reference inputs for CIP-0069 no-redeemer Plutus scripts ++ const hasPlutusScripts = fakeWitnessSet.plutusV1Scripts && fakeWitnessSet.plutusV1Scripts.length > 0 || fakeWitnessSet.plutusV2Scripts && fakeWitnessSet.plutusV2Scripts.length > 0 || fakeWitnessSet.plutusV3Scripts && fakeWitnessSet.plutusV3Scripts.length > 0 || state.referenceInputs.some(r => r.scriptRef && (r.scriptRef._tag === 'PlutusV1' || r.scriptRef._tag === 'PlutusV2' || r.scriptRef._tag === 'PlutusV3')); + // Create placeholder scriptDataHash if Plutus scripts are present + // This is needed for accurate size estimation (32 bytes + CBOR overhead) + const placeholderScriptDataHash = hasPlutusScripts ? new ScriptDataHash.ScriptDataHash({ diff --git a/src/sdk/provider/internal/BlockfrostEffect.ts b/src/sdk/provider/internal/BlockfrostEffect.ts index 4271f0b..6f0ccb3 100644 --- a/src/sdk/provider/internal/BlockfrostEffect.ts @@ -29,3 +54,44 @@ index 4271f0b..6f0ccb3 100644 return [txIn, txOut] }) : [] +diff --git a/src/sdk/builders/TxBuilderImpl.ts b/src/sdk/builders/TxBuilderImpl.ts +--- a/src/sdk/builders/TxBuilderImpl.ts ++++ b/src/sdk/builders/TxBuilderImpl.ts +@@ -653,8 +653,16 @@ + } + + // Compute scriptDataHash if there are Plutus scripts (redeemers present) ++ // Also compute for CIP-0069 no-redeemer scripts (Plutus reference inputs used for minting) ++ const hasPlutusRefScripts = state.referenceInputs.some( ++ (r) => ++ r.scriptRef && ++ (r.scriptRef._tag === "PlutusV1" || ++ r.scriptRef._tag === "PlutusV2" || ++ r.scriptRef._tag === "PlutusV3") ++ ) + let scriptDataHash: ReturnType | undefined +- if (redeemers.length > 0) { ++ if (redeemers.length > 0 || hasPlutusRefScripts) { + // Get config to access provider for full protocol parameters + const config = yield* TxBuilderConfigTag + +@@ -1213,10 +1221,18 @@ + } + + // Check if Plutus scripts are present (need scriptDataHash for accurate size) ++ // Also check reference inputs for CIP-0069 no-redeemer Plutus scripts + const hasPlutusScripts = + (fakeWitnessSet.plutusV1Scripts && fakeWitnessSet.plutusV1Scripts.length > 0) || + (fakeWitnessSet.plutusV2Scripts && fakeWitnessSet.plutusV2Scripts.length > 0) || +- (fakeWitnessSet.plutusV3Scripts && fakeWitnessSet.plutusV3Scripts.length > 0) ++ (fakeWitnessSet.plutusV3Scripts && fakeWitnessSet.plutusV3Scripts.length > 0) || ++ state.referenceInputs.some( ++ (r) => ++ r.scriptRef && ++ (r.scriptRef._tag === "PlutusV1" || ++ r.scriptRef._tag === "PlutusV2" || ++ r.scriptRef._tag === "PlutusV3") ++ ) + + // Create placeholder scriptDataHash if Plutus scripts are present + // This is needed for accurate size estimation (32 bytes + CBOR overhead) diff --git a/src/mint.ts b/src/mint.ts index 1ef6ff8..46bc759 100644 --- a/src/mint.ts +++ b/src/mint.ts @@ -109,15 +109,13 @@ const program = new Command() cborTxs.push(deployChain.cbor); // Mint transaction: mint token using the deployed reference script. - // Pass deployChain.available as availableUtxos so coin selection only uses - // off-chain UTxOs; this prevents on-chain UTxOs from being included in the - // additionalUtxoSet passed to the evaluator, which would cause an - // OverlappingAdditionalUtxo error. + // The scriptDataHash is computed by the SDK even without an explicit redeemer + // because the Aiken validator uses CIP-0069 (no-redeemer mint), which requires + // the scriptDataHash to commit to the PlutusV3 language views. const mintResult = await client .newTx() .mintAssets({ assets: Assets.fromRecord({ [token]: amount }), - redeemer: new Data.Constr({ index: 0n, fields: [] }), }) .readFrom({ referenceInputs: [refScript] }) .collectFrom({ inputs: [ref] }) @@ -125,7 +123,6 @@ const program = new Command() .build({ changeAddress, availableUtxos: deployChain.available, - passAdditionalUtxos: true, }); const mintChain = await buildAndChain(mintResult, deployChain.available); diff --git a/src/nft.ts b/src/nft.ts index 1fa004a..e20c722 100644 --- a/src/nft.ts +++ b/src/nft.ts @@ -117,7 +117,6 @@ const program = new Command() for (const token of tokens) mintBuilder.mintAssets({ assets: Assets.fromRecord({ [token]: 1n }), - redeemer: new Data.Constr({ index: 0n, fields: [] }), }); const mintResult = await mintBuilder From 3ebb9ca2bad7da50e1b558379b3e10507f90729f Mon Sep 17 00:00:00 2001 From: SynthLuvr <131367121+SynthLuvr@users.noreply.github.com> Date: Sun, 1 Mar 2026 22:42:59 +0100 Subject: [PATCH 4/6] hash has changed --- pnpm-lock.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5dcaca..588331c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,7 @@ settings: patchedDependencies: '@evolution-sdk/evolution@0.3.19': - hash: 934855467f3b911bcd9728b54cc4061ffeec50f548c615eeebc6cb0a121fbc5c + hash: c3d4a78eff73710888290affbd99e448dc81645cc0c36387172de55931e6cd71 path: patches/@evolution-sdk__evolution@0.3.19.patch importers: @@ -15,7 +15,7 @@ importers: dependencies: '@evolution-sdk/evolution': specifier: ^0.3.19 - version: 0.3.19(patch_hash=934855467f3b911bcd9728b54cc4061ffeec50f548c615eeebc6cb0a121fbc5c)(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19)) + version: 0.3.19(patch_hash=c3d4a78eff73710888290affbd99e448dc81645cc0c36387172de55931e6cd71)(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19)) '@inquirer/prompts': specifier: ^8.3.0 version: 8.3.0(@types/node@22.19.13) @@ -2397,7 +2397,7 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@evolution-sdk/evolution@0.3.19(patch_hash=934855467f3b911bcd9728b54cc4061ffeec50f548c615eeebc6cb0a121fbc5c)(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))': + '@evolution-sdk/evolution@0.3.19(patch_hash=c3d4a78eff73710888290affbd99e448dc81645cc0c36387172de55931e6cd71)(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))': dependencies: '@effect/platform': 0.90.10(effect@3.19.19) '@effect/platform-node': 0.96.1(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19) From e423ef1d6d298e5957c4a132818e9ed00121c39d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 21:53:08 +0000 Subject: [PATCH 5/6] Fix script_data_hash: use A0 (empty map) for CIP-0069 no-redeemer transactions Co-authored-by: SynthLuvr <131367121+SynthLuvr@users.noreply.github.com> --- .../@evolution-sdk__evolution@0.3.19.patch | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/patches/@evolution-sdk__evolution@0.3.19.patch b/patches/@evolution-sdk__evolution@0.3.19.patch index 7c9e9e0..b81d326 100644 --- a/patches/@evolution-sdk__evolution@0.3.19.patch +++ b/patches/@evolution-sdk__evolution@0.3.19.patch @@ -95,3 +95,40 @@ diff --git a/src/sdk/builders/TxBuilderImpl.ts b/src/sdk/builders/TxBuilderImpl. // Create placeholder scriptDataHash if Plutus scripts are present // This is needed for accurate size estimation (32 bytes + CBOR overhead) +diff --git a/dist/utils/Hash.js b/dist/utils/Hash.js +--- a/dist/utils/Hash.js ++++ b/dist/utils/Hash.js +@@ -133,6 +133,11 @@ export const hashScriptData = (redeemers, costModels, datums, format = "array", + if (hasDatums && redeemers.length === 0) { + // Special case (CDDL): [ A0 | tag(258) datums | A0 ] + const datumsBytes = encodeDatumsTaggedSet(datums); +- payload = concatBytes(new Uint8Array([0xa0]), +- // Empty map +- datumsBytes, new Uint8Array([0xa0]) // Empty map +- ); +- } else { ++ payload = concatBytes(new Uint8Array([0xa0]), datumsBytes, new Uint8Array([0xa0])); ++ } else if (redeemers.length === 0 && !hasDatums) { ++ // CIP-0069 case: no redeemers, no datums, but language views needed. ++ // Conway era uses A0 (empty CBOR map) to represent absent redeemers. ++ payload = concatBytes(new Uint8Array([0xa0]), langViewsBytes); ++ } else { +diff --git a/src/utils/Hash.ts b/src/utils/Hash.ts +--- a/src/utils/Hash.ts ++++ b/src/utils/Hash.ts +@@ -155,6 +155,11 @@ export const hashScriptData = ( + if (hasDatums && redeemers.length === 0) { + // Special case (CDDL): [ A0 | tag(258) datums | A0 ] + const datumsBytes = encodeDatumsTaggedSet(datums) +- payload = concatBytes( +- new Uint8Array([0xa0]), // Empty map +- datumsBytes, +- new Uint8Array([0xa0]) // Empty map +- ) +- } else { ++ payload = concatBytes(new Uint8Array([0xa0]), datumsBytes, new Uint8Array([0xa0])) ++ } else if (redeemers.length === 0 && !hasDatums) { ++ // CIP-0069 case: no redeemers, no datums, but language views needed. ++ // Conway era uses A0 (empty CBOR map) to represent absent redeemers. ++ payload = concatBytes(new Uint8Array([0xa0]), langViewsBytes) ++ } else { From 0ce9c744fa7edd1f7d47f79e754ee69c1083cfd1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 22:06:59 +0000 Subject: [PATCH 6/6] Fix patch file: regenerate with correct hunk headers and update lockfile Co-authored-by: SynthLuvr <131367121+SynthLuvr@users.noreply.github.com> --- .../@evolution-sdk__evolution@0.3.19.patch | 49 +++++++++---------- pnpm-lock.yaml | 6 +-- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/patches/@evolution-sdk__evolution@0.3.19.patch b/patches/@evolution-sdk__evolution@0.3.19.patch index b81d326..64aed2f 100644 --- a/patches/@evolution-sdk__evolution@0.3.19.patch +++ b/patches/@evolution-sdk__evolution@0.3.19.patch @@ -14,9 +14,10 @@ index 483bee1..472ca67 100644 }) : []; const payload = { diff --git a/dist/sdk/builders/TxBuilderImpl.js b/dist/sdk/builders/TxBuilderImpl.js +index a11735f..7533295 100644 --- a/dist/sdk/builders/TxBuilderImpl.js +++ b/dist/sdk/builders/TxBuilderImpl.js -@@ -510,8 +510,10 @@ +@@ -510,8 +510,10 @@ export const assembleTransaction = (inputs, outputs, fee) => Effect.gen(function // Inline datums (InlineDatum) are NOT added to plutusData - they're already in the UTxO } // Compute scriptDataHash if there are Plutus scripts (redeemers present) @@ -28,7 +29,7 @@ diff --git a/dist/sdk/builders/TxBuilderImpl.js b/dist/sdk/builders/TxBuilderImp // Get config to access provider for full protocol parameters const config = yield* TxBuilderConfigTag; if (!config.provider) { -@@ -972,7 +974,8 @@ +@@ -972,7 +974,8 @@ export const calculateFeeIteratively = (inputUtxos, inputs, outputs, redeemers, totalCollateral = state.collateral.totalAmount; } // Check if Plutus scripts are present (need scriptDataHash for accurate size) @@ -55,9 +56,10 @@ index 4271f0b..6f0ccb3 100644 }) : [] diff --git a/src/sdk/builders/TxBuilderImpl.ts b/src/sdk/builders/TxBuilderImpl.ts +index a3efb7d..b435b3c 100644 --- a/src/sdk/builders/TxBuilderImpl.ts +++ b/src/sdk/builders/TxBuilderImpl.ts -@@ -653,8 +653,16 @@ +@@ -653,8 +653,16 @@ export const assembleTransaction = ( } // Compute scriptDataHash if there are Plutus scripts (redeemers present) @@ -75,7 +77,7 @@ diff --git a/src/sdk/builders/TxBuilderImpl.ts b/src/sdk/builders/TxBuilderImpl. // Get config to access provider for full protocol parameters const config = yield* TxBuilderConfigTag -@@ -1213,10 +1221,18 @@ +@@ -1213,10 +1221,18 @@ export const calculateFeeIteratively = ( } // Check if Plutus scripts are present (need scriptDataHash for accurate size) @@ -96,39 +98,32 @@ diff --git a/src/sdk/builders/TxBuilderImpl.ts b/src/sdk/builders/TxBuilderImpl. // Create placeholder scriptDataHash if Plutus scripts are present // This is needed for accurate size estimation (32 bytes + CBOR overhead) diff --git a/dist/utils/Hash.js b/dist/utils/Hash.js +index 71bc97f..bf9217c 100644 --- a/dist/utils/Hash.js +++ b/dist/utils/Hash.js -@@ -133,6 +133,11 @@ export const hashScriptData = (redeemers, costModels, datums, format = "array", - if (hasDatums && redeemers.length === 0) { - // Special case (CDDL): [ A0 | tag(258) datums | A0 ] - const datumsBytes = encodeDatumsTaggedSet(datums); -- payload = concatBytes(new Uint8Array([0xa0]), -- // Empty map -- datumsBytes, new Uint8Array([0xa0]) // Empty map -- ); -- } else { -+ payload = concatBytes(new Uint8Array([0xa0]), datumsBytes, new Uint8Array([0xa0])); +@@ -137,6 +137,10 @@ export const hashScriptData = (redeemers, costModels, datums, format = "array", + // Empty map + datumsBytes, new Uint8Array([0xa0]) // Empty map + ); + } else if (redeemers.length === 0 && !hasDatums) { + // CIP-0069 case: no redeemers, no datums, but language views needed. + // Conway era uses A0 (empty CBOR map) to represent absent redeemers. + payload = concatBytes(new Uint8Array([0xa0]), langViewsBytes); -+ } else { + } else { + // Normal case: [ redeemers | datums | language_views ] + const redeemersCollection = new Redeemers.Redeemers({ diff --git a/src/utils/Hash.ts b/src/utils/Hash.ts +index f535ad5..b7e679e 100644 --- a/src/utils/Hash.ts +++ b/src/utils/Hash.ts -@@ -155,6 +155,11 @@ export const hashScriptData = ( - if (hasDatums && redeemers.length === 0) { - // Special case (CDDL): [ A0 | tag(258) datums | A0 ] - const datumsBytes = encodeDatumsTaggedSet(datums) -- payload = concatBytes( -- new Uint8Array([0xa0]), // Empty map -- datumsBytes, -- new Uint8Array([0xa0]) // Empty map -- ) -- } else { -+ payload = concatBytes(new Uint8Array([0xa0]), datumsBytes, new Uint8Array([0xa0])) +@@ -160,6 +160,10 @@ export const hashScriptData = ( + datumsBytes, + new Uint8Array([0xa0]) // Empty map + ) + } else if (redeemers.length === 0 && !hasDatums) { + // CIP-0069 case: no redeemers, no datums, but language views needed. + // Conway era uses A0 (empty CBOR map) to represent absent redeemers. + payload = concatBytes(new Uint8Array([0xa0]), langViewsBytes) -+ } else { + } else { + // Normal case: [ redeemers | datums | language_views ] + const redeemersCollection = new Redeemers.Redeemers({ values: [...redeemers] }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 588331c..f180904 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,7 @@ settings: patchedDependencies: '@evolution-sdk/evolution@0.3.19': - hash: c3d4a78eff73710888290affbd99e448dc81645cc0c36387172de55931e6cd71 + hash: 192466773327d393a0602fae0396bea124d4da580be9028cc0b0e3dbaed81ef1 path: patches/@evolution-sdk__evolution@0.3.19.patch importers: @@ -15,7 +15,7 @@ importers: dependencies: '@evolution-sdk/evolution': specifier: ^0.3.19 - version: 0.3.19(patch_hash=c3d4a78eff73710888290affbd99e448dc81645cc0c36387172de55931e6cd71)(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19)) + version: 0.3.19(patch_hash=192466773327d393a0602fae0396bea124d4da580be9028cc0b0e3dbaed81ef1)(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19)) '@inquirer/prompts': specifier: ^8.3.0 version: 8.3.0(@types/node@22.19.13) @@ -2397,7 +2397,7 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@evolution-sdk/evolution@0.3.19(patch_hash=c3d4a78eff73710888290affbd99e448dc81645cc0c36387172de55931e6cd71)(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))': + '@evolution-sdk/evolution@0.3.19(patch_hash=192466773327d393a0602fae0396bea124d4da580be9028cc0b0e3dbaed81ef1)(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))': dependencies: '@effect/platform': 0.90.10(effect@3.19.19) '@effect/platform-node': 0.96.1(@effect/cluster@0.48.16(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/workflow@0.9.6(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(@effect/rpc@0.69.5(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/sql@0.44.2(@effect/experimental@0.54.6(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(@effect/platform@0.90.10(effect@3.19.19))(effect@3.19.19))(effect@3.19.19)