From d998fbfb6873eaef1fa31a244567871e4f2b0a3b Mon Sep 17 00:00:00 2001 From: Satya Date: Wed, 30 Sep 2026 13:13:04 +0800 Subject: [PATCH] Add SDK compatibility e2e suites and a single runner Every suite builds, signs and submits through its SDK's Blockfrost provider against Yaci Store, so they check that Store works as a drop-in Blockfrost backend. - New suites: Evolution SDK, PyCardano and cardano-client-lib (JBang) - Lucid Evolution 0.6.5 (explicit slotConfig for the Custom network, via devnet.ts) and MeshJS 1.9.1 (BlockfrostProvider; Plutus tests spend only the UTxO they locked) - run-sdk-tests.sh runs all suites and prints a PASS/FAIL table. --update moves each SDK to its latest version, --restart recreates the devnet, --store-jar / --store-native test a Yaci Store build, and --only / --ccl-version narrow the run - bun lockfiles only (the runner uses bun); node_modules, .venv and .logs are ignored All 13 tests pass against Yaci Store 2.0.4 (#193). Co-Authored-By: Claude Opus 5.5 --- e2e-tests/.gitignore | 4 + e2e-tests/README.md | 29 +- e2e-tests/cardano-client-lib/Devnet.java | 32 ++ e2e-tests/cardano-client-lib/MintToken.java | 43 ++ e2e-tests/cardano-client-lib/Payment.java | 31 ++ e2e-tests/cardano-client-lib/PlutusV3.java | 67 +++ e2e-tests/cardano-client-lib/README.md | 11 + e2e-tests/evolution-sdk/.gitignore | 1 + e2e-tests/evolution-sdk/README.md | 52 +++ e2e-tests/evolution-sdk/bun.lock | 32 ++ e2e-tests/evolution-sdk/devnet.ts | 30 ++ e2e-tests/evolution-sdk/package.json | 15 + e2e-tests/evolution-sdk/payment.ts | 23 + e2e-tests/evolution-sdk/plutus_v3.ts | 87 ++++ e2e-tests/evolution-sdk/protocol_params.ts | 34 ++ e2e-tests/lucid-evo/bun.lock | 328 +++++++++++++ e2e-tests/lucid-evo/devnet.ts | 16 + e2e-tests/lucid-evo/package.json | 2 +- e2e-tests/lucid-evo/payment.ts | 6 +- e2e-tests/lucid-evo/plutus_v2.ts | 6 +- e2e-tests/lucid-evo/plutus_v3.ts | 6 +- e2e-tests/meshjs/bun.lock | 436 ++++++++++++++++++ e2e-tests/meshjs/package.json | 6 +- e2e-tests/meshjs/payment.ts | 5 +- e2e-tests/meshjs/payment_splitter_plutusV3.ts | 62 ++- e2e-tests/pycardano/README.md | 9 + e2e-tests/pycardano/devnet.py | 40 ++ e2e-tests/pycardano/payment.py | 18 + e2e-tests/pycardano/placeholder.txt | 0 e2e-tests/pycardano/plutus_v3.py | 56 +++ e2e-tests/pycardano/requirements.txt | 3 + e2e-tests/run-sdk-tests.sh | 183 ++++++++ 32 files changed, 1643 insertions(+), 30 deletions(-) create mode 100644 e2e-tests/.gitignore create mode 100644 e2e-tests/cardano-client-lib/Devnet.java create mode 100644 e2e-tests/cardano-client-lib/MintToken.java create mode 100644 e2e-tests/cardano-client-lib/Payment.java create mode 100644 e2e-tests/cardano-client-lib/PlutusV3.java create mode 100644 e2e-tests/cardano-client-lib/README.md create mode 100644 e2e-tests/evolution-sdk/.gitignore create mode 100644 e2e-tests/evolution-sdk/README.md create mode 100644 e2e-tests/evolution-sdk/bun.lock create mode 100644 e2e-tests/evolution-sdk/devnet.ts create mode 100644 e2e-tests/evolution-sdk/package.json create mode 100644 e2e-tests/evolution-sdk/payment.ts create mode 100644 e2e-tests/evolution-sdk/plutus_v3.ts create mode 100644 e2e-tests/evolution-sdk/protocol_params.ts create mode 100644 e2e-tests/lucid-evo/bun.lock create mode 100644 e2e-tests/lucid-evo/devnet.ts create mode 100644 e2e-tests/meshjs/bun.lock create mode 100644 e2e-tests/pycardano/README.md create mode 100644 e2e-tests/pycardano/devnet.py create mode 100644 e2e-tests/pycardano/payment.py delete mode 100644 e2e-tests/pycardano/placeholder.txt create mode 100644 e2e-tests/pycardano/plutus_v3.py create mode 100644 e2e-tests/pycardano/requirements.txt create mode 100755 e2e-tests/run-sdk-tests.sh diff --git a/e2e-tests/.gitignore b/e2e-tests/.gitignore new file mode 100644 index 00000000..170dfbe6 --- /dev/null +++ b/e2e-tests/.gitignore @@ -0,0 +1,4 @@ +.logs/ +pycardano/.venv/ +__pycache__/ +node_modules/ diff --git a/e2e-tests/README.md b/e2e-tests/README.md index 7a83c71c..792dfb23 100644 --- a/e2e-tests/README.md +++ b/e2e-tests/README.md @@ -1,10 +1,37 @@ # End-to-End Tests -This folder contains various types of end-to-end tests. Currently, these tests need to be run manually, but automation of the test execution will be implemented in the future. +This folder contains end-to-end tests for Yaci DevKit. The SDK compatibility tests build, sign and submit +transactions through Yaci Store's Blockfrost-compatible API using each SDK. ## Test Categories 1. **api-tests**: This folder contains HTTP API tests, primarily for admin endpoints and essential endpoints from Yaci Store. 2. **lucid-evo**: Compatibility tests for Lucid Evolution. 3. **meshjs**: Compatibility tests for MeshJs +4. **evolution-sdk**: Compatibility tests for Evolution SDK +5. **pycardano**: Compatibility tests for PyCardano +6. **cardano-client-lib**: Compatibility tests for cardano-client-lib (JBang scripts) +## Run all SDK tests + +Requires `bun`, `python3`, `jbang`, Java 21 and `timeout` (GNU coreutils), plus a built CLI jar +(`cd applications/cli && ./gradlew clean build -x test`). + +```shell +# Against a running DevKit (Yaci Store on 8080, admin API on 10000) +./run-sdk-tests.sh + +# Update every SDK to its latest version, recreate the devnet and run +./run-sdk-tests.sh --update --restart + +# Test a Yaci Store build (runs Store in java mode from this jar; recreates the devnet) +./run-sdk-tests.sh --store-jar /path/to/yaci-store-.jar + +# A subset, or a specific cardano-client-lib version +./run-sdk-tests.sh --only pycardano,cardano-client-lib --ccl-version 0.8.0-pre5 +``` + +`--restart` and `--store-jar` stop the running DevKit and recreate the devnet (`create-node -o`), which wipes +its data. They match processes by command line, so they also stop any other `cardano-node` or +`cardano-submit-api` on the machine (e.g. a preprod or mainnet node); without those flags nothing is stopped. +Per-test logs are written to `.logs/`. diff --git a/e2e-tests/cardano-client-lib/Devnet.java b/e2e-tests/cardano-client-lib/Devnet.java new file mode 100644 index 00000000..3e28d2a1 --- /dev/null +++ b/e2e-tests/cardano-client-lib/Devnet.java @@ -0,0 +1,32 @@ +import com.bloxbean.cardano.client.account.Account; +import com.bloxbean.cardano.client.api.model.Result; +import com.bloxbean.cardano.client.backend.api.BackendService; +import com.bloxbean.cardano.client.backend.blockfrost.service.BFBackendService; +import com.bloxbean.cardano.client.common.model.Networks; + +// Shared settings for the cardano-client-lib e2e tests +public class Devnet { + public static final String YACI_STORE_URL = System.getenv().getOrDefault("YACI_STORE_URL", "http://localhost:8080/api/v1"); + + // Default Yaci DevKit account 0 (pre-funded on devnet creation) + public static final String MNEMONIC = "test test test test test test test test test test test test test test test test test test test test test test test sauce"; + + public static final String RECEIVER = "addr_test1qqm87edtdxc7vu2u34dpf9jzzny4qhk3wqezv6ejpx3vgrwt46dz4zq7vqll88fkaxrm4nac0m5cq50jytzlu0hax5xqwlraql"; + + public static BackendService backendService() { + String url = YACI_STORE_URL.endsWith("/") ? YACI_STORE_URL : YACI_STORE_URL + "/"; + return new BFBackendService(url, "Dummy Key"); + } + + public static Account account() { + return Account.createFromMnemonic(Networks.testnet(), MNEMONIC); + } + + public static void check(String step, Result result) { + if (!result.isSuccessful()) { + System.out.println("FAIL " + step + ": " + result.getResponse()); + System.exit(1); + } + System.out.println("OK " + step + ": " + result.getValue()); + } +} diff --git a/e2e-tests/cardano-client-lib/MintToken.java b/e2e-tests/cardano-client-lib/MintToken.java new file mode 100644 index 00000000..9888ee5f --- /dev/null +++ b/e2e-tests/cardano-client-lib/MintToken.java @@ -0,0 +1,43 @@ +///usr/bin/env jbang "$0" "$@" ; exit $? +//JAVA 21 +//DEPS com.bloxbean.cardano:cardano-client-lib:${ccl.version:0.8.0-preview1} +//DEPS com.bloxbean.cardano:cardano-client-backend-blockfrost:${ccl.version:0.8.0-preview1} +//DEPS org.slf4j:slf4j-nop:2.0.13 +//SOURCES Devnet.java + +import com.bloxbean.cardano.client.account.Account; +import com.bloxbean.cardano.client.api.util.PolicyUtil; +import com.bloxbean.cardano.client.function.helper.SignerProviders; +import com.bloxbean.cardano.client.quicktx.QuickTxBuilder; +import com.bloxbean.cardano.client.quicktx.Tx; +import com.bloxbean.cardano.client.transaction.spec.Asset; + +import java.math.BigInteger; + +// Mint a native token with a native-script policy, then query the holder's UTxOs for it +public class MintToken { + public static void main(String[] args) throws Exception { + Account minter = Devnet.account(); + var policy = PolicyUtil.createMultiSigScriptAllPolicy("e2e-policy", 1); + var asset = new Asset("E2EToken", BigInteger.valueOf(1000)); + + Tx tx = new Tx() + .mintAssets(policy.getPolicyScript(), asset, minter.baseAddress()) + .from(minter.baseAddress()); + + var result = new QuickTxBuilder(Devnet.backendService()) + .compose(tx) + .withSigner(SignerProviders.signerFrom(minter)) + .withSigner(SignerProviders.signerFrom(policy)) + .completeAndWait(System.out::println); + Devnet.check("mint", result); + + String unit = policy.getPolicyId() + asset.getNameAsHex().substring(2); + var utxos = Devnet.backendService().getUtxoService().getUtxos(minter.baseAddress(), unit, 10, 1); + if (!utxos.isSuccessful() || utxos.getValue().isEmpty()) { + System.out.println("FAIL query minted asset " + unit + ": " + utxos.getResponse()); + System.exit(1); + } + System.out.println("OK query minted asset: " + unit); + } +} diff --git a/e2e-tests/cardano-client-lib/Payment.java b/e2e-tests/cardano-client-lib/Payment.java new file mode 100644 index 00000000..a52287a7 --- /dev/null +++ b/e2e-tests/cardano-client-lib/Payment.java @@ -0,0 +1,31 @@ +///usr/bin/env jbang "$0" "$@" ; exit $? +//JAVA 21 +//DEPS com.bloxbean.cardano:cardano-client-lib:${ccl.version:0.8.0-preview1} +//DEPS com.bloxbean.cardano:cardano-client-backend-blockfrost:${ccl.version:0.8.0-preview1} +//DEPS org.slf4j:slf4j-nop:2.0.13 +//SOURCES Devnet.java + +import com.bloxbean.cardano.client.account.Account; +import com.bloxbean.cardano.client.api.model.Amount; +import com.bloxbean.cardano.client.function.helper.SignerProviders; +import com.bloxbean.cardano.client.quicktx.QuickTxBuilder; +import com.bloxbean.cardano.client.quicktx.Tx; + +// Simple ADA payment using Yaci Store as the Blockfrost backend +public class Payment { + public static void main(String[] args) { + Account sender = Devnet.account(); + System.out.println("Sender: " + sender.baseAddress()); + + Tx tx = new Tx() + .payToAddress(Devnet.RECEIVER, Amount.ada(5)) + .from(sender.baseAddress()); + + var result = new QuickTxBuilder(Devnet.backendService()) + .compose(tx) + .withSigner(SignerProviders.signerFrom(sender)) + .completeAndWait(System.out::println); + + Devnet.check("payment", result); + } +} diff --git a/e2e-tests/cardano-client-lib/PlutusV3.java b/e2e-tests/cardano-client-lib/PlutusV3.java new file mode 100644 index 00000000..c2145cea --- /dev/null +++ b/e2e-tests/cardano-client-lib/PlutusV3.java @@ -0,0 +1,67 @@ +///usr/bin/env jbang "$0" "$@" ; exit $? +//JAVA 21 +//DEPS com.bloxbean.cardano:cardano-client-lib:${ccl.version:0.8.0-preview1} +//DEPS com.bloxbean.cardano:cardano-client-backend-blockfrost:${ccl.version:0.8.0-preview1} +//DEPS org.slf4j:slf4j-nop:2.0.13 +//SOURCES Devnet.java + +import com.bloxbean.cardano.client.account.Account; +import com.bloxbean.cardano.client.address.AddressProvider; +import com.bloxbean.cardano.client.api.model.Amount; +import com.bloxbean.cardano.client.api.model.Utxo; +import com.bloxbean.cardano.client.common.model.Networks; +import com.bloxbean.cardano.client.function.helper.SignerProviders; +import com.bloxbean.cardano.client.plutus.blueprint.PlutusBlueprintUtil; +import com.bloxbean.cardano.client.plutus.blueprint.model.PlutusVersion; +import com.bloxbean.cardano.client.plutus.spec.BytesPlutusData; +import com.bloxbean.cardano.client.plutus.spec.ConstrPlutusData; +import com.bloxbean.cardano.client.plutus.spec.PlutusScript; +import com.bloxbean.cardano.client.quicktx.QuickTxBuilder; +import com.bloxbean.cardano.client.quicktx.ScriptTx; +import com.bloxbean.cardano.client.quicktx.Tx; + +// Lock ADA at an always-succeeds PlutusV3 script and spend it back. Script evaluation goes +// through Yaci Store's Blockfrost-compatible /utils/txs/evaluate endpoint. +public class PlutusV3 { + // Same always-succeeds validator as lucid-evo/plutus_v3.ts (CBOR-wrapped compiled code) + static final String COMPILED_CODE = "5857010000323232323225333002323232323253330073370e900118041baa00113232324a26018601a004601600260126ea800458c024c028008c020004c020008c018004c010dd50008a4c26cacae6955ceaab9e5742ae89"; + + public static void main(String[] args) throws Exception { + Account owner = Devnet.account(); + var backend = Devnet.backendService(); + PlutusScript script = PlutusBlueprintUtil.getPlutusScriptFromCompiledCode(COMPILED_CODE, PlutusVersion.v3); + String scriptAddress = AddressProvider.getEntAddress(script, Networks.testnet()).toBech32(); + System.out.println("Script address: " + scriptAddress); + + var datum = ConstrPlutusData.of(0, BytesPlutusData.of(owner.getBaseAddress().getPaymentCredentialHash().get())); + + // Lock + Tx lockTx = new Tx() + .payToContract(scriptAddress, Amount.ada(10), datum) + .from(owner.baseAddress()); + var lockResult = new QuickTxBuilder(backend) + .compose(lockTx) + .withSigner(SignerProviders.signerFrom(owner)) + .completeAndWait(System.out::println); + Devnet.check("lock", lockResult); + + // Spend the UTxO created by the lock tx + Utxo scriptUtxo = backend.getUtxoService().getUtxos(scriptAddress, 100, 1).getValue().stream() + .filter(u -> u.getTxHash().equals(lockResult.getValue())) + .findFirst() + .orElseThrow(() -> new IllegalStateException("Locked UTxO not found at " + scriptAddress)); + + var redeemer = ConstrPlutusData.of(0, BytesPlutusData.of("Hello, World!")); + ScriptTx spendTx = new ScriptTx() + .collectFrom(scriptUtxo, redeemer) + .payToAddress(owner.baseAddress(), Amount.ada(5)) + .attachSpendingValidator(script); + var spendResult = new QuickTxBuilder(backend) + .compose(spendTx) + .feePayer(owner.baseAddress()) + .collateralPayer(owner.baseAddress()) + .withSigner(SignerProviders.signerFrom(owner)) + .completeAndWait(System.out::println); + Devnet.check("spend", spendResult); + } +} diff --git a/e2e-tests/cardano-client-lib/README.md b/e2e-tests/cardano-client-lib/README.md new file mode 100644 index 00000000..0093ed70 --- /dev/null +++ b/e2e-tests/cardano-client-lib/README.md @@ -0,0 +1,11 @@ +# cardano-client-lib Compatibility Tests + +[JBang](https://www.jbang.dev) scripts using `BFBackendService` pointed at Yaci Store. The cardano-client-lib +version defaults to the one in the `//DEPS` lines and can be overridden with `-Dccl.version`. + +```shell +jbang Payment.java # simple ADA payment +jbang MintToken.java # mint a native token and query it by asset +jbang PlutusV3.java # lock at an always-succeeds PlutusV3 script and spend it back +jbang -Dccl.version=0.8.0-preview1 Payment.java # another cardano-client-lib version +``` diff --git a/e2e-tests/evolution-sdk/.gitignore b/e2e-tests/evolution-sdk/.gitignore new file mode 100644 index 00000000..c2658d7d --- /dev/null +++ b/e2e-tests/evolution-sdk/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/e2e-tests/evolution-sdk/README.md b/e2e-tests/evolution-sdk/README.md new file mode 100644 index 00000000..27020e3a --- /dev/null +++ b/e2e-tests/evolution-sdk/README.md @@ -0,0 +1,52 @@ +# Evolution SDK Compatibility Tests + +Tests [Evolution SDK](https://github.com/IntersectMBO/evolution-sdk) (`@evolution-sdk/evolution@0.5.14`) +against a running Yaci DevKit, using Yaci Store as the Blockfrost provider. + +## Prerequisites + +- Yaci DevKit running with Yaci Store enabled (Store on port 8080, CLI admin API on port 10000) +- [Bun](https://bun.sh): `curl -fsSL https://bun.sh/install | bash` + +Override the endpoints if needed: + +```shell +export YACI_STORE_URL=http://localhost:8080/api/v1 +export YACI_ADMIN_URL=http://localhost:10000/local-cluster/api +``` + +## Run Tests + +```shell +bun install +``` + +1. Protocol parameters (reproduces [yaci-store#1187](https://github.com/bloxbean/yaci-store/issues/1187)) + +```shell +bun protocol_params.ts +``` + +Checks that `drep_deposit` and `gov_action_deposit` in `/epochs/latest/parameters` are strings, as in the +Blockfrost OpenAPI spec, and that Evolution's Blockfrost provider can parse the response. With Yaci Store 2.0.x +it fails with `ParseError ... ["drep_deposit"] Expected string, actual 500000000`. + +2. Payment + +```shell +bun payment.ts +``` + +Sends 5 ADA from DevKit's default account and waits for confirmation. It also fails while #1187 is present, +because transaction building fetches protocol parameters first. + +3. PlutusV3 payment splitter + +```shell +bun plutus_v3.ts +``` + +Same parameterized validator and flow as `meshjs/payment_splitter_plutusV3.ts`: applies the payees' key hashes +to the script, locks 20 ADA with the owner's key hash as inline datum, then unlocks it (redeemer, owner as +required signer) and splits it equally between the five payees. Script evaluation goes through Yaci Store's +`/utils/txs/evaluate`. diff --git a/e2e-tests/evolution-sdk/bun.lock b/e2e-tests/evolution-sdk/bun.lock new file mode 100644 index 00000000..9d2694e4 --- /dev/null +++ b/e2e-tests/evolution-sdk/bun.lock @@ -0,0 +1,32 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "evolution-sdk-e2e", + "dependencies": { + "@evolution-sdk/evolution": "0.5.15", + }, + }, + }, + "packages": { + "@evolution-sdk/evolution": ["@evolution-sdk/evolution@0.5.15", "", { "dependencies": { "@noble/curves": "^2.0.1", "@noble/hashes": "^2.2.0", "@scure/base": "^2.0.0", "@scure/bip32": "^2.0.1", "@scure/bip39": "^2.0.1", "effect": "^3.21.1" } }, "sha512-fJ3kGvt3IJB2hBU13q7uts7Z3zyv7wq3pdclwzRnEFMb2lPsBR7KznP7o/LKJuCNpnMpOILRpmKUazE6JtIJkw=="], + + "@noble/curves": ["@noble/curves@2.4.0", "", { "dependencies": { "@noble/hashes": "2.4.0" } }, "sha512-P4/62zrgfH33CneE3Dn4WhJVA22YUU0eR51wKIan4NVRvwsA0YnPTwWGpNbpuacSujmSFLvyzpyuR30+fbq2Ew=="], + + "@noble/hashes": ["@noble/hashes@2.4.0", "", {}, "sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA=="], + + "@scure/base": ["@scure/base@2.4.0", "", {}, "sha512-thZ1TuJwFwBblOhgsjDKvvGirBxNp+wSvY/DR6tJBJOTDhdAAcHJ8Vbr2eFnqaxeca4+t0i9KBf+uHYGWwZORg=="], + + "@scure/bip32": ["@scure/bip32@2.4.0", "", { "dependencies": { "@noble/curves": "2.4.0", "@noble/hashes": "2.4.0", "@scure/base": "2.4.0" } }, "sha512-i3DS0CptAocyvqE4n3SUkpzeQK4vJMFwWLofTwRiiKo2aWojBOfyMCgfKw9HVpO6fSY5AK86sHS/Uzn8kK9Few=="], + + "@scure/bip39": ["@scure/bip39@2.4.0", "", { "dependencies": { "@noble/hashes": "2.4.0" } }, "sha512-82dxFbZUYboyOf0AXiydsQrFQ5Q4h9mX+O2UkE91ROYmsc0BKMGZLwDmy96Jpa2+vrtoxomjUhy1RPIgH/r2nA=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "effect": ["effect@3.22.2", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-fm1CQXCs7GTMwpadZxwU5rnAb2bN6mbQpknq/pXBGCzSKkosNYb9k0wsoL0TfB10rSa5xOEZJjo77u/KLXSANg=="], + + "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + + "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + } +} diff --git a/e2e-tests/evolution-sdk/devnet.ts b/e2e-tests/evolution-sdk/devnet.ts new file mode 100644 index 00000000..d4989f9f --- /dev/null +++ b/e2e-tests/evolution-sdk/devnet.ts @@ -0,0 +1,30 @@ +import type { Chain } from "@evolution-sdk/evolution"; + +export const YACI_STORE_URL = process.env.YACI_STORE_URL ?? "http://localhost:8080/api/v1"; +export const YACI_ADMIN_URL = process.env.YACI_ADMIN_URL ?? "http://localhost:10000/local-cluster/api"; + +// Default Yaci DevKit account 0 (pre-funded on devnet creation) +export const SEED_PHRASE = + "test test test test test test test test test test test test test test test test test test test test test test test sauce"; + +export const RECEIVER = + "addr_test1qqm87edtdxc7vu2u34dpf9jzzny4qhk3wqezv6ejpx3vgrwt46dz4zq7vqll88fkaxrm4nac0m5cq50jytzlu0hax5xqwlraql"; + +// Build an Evolution Chain from the running devnet's genesis info +export async function devnetChain(): Promise { + const res = await fetch(`${YACI_ADMIN_URL}/admin/devnet`); + if (!res.ok) throw new Error(`Failed to fetch devnet info: HTTP ${res.status}`); + const info = await res.json(); + + return { + id: 0, + name: "Yaci DevKit", + networkMagic: info.protocolMagic, + epochLength: Math.round(info.epochLength * info.slotLength), + slotConfig: { + zeroTime: BigInt(info.startTime) * 1000n, + zeroSlot: 0n, + slotLength: Math.round(info.slotLength * 1000), + }, + }; +} diff --git a/e2e-tests/evolution-sdk/package.json b/e2e-tests/evolution-sdk/package.json new file mode 100644 index 00000000..9dd21eaf --- /dev/null +++ b/e2e-tests/evolution-sdk/package.json @@ -0,0 +1,15 @@ +{ + "name": "evolution-sdk-e2e", + "version": "1.0.0", + "private": true, + "type": "module", + "description": "Evolution SDK compatibility tests against Yaci DevKit", + "scripts": { + "test:params": "bun protocol_params.ts", + "test:payment": "bun payment.ts" + }, + "license": "ISC", + "dependencies": { + "@evolution-sdk/evolution": "0.5.15" + } +} diff --git a/e2e-tests/evolution-sdk/payment.ts b/e2e-tests/evolution-sdk/payment.ts new file mode 100644 index 00000000..3c7fefd2 --- /dev/null +++ b/e2e-tests/evolution-sdk/payment.ts @@ -0,0 +1,23 @@ +// Simple ADA payment with Evolution SDK using Yaci Store as the Blockfrost provider. +// Transaction building needs protocol parameters, so this also fails while +// https://github.com/bloxbean/yaci-store/issues/1187 is present. +import { Address, Assets, Client, TransactionHash } from "@evolution-sdk/evolution"; +import { RECEIVER, SEED_PHRASE, YACI_STORE_URL, devnetChain } from "./devnet"; + +const client = Client.make(await devnetChain()) + .withBlockfrost({ baseUrl: YACI_STORE_URL, projectId: "Dummy Key" }) + .withSeed({ mnemonic: SEED_PHRASE, accountIndex: 0 }); + +console.log("Sender:", Address.toBech32(await client.address())); + +const signBuilder = await client + .newTx() + .payToAddress({ address: Address.fromBech32(RECEIVER), assets: Assets.fromLovelace(5_000_000n) }) + .build(); + +const txHash = TransactionHash.toHex(await signBuilder.signAndSubmit()); +console.log("Submitted:", txHash); + +const confirmed = await client.awaitTx(TransactionHash.fromHex(txHash), 1000, 60_000); +console.log("Confirmed:", confirmed); +process.exit(confirmed ? 0 : 1); diff --git a/e2e-tests/evolution-sdk/plutus_v3.ts b/e2e-tests/evolution-sdk/plutus_v3.ts new file mode 100644 index 00000000..89e61411 --- /dev/null +++ b/e2e-tests/evolution-sdk/plutus_v3.ts @@ -0,0 +1,87 @@ +// PlutusV3 payment splitter with Evolution SDK, using Yaci Store as the Blockfrost provider. +// Same parameterized validator and flow as meshjs/payment_splitter_plutusV3.ts: +// 1. apply the payees' payment key hashes to the script +// 2. lock ADA at the script address with the owner's key hash as datum +// 3. unlock it with a redeemer, signed by the owner, splitting the ADA equally between the payees +// Script evaluation goes through Yaci Store's /utils/txs/evaluate. +import { + Address, + Assets, + Client, + Data, + InlineDatum, + KeyHash, + PlutusV3, + ScriptHash, + TransactionHash, + UPLC, +} from "@evolution-sdk/evolution"; +import { SEED_PHRASE, YACI_STORE_URL, devnetChain } from "./devnet"; + +// Payment splitter validator (CBOR-wrapped compiled code), parameterized with the list of payee key hashes +const COMPILED_CODE = "5903ac0100003232323232323223225333004323232323253323300a3001300b37540042646464a66601a66e1d2000300e375400c26464a666024602a0042646464646464646464646464a66603666ebcdd3999918008009112999810800880109998018019919198008008021129998120008a5eb804c8c94ccc08ccdd7801002880089981380119802002000981400118130009811800981200099918008009129998100008a5eb804c8cc088004cc00c00ccc01cc0900088ccc07ccdd78008012504a26044002646600200201044a666040002297ae01330213007301f3754600e603e6ea8c088004cc008008c08c00402d3001018000100114a0646600200200444a66603e00229444c94ccc074cdc39bad302200233005533302000414c0103d87a80001300e3302130220044bd70240002660060060022940c088004c8cc004004028894ccc07800452f5c026603e6ea0c8c8c8c8c8c94ccc084cdc424000002266e04008cdc0800806080119980119804807119baf300b30233754601660466ea8c014c08cdd5000803240004466e00004c014dd5980318121baa30063024375400466600266010016466ebcc028c088dd5180518111baa0010054800088cdc000098021bab300530233754004444646600200200844a66604c0022008266006605000266004004605200246600c64a66603e602c60406ea80045300103d87a8000132330010013756604a60446ea8008894ccc090004530103d87a800013232323253330253372291100002153330253371e9101000021301633029375000297ae014c0103d87a8000133006006003375a604c0066eb8c090008c0a0008c098004c8cc004004008894ccc08c0045300103d87a800013232323253330243372291100002153330243371e9101000021301533028374c00297ae014c0103d87a80001330060060033756604a0066eb8c08c008c09c008c0940052000230223023001302000133002002302100122533301a3011301b3754004200226eb4c07cc070dd500111191980080080191299980f0008a5eb804c8c94ccc074c0140084cc084008cc0100100044cc010010004c088008c0800048c070004dd6980d180d8011bac3019001301930190023758602e00260266ea8030c8cc00400403c894ccc05400452f5c026602c60066602c602e00297ae0330020023018001374a90000b1bae3013001300f375400c2c60226024004602000260186ea8008dc3a40042c601a601c004601800260180046014002600c6ea8004526136563758002ae6955ceaab9e5573eae815d0aba21"; + +const PAYEES = [ + "addr_test1qrzufj3g0ua489yt235wtc3mrjrlucww2tqdnt7kt5rs09grsag6vxw5v053atks5a6whke03cf2qx3h3g2nhsmzwv3sgml3ed", + "addr_test1qrh3nrahcd0pj6ps3g9htnlw2jjxuylgdhfn2s5rxqyrr43yzewr2766qsfeq6stl65t546cwvclpqm2rpkkxtksgxuq90xn5f", + "addr_test1qq5tscksq8n2vjszkdtqe0zn9645246ex3mu88x9y0stnlzjwyqgnrq3uuc3jst3hyy244rrwuxke0m7ezr3cn93u5vq0rfv8t", + "addr_test1qp5l04egnh30q8x3uqn943d7jsa5za66htsvu6e74s8dacxwnjkm0n0v900d8mu20wlrx55xn07p8pm4fj0wdvtc9kwq7pztl7", + "addr_test1qryvgass5dsrf2kxl3vgfz76uhp83kv5lagzcp29tcana68ca5aqa6swlq6llfamln09tal7n5kvt4275ckwedpt4v7q48uhex", +]; +const LOCK_AMOUNT = 20_000_000n; + +const paymentKeyHash = (address: Address.Address) => address.paymentCredential as KeyHash.KeyHash; + +const client = Client.make(await devnetChain()) + .withBlockfrost({ baseUrl: YACI_STORE_URL, projectId: "Dummy Key" }) + .withSeed({ mnemonic: SEED_PHRASE, accountIndex: 0 }); + +// Apply the payees' key hashes as the script parameter. PlutusV3 takes the script with a single CBOR wrapping. +const payeeKeyHashes = PAYEES.map((p) => Data.bytearray(KeyHash.toHex(paymentKeyHash(Address.fromBech32(p))))); +const appliedScript = UPLC.applyParamsToScript(COMPILED_CODE, [Data.list(payeeKeyHashes)]); +const script = new PlutusV3.PlutusV3({ bytes: Buffer.from(UPLC.applySingleCborEncoding(appliedScript), "hex") }); +const scriptAddress = new Address.Address({ networkId: 0, paymentCredential: ScriptHash.fromScript(script) }); +console.log("Script address:", Address.toBech32(scriptAddress)); + +const owner = paymentKeyHash(await client.address()); + +// 1. Lock +const lockTx = await client + .newTx() + .payToAddress({ + address: scriptAddress, + assets: Assets.fromLovelace(LOCK_AMOUNT), + datum: new InlineDatum.InlineDatum({ data: Data.constr(0n, [Data.bytearray(KeyHash.toHex(owner))]) }), + }) + .build(); +const lockHash = await lockTx.signAndSubmit(); +console.log("Lock submitted:", TransactionHash.toHex(lockHash)); +if (!(await client.awaitTx(lockHash, 1000, 60_000))) throw new Error("Lock tx was not confirmed"); + +// 2. Unlock the UTxO created by the lock tx and split it between the payees +const lockHashHex = TransactionHash.toHex(lockHash); +const scriptUtxo = (await client.getUtxos(scriptAddress)).find( + (u) => TransactionHash.toHex(u.transactionId) === lockHashHex, +); +if (!scriptUtxo) throw new Error(`Locked UTxO not found at ${Address.toBech32(scriptAddress)}`); + +const split = Assets.lovelaceOf(scriptUtxo.assets) / BigInt(PAYEES.length); +console.log("Split per payee:", split); + +let unlock = client + .newTx() + .collectFrom({ + inputs: [scriptUtxo], + redeemer: Data.constr(0n, [Data.bytearray(Buffer.from("Hello, World!").toString("hex"))]), + }) + .attachScript({ script }) + .addSigner({ keyHash: owner }); +for (const payee of PAYEES) { + unlock = unlock.payToAddress({ address: Address.fromBech32(payee), assets: Assets.fromLovelace(split) }); +} + +const unlockHash = await (await unlock.build()).signAndSubmit(); +console.log("Unlock submitted:", TransactionHash.toHex(unlockHash)); +const confirmed = await client.awaitTx(unlockHash, 1000, 60_000); +console.log("Confirmed:", confirmed); +process.exit(confirmed ? 0 : 1); diff --git a/e2e-tests/evolution-sdk/protocol_params.ts b/e2e-tests/evolution-sdk/protocol_params.ts new file mode 100644 index 00000000..a3b4d1c9 --- /dev/null +++ b/e2e-tests/evolution-sdk/protocol_params.ts @@ -0,0 +1,34 @@ +// Reproduces https://github.com/bloxbean/yaci-store/issues/1187 +// +// Yaci Store 2.0.x returns drep_deposit and gov_action_deposit as JSON numbers in +// GET /epochs/latest/parameters. Blockfrost's OpenAPI defines them as strings, and the +// Evolution SDK Blockfrost provider rejects the response with a ParseError. +import { Client } from "@evolution-sdk/evolution"; +import { YACI_STORE_URL, devnetChain } from "./devnet"; + +let failed = false; + +// 1. Check the raw JSON types returned by Yaci Store +const raw = await (await fetch(`${YACI_STORE_URL}/epochs/latest/parameters`)).json(); +for (const field of ["key_deposit", "pool_deposit", "drep_deposit", "gov_action_deposit"]) { + const value = raw[field]; + const ok = typeof value === "string"; + if (!ok) failed = true; + console.log(`${ok ? "OK " : "FAIL"} ${field} = ${JSON.stringify(value)} (${typeof value}, expected string)`); +} + +// 2. Fetch protocol parameters through the Evolution SDK Blockfrost provider +const client = Client.make(await devnetChain()).withBlockfrost({ baseUrl: YACI_STORE_URL, projectId: "Dummy Key" }); +try { + const params = await client.getProtocolParameters(); + console.log("OK Evolution getProtocolParameters", { + drepDeposit: params.drepDeposit, + govActionDeposit: params.govActionDeposit, + }); +} catch (e) { + failed = true; + console.log("FAIL Evolution getProtocolParameters"); + console.error(e); +} + +process.exit(failed ? 1 : 0); diff --git a/e2e-tests/lucid-evo/bun.lock b/e2e-tests/lucid-evo/bun.lock new file mode 100644 index 00000000..c565187a --- /dev/null +++ b/e2e-tests/lucid-evo/bun.lock @@ -0,0 +1,328 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "lucid-evo-example", + "dependencies": { + "@lucid-evolution/lucid": "0.6.5", + }, + }, + }, + "packages": { + "@anastasia-labs/cardano-multiplatform-lib-browser": ["@anastasia-labs/cardano-multiplatform-lib-browser@6.2.0-1", "", {}, "sha512-Xu4qOzpXll5CWm//DnR9DDwUCnGrOfN77JdhM0nzTHKBSz5rZpFei2j9iH719dKS4vI7fsvHTkMfXnl1TsHNsQ=="], + + "@anastasia-labs/cardano-multiplatform-lib-nodejs": ["@anastasia-labs/cardano-multiplatform-lib-nodejs@6.2.0-1", "", {}, "sha512-OusE82Tl0obCkdxu0N7XB1OohA/gKmB53F6SsDqz9K8Cc/kfl27F4B6efMlg/fIgFQNz2WNFguPAJq+7zc4piw=="], + + "@biglup/is-cid": ["@biglup/is-cid@1.0.3", "", { "dependencies": { "@multiformats/mafmt": "^12.1.6", "@multiformats/multiaddr": "^12.1.14", "iso-url": "^1.1.3", "multiformats": "^13.0.1", "uint8arrays": "^5.0.1" } }, "sha512-R0XPZ/IQhU2TtetSFI9vI+7kJOJYNiCncn5ixEBW+/LNaZCo2HK37Mq3pRNzrM4FryuAkyeqY7Ujmj3I3e3t9g=="], + + "@cardano-sdk/core": ["@cardano-sdk/core@0.46.15", "", { "dependencies": { "@biglup/is-cid": "^1.0.3", "@cardano-sdk/crypto": "~0.4.7", "@cardano-sdk/util": "~0.17.2", "@foxglove/crc": "^0.0.3", "@scure/base": "^1.1.1", "fraction.js": "4.0.1", "ip-address": "^10.2.0", "lodash": "^4.17.21", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4", "web-encoding": "^1.1.5" } }, "sha512-ubfUpDaSSEGxfmdCvV8xN7niXy1cR3HX4dCA/zJH91GpuV5XGGttI5pFbxpqDZubYHU2lw+QQ2kWJJGHQmjbog=="], + + "@cardano-sdk/crypto": ["@cardano-sdk/crypto@0.4.7", "", { "dependencies": { "@cardano-sdk/util": "~0.17.2", "blake2b": "^2.1.4", "i": "^0.3.7", "libsodium-wrappers-sumo": "0.8.4", "lodash": "^4.17.21", "pbkdf2": "^3.1.3", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4" }, "peerDependencies": { "@dcspark/cardano-multiplatform-lib-asmjs": "^3.1.1", "@dcspark/cardano-multiplatform-lib-browser": "^3.1.1", "@dcspark/cardano-multiplatform-lib-nodejs": "^3.1.1" }, "optionalPeers": ["@dcspark/cardano-multiplatform-lib-asmjs", "@dcspark/cardano-multiplatform-lib-browser", "@dcspark/cardano-multiplatform-lib-nodejs"] }, "sha512-4aCsLOkqaIS/gSGw4SBqNGcCIp6hZ8alQWJx58U/OiOxC43t7i2JpKagdyWfCNekPM14hO7BWER7y31wf4BFxw=="], + + "@cardano-sdk/util": ["@cardano-sdk/util@0.17.2", "", { "dependencies": { "bech32": "^2.0.0", "lodash": "^4.17.21", "serialize-error": "^8", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4" } }, "sha512-LdY33OQG5H4p0rppHtjnM+akc1poKhz+02T9zsXsbShfTbeU9HXlA0nJ8xj9FNZMs+ozDR0HWrUjDc7fkNZI7w=="], + + "@cbor-extract/cbor-extract-darwin-arm64": ["@cbor-extract/cbor-extract-darwin-arm64@2.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w=="], + + "@cbor-extract/cbor-extract-darwin-x64": ["@cbor-extract/cbor-extract-darwin-x64@2.2.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w=="], + + "@cbor-extract/cbor-extract-linux-arm": ["@cbor-extract/cbor-extract-linux-arm@2.2.0", "", { "os": "linux", "cpu": "arm" }, "sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q=="], + + "@cbor-extract/cbor-extract-linux-arm64": ["@cbor-extract/cbor-extract-linux-arm64@2.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ=="], + + "@cbor-extract/cbor-extract-linux-x64": ["@cbor-extract/cbor-extract-linux-x64@2.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw=="], + + "@cbor-extract/cbor-extract-win32-x64": ["@cbor-extract/cbor-extract-win32-x64@2.2.0", "", { "os": "win32", "cpu": "x64" }, "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w=="], + + "@chainsafe/is-ip": ["@chainsafe/is-ip@2.1.0", "", {}, "sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w=="], + + "@chainsafe/netmask": ["@chainsafe/netmask@2.0.0", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1" } }, "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg=="], + + "@effect/platform": ["@effect/platform@0.71.7", "", { "dependencies": { "find-my-way-ts": "^0.1.5", "multipasta": "^0.2.5" }, "peerDependencies": { "effect": "^3.11.10" } }, "sha512-Ttw8OhbcP1x5cPgcX4VdnDSWrskVdUrf9bO3eDd++TTcQzEiYVu9GZJaSMvz6Yqzfzt+1tIKoKi2jp6dLdJ9dg=="], + + "@effect/schema": ["@effect/schema@0.66.16", "", { "peerDependencies": { "effect": "^3.1.3", "fast-check": "^3.13.2" } }, "sha512-sT/k5NOgKslGPzs3DUaCFuM6g2JQoIIT8jpwEorAZooplPIMK2xIspr7ECz6pp6Dc7Wz/ppXGk7HVyGZQsIYEQ=="], + + "@emurgo/cardano-message-signing-browser": ["@emurgo/cardano-message-signing-browser@1.1.0", "", {}, "sha512-LyeiGIqCyZu9DZnKsi4wlBjZA1MN+uy3Cqpb5J6RZWvFXDJnCoxrYB/EixUiGRD/la4WsldBgtPsrIHyGsVkpg=="], + + "@emurgo/cardano-message-signing-nodejs": ["@emurgo/cardano-message-signing-nodejs@1.1.0", "", {}, "sha512-PQRc8K8wZshEdmQenNUzVtiI8oJNF/1uAnBhidee5C4o1l2mDLOW+ur46HWHIFKQ6x8mSJTllcjMscHgzju0gQ=="], + + "@foxglove/crc": ["@foxglove/crc@0.0.3", "", {}, "sha512-DjIZsnL3CyP/yQ/vUYA9cjrD0a/8YXejI5ZmsaOiT16cLfZcTwaCxIN01/ys4jsy+dZCQ/9DnWFn7AEFbiMDaA=="], + + "@harmoniclabs/bigint-utils": ["@harmoniclabs/bigint-utils@1.0.0", "", { "dependencies": { "@harmoniclabs/uint8array-utils": "^1.0.0" } }, "sha512-OhZMHcdtH2hHKMlxWFHf71PmKHdoi9ARpjS9mUu0/cd8VWDDjT7VQoQwC5NN/68iyO4O5Dojrvrp9tjG5BDABA=="], + + "@harmoniclabs/biguint": ["@harmoniclabs/biguint@1.0.0", "", {}, "sha512-5DyCIBDL4W+7ffR1IJSbGrCG4xEYxAlFH5gCNF42qtyL5ltwZ92Ae1MyXpHM2TUPy7ocSTqlLUsOdy+SvqVVPw=="], + + "@harmoniclabs/bitstream": ["@harmoniclabs/bitstream@1.0.0", "", { "dependencies": { "@harmoniclabs/uint8array-utils": "^1.0.0" } }, "sha512-Ed/I46IuCiytE5QiMmmUo9kPJcypM7OuUqoRaAXUALL5C6LKLpT6kYE1qeuhLkx2/WvkHT18jcOX6jhM/nmqoA=="], + + "@harmoniclabs/bytestring": ["@harmoniclabs/bytestring@1.0.0", "", { "dependencies": { "@harmoniclabs/uint8array-utils": "^1.0.0" } }, "sha512-d5m10O0okKc6QNX0pSRriFTkk/kNMnMBGbo5X3kEZwKaXTI4tDVoTZBL7bwbYHwOEdSxWJjVtlO9xtB7ZrYZNg=="], + + "@harmoniclabs/cbor": ["@harmoniclabs/cbor@1.6.6", "", { "dependencies": { "@harmoniclabs/bytestring": "^1.0.0", "@harmoniclabs/obj-utils": "^1.0.0", "@harmoniclabs/uint8array-utils": "^1.0.3" } }, "sha512-nOcts7PhkKCbqPKwP3/IsIQACwJvqchpT88cwvKspB+oR09YfB1LC1NrUTsFg1DusLRydVsOwR07KgYTF5uNOA=="], + + "@harmoniclabs/crypto": ["@harmoniclabs/crypto@0.2.5", "", { "dependencies": { "@harmoniclabs/bitstream": "^1.0.0", "@harmoniclabs/uint8array-utils": "^1.0.3" } }, "sha512-t2saWMFWBx8tOHotiYTTfQKhPGpWT4AMLXxq3u0apShVXNV0vgL0gEgSMudBjES/wrKByCqa2xmU70gadz26hA=="], + + "@harmoniclabs/obj-utils": ["@harmoniclabs/obj-utils@1.0.0", "", {}, "sha512-EO1bQBZAORrutcP+leP5YNDwNd/9TOE23VEvs3ktniXg6w0knUrLjUIl2Pkcbs/D1VQxqmsNpXho+vaMj00qxA=="], + + "@harmoniclabs/pair": ["@harmoniclabs/pair@1.0.0", "", {}, "sha512-D9OBowsUsy1LctHxWzd9AngTzoo5x3rBiJ0gu579t41Q23pb+VNx1euEfluUEiaYbgljcl1lb/4D1fFTZd1tRQ=="], + + "@harmoniclabs/plutus-data": ["@harmoniclabs/plutus-data@1.2.6", "", { "dependencies": { "@harmoniclabs/biguint": "^1.0.0", "@harmoniclabs/crypto": "^0.2.4", "@harmoniclabs/uint8array-utils": "^1.0.0" }, "peerDependencies": { "@harmoniclabs/bytestring": "^1.0.0", "@harmoniclabs/cbor": "^1.3.0" } }, "sha512-rF046GZ07XDpjZBNybALKYSycjxCLzXKbhLylu9pRuZiii5fVXReEfgtLB29TsPBvGY6ZBeiyHgJnLgm+huZBw=="], + + "@harmoniclabs/uint8array-utils": ["@harmoniclabs/uint8array-utils@1.0.4", "", {}, "sha512-Z454prSbX4geXGHyjjcn9vm6u9NsD3VJykv8f8yE1VjIXSPitaLPEnm8u2+B+GMp1chYlLilOq+kW4OvJ6y28A=="], + + "@harmoniclabs/uplc": ["@harmoniclabs/uplc@1.4.1", "", { "dependencies": { "@harmoniclabs/bigint-utils": "^1.0.0", "@harmoniclabs/uint8array-utils": "^1.0.3" }, "peerDependencies": { "@harmoniclabs/bytestring": "^1.0.0", "@harmoniclabs/cbor": "^1.3.0", "@harmoniclabs/crypto": "^0.3.0-dev0", "@harmoniclabs/pair": "^1.0.0", "@harmoniclabs/plutus-data": "^1.2.4" } }, "sha512-sELKStjxPBPBxBMylU4oBSUe0/8eJe2HqRblNSwrMu8Fso4YpSPDqHZ33iDZ8QAadVUsT5r2EQKX0TLrj7qXvQ=="], + + "@leichtgewicht/ip-codec": ["@leichtgewicht/ip-codec@2.0.5", "", {}, "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="], + + "@lucid-evolution/core-types": ["@lucid-evolution/core-types@0.3.0", "", { "dependencies": { "@anastasia-labs/cardano-multiplatform-lib-browser": "6.2.0-1", "@anastasia-labs/cardano-multiplatform-lib-nodejs": "6.2.0-1" } }, "sha512-D/m+jxsHIp1gErwj7IFSEeljXVZn0ANVbgFL7dl77OdYdGQsgVzUFO6uTknS0LSB8qT7kpql4KPsBXbuR0bFkQ=="], + + "@lucid-evolution/core-utils": ["@lucid-evolution/core-utils@0.1.17", "", { "dependencies": { "@anastasia-labs/cardano-multiplatform-lib-browser": "6.2.0-1", "@anastasia-labs/cardano-multiplatform-lib-nodejs": "6.2.0-1" } }, "sha512-oyFARz6FTPn/eiOj+B6x0TmYm00g+rpvQOAoiO2KCqZHIgX6I2XKbsp4CPKHiz99b+QF+Td6/UFQF9WDzRbnaw=="], + + "@lucid-evolution/crc8": ["@lucid-evolution/crc8@0.1.8", "", {}, "sha512-88+/S6n+sPgxYtG05rvbJDVb8MoFGzckkR3p26uGrzngYzlJGfxBWIzNhVwfI2mgINPo2C5lkZW3GYnfY0MjuA=="], + + "@lucid-evolution/lucid": ["@lucid-evolution/lucid@0.6.5", "", { "dependencies": { "@anastasia-labs/cardano-multiplatform-lib-browser": "6.2.0-1", "@anastasia-labs/cardano-multiplatform-lib-nodejs": "6.2.0-1", "@effect/schema": "^0.66.16", "@emurgo/cardano-message-signing-nodejs": "^1.1.0", "@lucid-evolution/core-types": "0.3.0", "@lucid-evolution/core-utils": "0.1.17", "@lucid-evolution/plutus": "0.1.36", "@lucid-evolution/provider": "0.2.4", "@lucid-evolution/sign_data": "0.1.32", "@lucid-evolution/tx-graph": "0.0.6", "@lucid-evolution/uplc": "0.2.23", "@lucid-evolution/utils": "0.1.74", "@lucid-evolution/wallet": "0.2.2", "effect": "^3.12.7" } }, "sha512-fPuW9mvB88ShdJ4qDypkoiTVU8o2WC1h7ltWvaKrprMxo5UnuxjNPANeh+jrlcQuDRPmD1xFrMe204ZjxxQrJA=="], + + "@lucid-evolution/plutus": ["@lucid-evolution/plutus@0.1.36", "", { "dependencies": { "@anastasia-labs/cardano-multiplatform-lib-browser": "6.2.0-1", "@anastasia-labs/cardano-multiplatform-lib-nodejs": "6.2.0-1", "@lucid-evolution/core-types": "0.3.0", "@lucid-evolution/core-utils": "0.1.17", "@sinclair/typebox": "^0.32.28" } }, "sha512-z6hvFbKDXvSyobuP9Z9DC1doO6W87aMa/Yq6YUvUdn/FZjMZ1aENJBuKlioSmxiP84EhhyVeafWRjcbLcniatQ=="], + + "@lucid-evolution/provider": ["@lucid-evolution/provider@0.2.4", "", { "dependencies": { "@anastasia-labs/cardano-multiplatform-lib-browser": "6.2.0-1", "@anastasia-labs/cardano-multiplatform-lib-nodejs": "6.2.0-1", "@effect/platform": "^0.71.3", "@effect/schema": "^0.68.26", "@lucid-evolution/core-types": "0.3.0", "@lucid-evolution/core-utils": "0.1.17", "@lucid-evolution/utils": "0.1.74", "@lucid-evolution/wallet": "0.2.2", "effect": "^3.11.7" } }, "sha512-3FYPEl6JFXKSKIAWPqkyIiLwcxaZx/u6SYtdRxTHe9WLg7pP3fDL9E3FToHMqHZ654p1ct/DwVALpcZrP0Ll+w=="], + + "@lucid-evolution/sign_data": ["@lucid-evolution/sign_data@0.1.32", "", { "dependencies": { "@anastasia-labs/cardano-multiplatform-lib-browser": "6.2.0-1", "@anastasia-labs/cardano-multiplatform-lib-nodejs": "6.2.0-1", "@emurgo/cardano-message-signing-browser": "^1.0.1", "@emurgo/cardano-message-signing-nodejs": "^1.0.1", "@lucid-evolution/core-types": "0.3.0", "@lucid-evolution/core-utils": "0.1.17" } }, "sha512-hYf96efISGhixHVPcM7kdlK6pxLuIMYB5baIdAdxd7xIFJ/50ehZIS6pPW+cjxT9jABPklTdL0OJPpB3y0yi+w=="], + + "@lucid-evolution/tx-graph": ["@lucid-evolution/tx-graph@0.0.6", "", { "dependencies": { "@anastasia-labs/cardano-multiplatform-lib-browser": "6.2.0-1", "@anastasia-labs/cardano-multiplatform-lib-nodejs": "6.2.0-1", "@lucid-evolution/core-types": "0.3.0", "@lucid-evolution/core-utils": "0.1.17", "@lucid-evolution/utils": "0.1.74" } }, "sha512-qJe1PJiIuuSB/HYtfDQgUWtju7nyKG7Qe3GEztcX0B3rPSs4/IU4mFMD8FL0EZ/hcfmGOXGvWaVH5SoCH/tL9Q=="], + + "@lucid-evolution/uplc": ["@lucid-evolution/uplc@0.2.23", "", {}, "sha512-D0Qk+FnfePqqnT68IPRVy+2v1FahfkCVlgj31uoQ9aGPrwphKlvgp04UEl/lBNuzJw0avYNM8knO4hptMSFP8Q=="], + + "@lucid-evolution/utils": ["@lucid-evolution/utils@0.1.74", "", { "dependencies": { "@anastasia-labs/cardano-multiplatform-lib-browser": "6.2.0-1", "@anastasia-labs/cardano-multiplatform-lib-nodejs": "6.2.0-1", "@cardano-sdk/core": "^0.46.10", "@effect/schema": "^0.68.16", "@harmoniclabs/plutus-data": "^1.2.4", "@harmoniclabs/uplc": "^1.2.4", "@lucid-evolution/core-types": "0.3.0", "@lucid-evolution/core-utils": "0.1.17", "@lucid-evolution/crc8": "0.1.8", "@lucid-evolution/plutus": "0.1.36", "@lucid-evolution/uplc": "0.2.23", "bip39": "^3.1.0", "cbor-x": "^1.6.0", "effect": "^3.10.4" } }, "sha512-bS5WwnfUciDbpOymRCohG1jUBanMz/SU5HBdnLsA2w4wB+pg73UYwF1leSf129zUGQX8xWARfNqvsUuR6+IZuA=="], + + "@lucid-evolution/wallet": ["@lucid-evolution/wallet@0.2.2", "", { "dependencies": { "@anastasia-labs/cardano-multiplatform-lib-browser": "6.2.0-1", "@anastasia-labs/cardano-multiplatform-lib-nodejs": "6.2.0-1", "@lucid-evolution/core-types": "0.3.0", "@lucid-evolution/core-utils": "0.1.17", "@lucid-evolution/sign_data": "0.1.32", "@lucid-evolution/utils": "0.1.74", "bip39": "^3.1.0" } }, "sha512-Ks5stxITiFY0wMiww6kR7fsxNvkPZs1u9wukHIkM8GP0BEPf48FN+Au/Qgb0x8g1ALopNt9MB2AAFSXrtjdLDw=="], + + "@multiformats/dns": ["@multiformats/dns@1.0.6", "", { "dependencies": { "@types/dns-packet": "^5.6.5", "buffer": "^6.0.3", "dns-packet": "^5.6.1", "hashlru": "^2.3.0", "p-queue": "^8.0.1", "progress-events": "^1.0.0", "uint8arrays": "^5.0.2" } }, "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw=="], + + "@multiformats/mafmt": ["@multiformats/mafmt@12.1.6", "", { "dependencies": { "@multiformats/multiaddr": "^12.0.0" } }, "sha512-tlJRfL21X+AKn9b5i5VnaTD6bNttpSpcqwKVmDmSHLwxoz97fAHaepqFOk/l1fIu94nImIXneNbhsJx/RQNIww=="], + + "@multiformats/multiaddr": ["@multiformats/multiaddr@12.4.0", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", "@multiformats/dns": "^1.0.3", "multiformats": "^13.0.0", "uint8-varint": "^2.0.1", "uint8arrays": "^5.0.0" } }, "sha512-FL7yBTLijJ5JkO044BGb2msf+uJLrwpD6jD6TkXlbjA9N12+18HT40jvd4o5vL4LOJMc86dPX6tGtk/uI9kYKg=="], + + "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + + "@scure/base": ["@scure/base@1.2.5", "", {}, "sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.32.35", "", {}, "sha512-Ul3YyOTU++to8cgNkttakC0dWvpERr6RYoHO2W47DLbFvrwBDJUY31B1sImH6JZSYc4Kt4PyHtoPNu+vL2r2dA=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + + "@types/dns-packet": ["@types/dns-packet@5.6.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q=="], + + "@types/node": ["@types/node@22.15.3", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw=="], + + "@zxing/text-encoding": ["@zxing/text-encoding@0.9.0", "", {}, "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA=="], + + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + + "b4a": ["b4a@1.6.7", "", {}, "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "bech32": ["bech32@2.0.0", "", {}, "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg=="], + + "bip39": ["bip39@3.1.0", "", { "dependencies": { "@noble/hashes": "^1.2.0" } }, "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A=="], + + "blake2b": ["blake2b@2.1.4", "", { "dependencies": { "blake2b-wasm": "^2.4.0", "nanoassert": "^2.0.0" } }, "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A=="], + + "blake2b-wasm": ["blake2b-wasm@2.4.0", "", { "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" } }, "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w=="], + + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "cbor-extract": ["cbor-extract@2.2.0", "", { "dependencies": { "node-gyp-build-optional-packages": "5.1.1" }, "optionalDependencies": { "@cbor-extract/cbor-extract-darwin-arm64": "2.2.0", "@cbor-extract/cbor-extract-darwin-x64": "2.2.0", "@cbor-extract/cbor-extract-linux-arm": "2.2.0", "@cbor-extract/cbor-extract-linux-arm64": "2.2.0", "@cbor-extract/cbor-extract-linux-x64": "2.2.0", "@cbor-extract/cbor-extract-win32-x64": "2.2.0" }, "bin": { "download-cbor-prebuilds": "bin/download-prebuilds.js" } }, "sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA=="], + + "cbor-x": ["cbor-x@1.6.0", "", { "optionalDependencies": { "cbor-extract": "^2.2.0" } }, "sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg=="], + + "cipher-base": ["cipher-base@1.0.6", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" } }, "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw=="], + + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + + "create-hash": ["create-hash@1.2.0", "", { "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="], + + "create-hmac": ["create-hmac@1.1.7", "", { "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + + "dns-packet": ["dns-packet@5.6.1", "", { "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" } }, "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "effect": ["effect@3.14.18", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-hqXZGfps5lQzoVq14X0uajOx5SKiEvDn40lFVGjHs7+SpdnL39xUZo3NZ96Gs8uVz2nFxBYPCfQA0rOaW+5uQA=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], + + "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + + "find-my-way-ts": ["find-my-way-ts@0.1.5", "", {}, "sha512-4GOTMrpGQVzsCH2ruUn2vmwzV/02zF4q+ybhCIrw/Rkt3L8KWcycdC6aJMctJzwN4fXD4SD5F/4B9Sksh5rE0A=="], + + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + + "fraction.js": ["fraction.js@4.0.1", "", {}, "sha512-NQYzZw8MUsxSZFQo6E8tKOlmSd/BlDTNOR4puXFSHSwFwNaIlmbortQy5PDN/KnVQ4xWG2NtN0J0hjPw7eE06A=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hash-base": ["hash-base@3.1.2", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.1" } }, "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg=="], + + "hashlru": ["hashlru@2.3.0", "", {}, "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "i": ["i@0.3.7", "", {}, "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ip-address": ["ip-address@10.7.2", "", {}, "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w=="], + + "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], + + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + + "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], + + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "iso-url": ["iso-url@1.2.1", "", {}, "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng=="], + + "libsodium-sumo": ["libsodium-sumo@0.8.4", "", {}, "sha512-TMtHShQfVVsaxDygyapvUC3o7YsPgXa/hRWeIgzyFz6w5k/1hirGptCxp1U7XwW3rCskaTTYKgV10v86UiGgNw=="], + + "libsodium-wrappers-sumo": ["libsodium-wrappers-sumo@0.8.4", "", { "dependencies": { "libsodium-sumo": "^0.8.0" } }, "sha512-ql7hcgulKZ3ekfa2DGAogcCKsWU0diA/0nArz1CFzh93WQdb46/Kj18ka/Hifq6uA3Ush34Pc6vU/6HXeRwUkg=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "md5.js": ["md5.js@1.3.5", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg=="], + + "multiformats": ["multiformats@13.3.2", "", {}, "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g=="], + + "multipasta": ["multipasta@0.2.5", "", {}, "sha512-c8eMDb1WwZcE02WVjHoOmUVk7fnKU/RmUcosHACglrWAuPQsEJv+E8430sXj6jNc1jHw0zrS16aCjQh4BcEb4A=="], + + "nanoassert": ["nanoassert@2.0.0", "", {}, "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA=="], + + "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.1.1", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-test": "build-test.js", "node-gyp-build-optional-packages-optional": "optional.js" } }, "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw=="], + + "p-queue": ["p-queue@8.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw=="], + + "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "pbkdf2": ["pbkdf2@3.1.6", "", { "dependencies": { "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "ripemd160": "^2.0.3", "safe-buffer": "^5.2.1", "sha.js": "^2.4.12", "to-buffer": "^1.2.2" } }, "sha512-BT6eelPB1EyGHo8pC0o9Bl6k6SYVhKO1jEbd3lcTrtr7XHdjP8BW1YpfCV3G9Kwkxgattk+S5q2/RvuttCsS1g=="], + + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + + "progress-events": ["progress-events@1.0.1", "", {}, "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw=="], + + "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + + "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "ripemd160": ["ripemd160@2.0.3", "", { "dependencies": { "hash-base": "^3.1.2", "inherits": "^2.0.4" } }, "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "serialize-error": ["serialize-error@8.1.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ=="], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "sha.js": ["sha.js@2.4.12", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" } }, "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w=="], + + "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "to-buffer": ["to-buffer@1.2.2", "", { "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", "typed-array-buffer": "^1.0.3" } }, "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw=="], + + "ts-custom-error": ["ts-custom-error@3.3.1", "", {}, "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A=="], + + "ts-log": ["ts-log@2.2.7", "", {}, "sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg=="], + + "type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], + + "uint8-varint": ["uint8-varint@2.0.4", "", { "dependencies": { "uint8arraylist": "^2.0.0", "uint8arrays": "^5.0.0" } }, "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw=="], + + "uint8arraylist": ["uint8arraylist@2.4.8", "", { "dependencies": { "uint8arrays": "^5.0.1" } }, "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ=="], + + "uint8arrays": ["uint8arrays@5.1.0", "", { "dependencies": { "multiformats": "^13.0.0" } }, "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "util": ["util@0.12.5", "", { "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" } }, "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "web-encoding": ["web-encoding@1.1.5", "", { "dependencies": { "util": "^0.12.3" }, "optionalDependencies": { "@zxing/text-encoding": "0.9.0" } }, "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA=="], + + "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], + + "@lucid-evolution/provider/@effect/schema": ["@effect/schema@0.68.27", "", { "dependencies": { "fast-check": "^3.20.0" }, "peerDependencies": { "effect": "^3.5.7" } }, "sha512-/rmIb+4QaQTecdTfeYSZtNikIV+BeIbYDl/hpgBTaS96en7pKNW5hcygFQhdocjKguIL7Y/be+oUrVafWV60ew=="], + + "@lucid-evolution/utils/@effect/schema": ["@effect/schema@0.68.27", "", { "dependencies": { "fast-check": "^3.20.0" }, "peerDependencies": { "effect": "^3.5.7" } }, "sha512-/rmIb+4QaQTecdTfeYSZtNikIV+BeIbYDl/hpgBTaS96en7pKNW5hcygFQhdocjKguIL7Y/be+oUrVafWV60ew=="], + + "create-hash/ripemd160": ["ripemd160@2.0.2", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="], + + "create-hash/sha.js": ["sha.js@2.4.11", "", { "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" }, "bin": { "sha.js": "./bin.js" } }, "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ=="], + + "create-hmac/ripemd160": ["ripemd160@2.0.2", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="], + + "create-hmac/sha.js": ["sha.js@2.4.11", "", { "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" }, "bin": { "sha.js": "./bin.js" } }, "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ=="], + + "md5.js/hash-base": ["hash-base@3.1.0", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="], + + "readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "string_decoder/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "create-hash/ripemd160/hash-base": ["hash-base@3.1.0", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="], + + "create-hmac/ripemd160/hash-base": ["hash-base@3.1.0", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="], + + "md5.js/hash-base/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "create-hash/ripemd160/hash-base/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "create-hmac/ripemd160/hash-base/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "md5.js/hash-base/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "create-hash/ripemd160/hash-base/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "create-hmac/ripemd160/hash-base/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + } +} diff --git a/e2e-tests/lucid-evo/devnet.ts b/e2e-tests/lucid-evo/devnet.ts new file mode 100644 index 00000000..558f8c93 --- /dev/null +++ b/e2e-tests/lucid-evo/devnet.ts @@ -0,0 +1,16 @@ +import type { SlotConfig } from "@lucid-evolution/lucid"; + +export const YACI_STORE_URL = process.env.YACI_STORE_URL ?? "http://localhost:8080/api/v1"; +export const YACI_ADMIN_URL = process.env.YACI_ADMIN_URL ?? "http://localhost:10000/local-cluster/api"; + +// Lucid 0.6+ requires an explicit slot config for the "Custom" network +export async function devnetSlotConfig(): Promise { + const res = await fetch(`${YACI_ADMIN_URL}/admin/devnet`); + if (!res.ok) throw new Error(`Failed to fetch devnet info: HTTP ${res.status}`); + const info = await res.json(); + return { + zeroTime: info.startTime * 1000, + zeroSlot: 0, + slotLength: Math.round(info.slotLength * 1000), + }; +} diff --git a/e2e-tests/lucid-evo/package.json b/e2e-tests/lucid-evo/package.json index c587bcae..d544ac12 100644 --- a/e2e-tests/lucid-evo/package.json +++ b/e2e-tests/lucid-evo/package.json @@ -9,6 +9,6 @@ "license": "ISC", "description": "", "dependencies": { - "@lucid-evolution/lucid": "^0.4.27" + "@lucid-evolution/lucid": "0.6.5" } } diff --git a/e2e-tests/lucid-evo/payment.ts b/e2e-tests/lucid-evo/payment.ts index cd3ee987..8b5df724 100644 --- a/e2e-tests/lucid-evo/payment.ts +++ b/e2e-tests/lucid-evo/payment.ts @@ -1,8 +1,10 @@ import { Lucid, Blockfrost, getAddressDetails } from "@lucid-evolution/lucid"; +import { YACI_STORE_URL, devnetSlotConfig } from "./devnet"; const lucid = await Lucid( - new Blockfrost("http://localhost:8080/api/v1", "Dummy Key"), - "Custom" + new Blockfrost(YACI_STORE_URL, "Dummy Key"), + "Custom", + { slotConfig: await devnetSlotConfig() } ); const seedPhrase = "test test test test test test test test test test test test test test test test test test test test test test test sauce"; diff --git a/e2e-tests/lucid-evo/plutus_v2.ts b/e2e-tests/lucid-evo/plutus_v2.ts index b608bba2..7ec02f33 100644 --- a/e2e-tests/lucid-evo/plutus_v2.ts +++ b/e2e-tests/lucid-evo/plutus_v2.ts @@ -1,10 +1,12 @@ import { Lucid, Blockfrost, SpendingValidator, validatorToAddress, Data, Constr, getAddressDetails} from "@lucid-evolution/lucid"; +import { YACI_STORE_URL, devnetSlotConfig } from "./devnet"; const network = "Custom"; const lucid = await Lucid( - new Blockfrost("http://localhost:8080/api/v1", "Dummy Key"), - "Custom" + new Blockfrost(YACI_STORE_URL, "Dummy Key"), + "Custom", + { slotConfig: await devnetSlotConfig() } ); const seedPhrase = "test test test test test test test test test test test test test test test test test test test test test test test sauce"; diff --git a/e2e-tests/lucid-evo/plutus_v3.ts b/e2e-tests/lucid-evo/plutus_v3.ts index b43e046c..51692c1a 100644 --- a/e2e-tests/lucid-evo/plutus_v3.ts +++ b/e2e-tests/lucid-evo/plutus_v3.ts @@ -1,10 +1,12 @@ import { Lucid, Blockfrost, Kupmios, SpendingValidator, validatorToAddress, Data, Constr, getAddressDetails, OutRef} from "@lucid-evolution/lucid"; +import { YACI_STORE_URL, devnetSlotConfig } from "./devnet"; const network = "Custom"; const lucid = await Lucid( - new Blockfrost("http://localhost:8080/api/v1", "Dummy Key"), - "Custom" + new Blockfrost(YACI_STORE_URL, "Dummy Key"), + "Custom", + { slotConfig: await devnetSlotConfig() } ); diff --git a/e2e-tests/meshjs/bun.lock b/e2e-tests/meshjs/bun.lock new file mode 100644 index 00000000..9583b123 --- /dev/null +++ b/e2e-tests/meshjs/bun.lock @@ -0,0 +1,436 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "meshjs-examples", + "dependencies": { + "@meshsdk/common": "1.9.1", + "@meshsdk/core": "1.9.1", + "@meshsdk/core-cst": "1.9.1", + }, + }, + }, + "packages": { + "@biglup/is-cid": ["@biglup/is-cid@1.0.3", "", { "dependencies": { "@multiformats/mafmt": "^12.1.6", "@multiformats/multiaddr": "^12.1.14", "iso-url": "^1.1.3", "multiformats": "^13.0.1", "uint8arrays": "^5.0.1" } }, "sha512-R0XPZ/IQhU2TtetSFI9vI+7kJOJYNiCncn5ixEBW+/LNaZCo2HK37Mq3pRNzrM4FryuAkyeqY7Ujmj3I3e3t9g=="], + + "@bufbuild/protobuf": ["@bufbuild/protobuf@1.10.1", "", {}, "sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ=="], + + "@cardano-ogmios/client": ["@cardano-ogmios/client@6.9.0", "", { "dependencies": { "@cardano-ogmios/schema": "6.9.0", "@cardanosolutions/json-bigint": "^1.0.1", "@types/json-bigint": "^1.0.1", "bech32": "^2.0.0", "cross-fetch": "^3.1.4", "fastq": "^1.11.0", "isomorphic-ws": "^4.0.1", "nanoid": "^3.1.31", "ts-custom-error": "^3.2.0", "ws": "^7.5.10" } }, "sha512-IsoUVsaMXiYyhWrdVKYOA5PDlX0EZ2gaq4lfk4JelRw6mcWVxemUrMaU2ndvugO9LQ3SCM1nESPgMIU0xe5FWw=="], + + "@cardano-ogmios/schema": ["@cardano-ogmios/schema@6.9.0", "", {}, "sha512-e7QVLF+dQMIv9p+p5CWQjMfBmkERYRa2wK2AjyehQZCJnecZ0gvTbRqewdX5VW4mVXf6KUfFyphsxWK46Pg6LA=="], + + "@cardano-sdk/core": ["@cardano-sdk/core@0.46.12", "", { "dependencies": { "@biglup/is-cid": "^1.0.3", "@cardano-ogmios/client": "6.9.0", "@cardano-ogmios/schema": "6.9.0", "@cardano-sdk/crypto": "~0.4.5", "@cardano-sdk/util": "~0.17.1", "@foxglove/crc": "^0.0.3", "@scure/base": "^1.1.1", "fraction.js": "4.0.1", "ip-address": "^9.0.5", "lodash": "^4.17.21", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4", "web-encoding": "^1.1.5" }, "peerDependencies": { "rxjs": "^7.4.0" }, "optionalPeers": ["rxjs"] }, "sha512-yUA/xBUQMiMqIWiZPvIhM911pL3jNKg4PkZQ8qP9R7yU3NQ5x4RQkZ+zFDlVLxUt+gJiwIW2es0iPd8ObIKCxA=="], + + "@cardano-sdk/crypto": ["@cardano-sdk/crypto@0.4.5", "", { "dependencies": { "@cardano-sdk/util": "~0.17.1", "blake2b": "^2.1.4", "i": "^0.3.7", "libsodium-wrappers-sumo": "0.7.10", "lodash": "^4.17.21", "pbkdf2": "^3.1.3", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4" }, "peerDependencies": { "@dcspark/cardano-multiplatform-lib-asmjs": "^3.1.1", "@dcspark/cardano-multiplatform-lib-browser": "^3.1.1", "@dcspark/cardano-multiplatform-lib-nodejs": "^3.1.1" }, "optionalPeers": ["@dcspark/cardano-multiplatform-lib-asmjs", "@dcspark/cardano-multiplatform-lib-browser", "@dcspark/cardano-multiplatform-lib-nodejs"] }, "sha512-ymliqxdmen5dGVaiMVQ0VnhrwaYUjbPD3sHoMj8NI6MTuxrREp3pLJASREtWhwmv9k+QzDT6CoyuIXnlEQiWZQ=="], + + "@cardano-sdk/dapp-connector": ["@cardano-sdk/dapp-connector@0.13.31", "", { "dependencies": { "@cardano-sdk/core": "~0.47.1", "@cardano-sdk/crypto": "~0.4.7", "@cardano-sdk/util": "~0.17.2", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4", "webextension-polyfill": "^0.8.0" } }, "sha512-WbfZkA9Ps1MuQ3WDLjh+1KDy1ssAvXT50hyZyqwoapnv8tYHJGjEVnH1NGtAg7FrHgErjF6EeuusWnjRgi87yg=="], + + "@cardano-sdk/input-selection": ["@cardano-sdk/input-selection@0.14.28", "", { "dependencies": { "@cardano-sdk/core": "~0.46.12", "@cardano-sdk/key-management": "~0.29.12", "@cardano-sdk/util": "~0.17.1", "bignumber.js": "^9.1.1", "lodash": "^4.17.21", "ts-custom-error": "^3.2.0" } }, "sha512-pbysJUaIbbpesbv/f0XfFPKBb+bLjCmPcMfNJzpePSZBvr8bUcFpnfKtq28KthVdpe2mgL3k9ebTTcBSk7aERw=="], + + "@cardano-sdk/key-management": ["@cardano-sdk/key-management@0.29.19", "", { "dependencies": { "@cardano-sdk/core": "~0.47.1", "@cardano-sdk/crypto": "~0.4.7", "@cardano-sdk/dapp-connector": "~0.13.31", "@cardano-sdk/util": "~0.17.2", "@emurgo/cardano-message-signing-nodejs": "^1.0.1", "bip39": "^3.0.4", "chacha": "^2.1.0", "get-random-values": "^2.0.0", "lodash": "^4.17.21", "pbkdf2": "^3.1.3", "rxjs": "^7.4.0", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4" } }, "sha512-acuKWBWDRmgpaU4rKOo78XzFSVESblx8gL8DCUgKMs3Kfh62U3Clujh8OV5X7R/znmBMxUjkNV15XDHJz8h/RA=="], + + "@cardano-sdk/util": ["@cardano-sdk/util@0.17.1", "", { "dependencies": { "bech32": "^2.0.0", "lodash": "^4.17.21", "serialize-error": "^8", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4" } }, "sha512-TCYe+wRguW1WgRlbWqhGPhcSBkzVzdIcCVgDDN7wiQk2dew0EWVqjsKeqDZdfwzy/s2kr/ZOgXIGywBn/Bzu/Q=="], + + "@cardanosolutions/json-bigint": ["@cardanosolutions/json-bigint@1.0.1", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-mbYL6jtHqMFCZnTFhmkmoeDzHMBino0gMiGQnOJE7CwzZzkK2HCpH0MTBk+84QDadMEGX7iFt7uB+levm1a+bQ=="], + + "@chainsafe/is-ip": ["@chainsafe/is-ip@2.1.0", "", {}, "sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w=="], + + "@chainsafe/netmask": ["@chainsafe/netmask@2.0.0", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1" } }, "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg=="], + + "@connectrpc/connect": ["@connectrpc/connect@1.4.0", "", { "peerDependencies": { "@bufbuild/protobuf": "^1.4.2" } }, "sha512-vZeOkKaAjyV4+RH3+rJZIfDFJAfr+7fyYr6sLDKbYX3uuTVszhFe9/YKf5DNqrDb5cKdKVlYkGn6DTDqMitAnA=="], + + "@connectrpc/connect-node": ["@connectrpc/connect-node@1.4.0", "", { "dependencies": { "undici": "^5.28.3" }, "peerDependencies": { "@bufbuild/protobuf": "^1.4.2", "@connectrpc/connect": "1.4.0" } }, "sha512-0ANnrr6SvsjevsWEgdzHy7BaHkluZyS6s4xNoVt7RBHFR5V/kT9lPokoIbYUOU9JHzdRgTaS3x5595mwUsu15g=="], + + "@connectrpc/connect-web": ["@connectrpc/connect-web@1.4.0", "", { "peerDependencies": { "@bufbuild/protobuf": "^1.4.2", "@connectrpc/connect": "1.4.0" } }, "sha512-13aO4psFbbm7rdOFGV0De2Za64DY/acMspgloDlcOKzLPPs0yZkhp1OOzAQeiAIr7BM/VOHIA3p8mF0inxCYTA=="], + + "@emurgo/cardano-message-signing-nodejs": ["@emurgo/cardano-message-signing-nodejs@1.1.0", "", {}, "sha512-PQRc8K8wZshEdmQenNUzVtiI8oJNF/1uAnBhidee5C4o1l2mDLOW+ur46HWHIFKQ6x8mSJTllcjMscHgzju0gQ=="], + + "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], + + "@foxglove/crc": ["@foxglove/crc@0.0.3", "", {}, "sha512-DjIZsnL3CyP/yQ/vUYA9cjrD0a/8YXejI5ZmsaOiT16cLfZcTwaCxIN01/ys4jsy+dZCQ/9DnWFn7AEFbiMDaA=="], + + "@harmoniclabs/bigint-utils": ["@harmoniclabs/bigint-utils@1.0.0", "", { "dependencies": { "@harmoniclabs/uint8array-utils": "^1.0.0" } }, "sha512-OhZMHcdtH2hHKMlxWFHf71PmKHdoi9ARpjS9mUu0/cd8VWDDjT7VQoQwC5NN/68iyO4O5Dojrvrp9tjG5BDABA=="], + + "@harmoniclabs/biguint": ["@harmoniclabs/biguint@1.0.0", "", {}, "sha512-5DyCIBDL4W+7ffR1IJSbGrCG4xEYxAlFH5gCNF42qtyL5ltwZ92Ae1MyXpHM2TUPy7ocSTqlLUsOdy+SvqVVPw=="], + + "@harmoniclabs/bitstream": ["@harmoniclabs/bitstream@1.0.0", "", { "dependencies": { "@harmoniclabs/uint8array-utils": "^1.0.0" } }, "sha512-Ed/I46IuCiytE5QiMmmUo9kPJcypM7OuUqoRaAXUALL5C6LKLpT6kYE1qeuhLkx2/WvkHT18jcOX6jhM/nmqoA=="], + + "@harmoniclabs/bytestring": ["@harmoniclabs/bytestring@1.0.0", "", { "dependencies": { "@harmoniclabs/uint8array-utils": "^1.0.0" } }, "sha512-d5m10O0okKc6QNX0pSRriFTkk/kNMnMBGbo5X3kEZwKaXTI4tDVoTZBL7bwbYHwOEdSxWJjVtlO9xtB7ZrYZNg=="], + + "@harmoniclabs/cbor": ["@harmoniclabs/cbor@1.6.0", "", { "dependencies": { "@harmoniclabs/bytestring": "^1.0.0", "@harmoniclabs/obj-utils": "^1.0.0", "@harmoniclabs/uint8array-utils": "^1.0.3" } }, "sha512-KI25p8pHI1rmFZC9NYSxATwlCZ+KJdjydpptKebHcw03Iy7M+E8mF+hSnN5dTbS45xw5ZyKUgPLRgLo1sTuIoQ=="], + + "@harmoniclabs/crypto": ["@harmoniclabs/crypto@0.2.5", "", { "dependencies": { "@harmoniclabs/bitstream": "^1.0.0", "@harmoniclabs/uint8array-utils": "^1.0.3" } }, "sha512-t2saWMFWBx8tOHotiYTTfQKhPGpWT4AMLXxq3u0apShVXNV0vgL0gEgSMudBjES/wrKByCqa2xmU70gadz26hA=="], + + "@harmoniclabs/obj-utils": ["@harmoniclabs/obj-utils@1.0.0", "", {}, "sha512-EO1bQBZAORrutcP+leP5YNDwNd/9TOE23VEvs3ktniXg6w0knUrLjUIl2Pkcbs/D1VQxqmsNpXho+vaMj00qxA=="], + + "@harmoniclabs/pair": ["@harmoniclabs/pair@1.0.0", "", {}, "sha512-D9OBowsUsy1LctHxWzd9AngTzoo5x3rBiJ0gu579t41Q23pb+VNx1euEfluUEiaYbgljcl1lb/4D1fFTZd1tRQ=="], + + "@harmoniclabs/plutus-data": ["@harmoniclabs/plutus-data@1.2.6", "", { "dependencies": { "@harmoniclabs/biguint": "^1.0.0", "@harmoniclabs/crypto": "^0.2.4", "@harmoniclabs/uint8array-utils": "^1.0.0" }, "peerDependencies": { "@harmoniclabs/bytestring": "^1.0.0", "@harmoniclabs/cbor": "^1.3.0" } }, "sha512-rF046GZ07XDpjZBNybALKYSycjxCLzXKbhLylu9pRuZiii5fVXReEfgtLB29TsPBvGY6ZBeiyHgJnLgm+huZBw=="], + + "@harmoniclabs/uint8array-utils": ["@harmoniclabs/uint8array-utils@1.0.4", "", {}, "sha512-Z454prSbX4geXGHyjjcn9vm6u9NsD3VJykv8f8yE1VjIXSPitaLPEnm8u2+B+GMp1chYlLilOq+kW4OvJ6y28A=="], + + "@harmoniclabs/uplc": ["@harmoniclabs/uplc@1.4.1", "", { "dependencies": { "@harmoniclabs/bigint-utils": "^1.0.0", "@harmoniclabs/uint8array-utils": "^1.0.3" }, "peerDependencies": { "@harmoniclabs/bytestring": "^1.0.0", "@harmoniclabs/cbor": "^1.3.0", "@harmoniclabs/crypto": "^0.3.0-dev0", "@harmoniclabs/pair": "^1.0.0", "@harmoniclabs/plutus-data": "^1.2.4" } }, "sha512-sELKStjxPBPBxBMylU4oBSUe0/8eJe2HqRblNSwrMu8Fso4YpSPDqHZ33iDZ8QAadVUsT5r2EQKX0TLrj7qXvQ=="], + + "@leichtgewicht/ip-codec": ["@leichtgewicht/ip-codec@2.0.5", "", {}, "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="], + + "@meshsdk/common": ["@meshsdk/common@1.9.1", "", { "dependencies": { "bech32": "^2.0.0", "bip39": "3.1.0", "blake2b": "^2.1.4", "blakejs": "^1.2.1" } }, "sha512-66l7vcY+h9w71auVaE7RLJYs87DmO+JTEmQ2xknd6F8fAcR73nMxLZunMRbygPoV9gHDBTMYfHoMBZqWt7N6EA=="], + + "@meshsdk/core": ["@meshsdk/core@1.9.1", "", { "dependencies": { "@meshsdk/common": "1.9.1", "@meshsdk/core-cst": "1.9.1", "@meshsdk/provider": "1.9.0-beta.101", "@meshsdk/transaction": "1.9.1", "@meshsdk/wallet": "1.9.1", "scalus": "^0.17.0" } }, "sha512-khMrEkMU71t3kn6nHM8/5rjVry055jORdln+xegP0KpVzCjWxjOe+bzyCMnQehwNT7R8OEe7wx8zYUL4qTijkA=="], + + "@meshsdk/core-cst": ["@meshsdk/core-cst@1.9.1", "", { "dependencies": { "@cardano-sdk/core": "0.46.12", "@cardano-sdk/crypto": "0.4.5", "@cardano-sdk/input-selection": "0.14.28", "@cardano-sdk/util": "0.17.1", "@harmoniclabs/cbor": "1.6.0", "@harmoniclabs/pair": "^1.0.0", "@harmoniclabs/plutus-data": "1.2.6", "@harmoniclabs/uplc": "1.4.1", "@meshsdk/common": "1.9.1", "@types/base32-encoding": "^1.0.2", "base32-encoding": "^1.0.0", "bech32": "^2.0.0", "blakejs": "^1.2.1", "bn.js": "^5.2.0", "hash.js": "^1.1.7" } }, "sha512-1e72mtTehjV/XQWpxtnejhEXyhU1f8CWqoTaQfq2rfBydLJfFs/NDEYfBKBOx697MOWM7VPAHjLvVAENqS57EQ=="], + + "@meshsdk/provider": ["@meshsdk/provider@1.9.0-beta.101", "", { "dependencies": { "@meshsdk/common": "1.9.0-beta.100", "@meshsdk/core-cst": "1.9.0-beta.100", "@utxorpc/sdk": "^0.6.7", "@utxorpc/spec": "^0.16.0", "axios": "^1.7.2", "cbor": "^10.0.9" } }, "sha512-xbb0pCDpeHk8WEzgZCUlwy1CLpOPSPNn3TPtuLuMNnebCO8lZhvP3NYZqX/CUnTkOjXP4dxu5Zbf7ipZ43V4RQ=="], + + "@meshsdk/transaction": ["@meshsdk/transaction@1.9.1", "", { "dependencies": { "@cardano-sdk/core": "0.46.12", "@cardano-sdk/input-selection": "0.14.28", "@cardano-sdk/util": "0.17.1", "@meshsdk/common": "1.9.1", "@meshsdk/core-cst": "1.9.1", "json-bigint": "^1.0.0" } }, "sha512-FjKSoUi2xFaKJPI1ObQ13UkrCJu+iPW6THP//ZD/f5I1NciaUz3bcoQ7xWcc7El4TCcDunBPp9di6w9JitBR6Q=="], + + "@meshsdk/wallet": ["@meshsdk/wallet@1.9.1", "", { "dependencies": { "@meshsdk/common": "1.9.1", "@meshsdk/core-cst": "1.9.1", "@meshsdk/transaction": "1.9.1", "@simplewebauthn/browser": "^13.0.0" } }, "sha512-lPovMk86Ex6t1s12CiSJFfxnTM31vXxwB7h0BOnznPgueBts2z0cgvQVtBMlhIKHTmPWW1/gkuEH/5dGMfZ3jA=="], + + "@multiformats/dns": ["@multiformats/dns@1.0.6", "", { "dependencies": { "@types/dns-packet": "^5.6.5", "buffer": "^6.0.3", "dns-packet": "^5.6.1", "hashlru": "^2.3.0", "p-queue": "^8.0.1", "progress-events": "^1.0.0", "uint8arrays": "^5.0.2" } }, "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw=="], + + "@multiformats/mafmt": ["@multiformats/mafmt@12.1.6", "", { "dependencies": { "@multiformats/multiaddr": "^12.0.0" } }, "sha512-tlJRfL21X+AKn9b5i5VnaTD6bNttpSpcqwKVmDmSHLwxoz97fAHaepqFOk/l1fIu94nImIXneNbhsJx/RQNIww=="], + + "@multiformats/multiaddr": ["@multiformats/multiaddr@12.4.0", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", "@multiformats/dns": "^1.0.3", "multiformats": "^13.0.0", "uint8-varint": "^2.0.1", "uint8arrays": "^5.0.0" } }, "sha512-FL7yBTLijJ5JkO044BGb2msf+uJLrwpD6jD6TkXlbjA9N12+18HT40jvd4o5vL4LOJMc86dPX6tGtk/uI9kYKg=="], + + "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + + "@scure/base": ["@scure/base@1.2.5", "", {}, "sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw=="], + + "@simplewebauthn/browser": ["@simplewebauthn/browser@13.1.0", "", {}, "sha512-WuHZ/PYvyPJ9nxSzgHtOEjogBhwJfC8xzYkPC+rR/+8chl/ft4ngjiK8kSU5HtRJfczupyOh33b25TjYbvwAcg=="], + + "@types/base32-encoding": ["@types/base32-encoding@1.0.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-6kXiZ8gETqBU/B9ddcw15nwacX4iX9mLZTU0kghWK5u+OdjfJg6vxHh/vXoURWTyLSzs2jKgcq1lS3S/Tvl4mw=="], + + "@types/dns-packet": ["@types/dns-packet@5.6.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q=="], + + "@types/json-bigint": ["@types/json-bigint@1.0.4", "", {}, "sha512-ydHooXLbOmxBbubnA7Eh+RpBzuaIiQjh8WGJYQB50JFGFrdxW7JzVlyEV7fAXw0T2sqJ1ysTneJbiyNLqZRAag=="], + + "@types/node": ["@types/node@22.15.3", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw=="], + + "@utxorpc/sdk": ["@utxorpc/sdk@0.6.8", "", { "dependencies": { "@connectrpc/connect": "1.4", "@connectrpc/connect-node": "1.4", "@connectrpc/connect-web": "1.4", "@utxorpc/spec": "0.16.0", "buffer": "^6.0.3" } }, "sha512-Mff6q2o7R2aam85KmjtAZDKPhJesMmnGFbk2M54lPO0FwrrWRfUf6DYezqWfYcjXgKQSHDuklAcdtF0weEENRA=="], + + "@utxorpc/spec": ["@utxorpc/spec@0.16.0", "", { "dependencies": { "@bufbuild/protobuf": "^1.10.0" } }, "sha512-EK2M0TBp14MrRCYDuFeJ+bAS39RxxLLh+CD08h/YvAgxSv/4ZOBCf1/sxHAGCBGGndB4heZYFeuQ+i1i8vP5lw=="], + + "@zxing/text-encoding": ["@zxing/text-encoding@0.9.0", "", {}, "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + + "axios": ["axios@1.9.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg=="], + + "b4a": ["b4a@1.6.7", "", {}, "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="], + + "base32-encoding": ["base32-encoding@1.0.0", "", {}, "sha512-k1gA7f00ODLY7YtuEQFz0Kn3huTCmL/JW+oQtw51ID+zxs5chj/YQ1bXN+Q0JsqiKB2Yn0oA0AA8uipFYgpagQ=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "bech32": ["bech32@2.0.0", "", {}, "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg=="], + + "bignumber.js": ["bignumber.js@9.3.0", "", {}, "sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA=="], + + "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], + + "bip39": ["bip39@3.1.0", "", { "dependencies": { "@noble/hashes": "^1.2.0" } }, "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A=="], + + "blake2b": ["blake2b@2.1.4", "", { "dependencies": { "blake2b-wasm": "^2.4.0", "nanoassert": "^2.0.0" } }, "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A=="], + + "blake2b-wasm": ["blake2b-wasm@2.4.0", "", { "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" } }, "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w=="], + + "blakejs": ["blakejs@1.2.1", "", {}, "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ=="], + + "bn.js": ["bn.js@5.2.2", "", {}, "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw=="], + + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "bufferutil": ["bufferutil@4.0.9", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw=="], + + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "cbor": ["cbor@10.0.12", "", { "dependencies": { "nofilter": "^3.0.2" } }, "sha512-exQDevYd7ZQLP4moMQcZkKCVZsXLAtUSflObr3xTh4xzFIv/xBCdvCd6L259kQOUP2kcTC0jvC6PpZIf/WmRXA=="], + + "chacha": ["chacha@2.1.0", "", { "dependencies": { "inherits": "^2.0.1", "readable-stream": "^1.0.33" }, "optionalDependencies": { "chacha-native": "^2.0.0" } }, "sha512-FhVtqaZOiHlOKUkAWfDlJ+oe/O8iPQbCC0pFXJqphr4YQBCZPXa8Mv3j35+W4eWFWCoTUcW2u5IWDDkknygvVA=="], + + "chacha-native": ["chacha-native@2.0.3", "", { "dependencies": { "bindings": "^1.2.1", "inherits": "^2.0.1", "nan": "^2.4.0" } }, "sha512-93h+osfjhR2sMHAaapTLlL/COoBPEZ6upicPBQ4GfUyadoMb8t9/M0PKK8kC+F+DEA/Oy3Kg9w3HzY3J1foP3g=="], + + "cipher-base": ["cipher-base@1.0.6", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" } }, "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw=="], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + + "create-hash": ["create-hash@1.2.0", "", { "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="], + + "create-hmac": ["create-hmac@1.1.7", "", { "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg=="], + + "cross-fetch": ["cross-fetch@3.2.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "dns-packet": ["dns-packet@5.6.1", "", { "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" } }, "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw=="], + + "dom-walk": ["dom-walk@0.1.2", "", {}, "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], + + "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], + + "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], + + "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], + + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + + "form-data": ["form-data@4.0.2", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" } }, "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w=="], + + "fraction.js": ["fraction.js@4.0.1", "", {}, "sha512-NQYzZw8MUsxSZFQo6E8tKOlmSd/BlDTNOR4puXFSHSwFwNaIlmbortQy5PDN/KnVQ4xWG2NtN0J0hjPw7eE06A=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-random-values": ["get-random-values@2.1.0", "", { "dependencies": { "global": "^4.4.0" } }, "sha512-q2yOLpLyA8f9unfv2LV8KVRUFeOIrQVS5cnqpbv6N+ea9j1rmW5dFKj/2Q7CK3juEfDYQgPxGt941VJcmw0jKg=="], + + "global": ["global@4.4.0", "", { "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" } }, "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hash-base": ["hash-base@3.1.2", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.1" } }, "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg=="], + + "hash.js": ["hash.js@1.1.7", "", { "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="], + + "hashlru": ["hashlru@2.3.0", "", {}, "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "i": ["i@0.3.7", "", {}, "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ip-address": ["ip-address@9.0.5", "", { "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" } }, "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g=="], + + "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], + + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + + "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], + + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "iso-url": ["iso-url@1.2.1", "", {}, "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng=="], + + "isomorphic-ws": ["isomorphic-ws@4.0.1", "", { "peerDependencies": { "ws": "*" } }, "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w=="], + + "jsbn": ["jsbn@1.1.0", "", {}, "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="], + + "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], + + "libsodium-sumo": ["libsodium-sumo@0.7.15", "", {}, "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw=="], + + "libsodium-wrappers-sumo": ["libsodium-wrappers-sumo@0.7.10", "", { "dependencies": { "libsodium-sumo": "^0.7.0" } }, "sha512-1noz8Mcl/LUzO/iSO/FJzoJyIaPwxl+/+E4CoTIXtsPiEEXQx2sxalmrVWxteLpynqgX0ASo28ChB9NEVRh0Pg=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "md5.js": ["md5.js@1.3.5", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "min-document": ["min-document@2.19.0", "", { "dependencies": { "dom-walk": "^0.1.0" } }, "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ=="], + + "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], + + "multiformats": ["multiformats@13.3.2", "", {}, "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g=="], + + "nan": ["nan@2.22.2", "", {}, "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ=="], + + "nanoassert": ["nanoassert@2.0.0", "", {}, "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], + + "nofilter": ["nofilter@3.1.0", "", {}, "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g=="], + + "p-queue": ["p-queue@8.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw=="], + + "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "pbkdf2": ["pbkdf2@3.1.6", "", { "dependencies": { "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "ripemd160": "^2.0.3", "safe-buffer": "^5.2.1", "sha.js": "^2.4.12", "to-buffer": "^1.2.2" } }, "sha512-BT6eelPB1EyGHo8pC0o9Bl6k6SYVhKO1jEbd3lcTrtr7XHdjP8BW1YpfCV3G9Kwkxgattk+S5q2/RvuttCsS1g=="], + + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + + "progress-events": ["progress-events@1.0.1", "", {}, "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw=="], + + "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + + "readable-stream": ["readable-stream@1.1.14", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", "isarray": "0.0.1", "string_decoder": "~0.10.x" } }, "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "ripemd160": ["ripemd160@2.0.3", "", { "dependencies": { "hash-base": "^3.1.2", "inherits": "^2.0.4" } }, "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA=="], + + "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "scalus": ["scalus@0.17.0", "", {}, "sha512-74mD4wL1vw4GVh2ECemQhoB3q5Smwj5S8W7OG1j7OWuLkwJ0Mvz4LFhZPA9rZjpNvanZoKiDqc3S/qGD65uRYg=="], + + "serialize-error": ["serialize-error@8.1.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ=="], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "sha.js": ["sha.js@2.4.12", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" } }, "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w=="], + + "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], + + "string_decoder": ["string_decoder@0.10.31", "", {}, "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="], + + "to-buffer": ["to-buffer@1.2.2", "", { "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", "typed-array-buffer": "^1.0.3" } }, "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw=="], + + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + + "ts-custom-error": ["ts-custom-error@3.3.1", "", {}, "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A=="], + + "ts-log": ["ts-log@2.2.7", "", {}, "sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], + + "uint8-varint": ["uint8-varint@2.0.4", "", { "dependencies": { "uint8arraylist": "^2.0.0", "uint8arrays": "^5.0.0" } }, "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw=="], + + "uint8arraylist": ["uint8arraylist@2.4.8", "", { "dependencies": { "uint8arrays": "^5.0.1" } }, "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ=="], + + "uint8arrays": ["uint8arrays@5.1.0", "", { "dependencies": { "multiformats": "^13.0.0" } }, "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww=="], + + "undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "utf-8-validate": ["utf-8-validate@6.0.5", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-EYZR+OpIXp9Y1eG1iueg8KRsY8TuT8VNgnanZ0uA3STqhHQTLwbl+WX76/9X5OY12yQubymBpaBSmMPkSTQcKA=="], + + "util": ["util@0.12.5", "", { "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" } }, "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "web-encoding": ["web-encoding@1.1.5", "", { "dependencies": { "util": "^0.12.3" }, "optionalDependencies": { "@zxing/text-encoding": "0.9.0" } }, "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA=="], + + "webextension-polyfill": ["webextension-polyfill@0.8.0", "", {}, "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ=="], + + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + + "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], + + "ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + + "@cardano-sdk/dapp-connector/@cardano-sdk/core": ["@cardano-sdk/core@0.47.1", "", { "dependencies": { "@biglup/is-cid": "^1.0.3", "@cardano-sdk/crypto": "~0.4.7", "@cardano-sdk/util": "~0.17.2", "@foxglove/crc": "^0.0.3", "@scure/base": "^1.1.1", "fraction.js": "4.0.1", "ip-address": "^10.2.0", "lodash": "^4.17.21", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4", "web-encoding": "^1.1.5" } }, "sha512-72G11AWm7dKOY1h+WR/nEbvmZXHjaBq79NSO/mDktDnxhVCIMviKSsw3cC9LoddfIpAg8KRE7obtYRMq0e8WmQ=="], + + "@cardano-sdk/dapp-connector/@cardano-sdk/crypto": ["@cardano-sdk/crypto@0.4.7", "", { "dependencies": { "@cardano-sdk/util": "~0.17.2", "blake2b": "^2.1.4", "i": "^0.3.7", "libsodium-wrappers-sumo": "0.8.4", "lodash": "^4.17.21", "pbkdf2": "^3.1.3", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4" }, "peerDependencies": { "@dcspark/cardano-multiplatform-lib-asmjs": "^3.1.1", "@dcspark/cardano-multiplatform-lib-browser": "^3.1.1", "@dcspark/cardano-multiplatform-lib-nodejs": "^3.1.1" }, "optionalPeers": ["@dcspark/cardano-multiplatform-lib-asmjs", "@dcspark/cardano-multiplatform-lib-browser", "@dcspark/cardano-multiplatform-lib-nodejs"] }, "sha512-4aCsLOkqaIS/gSGw4SBqNGcCIp6hZ8alQWJx58U/OiOxC43t7i2JpKagdyWfCNekPM14hO7BWER7y31wf4BFxw=="], + + "@cardano-sdk/dapp-connector/@cardano-sdk/util": ["@cardano-sdk/util@0.17.2", "", { "dependencies": { "bech32": "^2.0.0", "lodash": "^4.17.21", "serialize-error": "^8", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4" } }, "sha512-LdY33OQG5H4p0rppHtjnM+akc1poKhz+02T9zsXsbShfTbeU9HXlA0nJ8xj9FNZMs+ozDR0HWrUjDc7fkNZI7w=="], + + "@cardano-sdk/key-management/@cardano-sdk/core": ["@cardano-sdk/core@0.47.1", "", { "dependencies": { "@biglup/is-cid": "^1.0.3", "@cardano-sdk/crypto": "~0.4.7", "@cardano-sdk/util": "~0.17.2", "@foxglove/crc": "^0.0.3", "@scure/base": "^1.1.1", "fraction.js": "4.0.1", "ip-address": "^10.2.0", "lodash": "^4.17.21", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4", "web-encoding": "^1.1.5" } }, "sha512-72G11AWm7dKOY1h+WR/nEbvmZXHjaBq79NSO/mDktDnxhVCIMviKSsw3cC9LoddfIpAg8KRE7obtYRMq0e8WmQ=="], + + "@cardano-sdk/key-management/@cardano-sdk/crypto": ["@cardano-sdk/crypto@0.4.7", "", { "dependencies": { "@cardano-sdk/util": "~0.17.2", "blake2b": "^2.1.4", "i": "^0.3.7", "libsodium-wrappers-sumo": "0.8.4", "lodash": "^4.17.21", "pbkdf2": "^3.1.3", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4" }, "peerDependencies": { "@dcspark/cardano-multiplatform-lib-asmjs": "^3.1.1", "@dcspark/cardano-multiplatform-lib-browser": "^3.1.1", "@dcspark/cardano-multiplatform-lib-nodejs": "^3.1.1" }, "optionalPeers": ["@dcspark/cardano-multiplatform-lib-asmjs", "@dcspark/cardano-multiplatform-lib-browser", "@dcspark/cardano-multiplatform-lib-nodejs"] }, "sha512-4aCsLOkqaIS/gSGw4SBqNGcCIp6hZ8alQWJx58U/OiOxC43t7i2JpKagdyWfCNekPM14hO7BWER7y31wf4BFxw=="], + + "@cardano-sdk/key-management/@cardano-sdk/util": ["@cardano-sdk/util@0.17.2", "", { "dependencies": { "bech32": "^2.0.0", "lodash": "^4.17.21", "serialize-error": "^8", "ts-custom-error": "^3.2.0", "ts-log": "^2.2.4" } }, "sha512-LdY33OQG5H4p0rppHtjnM+akc1poKhz+02T9zsXsbShfTbeU9HXlA0nJ8xj9FNZMs+ozDR0HWrUjDc7fkNZI7w=="], + + "@meshsdk/provider/@meshsdk/common": ["@meshsdk/common@1.9.0-beta.100", "", { "dependencies": { "bech32": "^2.0.0", "bip39": "3.1.0", "blake2b": "^2.1.4", "blakejs": "^1.2.1" } }, "sha512-H3ktKR9eheRKZupg7DLdUr8A9dsefJbu7Wc+I1suwrv+oAZWiJ2wCuF3bX2QQo3LyWrSkVCE7WEiKFfQmukIww=="], + + "@meshsdk/provider/@meshsdk/core-cst": ["@meshsdk/core-cst@1.9.0-beta.100", "", { "dependencies": { "@cardano-sdk/core": "0.46.12", "@cardano-sdk/crypto": "0.4.5", "@cardano-sdk/input-selection": "0.14.28", "@cardano-sdk/util": "0.17.1", "@harmoniclabs/cbor": "1.6.0", "@harmoniclabs/pair": "^1.0.0", "@harmoniclabs/plutus-data": "1.2.6", "@harmoniclabs/uplc": "1.4.1", "@meshsdk/common": "1.9.0-beta.100", "@types/base32-encoding": "^1.0.2", "base32-encoding": "^1.0.0", "bech32": "^2.0.0", "blakejs": "^1.2.1", "bn.js": "^5.2.0", "hash.js": "^1.1.7", "scalus": "^0.14.2" } }, "sha512-gXC7c81puzv12C3xJ6vhH/KIEc/P6ScuXsgmLlqFMpDv0SuoMg+42HgdyWi0WrccVwi8cdepsn5YhtCaYVn0nw=="], + + "create-hash/ripemd160": ["ripemd160@2.0.2", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="], + + "create-hash/sha.js": ["sha.js@2.4.11", "", { "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" }, "bin": { "sha.js": "./bin.js" } }, "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ=="], + + "create-hmac/ripemd160": ["ripemd160@2.0.2", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="], + + "create-hmac/sha.js": ["sha.js@2.4.11", "", { "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" }, "bin": { "sha.js": "./bin.js" } }, "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ=="], + + "hash-base/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "md5.js/hash-base": ["hash-base@3.1.0", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="], + + "readable-stream/isarray": ["isarray@0.0.1", "", {}, "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="], + + "@cardano-sdk/dapp-connector/@cardano-sdk/core/ip-address": ["ip-address@10.7.2", "", {}, "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w=="], + + "@cardano-sdk/dapp-connector/@cardano-sdk/crypto/libsodium-wrappers-sumo": ["libsodium-wrappers-sumo@0.8.4", "", { "dependencies": { "libsodium-sumo": "^0.8.0" } }, "sha512-ql7hcgulKZ3ekfa2DGAogcCKsWU0diA/0nArz1CFzh93WQdb46/Kj18ka/Hifq6uA3Ush34Pc6vU/6HXeRwUkg=="], + + "@cardano-sdk/key-management/@cardano-sdk/core/ip-address": ["ip-address@10.7.2", "", {}, "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w=="], + + "@cardano-sdk/key-management/@cardano-sdk/crypto/libsodium-wrappers-sumo": ["libsodium-wrappers-sumo@0.8.4", "", { "dependencies": { "libsodium-sumo": "^0.8.0" } }, "sha512-ql7hcgulKZ3ekfa2DGAogcCKsWU0diA/0nArz1CFzh93WQdb46/Kj18ka/Hifq6uA3Ush34Pc6vU/6HXeRwUkg=="], + + "@meshsdk/provider/@meshsdk/core-cst/scalus": ["scalus@0.14.2", "", {}, "sha512-dobDMIUDUVhtxoX3ceGlaykKQGkph4HOE9hjkLsmwVgYf24fIik6YrZzVFrZSNCTvI2WN7hjEknehIrEJo1CMQ=="], + + "create-hash/ripemd160/hash-base": ["hash-base@3.1.0", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="], + + "create-hmac/ripemd160/hash-base": ["hash-base@3.1.0", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="], + + "hash-base/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "hash-base/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "hash-base/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "md5.js/hash-base/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "@cardano-sdk/dapp-connector/@cardano-sdk/crypto/libsodium-wrappers-sumo/libsodium-sumo": ["libsodium-sumo@0.8.4", "", {}, "sha512-TMtHShQfVVsaxDygyapvUC3o7YsPgXa/hRWeIgzyFz6w5k/1hirGptCxp1U7XwW3rCskaTTYKgV10v86UiGgNw=="], + + "@cardano-sdk/key-management/@cardano-sdk/crypto/libsodium-wrappers-sumo/libsodium-sumo": ["libsodium-sumo@0.8.4", "", {}, "sha512-TMtHShQfVVsaxDygyapvUC3o7YsPgXa/hRWeIgzyFz6w5k/1hirGptCxp1U7XwW3rCskaTTYKgV10v86UiGgNw=="], + + "create-hash/ripemd160/hash-base/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "create-hmac/ripemd160/hash-base/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "md5.js/hash-base/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "create-hash/ripemd160/hash-base/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "create-hmac/ripemd160/hash-base/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + } +} diff --git a/e2e-tests/meshjs/package.json b/e2e-tests/meshjs/package.json index 1d246234..df80db40 100644 --- a/e2e-tests/meshjs/package.json +++ b/e2e-tests/meshjs/package.json @@ -9,8 +9,8 @@ "license": "ISC", "description": "", "dependencies": { - "@meshsdk/core": "1.9.0-beta-39", - "@meshsdk/core-cst": "1.9.0-beta-39", - "@meshsdk/common": "1.9.0-beta-39" + "@meshsdk/core": "1.9.1", + "@meshsdk/core-cst": "1.9.1", + "@meshsdk/common": "1.9.1" } } diff --git a/e2e-tests/meshjs/payment.ts b/e2e-tests/meshjs/payment.ts index c563b9cb..9c7767aa 100644 --- a/e2e-tests/meshjs/payment.ts +++ b/e2e-tests/meshjs/payment.ts @@ -1,6 +1,7 @@ -import {MeshWallet, Transaction, YaciProvider} from "@meshsdk/core"; +import {BlockfrostProvider, MeshWallet, Transaction} from "@meshsdk/core"; -const provider = new YaciProvider('http://localhost:8080/api/v1/'); +// Mesh's BlockfrostProvider pointed at Yaci Store's Blockfrost-compatible API +const provider = new BlockfrostProvider(process.env.YACI_STORE_URL ?? 'http://localhost:8080/api/v1'); const seedPhrase = ["test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "sauce"]; diff --git a/e2e-tests/meshjs/payment_splitter_plutusV3.ts b/e2e-tests/meshjs/payment_splitter_plutusV3.ts index 91ee97a6..9381e96a 100644 --- a/e2e-tests/meshjs/payment_splitter_plutusV3.ts +++ b/e2e-tests/meshjs/payment_splitter_plutusV3.ts @@ -1,6 +1,6 @@ import { - MeshWallet, serializePlutusScript, resolvePaymentKeyHash, Transaction, largestFirst, - Asset, YaciProvider + MeshWallet, serializePlutusScript, resolvePaymentKeyHash, Transaction, + Asset, BlockfrostProvider } from '@meshsdk/core'; import { applyParamsToScript, deserializeAddress } from '@meshsdk/core-cst'; import { builtinByteString, list, PlutusScript } from "@meshsdk/common"; @@ -11,13 +11,14 @@ const seedPhrase = ["test", "test", "test", "test", "test", "test", "test", "tes const compiledCode ="5903ac0100003232323232323223225333004323232323253323300a3001300b37540042646464a66601a66e1d2000300e375400c26464a666024602a0042646464646464646464646464a66603666ebcdd3999918008009112999810800880109998018019919198008008021129998120008a5eb804c8c94ccc08ccdd7801002880089981380119802002000981400118130009811800981200099918008009129998100008a5eb804c8cc088004cc00c00ccc01cc0900088ccc07ccdd78008012504a26044002646600200201044a666040002297ae01330213007301f3754600e603e6ea8c088004cc008008c08c00402d3001018000100114a0646600200200444a66603e00229444c94ccc074cdc39bad302200233005533302000414c0103d87a80001300e3302130220044bd70240002660060060022940c088004c8cc004004028894ccc07800452f5c026603e6ea0c8c8c8c8c8c94ccc084cdc424000002266e04008cdc0800806080119980119804807119baf300b30233754601660466ea8c014c08cdd5000803240004466e00004c014dd5980318121baa30063024375400466600266010016466ebcc028c088dd5180518111baa0010054800088cdc000098021bab300530233754004444646600200200844a66604c0022008266006605000266004004605200246600c64a66603e602c60406ea80045300103d87a8000132330010013756604a60446ea8008894ccc090004530103d87a800013232323253330253372291100002153330253371e9101000021301633029375000297ae014c0103d87a8000133006006003375a604c0066eb8c090008c0a0008c098004c8cc004004008894ccc08c0045300103d87a800013232323253330243372291100002153330243371e9101000021301533028374c00297ae014c0103d87a80001330060060033756604a0066eb8c08c008c09c008c0940052000230223023001302000133002002302100122533301a3011301b3754004200226eb4c07cc070dd500111191980080080191299980f0008a5eb804c8c94ccc074c0140084cc084008cc0100100044cc010010004c088008c0800048c070004dd6980d180d8011bac3019001301930190023758602e00260266ea8030c8cc00400403c894ccc05400452f5c026602c60066602c602e00297ae0330020023018001374a90000b1bae3013001300f375400c2c60226024004602000260186ea8008dc3a40042c601a601c004601800260180046014002600c6ea8004526136563758002ae6955ceaab9e5573eae815d0aba21"; async function setup () { - const yaciProvider = new YaciProvider("http://localhost:8080/api/v1/"); + // Mesh's BlockfrostProvider pointed at Yaci Store's Blockfrost-compatible API + const provider = new BlockfrostProvider(process.env.YACI_STORE_URL ?? "http://localhost:8080/api/v1"); const mnemonic = seedPhrase; const wallet = new MeshWallet({ networkId: 0, - fetcher: yaciProvider, - submitter: yaciProvider, + fetcher: provider, + submitter: provider, key: { type: 'mnemonic', words: mnemonic, @@ -52,7 +53,7 @@ async function setup () { const scriptAddress = serializePlutusScript(script, undefined, 0); return { - yaciProvider, + provider, wallet, scriptAddress, script, @@ -82,15 +83,16 @@ async function lockAda(lovelaceAmount: string) { const signedTx = await wallet.signTx(unsignedTx); const txHash = await wallet.submitTx(signedTx); console.log(`Successfully locked ${lovelaceAmount} lovelace to the script address ${scriptAddress.address}`); + return txHash; }; -async function unlockAda () { - const { yaciProvider, wallet, scriptAddress, script, payees } = await setup(); - const utxos = await yaciProvider.fetchAddressUTxOs(scriptAddress.address); +async function unlockAda (lockTxHash: string) { + const { provider, wallet, scriptAddress, script, payees } = await setup(); + // Spend only the UTxO locked by this run, so leftovers from earlier runs don't change the tx + const utxos = (await provider.fetchAddressUTxOs(scriptAddress.address)) + .filter((u) => u.input.txHash === lockTxHash); const paymentAddress = await wallet.getChangeAddress(); - const lovelaceForCollateral = "5000000"; - const collateralUtxos = largestFirst(lovelaceForCollateral, await yaciProvider.fetchAddressUTxOs(paymentAddress)); const pubKeyHash = deserializeAddress(await wallet.getChangeAddress()).asBase()?.getPaymentCredential().hash || ''; const datum = { alternative: 0, @@ -100,7 +102,10 @@ async function unlockAda () { const redeemerData = "Hello, World!"; const redeemer = { data: { alternative: 0, fields: [redeemerData] } }; - let tx = new Transaction({ initiator: wallet, fetcher: yaciProvider }); + // No evaluator: Mesh evaluates redeemers on a coin-selection skeleton whose change goes to a placeholder + // address (@cardano-sdk/input-selection stubMaxSizeAddress), so this validator, which checks where the funds + // go, fails during evaluation. Mesh's default budget per redeemer is enough for the single script input. + let tx = new Transaction({ initiator: wallet, fetcher: provider }); tx.setNetwork('testnet') let split = 0; for (const utxo of utxos) { @@ -134,16 +139,39 @@ async function unlockAda () { const signedTx = await wallet.signTx(unsignedTx, true); const txHash = await wallet.submitTx(signedTx); console.log("Unlock Tx hash: " + txHash); + await waitForTx(provider, txHash); console.log(`Successfully unlocked the lovelace from the script address ${scriptAddress.address} and split it equally (${split} Lovelace) to all payees.`); } catch (error) { - console.warn(error); + console.error(error); + process.exit(1); } }; -//First lock -lockAda("20000000"); +// Wait until the tx is confirmed, so a following run doesn't reuse the UTxOs it spent +async function waitForTx(provider: BlockfrostProvider, txHash: string, timeoutMs = 60000) { + const deadline = Date.now() + timeoutMs; + while (Date.now() < deadline) { + if (await provider.fetchTxInfo(txHash).then(() => true).catch(() => false)) return; + await new Promise(resolve => setTimeout(resolve, 1000)); + } + throw new Error(`Tx ${txHash} was not confirmed`); +} -await new Promise(resolve => setTimeout(resolve, 2000)); +// Wait for the lock tx's own UTxO (the script address may already hold UTxOs from earlier runs) +async function waitForLockedUtxo(lockTxHash: string, timeoutMs = 60000) { + const { provider, scriptAddress } = await setup(); + const deadline = Date.now() + timeoutMs; + while (Date.now() < deadline) { + const utxos = await provider.fetchAddressUTxOs(scriptAddress.address).catch(() => []); + if (utxos.some((u) => u.input.txHash === lockTxHash)) return; + await new Promise(resolve => setTimeout(resolve, 1000)); + } + throw new Error(`Locked UTxO of ${lockTxHash} did not appear at the script address`); +} + +//First lock +const lockTxHash = await lockAda("20000000"); +await waitForLockedUtxo(lockTxHash); //Unlock -unlockAda(); +await unlockAda(lockTxHash); diff --git a/e2e-tests/pycardano/README.md b/e2e-tests/pycardano/README.md new file mode 100644 index 00000000..ce21a356 --- /dev/null +++ b/e2e-tests/pycardano/README.md @@ -0,0 +1,9 @@ +# PyCardano Compatibility Tests + +Uses Yaci Store as the Blockfrost backend (`BlockFrostChainContext`). + +```shell +python3 -m venv .venv && .venv/bin/pip install -r requirements.txt +.venv/bin/python payment.py # simple ADA payment +.venv/bin/python plutus_v3.py # lock at an always-succeeds PlutusV3 script and spend it back +``` diff --git a/e2e-tests/pycardano/devnet.py b/e2e-tests/pycardano/devnet.py new file mode 100644 index 00000000..380ded05 --- /dev/null +++ b/e2e-tests/pycardano/devnet.py @@ -0,0 +1,40 @@ +import os +import time + +from blockfrost import ApiError +from pycardano import (Address, BlockFrostChainContext, ExtendedSigningKey, HDWallet, Network) + +YACI_STORE_URL = os.environ.get("YACI_STORE_URL", "http://localhost:8080/api/v1") + +# Default Yaci DevKit account 0 (pre-funded on devnet creation) +MNEMONIC = "test test test test test test test test test test test test test test test test test test test test test test test sauce" + +RECEIVER = "addr_test1qqm87edtdxc7vu2u34dpf9jzzny4qhk3wqezv6ejpx3vgrwt46dz4zq7vqll88fkaxrm4nac0m5cq50jytzlu0hax5xqwlraql" + + +def chain_context() -> BlockFrostChainContext: + # blockfrost-python appends the API version (default "v0") to the base url, so split + # "http://localhost:8080/api/v1" into base url "http://localhost:8080/api" and version "v1" + base_url, api_version = YACI_STORE_URL.rstrip("/").rsplit("/", 1) + os.environ["BLOCKFROST_API_VERSION"] = api_version + return BlockFrostChainContext(project_id="dummy", base_url=base_url) + + +def wallet(): + hdwallet = HDWallet.from_mnemonic(MNEMONIC) + payment_skey = ExtendedSigningKey.from_hdwallet(hdwallet.derive_from_path("m/1852'/1815'/0'/0/0")) + stake_skey = ExtendedSigningKey.from_hdwallet(hdwallet.derive_from_path("m/1852'/1815'/0'/2/0")) + address = Address(payment_skey.to_verification_key().hash(), stake_skey.to_verification_key().hash(), + network=Network.TESTNET) + return payment_skey, address + + +def wait_for_tx(context: BlockFrostChainContext, tx_hash: str, timeout: int = 60) -> None: + deadline = time.time() + timeout + while time.time() < deadline: + try: + context.api.transaction(tx_hash) + return + except ApiError: + time.sleep(1) + raise TimeoutError(f"Transaction {tx_hash} was not confirmed within {timeout}s") diff --git a/e2e-tests/pycardano/payment.py b/e2e-tests/pycardano/payment.py new file mode 100644 index 00000000..bb3011b5 --- /dev/null +++ b/e2e-tests/pycardano/payment.py @@ -0,0 +1,18 @@ +# Simple ADA payment with PyCardano using Yaci Store as the Blockfrost backend +from pycardano import Address, TransactionBuilder, TransactionOutput + +from devnet import RECEIVER, chain_context, wait_for_tx, wallet + +context = chain_context() +payment_skey, address = wallet() +print("Sender:", address) + +builder = TransactionBuilder(context) +builder.add_input_address(address) +builder.add_output(TransactionOutput(Address.from_primitive(RECEIVER), 5_000_000)) +signed_tx = builder.build_and_sign([payment_skey], change_address=address) + +tx_hash = str(context.submit_tx(signed_tx)) +print("Submitted:", tx_hash) +wait_for_tx(context, tx_hash) +print("Confirmed:", tx_hash) diff --git a/e2e-tests/pycardano/placeholder.txt b/e2e-tests/pycardano/placeholder.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/e2e-tests/pycardano/plutus_v3.py b/e2e-tests/pycardano/plutus_v3.py new file mode 100644 index 00000000..86327f1a --- /dev/null +++ b/e2e-tests/pycardano/plutus_v3.py @@ -0,0 +1,56 @@ +# Lock ADA at an always-succeeds PlutusV3 script and spend it back, using Yaci Store as the +# Blockfrost backend (UTxO queries, script evaluation and submission) +from dataclasses import dataclass + +from pycardano import (Address, PlutusData, PlutusV3Script, Redeemer, TransactionBuilder, TransactionOutput, + plutus_script_hash) + +from devnet import chain_context, wait_for_tx, wallet + +# Same always-succeeds validator as lucid-evo/plutus_v3.ts (CBOR-wrapped compiled code) +COMPILED_CODE = "5857010000323232323225333002323232323253330073370e900118041baa00113232324a26018601a004601600260126ea800458c024c028008c020004c020008c018004c010dd50008a4c26cacae6955ceaab9e5742ae89" + +@dataclass +class OwnerDatum(PlutusData): + CONSTR_ID = 0 + owner: bytes + + +@dataclass +class MessageRedeemer(PlutusData): + CONSTR_ID = 0 + message: bytes + + +context = chain_context() +payment_skey, address = wallet() +owner = address.payment_part.payload + +script = PlutusV3Script(bytes.fromhex(COMPILED_CODE)) +script_address = Address(plutus_script_hash(script), network=address.network) +print("Script address:", script_address) + +# Lock +builder = TransactionBuilder(context) +builder.add_input_address(address) +builder.add_output(TransactionOutput(script_address, 10_000_000, datum=OwnerDatum(owner))) +lock_tx = builder.build_and_sign([payment_skey], change_address=address) +lock_hash = str(context.submit_tx(lock_tx)) +print("Lock submitted:", lock_hash) +wait_for_tx(context, lock_hash) + +# Spend the UTxO created by the lock tx +script_utxo = next(u for u in context.utxos(script_address) if str(u.input.transaction_id) == lock_hash) + +builder = TransactionBuilder(context) +builder.add_input_address(address) +builder.add_script_input(script_utxo, script=script, redeemer=Redeemer(MessageRedeemer(b"Hello, World!"))) +# PyCardano's default ttl (current slot + 10000) is beyond a young devnet's forecast horizon (PastHorizon) +builder.validity_start = context.last_block_slot +builder.ttl = context.last_block_slot + 50 +builder.add_output(TransactionOutput(address, 5_000_000)) +spend_tx = builder.build_and_sign([payment_skey], change_address=address) +spend_hash = str(context.submit_tx(spend_tx)) +print("Spend submitted:", spend_hash) +wait_for_tx(context, spend_hash) +print("Confirmed:", spend_hash) diff --git a/e2e-tests/pycardano/requirements.txt b/e2e-tests/pycardano/requirements.txt new file mode 100644 index 00000000..0d312d98 --- /dev/null +++ b/e2e-tests/pycardano/requirements.txt @@ -0,0 +1,3 @@ +pycardano==0.19.2 +# cbor2 6.x removed names that cbor2pure 5.8 (a pycardano dependency) imports +cbor2<6 diff --git a/e2e-tests/run-sdk-tests.sh b/e2e-tests/run-sdk-tests.sh new file mode 100755 index 00000000..6b25b2e3 --- /dev/null +++ b/e2e-tests/run-sdk-tests.sh @@ -0,0 +1,183 @@ +#!/usr/bin/env bash +# Run the SDK compatibility e2e tests (Evolution SDK, Lucid Evolution, MeshJS, PyCardano, +# cardano-client-lib) against a Yaci DevKit devnet using Yaci Store as the Blockfrost-compatible backend. +# +# Usage: e2e-tests/run-sdk-tests.sh [options] +# --update Update every SDK to its latest published version before running +# --store-jar Restart DevKit (Yaci Store in java mode) with this yaci-store jar +# --store-native Restart DevKit (Yaci Store in native mode) with this native binary. It is installed as +# yaci-store-all for --node-mode yano-only and as yaci-store-n2c otherwise; the existing +# binary is backed up once to .orig +# --node-mode DevKit node mode for --restart: haskell-only (default), companion, yano-only, yano-primary +# --restart Restart DevKit with the currently installed Yaci Store (fresh devnet) +# --ccl-version cardano-client-lib version (default: the version in the JBang scripts) +# --only Comma-separated subset: evolution-sdk,lucid-evo,meshjs,pycardano,cardano-client-lib +# +# Environment: YACI_STORE_URL (default http://localhost:8080/api/v1), +# YACI_ADMIN_URL (default http://localhost:10000/local-cluster/api) +set -uo pipefail + +E2E_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CLI_DIR="$E2E_DIR/../applications/cli" +LOG_DIR="${LOG_DIR:-$E2E_DIR/.logs}" +STORE_URL="${YACI_STORE_URL:-http://localhost:8080/api/v1}" +ADMIN_URL="${YACI_ADMIN_URL:-http://localhost:10000/local-cluster/api}" +TEST_TIMEOUT="${TEST_TIMEOUT:-300}" +ALL_SUITES="evolution-sdk,lucid-evo,meshjs,pycardano,cardano-client-lib" + +UPDATE=false; RESTART=false; STORE_JAR=""; STORE_NATIVE=""; NODE_MODE=""; CCL_VERSION=""; ONLY="$ALL_SUITES" +while [ $# -gt 0 ]; do + case "$1" in + --update) UPDATE=true ;; + --restart) RESTART=true ;; + --store-jar) STORE_JAR="$2"; RESTART=true; shift ;; + --store-native) STORE_NATIVE="$2"; RESTART=true; shift ;; + --node-mode) NODE_MODE="$2"; shift ;; + --ccl-version) CCL_VERSION="$2"; shift ;; + --only) ONLY="$2"; shift ;; + -h|--help) sed -n '2,19p' "$0"; exit 0 ;; + *) echo "Unknown option: $1"; exit 2 ;; + esac + shift +done + +mkdir -p "$LOG_DIR" +RESULTS=() +FAILED=0 + +log() { printf '\n==> %s\n' "$*"; } +selected() { [[ ",$ONLY," == *",$1,"* ]]; } + +latest_npm() { npm view "$1" dist-tags.latest 2>/dev/null; } +latest_pypi() { curl -sf "https://pypi.org/pypi/$1/json" | python3 -c 'import json,sys; print(json.load(sys.stdin)["info"]["version"])'; } +latest_maven() { + curl -sf "https://repo1.maven.org/maven2/com/bloxbean/cardano/$1/maven-metadata.xml" | sed -n 's:.*\(.*\).*:\1:p' +} +set_npm_version() { # + (cd "$E2E_DIR/$1" && python3 - "$2" "$3" <<'EOF' +import json, sys +pkg, ver = sys.argv[1], sys.argv[2] +d = json.load(open("package.json")) +d.setdefault("dependencies", {})[pkg] = ver +open("package.json", "w").write(json.dumps(d, indent=2) + "\n") +EOF + ) +} + +update_versions() { + log "Updating SDKs to latest versions" + local v + v=$(latest_npm @evolution-sdk/evolution) && set_npm_version evolution-sdk @evolution-sdk/evolution "$v" && echo "evolution-sdk @evolution-sdk/evolution $v" + v=$(latest_npm @lucid-evolution/lucid) && set_npm_version lucid-evo @lucid-evolution/lucid "$v" && echo "lucid-evo @lucid-evolution/lucid $v" + for p in @meshsdk/core @meshsdk/core-cst @meshsdk/common; do + v=$(latest_npm "$p") && set_npm_version meshjs "$p" "$v" && echo "meshjs $p $v" + done + v=$(latest_pypi pycardano) && sed -i.bak -E "s/^pycardano==.*/pycardano==$v/" "$E2E_DIR/pycardano/requirements.txt" \ + && rm -f "$E2E_DIR/pycardano/requirements.txt.bak" && echo "pycardano pycardano $v" + v=$(latest_maven cardano-client-lib) && [ -n "$v" ] && { + for f in "$E2E_DIR"/cardano-client-lib/*.java; do + sed -i.bak -E "s/(\\\$\{ccl\.version:)[^}]+\}/\1$v}/g" "$f" && rm -f "$f.bak" + done + echo "cardano-client-lib cardano-client-lib $v" + } +} + +devkit_ready() { curl -sf "$STORE_URL/epochs/latest/parameters" 2>/dev/null | grep -q min_fee; } + +restart_devkit() { + log "Restarting DevKit (fresh devnet)" + local pattern="yaci-cli.jar|components/store/yaci-store|store/yaci-store-(n2c|all)|components/yano/|cardano-node run|cardano-submit-api" + local pids + pids=$(ps -eo pid,command | grep -E "$pattern" | grep -v grep | awk '{print $1}') + [ -n "$pids" ] && kill -TERM $pids 2>/dev/null + for _ in $(seq 1 30); do + ps -eo command | grep -E "$pattern" | grep -vq grep || break + sleep 1 + done + local store_dir="$HOME/.yaci-cli/components/store" store_mode=java + if [ -n "$STORE_JAR" ]; then + cp "$STORE_JAR" "$store_dir/yaci-store.jar" || { echo "Cannot copy $STORE_JAR"; exit 1; } + echo "Installed Yaci Store jar: $STORE_JAR" + fi + if [ -n "$STORE_NATIVE" ]; then + local bin=yaci-store-n2c + [ "$NODE_MODE" = "yano-only" ] && bin=yaci-store-all + [ -f "$store_dir/$bin" ] && [ ! -f "$store_dir/$bin.orig" ] && cp -p "$store_dir/$bin" "$store_dir/$bin.orig" + cp "$STORE_NATIVE" "$store_dir/$bin" && chmod +x "$store_dir/$bin" || { echo "Cannot copy $STORE_NATIVE"; exit 1; } + store_mode=native + echo "Installed Yaci Store native binary as $bin: $STORE_NATIVE (original kept as $bin.orig)" + fi + [ -f "$CLI_DIR/build/libs/yaci-cli.jar" ] || { echo "Build the CLI first: cd applications/cli && ./gradlew clean build -x test"; exit 1; } + (cd "$CLI_DIR" && nohup java -Dyaci.store.enabled=true -Dyaci.store.mode=$store_mode ${NODE_MODE:+-DnodeMode=$NODE_MODE} -jar build/libs/yaci-cli.jar \ + create-node -o --start > "$LOG_DIR/devkit.log" 2>&1 &) + for _ in $(seq 1 150); do devkit_ready && { echo "DevKit ready"; sleep 5; return 0; }; sleep 2; done + echo "DevKit did not become ready; see $LOG_DIR/devkit.log"; exit 1 +} + +run_test() { # + local suite="$1" name="$2"; shift 2 + local logf="$LOG_DIR/$suite-$name.log" status + (cd "$E2E_DIR/$suite" && timeout "$TEST_TIMEOUT" "$@") > "$logf" 2>&1 + status=$? + if [ $status -eq 0 ]; then + RESULTS+=("PASS|$suite|$name|") + else + FAILED=$((FAILED + 1)) + local reason + reason=$(grep -vE '^\s+at |^\s*$|^\s*[0-9]+ \|' "$logf" | grep -iE 'error|fail|exception' | tail -1 | cut -c1-110) + RESULTS+=("FAIL|$suite|$name|${reason:-exit $status}") + fi + printf '%-4s %-20s %s\n' "$([ $status -eq 0 ] && echo PASS || echo FAIL)" "$suite" "$name" + sleep 3 # let the next block include the tx so the following test sees fresh UTxOs +} + +$UPDATE && update_versions +$RESTART && restart_devkit +devkit_ready || { echo "Yaci Store is not reachable at $STORE_URL. Start DevKit or pass --restart."; exit 1; } +curl -sf "$ADMIN_URL/admin/devnet" > /dev/null || { echo "DevKit admin API is not reachable at $ADMIN_URL"; exit 1; } + +export YACI_STORE_URL="$STORE_URL" YACI_ADMIN_URL="$ADMIN_URL" + +if selected evolution-sdk; then + log "Evolution SDK"; (cd "$E2E_DIR/evolution-sdk" && bun install --silent) + run_test evolution-sdk protocol_params bun protocol_params.ts + run_test evolution-sdk payment bun payment.ts + run_test evolution-sdk plutus_v3 bun plutus_v3.ts +fi + +if selected lucid-evo; then + log "Lucid Evolution"; (cd "$E2E_DIR/lucid-evo" && bun install --silent) + run_test lucid-evo payment bun payment.ts + run_test lucid-evo plutus_v2 bun plutus_v2.ts + run_test lucid-evo plutus_v3 bun plutus_v3.ts +fi + +if selected meshjs; then + log "MeshJS"; (cd "$E2E_DIR/meshjs" && bun install --silent) + run_test meshjs payment bun payment.ts + run_test meshjs payment_splitter_plutusV3 bun payment_splitter_plutusV3.ts +fi + +if selected pycardano; then + log "PyCardano" + (cd "$E2E_DIR/pycardano" && { [ -d .venv ] || python3 -m venv .venv; } && .venv/bin/pip install -q -r requirements.txt) + run_test pycardano payment .venv/bin/python payment.py + run_test pycardano plutus_v3 .venv/bin/python plutus_v3.py +fi + +if selected cardano-client-lib; then + log "cardano-client-lib${CCL_VERSION:+ $CCL_VERSION}" + JBANG_ARGS=(--quiet); [ -n "$CCL_VERSION" ] && JBANG_ARGS+=(-Dccl.version="$CCL_VERSION") + run_test cardano-client-lib Payment jbang "${JBANG_ARGS[@]}" Payment.java + run_test cardano-client-lib MintToken jbang "${JBANG_ARGS[@]}" MintToken.java + run_test cardano-client-lib PlutusV3 jbang "${JBANG_ARGS[@]}" PlutusV3.java +fi + +log "Summary (logs in $LOG_DIR)" +printf '%-6s %-20s %-28s %s\n' RESULT SUITE TEST DETAIL +for r in "${RESULTS[@]}"; do + IFS='|' read -r res suite name reason <<< "$r" + printf '%-6s %-20s %-28s %s\n' "$res" "$suite" "$name" "$reason" +done +[ $FAILED -eq 0 ] && echo "All tests passed." || echo "$FAILED test(s) failed." +exit $FAILED