diff --git a/multichain-testing/README.md b/multichain-testing/README.md index 5a43a2aff24..949b1aeab8d 100644 --- a/multichain-testing/README.md +++ b/multichain-testing/README.md @@ -21,6 +21,8 @@ Install the relevant dependencies: yarn install ``` +(Note that the '@agoric/*' deps will come from the parent directory due to `yarn link --relative .. --all`) + Ensure you have Kubernetes available. See https://docs.cosmology.zone/starship/get-started/step-2. The following will install `kubectl`, `kind`, `helm`, and `yq` as needed: diff --git a/multichain-testing/package.json b/multichain-testing/package.json index 78949330c11..f73af9bbeb5 100644 --- a/multichain-testing/package.json +++ b/multichain-testing/package.json @@ -18,6 +18,7 @@ "packageManager": "yarn@4.5.3", "devDependencies": { "@agoric/cosmic-proto": "dev", + "@agoric/fast-usdc": "dev", "@cosmjs/crypto": "^0.32.4", "@cosmjs/proto-signing": "^0.32.4", "@cosmjs/stargate": "^0.32.4", @@ -41,7 +42,54 @@ "typescript": "~5.7.2" }, "resolutions": { - "axios": "1.6.7" + "axios": "1.6.7", + "@agoric/cosmos": "portal:../golang/cosmos", + "@agoric/ertp": "portal:../packages/ERTP", + "@agoric/swingset-vat": "portal:../packages/SwingSet", + "@agoric/access-token": "portal:../packages/access-token", + "agoric": "portal:../packages/agoric-cli", + "@agoric/async-flow": "portal:../packages/async-flow", + "@agoric/base-zone": "portal:../packages/base-zone", + "@agoric/builders": "portal:../packages/builders", + "@agoric/cache": "portal:../packages/cache", + "@agoric/casting": "portal:../packages/casting", + "@agoric/client-utils": "portal:../packages/client-utils", + "@agoric/cosmic-proto": "portal:../packages/cosmic-proto", + "@agoric/cosmic-swingset": "portal:../packages/cosmic-swingset", + "@agoric/create-dapp": "portal:../packages/create-dapp", + "@agoric/deploy-script-support": "portal:../packages/deploy-script-support", + "@agoric/eslint-config": "portal:../packages/eslint-config", + "@agoric/fast-usdc": "portal:../packages/fast-usdc", + "@agoric/governance": "portal:../packages/governance", + "@agoric/import-manager": "portal:../packages/import-manager", + "@agoric/inter-protocol": "portal:../packages/inter-protocol", + "@agoric/internal": "portal:../packages/internal", + "@agoric/kmarshal": "portal:../packages/kmarshal", + "@agoric/network": "portal:../packages/network", + "@agoric/notifier": "portal:../packages/notifier", + "@agoric/orchestration": "portal:../packages/orchestration", + "@agoric/pegasus": "portal:../packages/pegasus", + "@agoric/smart-wallet": "portal:../packages/smart-wallet", + "@agoric/solo": "portal:../packages/solo", + "@agoric/sparse-ints": "portal:../packages/sparse-ints", + "@agoric/spawner": "portal:../packages/spawner", + "@agoric/stat-logger": "portal:../packages/stat-logger", + "@agoric/store": "portal:../packages/store", + "@agoric/swing-store": "portal:../packages/swing-store", + "@agoric/swingset-liveslots": "portal:../packages/swingset-liveslots", + "@agoric/swingset-xsnap-supervisor": "portal:../packages/swingset-xsnap-supervisor", + "@agoric/telemetry": "portal:../packages/telemetry", + "@agoric/time": "portal:../packages/time", + "@agoric/vat-data": "portal:../packages/vat-data", + "@agoric/vats": "portal:../packages/vats", + "@agoric/vm-config": "portal:../packages/vm-config", + "@agoric/vow": "portal:../packages/vow", + "@agoric/wallet": "portal:../packages/wallet", + "@agoric/wallet-backend": "portal:../packages/wallet/api", + "@agoric/xsnap": "portal:../packages/xsnap", + "@agoric/xsnap-lockdown": "portal:../packages/xsnap-lockdown", + "@agoric/zoe": "portal:../packages/zoe", + "@agoric/zone": "portal:../packages/zone" }, "eslintConfig": { "root": true, diff --git a/multichain-testing/test/fast-usdc/fast-usdc.test.ts b/multichain-testing/test/fast-usdc/fast-usdc.test.ts index 92b493fdccd..a7fbf413e32 100644 --- a/multichain-testing/test/fast-usdc/fast-usdc.test.ts +++ b/multichain-testing/test/fast-usdc/fast-usdc.test.ts @@ -1,4 +1,5 @@ import anyTest from '@endo/ses-ava/prepare-endo.js'; + import type { TestFn } from 'ava'; import { encodeAddressHook } from '@agoric/cosmic-proto/address-hooks.js'; import { AmountMath } from '@agoric/ertp'; @@ -13,6 +14,13 @@ import { commonSetup, type SetupContextWithWallets } from '../support.js'; import { makeFeedPolicy, oracleMnemonics } from './config.js'; import { makeRandomDigits } from '../../tools/random.js'; import { balancesFromPurses } from '../../tools/purse.js'; +import { makeTracer } from '@agoric/internal'; +import type { + CctpTxEvidence, + EvmAddress, +} from '@agoric/fast-usdc/src/types.js'; + +const log = makeTracer('MCFU'); const { keys, values, fromEntries } = Object; const { isGTE, isEmpty, make } = AmountMath; @@ -153,6 +161,7 @@ test.serial('oracles accept', async t => { return offerToUsedInvitation[0][0] === `${name}-accept`; }, `${name} invitation used`, + { log }, ), ); } @@ -191,6 +200,7 @@ test.serial('lp deposits', async t => { ({ shareWorth }) => !isGTE(currShareWorth.numerator, shareWorth.numerator), 'share worth numerator increases from deposit', + { log }, ), ); @@ -203,6 +213,7 @@ test.serial('lp deposits', async t => { return currentPoolShares && isGTE(currentPoolShares, poolSharesWanted); }, 'lp has pool shares', + { log }, ), ); }); @@ -216,6 +227,7 @@ const advanceAndSettleScenario = test.macro({ nobleAgoricChannelId, oracleWds, retryUntilCondition, + smartWalletKit, useChain, usdcOnOsmosis, vstorageClient, @@ -250,8 +262,7 @@ const advanceAndSettleScenario = test.macro({ ); t.log('got forwardingAddress', userForwardingAddr); - // TODO export CctpTxEvidence type - const evidence = harden({ + const evidence: CctpTxEvidence = harden({ blockHash: '0x90d7343e04f8160892e94f02d6a9b9f255663ed0ac34caca98544c8143fee665', blockNumber: 21037663n, @@ -259,6 +270,7 @@ const advanceAndSettleScenario = test.macro({ tx: { amount: mintAmt, forwardingAddress: userForwardingAddr, + sender: '0x9a9eE9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9' as EvmAddress, }, aux: { forwardingChannel: nobleAgoricChannelId, @@ -267,7 +279,7 @@ const advanceAndSettleScenario = test.macro({ chainId: 42161, }); - console.log('User initiates evm mint:', evidence.txHash); + log('User initiates evm mint:', evidence.txHash); // submit evidences await Promise.all( @@ -299,17 +311,27 @@ const advanceAndSettleScenario = test.macro({ ), ); - const queryTxStatus = async () => - vstorageClient.queryData( - `published.${contractName}.status.${evidence.txHash}`, + const queryTxStatus = async () => { + const record = await smartWalletKit.readPublished( + `fastUsdc.txns.${evidence.txHash}`, ); + if (!record) { + throw new Error(`no record for ${evidence.txHash}`); + } + // @ts-expect-error unknown may not have 'status' + if (!record.status) { + throw new Error(`no status for ${evidence.txHash}`); + } + // @ts-expect-error still unknown? + return record.status; + }; const assertTxStatus = async (status: string) => t.notThrowsAsync(() => retryUntilCondition( () => queryTxStatus(), txStatus => { - console.log('tx status', txStatus); + log('tx status', txStatus); return txStatus === status; }, `${evidence.txHash} is ${status}`, @@ -317,7 +339,7 @@ const advanceAndSettleScenario = test.macro({ ); await assertTxStatus('ADVANCED'); - console.log('Advance completed, waiting for mint...'); + log('Advance completed, waiting for mint...'); nobleTools.mockCctpMint(mintAmt, userForwardingAddr); await t.notThrowsAsync(() => @@ -393,6 +415,7 @@ test.serial('lp withdraws', async t => { return !currentPoolShares || isEmpty(currentPoolShares); }, 'lp no longer has pool shares', + { log }, ), ); @@ -404,6 +427,7 @@ test.serial('lp withdraws', async t => { BigInt(balance.amount) - BigInt(currentUSDCBalance!.amount!) > LP_DEPOSIT_AMOUNT, "lp's USDC balance increases", + { log }, ), ); }); diff --git a/multichain-testing/tools/e2e-tools.js b/multichain-testing/tools/e2e-tools.js index 4710761e014..448f8b81895 100644 --- a/multichain-testing/tools/e2e-tools.js +++ b/multichain-testing/tools/e2e-tools.js @@ -1,5 +1,6 @@ // @ts-check /** global harden */ +import { makeSmartWalletKit, LOCAL_CONFIG } from '@agoric/client-utils'; import { assert } from '@endo/errors'; import { E, Far } from '@endo/far'; import { Nat } from '@endo/nat'; @@ -9,12 +10,16 @@ import { makeHttpClient, makeAPI } from './makeHttpClient.js'; import { dedup, makeQueryKit, poll } from './queryKit.js'; import { makeVStorage } from './batchQuery.js'; import { makeRetryUntilCondition } from './sleep.js'; +import { makeTracer } from '@agoric/internal'; /** + * @import {OfferSpec} from '@agoric/smart-wallet/src/offers.js'; * @import { EnglishMnemonic } from '@cosmjs/crypto'; * @import { RetryUntilCondition } from './sleep.js'; */ +const trace = makeTracer('E2ET'); + const BLD = '000000ubld'; export const txAbbr = tx => { @@ -223,7 +228,7 @@ export const provisionSmartWallet = async ( const txInfo = await sendAction({ method: 'executeOffer', offer }); console.debug('spendAction', txInfo); for await (const update of updates) { - // console.log('update', address, update); + trace('update', address, update); if (update.updated !== 'offerStatus' || update.status.id !== offer.id) { continue; } @@ -355,7 +360,7 @@ const voteLatestProposalAndWait = async ({ await blockTool.waitForBlock(1, { step: `voting`, on: lastProposalId }) ) { info = await agd.query(['gov', 'proposal', lastProposalId]); - console.log( + trace( `Waiting for proposal ${lastProposalId} to pass (status=${info.status})`, ); } @@ -398,7 +403,7 @@ const runCoreEval = async ( const evalPaths = evals.map(e => [e.permit, e.code]).flat(); log(evalPaths); - console.log('await tx', evalPaths); + trace('await tx', evalPaths); const result = await agd.tx( [ 'gov', @@ -413,7 +418,7 @@ const runCoreEval = async ( // FIXME TypeError#1: unrecognized details 0 // assert(result.code, 0); - console.log('await voteLatestProposalAndWait', evalPaths); + trace('await voteLatestProposalAndWait', evalPaths); const detail = await voteLatestProposalAndWait({ agd, blockTool }); log(detail.proposal_id, detail.voting_end_time, detail.status); @@ -428,6 +433,8 @@ const runCoreEval = async ( }; /** + * @deprecated use `@agoric/client-utils` instead + * * @param {typeof console.log} log * @param {import('@agoric/swingset-vat/tools/bundleTool.js').BundleCache} bundleCache * @param {object} io @@ -462,7 +469,7 @@ export const makeE2ETools = async ( if (typeof info === 'object' && Object.keys(info).length > 0) { // XXX normally we have the caller pass in the log function // later, but the way blockTool is factored, we have to supply it early. - console.log({ ...info, delay: ms / 1000 }, '...'); + trace({ ...info, delay: ms / 1000 }, '...'); } return delay(ms); }; @@ -531,10 +538,23 @@ export const makeE2ETools = async ( const copyFiles = makeCopyFiles({ execFileSync, log }); + /** + * @deprecated use `@agoric/client-utils` instead + */ const vstorageClient = makeQueryKit(vstorage).query; + /** @type {import('@agoric/client-utils').SmartWalletKit} */ + const smartWalletKit = await makeSmartWalletKit( + { + fetch, + delay, + }, + LOCAL_CONFIG, + ); + return { vstorageClient, + smartWalletKit, installBundles, runCoreEval: buildAndRunCoreEval, /** @@ -605,8 +625,9 @@ export const seatLike = updates => { }); }; -/** @param {Awaited>} wallet */ +/** @param {Awaited>} wallet */ export const makeDoOffer = wallet => { + /** @type {(offer: OfferSpec) => Promise} */ const doOffer = async offer => { const updates = wallet.offers.executeOffer(offer); // const seat = seatLike(updates); diff --git a/multichain-testing/tools/noble-tools.ts b/multichain-testing/tools/noble-tools.ts index 8a08e6a85bb..cd72a332857 100644 --- a/multichain-testing/tools/noble-tools.ts +++ b/multichain-testing/tools/noble-tools.ts @@ -1,6 +1,7 @@ import type { IBCChannelID } from '@agoric/vats'; import type { ExecSync } from './agd-lib.js'; import type { ChainAddress } from '@agoric/orchestration'; +import type { NobleAddress } from '@agoric/fast-usdc/src/types.js'; const kubectlBinary = 'kubectl'; const noblePod = 'noblelocal-genesis-0'; @@ -82,7 +83,7 @@ export const makeNobleTools = ( const queryForwardingAddress = ( channelId: IBCChannelID, address: ChainAddress['value'], - ): { address: string; exists: boolean } => { + ): { address: NobleAddress; exists: boolean } => { checkEnv(); log('querying forwarding address', address, channelId); return JSON.parse( diff --git a/multichain-testing/tsconfig.json b/multichain-testing/tsconfig.json index 8915139d881..c0b1b588fec 100644 --- a/multichain-testing/tsconfig.json +++ b/multichain-testing/tsconfig.json @@ -1,11 +1,8 @@ { "extends": "../tsconfig.json", "include": [ - "src", - "tools", - "test" - ], - "compilerOptions": { - "checkJs": false - } + "src", + "tools", + "test" + ] } diff --git a/multichain-testing/yarn.lock b/multichain-testing/yarn.lock index fd3e9510370..8f909306465 100644 --- a/multichain-testing/yarn.lock +++ b/multichain-testing/yarn.lock @@ -5,15 +5,555 @@ __metadata: version: 8 cacheKey: 10c0 -"@agoric/cosmic-proto@npm:dev": - version: 0.4.1-dev-bdf5c17.0 - resolution: "@agoric/cosmic-proto@npm:0.4.1-dev-bdf5c17.0" +"@adraffy/ens-normalize@npm:1.10.1": + version: 1.10.1 + resolution: "@adraffy/ens-normalize@npm:1.10.1" + checksum: 10c0/fdd647604e8fac6204921888aaf5a6bc65eabf0d2921bc5f93b64d01f4bc33ead167c1445f7de05468d05cd92ac31b74c68d2be840c62b79d73693308f885c06 + languageName: node + linkType: hard + +"@agoric/async-flow@portal:../packages/async-flow::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/async-flow@portal:../packages/async-flow::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/base-zone": "npm:^0.1.0" + "@agoric/internal": "npm:^0.3.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/vow": "npm:^0.1.0" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + languageName: node + linkType: soft + +"@agoric/babel-generator@npm:^7.17.6": + version: 7.17.6 + resolution: "@agoric/babel-generator@npm:7.17.6" + dependencies: + "@babel/types": "npm:^7.17.0" + jsesc: "npm:^2.5.1" + source-map: "npm:^0.5.0" + checksum: 10c0/59db151ae737bd9b1f21c1589df4c7da9cbf484de5b5cc8352052825c2d977283d975303f55acb54d0210c176cb405da263073ceba1d3a6db65c6e21cc6e663f + languageName: node + linkType: hard + +"@agoric/base-zone@portal:../packages/base-zone::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/base-zone@portal:../packages/base-zone::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/store": "npm:^0.9.2" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + languageName: node + linkType: soft + +"@agoric/casting@portal:../packages/casting::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/casting@portal:../packages/casting::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/internal": "npm:^0.3.2" + "@agoric/notifier": "npm:^0.6.2" + "@agoric/store": "npm:^0.9.2" + "@cosmjs/encoding": "npm:^0.32.3" + "@cosmjs/proto-signing": "npm:^0.32.3" + "@cosmjs/stargate": "npm:^0.32.3" + "@cosmjs/tendermint-rpc": "npm:^0.32.3" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/lockdown": "npm:^1.0.13" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + languageName: node + linkType: soft + +"@agoric/client-utils@portal:../packages/client-utils::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/client-utils@portal:../packages/client-utils::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/casting": "npm:^0.4.2" + "@agoric/ertp": "npm:^0.16.2" + "@agoric/internal": "npm:^0.3.2" + "@agoric/smart-wallet": "npm:^0.5.3" + "@agoric/vats": "npm:^0.15.1" + "@cosmjs/stargate": "npm:^0.32.3" + "@cosmjs/tendermint-rpc": "npm:^0.32.3" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + languageName: node + linkType: soft + +"@agoric/cosmic-proto@portal:../packages/cosmic-proto::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/cosmic-proto@portal:../packages/cosmic-proto::locator=root-workspace-0b6124%40workspace%3A." dependencies: "@endo/base64": "npm:^1.0.9" "@endo/init": "npm:^1.1.7" bech32: "npm:^2.0.0" query-string: "npm:^9.1.1" - checksum: 10c0/20d4f8763a091b0b741c754fcceb82d666c4eb55bab2eaaef8821f8f7da644e2ee70c1134ef0e1cf90cc940150d61437d935913549d0da8ea17a8f0c80f2d36c + languageName: node + linkType: soft + +"@agoric/ertp@portal:../packages/ERTP::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/ertp@portal:../packages/ERTP::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/notifier": "npm:^0.6.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/vat-data": "npm:^0.5.2" + "@agoric/zone": "npm:^0.2.2" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + languageName: node + linkType: soft + +"@agoric/fast-usdc@portal:../packages/fast-usdc::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/fast-usdc@portal:../packages/fast-usdc::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/client-utils": "npm:^0.1.0" + "@agoric/cosmic-proto": "npm:^0.4.0" + "@agoric/ertp": "npm:^0.16.2" + "@agoric/internal": "npm:^0.3.2" + "@agoric/notifier": "npm:^0.6.2" + "@agoric/orchestration": "npm:^0.1.0" + "@agoric/store": "npm:^0.9.2" + "@agoric/vat-data": "npm:^0.5.2" + "@agoric/vow": "npm:^0.1.0" + "@agoric/zoe": "npm:^0.26.2" + "@cosmjs/proto-signing": "npm:^0.32.4" + "@cosmjs/stargate": "npm:^0.32.4" + "@endo/base64": "npm:^1.0.9" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + "@nick134-bit/noblejs": "npm:0.0.2" + bech32: "npm:^2.0.0" + commander: "npm:^12.1.0" + ethers: "npm:^6.13.4" + bin: + fast-usdc: ./src/cli/bin.js + languageName: node + linkType: soft + +"@agoric/governance@portal:../packages/governance::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/governance@portal:../packages/governance::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/ertp": "npm:^0.16.2" + "@agoric/internal": "npm:^0.3.2" + "@agoric/notifier": "npm:^0.6.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/time": "npm:^0.3.2" + "@agoric/vat-data": "npm:^0.5.2" + "@agoric/zoe": "npm:^0.26.2" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + import-meta-resolve: "npm:^2.2.1" + languageName: node + linkType: soft + +"@agoric/internal@portal:../packages/internal::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/internal@portal:../packages/internal::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/base-zone": "npm:^0.1.0" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/stream": "npm:^1.2.8" + anylogger: "npm:^0.21.0" + jessie.js: "npm:^0.3.4" + languageName: node + linkType: soft + +"@agoric/kmarshal@portal:../packages/kmarshal::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/kmarshal@portal:../packages/kmarshal::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + languageName: node + linkType: soft + +"@agoric/network@portal:../packages/network::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/network@portal:../packages/network::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/internal": "npm:^0.3.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/vat-data": "npm:^0.5.2" + "@endo/base64": "npm:^1.0.9" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + languageName: node + linkType: soft + +"@agoric/notifier@portal:../packages/notifier::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/notifier@portal:../packages/notifier::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/internal": "npm:^0.3.2" + "@agoric/vat-data": "npm:^0.5.2" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + languageName: node + linkType: soft + +"@agoric/orchestration@portal:../packages/orchestration::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/orchestration@portal:../packages/orchestration::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/async-flow": "npm:^0.1.0" + "@agoric/cosmic-proto": "npm:^0.4.0" + "@agoric/ertp": "npm:^0.16.2" + "@agoric/internal": "npm:^0.3.2" + "@agoric/network": "npm:^0.1.0" + "@agoric/notifier": "npm:^0.6.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/time": "npm:^0.3.2" + "@agoric/vat-data": "npm:^0.5.2" + "@agoric/vats": "npm:^0.15.1" + "@agoric/vow": "npm:^0.1.0" + "@agoric/zoe": "npm:^0.26.2" + "@agoric/zone": "npm:^0.2.2" + "@endo/base64": "npm:^1.0.9" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/patterns": "npm:^1.4.7" + "@noble/hashes": "npm:^1.5.0" + languageName: node + linkType: soft + +"@agoric/smart-wallet@portal:../packages/smart-wallet::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/smart-wallet@portal:../packages/smart-wallet::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/ertp": "npm:^0.16.2" + "@agoric/internal": "npm:^0.3.2" + "@agoric/notifier": "npm:^0.6.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/vat-data": "npm:^0.5.2" + "@agoric/vats": "npm:^0.15.1" + "@agoric/vow": "npm:^0.1.0" + "@agoric/zoe": "npm:^0.26.2" + "@agoric/zone": "npm:^0.2.2" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + languageName: node + linkType: soft + +"@agoric/store@portal:../packages/store::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/store@portal:../packages/store::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + languageName: node + linkType: soft + +"@agoric/swing-store@portal:../packages/swing-store::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/swing-store@portal:../packages/swing-store::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/internal": "npm:^0.3.2" + "@endo/base64": "npm:^1.0.9" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/check-bundle": "npm:^1.0.12" + "@endo/errors": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + better-sqlite3: "npm:^9.1.1" + languageName: node + linkType: soft + +"@agoric/swingset-liveslots@portal:../packages/swingset-liveslots::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/swingset-liveslots@portal:../packages/swingset-liveslots::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/internal": "npm:^0.3.2" + "@agoric/store": "npm:^0.9.2" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + languageName: node + linkType: soft + +"@agoric/swingset-vat@portal:../packages/SwingSet::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/swingset-vat@portal:../packages/SwingSet::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/internal": "npm:^0.3.2" + "@agoric/kmarshal": "npm:^0.1.0" + "@agoric/store": "npm:^0.9.2" + "@agoric/swing-store": "npm:^0.9.1" + "@agoric/swingset-liveslots": "npm:^0.10.2" + "@agoric/swingset-xsnap-supervisor": "npm:^0.10.2" + "@agoric/time": "npm:^0.3.2" + "@agoric/vat-data": "npm:^0.5.2" + "@agoric/xsnap-lockdown": "npm:^0.14.0" + "@endo/base64": "npm:^1.0.9" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/check-bundle": "npm:^1.0.12" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/import-bundle": "npm:^1.3.2" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/ses-ava": "npm:^1.2.8" + "@endo/stream": "npm:^1.2.8" + "@endo/zip": "npm:^1.0.9" + ansi-styles: "npm:^6.2.1" + anylogger: "npm:^0.21.0" + better-sqlite3: "npm:^9.1.1" + import-meta-resolve: "npm:^2.2.1" + microtime: "npm:^3.1.0" + semver: "npm:^6.3.0" + tmp: "npm:^0.2.1" + yargs-parser: "npm:^21.1.1" + peerDependencies: + "@agoric/xsnap": ^0.14.2 + ava: ^5.3.0 + bin: + vat: bin/vat + languageName: node + linkType: soft + +"@agoric/swingset-xsnap-supervisor@portal:../packages/swingset-xsnap-supervisor::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/swingset-xsnap-supervisor@portal:../packages/swingset-xsnap-supervisor::locator=root-workspace-0b6124%40workspace%3A." + languageName: node + linkType: soft + +"@agoric/time@portal:../packages/time::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/time@portal:../packages/time::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/store": "npm:^0.9.2" + "@endo/errors": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/patterns": "npm:^1.4.7" + languageName: node + linkType: soft + +"@agoric/vat-data@portal:../packages/vat-data::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/vat-data@portal:../packages/vat-data::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/base-zone": "npm:^0.1.0" + "@agoric/store": "npm:^0.9.2" + "@agoric/swingset-liveslots": "npm:^0.10.2" + "@endo/errors": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/patterns": "npm:^1.4.7" + languageName: node + linkType: soft + +"@agoric/vats@portal:../packages/vats::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/vats@portal:../packages/vats::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/cosmic-proto": "npm:^0.4.0" + "@agoric/ertp": "npm:^0.16.2" + "@agoric/governance": "npm:^0.10.3" + "@agoric/internal": "npm:^0.3.2" + "@agoric/network": "npm:^0.1.0" + "@agoric/notifier": "npm:^0.6.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/swingset-vat": "npm:^0.32.2" + "@agoric/time": "npm:^0.3.2" + "@agoric/vat-data": "npm:^0.5.2" + "@agoric/vow": "npm:^0.1.0" + "@agoric/zoe": "npm:^0.26.2" + "@agoric/zone": "npm:^0.2.2" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/import-bundle": "npm:^1.3.2" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + import-meta-resolve: "npm:^2.2.1" + jessie.js: "npm:^0.3.4" + languageName: node + linkType: soft + +"@agoric/vow@portal:../packages/vow::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/vow@portal:../packages/vow::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/base-zone": "npm:^0.1.0" + "@agoric/internal": "npm:^0.3.2" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + languageName: node + linkType: soft + +"@agoric/xsnap-lockdown@portal:../packages/xsnap-lockdown::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/xsnap-lockdown@portal:../packages/xsnap-lockdown::locator=root-workspace-0b6124%40workspace%3A." + languageName: node + linkType: soft + +"@agoric/zoe@portal:../packages/zoe::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/zoe@portal:../packages/zoe::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/base-zone": "npm:^0.1.0" + "@agoric/ertp": "npm:^0.16.2" + "@agoric/internal": "npm:^0.3.2" + "@agoric/notifier": "npm:^0.6.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/swingset-liveslots": "npm:^0.10.2" + "@agoric/swingset-vat": "npm:^0.32.2" + "@agoric/time": "npm:^0.3.2" + "@agoric/vat-data": "npm:^0.5.2" + "@agoric/vow": "npm:^0.1.0" + "@agoric/zone": "npm:^0.2.2" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/far": "npm:^1.1.9" + "@endo/import-bundle": "npm:^1.3.2" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + yargs-parser: "npm:^21.1.1" + languageName: node + linkType: soft + +"@agoric/zone@portal:../packages/zone::locator=root-workspace-0b6124%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@agoric/zone@portal:../packages/zone::locator=root-workspace-0b6124%40workspace%3A." + dependencies: + "@agoric/base-zone": "npm:^0.1.0" + "@agoric/vat-data": "npm:^0.5.2" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + languageName: node + linkType: soft + +"@babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/generator@npm:7.26.3" + dependencies: + "@babel/parser": "npm:^7.26.3" + "@babel/types": "npm:^7.26.3" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/54f260558e3e4ec8942da3cde607c35349bb983c3a7c5121243f96893fba3e8cd62e1f1773b2051f936f8c8a10987b758d5c7d76dbf2784e95bb63ab4843fa00 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.6, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/parser@npm:7.26.3" + dependencies: + "@babel/types": "npm:^7.26.3" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/48f736374e61cfd10ddbf7b80678514ae1f16d0e88bc793d2b505d73d9b987ea786fc8c2f7ee8f8b8c467df062030eb07fd0eb2168f0f541ca1f542775852cad languageName: node linkType: hard @@ -21,8 +561,44 @@ __metadata: version: 7.24.7 resolution: "@babel/runtime@npm:7.24.7" dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/b6fa3ec61a53402f3c1d75f4d808f48b35e0dfae0ec8e2bb5c6fc79fb95935da75766e0ca534d0f1c84871f6ae0d2ebdd950727cfadb745a2cdbef13faef5513 + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/b6fa3ec61a53402f3c1d75f4d808f48b35e0dfae0ec8e2bb5c6fc79fb95935da75766e0ca534d0f1c84871f6ae0d2ebdd950727cfadb745a2cdbef13faef5513 + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.6": + version: 7.26.4 + resolution: "@babel/traverse@npm:7.26.4" + dependencies: + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.26.3" + "@babel/parser": "npm:^7.26.3" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.3" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/cf25d0eda9505daa0f0832ad786b9e28c9d967e823aaf7fbe425250ab198c656085495aa6bed678b27929e095c84eea9fd778b851a31803da94c9bc4bf4eaef7 + languageName: node + linkType: hard + +"@babel/types@npm:^7.17.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/types@npm:7.26.3" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/966c5242c5e55c8704bf7a7418e7be2703a0afa4d19a8480999d5a4ef13d095dd60686615fe5983cb7593b4b06ba3a7de8d6ca501c1d78bdd233a10d90be787b languageName: node linkType: hard @@ -76,7 +652,19 @@ __metadata: languageName: node linkType: hard -"@cosmjs/amino@npm:^0.32.4": +"@cosmjs/amino@npm:0.32.3": + version: 0.32.3 + resolution: "@cosmjs/amino@npm:0.32.3" + dependencies: + "@cosmjs/crypto": "npm:^0.32.3" + "@cosmjs/encoding": "npm:^0.32.3" + "@cosmjs/math": "npm:^0.32.3" + "@cosmjs/utils": "npm:^0.32.3" + checksum: 10c0/6f3da2ba6d88257d6717898af798aad9f2a51bb2c0d0b61cd40cf103c86a1431f4fa5086df350f81371d3282b8a28bcbc4f97c6d9eb83a9831fad473ae1ab492 + languageName: node + linkType: hard + +"@cosmjs/amino@npm:^0.32.3, @cosmjs/amino@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/amino@npm:0.32.4" dependencies: @@ -88,7 +676,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/crypto@npm:^0.32.4": +"@cosmjs/crypto@npm:^0.32.3, @cosmjs/crypto@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/crypto@npm:0.32.4" dependencies: @@ -103,7 +691,18 @@ __metadata: languageName: node linkType: hard -"@cosmjs/encoding@npm:^0.32.4": +"@cosmjs/encoding@npm:0.32.3": + version: 0.32.3 + resolution: "@cosmjs/encoding@npm:0.32.3" + dependencies: + base64-js: "npm:^1.3.0" + bech32: "npm:^1.1.4" + readonly-date: "npm:^1.0.0" + checksum: 10c0/3c3d4b610093c2c8ca13437664e4736d60cdfb309bf2671f492388c59a9bca20f1a75ab4686a7b73d48aa6208f454bee56c84c0fe780015473ea53353a70266a + languageName: node + linkType: hard + +"@cosmjs/encoding@npm:^0.32.3, @cosmjs/encoding@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/encoding@npm:0.32.4" dependencies: @@ -124,7 +723,16 @@ __metadata: languageName: node linkType: hard -"@cosmjs/math@npm:^0.32.4": +"@cosmjs/math@npm:0.32.3": + version: 0.32.3 + resolution: "@cosmjs/math@npm:0.32.3" + dependencies: + bn.js: "npm:^5.2.0" + checksum: 10c0/cad8b13a0db739ef4a416b334e39ea9f55874315ebdf91dc38772676c2ead6caccaf8a28b9e8803fc48680a72cf5a9fde97564f5efbfbe9a9073c95665f31294 + languageName: node + linkType: hard + +"@cosmjs/math@npm:^0.32.3, @cosmjs/math@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/math@npm:0.32.4" dependencies: @@ -133,7 +741,21 @@ __metadata: languageName: node linkType: hard -"@cosmjs/proto-signing@npm:^0.32.4": +"@cosmjs/proto-signing@npm:0.32.3": + version: 0.32.3 + resolution: "@cosmjs/proto-signing@npm:0.32.3" + dependencies: + "@cosmjs/amino": "npm:^0.32.3" + "@cosmjs/crypto": "npm:^0.32.3" + "@cosmjs/encoding": "npm:^0.32.3" + "@cosmjs/math": "npm:^0.32.3" + "@cosmjs/utils": "npm:^0.32.3" + cosmjs-types: "npm:^0.9.0" + checksum: 10c0/d44511d3a50489c1a3f61f28f68ca8cac87d6bdbb69e434cb0916dfc1d79e6a68ca0c09e074d4be73624f26fbb215024848225b862201b7f8d1d6a44014fd819 + languageName: node + linkType: hard + +"@cosmjs/proto-signing@npm:^0.32.3, @cosmjs/proto-signing@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/proto-signing@npm:0.32.4" dependencies: @@ -159,7 +781,25 @@ __metadata: languageName: node linkType: hard -"@cosmjs/stargate@npm:^0.32.4": +"@cosmjs/stargate@npm:0.32.3": + version: 0.32.3 + resolution: "@cosmjs/stargate@npm:0.32.3" + dependencies: + "@confio/ics23": "npm:^0.6.8" + "@cosmjs/amino": "npm:^0.32.3" + "@cosmjs/encoding": "npm:^0.32.3" + "@cosmjs/math": "npm:^0.32.3" + "@cosmjs/proto-signing": "npm:^0.32.3" + "@cosmjs/stream": "npm:^0.32.3" + "@cosmjs/tendermint-rpc": "npm:^0.32.3" + "@cosmjs/utils": "npm:^0.32.3" + cosmjs-types: "npm:^0.9.0" + xstream: "npm:^11.14.0" + checksum: 10c0/c82db0355f4b15ca988f0452f8142102b44840319fe48d44c8dc9c1a316cbe3c9e765eb90970348bd5b5fddd6d9452d5a556e14dbbbd93eda6a6c92ceb616241 + languageName: node + linkType: hard + +"@cosmjs/stargate@npm:^0.32.3, @cosmjs/stargate@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/stargate@npm:0.32.4" dependencies: @@ -177,7 +817,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/stream@npm:^0.32.4": +"@cosmjs/stream@npm:^0.32.3, @cosmjs/stream@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/stream@npm:0.32.4" dependencies: @@ -186,7 +826,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/tendermint-rpc@npm:^0.32.4": +"@cosmjs/tendermint-rpc@npm:^0.32.3, @cosmjs/tendermint-rpc@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/tendermint-rpc@npm:0.32.4" dependencies: @@ -204,7 +844,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/utils@npm:^0.32.4": +"@cosmjs/utils@npm:^0.32.3, @cosmjs/utils@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/utils@npm:0.32.4" checksum: 10c0/d5ff8b235094be1150853a715116049f73eb5cdfeea8ce8e22ecccc61ec99792db457404d4307782b1a2f935dcf438f5c485beabfcfbc1dc5df26eb6e6da9062 @@ -218,6 +858,83 @@ __metadata: languageName: node linkType: hard +"@endo/bundle-source@npm:^3.5.0": + version: 3.5.0 + resolution: "@endo/bundle-source@npm:3.5.0" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/evasive-transform": "npm:^1.3.3" + "@endo/init": "npm:^1.1.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/where": "npm:^1.0.9" + "@rollup/plugin-commonjs": "npm:^19.0.0" + "@rollup/plugin-json": "npm:^6.1.0" + "@rollup/plugin-node-resolve": "npm:^13.0.0" + acorn: "npm:^8.2.4" + rollup: "npm:^2.79.1" + ts-blank-space: "npm:^0.4.1" + bin: + bundle-source: ./src/tool.js + checksum: 10c0/7f97194c97eb28abbde6655f7de4410d5aae5d6a2a3d712e1418b9b4fd20823333b7fe8956401c2f201280340731e51e28d9c4fbe3b5a787b0abd00e3ac13b52 + languageName: node + linkType: hard + +"@endo/captp@npm:^4.4.3": + version: 4.4.3 + resolution: "@endo/captp@npm:4.4.3" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/0647dd6acc39c7a54a42d9f168861d11dc28248321be72529dd8574b52989957be8f7a5ec9985fc76a24b37cd6b6d190e5bfbbc1481594e367c8517c31fce0e2 + languageName: node + linkType: hard + +"@endo/check-bundle@npm:^1.0.12": + version: 1.0.12 + resolution: "@endo/check-bundle@npm:1.0.12" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + checksum: 10c0/73e146d9d4d5ee23936b0df368e51ebb3658eecc5efe308a1894f70339502e6de8fa065185e8518d1445bf8fbc4c5fae54fc7dab8794f02397f6694a7ab9af9c + languageName: node + linkType: hard + +"@endo/cjs-module-analyzer@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/cjs-module-analyzer@npm:1.0.9" + checksum: 10c0/cb8c56d108b175f2f211c8292bac6cda35c44b9c16fb2763ab9a32b545895e1721633938b440bfe7a06f69e1f168e9b248ef103631a1d4c63fda8cbe580ca185 + languageName: node + linkType: hard + +"@endo/common@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/common@npm:1.2.8" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/c9465721095d9f06278b6550909a02c330c7a69223f11aff29759067586d41b86054127639fa2c2c0345d0d0aa43518e5b72d5c547b67bfe8e802cd21756d87b + languageName: node + linkType: hard + +"@endo/compartment-mapper@npm:^1.4.0": + version: 1.4.0 + resolution: "@endo/compartment-mapper@npm:1.4.0" + dependencies: + "@endo/cjs-module-analyzer": "npm:^1.0.9" + "@endo/module-source": "npm:^1.1.2" + "@endo/trampoline": "npm:^1.0.3" + "@endo/zip": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/2c4999962016f57c0f3a40ce1445a064b826eb101a972d26ba56d9dba6d3d8f66744912e3f7e24754018bd2c633663a00ea5ab0d7658c4907c9372ddd3e56464 + languageName: node + linkType: hard + "@endo/env-options@npm:^1.1.8": version: 1.1.8 resolution: "@endo/env-options@npm:1.1.8" @@ -234,6 +951,18 @@ __metadata: languageName: node linkType: hard +"@endo/evasive-transform@npm:^1.3.3": + version: 1.3.3 + resolution: "@endo/evasive-transform@npm:1.3.3" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + source-map-js: "npm:^1.2.0" + checksum: 10c0/34fae4789ab3142ab73a5c94a46954908737bbc72f1e302c338941ca2556ab2127505ecee57a1c0d11e0b9c7070b4a579ce4e7e60585990161cec64ce0955211 + languageName: node + linkType: hard + "@endo/eventual-send@npm:^1.2.8": version: 1.2.8 resolution: "@endo/eventual-send@npm:1.2.8" @@ -243,7 +972,22 @@ __metadata: languageName: node linkType: hard -"@endo/far@npm:^1.1.9": +"@endo/exo@npm:^1.5.7": + version: 1.5.7 + resolution: "@endo/exo@npm:1.5.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/0193de0606a7f07f207f3dd8bb71ec6be0acfb0ff5ef570f03cbbcaed888db68e451082c34764de8ee301f8d2d175e6c5a5405e76367c27151d644536bdf57a4 + languageName: node + linkType: hard + +"@endo/far@npm:^1.0.0, @endo/far@npm:^1.1.9": version: 1.1.9 resolution: "@endo/far@npm:1.1.9" dependencies: @@ -254,6 +998,19 @@ __metadata: languageName: node linkType: hard +"@endo/import-bundle@npm:^1.3.2": + version: 1.3.2 + resolution: "@endo/import-bundle@npm:1.3.2" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/where": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/cc38bb7858c4b3a3d1cfbf70b0af3b05b527019452eb922313b4adf87e5590f5cacf4ff5dbd7a44c172d3c220de41edc3fa8895551f76071c85f1450ff94b09a + languageName: node + linkType: hard + "@endo/init@npm:^1.1.7": version: 1.1.7 resolution: "@endo/init@npm:1.1.7" @@ -275,6 +1032,33 @@ __metadata: languageName: node linkType: hard +"@endo/marshal@npm:^1.6.2": + version: 1.6.2 + resolution: "@endo/marshal@npm:1.6.2" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/bdb634a77c2147c1359792531822aabe642a5e4d39f496dd57bb97367617a2f2d72edaaa50c51ed6a2ec1f2c08deab6a571c3dd8ffa260d441d25f53606902b1 + languageName: node + linkType: hard + +"@endo/module-source@npm:^1.1.2": + version: 1.1.2 + resolution: "@endo/module-source@npm:1.1.2" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + "@babel/types": "npm:^7.24.0" + ses: "npm:^1.10.0" + checksum: 10c0/3d64ff5430f288531a00e124ae0620e137dab0fdaba00f2d41066b8307eb2da30e3987d84fe450d55d844e0f96feafa36a825cecc615c05d96224a209832c95c + languageName: node + linkType: hard + "@endo/nat@npm:^5.0.13": version: 5.0.13 resolution: "@endo/nat@npm:5.0.13" @@ -295,6 +1079,19 @@ __metadata: languageName: node linkType: hard +"@endo/patterns@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/patterns@npm:1.4.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/358720438a019847406dfad9f23fc9b565c955ffd86d75693cea994c492dd46efaf189502f04b04f8870e6d50ffcb44ffa1e1dd3a0d6b2dfbbe57edeb994b83b + languageName: node + linkType: hard + "@endo/promise-kit@npm:^1.1.8": version: 1.1.8 resolution: "@endo/promise-kit@npm:1.1.8" @@ -317,6 +1114,38 @@ __metadata: languageName: node linkType: hard +"@endo/stream@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/stream@npm:1.2.8" + dependencies: + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + ses: "npm:^1.10.0" + checksum: 10c0/f435f7650020b32c10bb4cb139910b363b4d4f22bcf9e7a659d3d2eae694a3ea43c3af49c80370760a573370429e5fbe1619dec631251578d4c5eba9ff161613 + languageName: node + linkType: hard + +"@endo/trampoline@npm:^1.0.3": + version: 1.0.3 + resolution: "@endo/trampoline@npm:1.0.3" + checksum: 10c0/be0c3784b17f422ae04e28a6722e2abd193a5585a82acf5eb388476094c026aa5e76a383db887bdf6a032ccf0a12c38a967f5f1e71cef44a4659606be789b548 + languageName: node + linkType: hard + +"@endo/where@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/where@npm:1.0.9" + checksum: 10c0/dd8f8fb601fb54e7cef64d7b32f91595d01151acf1e63c46257c905afb75760d80f2eec5d71cfb1f9251e435990256d56f35d6f8b4851f5e6fbe6b393b535028 + languageName: node + linkType: hard + +"@endo/zip@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/zip@npm:1.0.9" + checksum: 10c0/3fccea31bd5dad938a3b5f531454d3c49513892d6d5aba1f0af1034ff0ae54c3e28a346a9df08bd9e5201354acccd631e45c9c0e68fa2848a876a3919f3830dc + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -395,6 +1224,71 @@ __metadata: languageName: node linkType: hard +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + "@mapbox/node-pre-gyp@npm:^1.0.11": version: 1.0.11 resolution: "@mapbox/node-pre-gyp@npm:1.0.11" @@ -414,6 +1308,36 @@ __metadata: languageName: node linkType: hard +"@nick134-bit/noblejs@npm:0.0.2": + version: 0.0.2 + resolution: "@nick134-bit/noblejs@npm:0.0.2" + dependencies: + "@cosmjs/amino": "npm:0.32.3" + "@cosmjs/encoding": "npm:0.32.3" + "@cosmjs/math": "npm:0.32.3" + "@cosmjs/proto-signing": "npm:0.32.3" + "@cosmjs/stargate": "npm:0.32.3" + typescript: "npm:^5.4.5" + checksum: 10c0/93a0d28459caf9649722d085f8a06f828ad878c2a2948beeb38eb583ebcb305ba15bff5f66ccc712e6068df93fb0cbd1b09bdf7681cc72ef37138f8c5484c287 + languageName: node + linkType: hard + +"@noble/curves@npm:1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": "npm:1.3.2" + checksum: 10c0/0bac7d1bbfb3c2286910b02598addd33243cb97c3f36f987ecc927a4be8d7d88e0fcb12b0f0ef8a044e7307d1844dd5c49bb724bfa0a79c8ec50ba60768c97f6 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: 10c0/2482cce3bce6a596626f94ca296e21378e7a5d4c09597cbc46e65ffacc3d64c8df73111f2265444e36a3168208628258bbbaccba2ef24f65f58b2417638a20e7 + languageName: node + linkType: hard + "@noble/hashes@npm:^1, @noble/hashes@npm:^1.0.0, @noble/hashes@npm:^1.2.0": version: 1.4.0 resolution: "@noble/hashes@npm:1.4.0" @@ -421,6 +1345,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:^1.5.0": + version: 1.6.1 + resolution: "@noble/hashes@npm:1.6.1" + checksum: 10c0/27643cd8b551bc933b57cc29aa8c8763d586552fc4c3e06ecf7897f55be3463c0c9dff7f6ebacd88e5ce6d0cdb5415ca4874d0cf4359b5ea4a85be21ada03aab + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -448,6 +1379,35 @@ __metadata: languageName: node linkType: hard +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -521,9 +1481,69 @@ __metadata: languageName: node linkType: hard -"@rollup/pluginutils@npm:^5.1.3": - version: 5.1.3 - resolution: "@rollup/pluginutils@npm:5.1.3" +"@rollup/plugin-commonjs@npm:^19.0.0": + version: 19.0.2 + resolution: "@rollup/plugin-commonjs@npm:19.0.2" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.1" + glob: "npm:^7.1.6" + is-reference: "npm:^1.2.1" + magic-string: "npm:^0.25.7" + resolve: "npm:^1.17.0" + peerDependencies: + rollup: ^2.38.3 + checksum: 10c0/9adccf77ad835cbe565da4385212f1e54c3e0dca2be174b5c2cfe89cfaeb240f42c7673e97e49b21b7c66ed901cc1c711552b6727f60b43a953ce996eb2868a7 + languageName: node + linkType: hard + +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/9400c431b5e0cf3088ba2eb2d038809a2b0fb2a84ed004997da85582f48cd64958ed3168893c4f2c8109e38652400ed68282d0c92bf8ec07a3b2ef2e1ceab0b7 + languageName: node + linkType: hard + +"@rollup/plugin-node-resolve@npm:^13.0.0": + version: 13.3.0 + resolution: "@rollup/plugin-node-resolve@npm:13.3.0" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + "@types/resolve": "npm:1.17.1" + deepmerge: "npm:^4.2.2" + is-builtin-module: "npm:^3.1.0" + is-module: "npm:^1.0.0" + resolve: "npm:^1.19.0" + peerDependencies: + rollup: ^2.42.0 + checksum: 10c0/6caa32a8304a20f1c9953111b25e9543f4de7d254958d81ce0158ad909e4493946bc2060c4ace23d9748b560ebc84c920ee7bc1b7d50dbf8ba852ef13c91af58 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^3.1.0": + version: 3.1.0 + resolution: "@rollup/pluginutils@npm:3.1.0" + dependencies: + "@types/estree": "npm:0.0.39" + estree-walker: "npm:^1.0.1" + picomatch: "npm:^2.2.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0 + checksum: 10c0/7151753160d15ba2b259461a6c25b3932150994ea52dba8fd3144f634c7647c2e56733d986e2c15de67c4d96a9ee7d6278efa6d2e626a7169898fd64adc0f90c + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.1.0, @rollup/pluginutils@npm:^5.1.3": + version: 5.1.4 + resolution: "@rollup/pluginutils@npm:5.1.4" dependencies: "@types/estree": "npm:^1.0.0" estree-walker: "npm:^2.0.2" @@ -533,7 +1553,7 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 10c0/ba46ad588733fb01d184ee3bc7a127d626158bc840b5874a94c129ff62689d12f16f537530709c54da6f3b71f67d705c4e09235b1dc9542e9d47ee8f2d0b8b9e + checksum: 10c0/6d58fbc6f1024eb4b087bc9bf59a1d655a8056a60c0b4021d3beaeec3f0743503f52467fd89d2cf0e7eccf2831feb40a05ad541a17637ea21ba10b21c2004deb languageName: node linkType: hard @@ -575,6 +1595,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:0.0.39": + version: 0.0.39 + resolution: "@types/estree@npm:0.0.39" + checksum: 10c0/f0af6c95ac1988c4827964bd9d3b51d24da442e2188943f6dfcb1e1559103d5d024d564b2e9d3f84c53714a02a0a7435c7441138eb63d9af5de4dfc66cdc0d92 + languageName: node + linkType: hard + "@types/fs-extra@npm:^11": version: 11.0.4 resolution: "@types/fs-extra@npm:11.0.4" @@ -617,6 +1644,24 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:22.7.5": + version: 22.7.5 + resolution: "@types/node@npm:22.7.5" + dependencies: + undici-types: "npm:~6.19.2" + checksum: 10c0/cf11f74f1a26053ec58066616e3a8685b6bcd7259bc569738b8f752009f9f0f7f85a1b2d24908e5b0f752482d1e8b6babdf1fbb25758711ec7bb9500bfcd6e60 + languageName: node + linkType: hard + +"@types/resolve@npm:1.17.1": + version: 1.17.1 + resolution: "@types/resolve@npm:1.17.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/6eeb9c27d99bf4b393bf168d43208f63e78cefca5644662a0bdb2bdbf8352386f4f3aca66add138fc41bce5f66fd48a0de430a1473f11b612fbed0375ae78031 + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^8.17.0": version: 8.17.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.17.0" @@ -781,6 +1826,13 @@ __metadata: languageName: node linkType: hard +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + "acorn-import-attributes@npm:^1.9.5": version: 1.9.5 resolution: "acorn-import-attributes@npm:1.9.5" @@ -808,7 +1860,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.11.0, acorn@npm:^8.13.0, acorn@npm:^8.6.0, acorn@npm:^8.9.0": +"acorn@npm:^8.11.0, acorn@npm:^8.13.0, acorn@npm:^8.2.4, acorn@npm:^8.6.0, acorn@npm:^8.9.0": version: 8.14.0 resolution: "acorn@npm:8.14.0" bin: @@ -817,6 +1869,13 @@ __metadata: languageName: node linkType: hard +"aes-js@npm:4.0.0-beta.5": + version: 4.0.0-beta.5 + resolution: "aes-js@npm:4.0.0-beta.5" + checksum: 10c0/444f4eefa1e602cbc4f2a3c644bc990f93fd982b148425fee17634da510586fc09da940dcf8ace1b2d001453c07ff042e55f7a0482b3cc9372bf1ef75479090c + languageName: node + linkType: hard + "agent-base@npm:6": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -826,6 +1885,13 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + "ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -861,13 +1927,20 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.2.1": +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c languageName: node linkType: hard +"anylogger@npm:^0.21.0": + version: 0.21.0 + resolution: "anylogger@npm:0.21.0" + checksum: 10c0/1ca7fcf5bc2b78d1e1d9b8c8cc7ce50b5c6cc67a8da5a28c9c975b7b46fff255a04abab02de38a5139190c9d8b34b3d6c59af6724521b077f7d7dfbad9b47a9c + languageName: node + linkType: hard + "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -1016,7 +2089,7 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.0": +"base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf @@ -1037,6 +2110,17 @@ __metadata: languageName: node linkType: hard +"better-sqlite3@npm:^9.1.1": + version: 9.6.0 + resolution: "better-sqlite3@npm:9.6.0" + dependencies: + bindings: "npm:^1.5.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + checksum: 10c0/8db9b38f414e26a56d4c40fc16e94a253118491dae0e2c054338a9e470f1a883c7eb4cb330f2f5737db30f704d4f2e697c59071ca04e03364ee9fe04375aa9c8 + languageName: node + linkType: hard + "bfs-path@npm:^1.0.2": version: 1.0.2 resolution: "bfs-path@npm:1.0.2" @@ -1051,7 +2135,7 @@ __metadata: languageName: node linkType: hard -"bindings@npm:^1.4.0": +"bindings@npm:^1.4.0, bindings@npm:^1.5.0": version: 1.5.0 resolution: "bindings@npm:1.5.0" dependencies: @@ -1064,8 +2148,19 @@ __metadata: version: 3.1.0 resolution: "bip39@npm:3.1.0" dependencies: - "@noble/hashes": "npm:^1.2.0" - checksum: 10c0/68f9673a0d6a851e9635f3af8a85f2a1ecef9066c76d77e6f0d58d274b5bf22a67f429da3997e07c0d2cf153a4d7321f9273e656cac0526f667575ddee28ef71 + "@noble/hashes": "npm:^1.2.0" + checksum: 10c0/68f9673a0d6a851e9635f3af8a85f2a1ecef9066c76d77e6f0d58d274b5bf22a67f429da3997e07c0d2cf153a4d7321f9273e656cac0526f667575ddee28ef71 + languageName: node + linkType: hard + +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f languageName: node linkType: hard @@ -1125,6 +2220,43 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 10c0/2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c + languageName: node + linkType: hard + "call-bind@npm:^1.0.5": version: 1.0.7 resolution: "call-bind@npm:1.0.7" @@ -1178,6 +2310,13 @@ __metadata: languageName: node linkType: hard +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -1185,6 +2324,13 @@ __metadata: languageName: node linkType: hard +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + "chunkd@npm:^2.0.1": version: 2.0.1 resolution: "chunkd@npm:2.0.1" @@ -1277,6 +2423,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + "common-path-prefix@npm:^3.0.0": version: 3.0.0 resolution: "common-path-prefix@npm:3.0.0" @@ -1284,6 +2437,13 @@ __metadata: languageName: node linkType: hard +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -1337,14 +2497,14 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: "npm:^3.1.0" shebang-command: "npm:^2.0.0" which: "npm:^2.0.1" - checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 languageName: node linkType: hard @@ -1385,6 +2545,22 @@ __metadata: languageName: node linkType: hard +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -1392,6 +2568,13 @@ __metadata: languageName: node linkType: hard +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + "define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" @@ -1444,6 +2627,13 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + "elliptic@npm:^6.5.4": version: 6.5.7 resolution: "elliptic@npm:6.5.7" @@ -1480,6 +2670,45 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + "es-define-property@npm:^1.0.0": version: 1.0.0 resolution: "es-define-property@npm:1.0.0" @@ -1653,13 +2882,20 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.2": +"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af languageName: node linkType: hard +"estree-walker@npm:^1.0.1": + version: 1.0.1 + resolution: "estree-walker@npm:1.0.1" + checksum: 10c0/fa9e5f8c1bbe8d01e314c0f03067b64a4f22d4c58410fc5237060d0c15b81e58c23921c41acc60abbdab490f1fdfcbd6408ede2d03ca704454272e0244d61a55 + languageName: node + linkType: hard + "esutils@npm:^2.0.2, esutils@npm:^2.0.3": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -1667,6 +2903,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^6.13.4": + version: 6.13.4 + resolution: "ethers@npm:6.13.4" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.1" + "@noble/curves": "npm:1.2.0" + "@noble/hashes": "npm:1.3.2" + "@types/node": "npm:22.7.5" + aes-js: "npm:4.0.0-beta.5" + tslib: "npm:2.7.0" + ws: "npm:8.17.1" + checksum: 10c0/efcf9f39f841e38af68ec23cdbd745432c239c256aac4929842d1af04e55d7be0ff65e462f1cf3e93586f43f7bdcc0098fd56f2f7234f36d73e466521a5766ce + languageName: node + linkType: hard + "execa@npm:9.1.0": version: 9.1.0 resolution: "execa@npm:9.1.0" @@ -1687,6 +2938,20 @@ __metadata: languageName: node linkType: hard +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + "fast-check@npm:^3.0.0": version: 3.19.0 resolution: "fast-check@npm:3.19.0" @@ -1841,6 +3106,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + "form-data@npm:^4.0.0": version: 4.0.0 resolution: "form-data@npm:4.0.0" @@ -1852,6 +3127,13 @@ __metadata: languageName: node linkType: hard +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + "fs-extra@npm:^11.2.0": version: 11.2.0 resolution: "fs-extra@npm:11.2.0" @@ -1884,6 +3166,15 @@ __metadata: languageName: node linkType: hard +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -1891,6 +3182,25 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -1952,6 +3262,13 @@ __metadata: languageName: node linkType: hard +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -1970,7 +3287,23 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3": +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -1984,6 +3317,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + "globals@npm:^13.19.0": version: 13.24.0 resolution: "globals@npm:13.24.0" @@ -2026,7 +3366,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -2087,7 +3427,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0": +"hasown@npm:^2.0.0, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -2107,6 +3447,23 @@ __metadata: languageName: node linkType: hard +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -2117,6 +3474,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + "human-signals@npm:^7.0.0": version: 7.0.0 resolution: "human-signals@npm:7.0.0" @@ -2124,6 +3491,22 @@ __metadata: languageName: node linkType: hard +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + "ignore-by-default@npm:^2.1.0": version: 2.1.0 resolution: "ignore-by-default@npm:2.1.0" @@ -2148,6 +3531,13 @@ __metadata: languageName: node linkType: hard +"import-meta-resolve@npm:^2.2.1": + version: 2.2.2 + resolution: "import-meta-resolve@npm:2.2.2" + checksum: 10c0/80873aebf0d2a66e824e278fb6cbb16a6660f86df49b367404e5de80928720ecb44f643243b46dc5c5fae506abb666ef54d6f281b45ee0f1034951acb2261eb5 + languageName: node + linkType: hard + "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -2179,6 +3569,23 @@ __metadata: languageName: node linkType: hard +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + "irregular-plurals@npm:^3.3.0": version: 3.5.0 resolution: "irregular-plurals@npm:3.5.0" @@ -2186,6 +3593,24 @@ __metadata: languageName: node linkType: hard +"is-builtin-module@npm:^3.1.0": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 10c0/5a66937a03f3b18803381518f0ef679752ac18cdb7dd53b5e23ee8df8d440558737bd8dcc04d2aae555909d2ecb4a81b5c0d334d119402584b61e6a003e31af1 + languageName: node + linkType: hard + +"is-core-module@npm:^2.16.0": + version: 2.16.0 + resolution: "is-core-module@npm:2.16.0" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/57e3b4bf3503a5ace3e61ef030a2eefa03d27827647b22968456e3e4befffed7c7aa849eea2e029f4f74a119a2d53cc391d5bad59c9352ecc9b79be3fd2acf79 + languageName: node + linkType: hard + "is-docker@npm:^2.0.0": version: 2.2.1 resolution: "is-docker@npm:2.2.1" @@ -2225,6 +3650,13 @@ __metadata: languageName: node linkType: hard +"is-module@npm:^1.0.0": + version: 1.0.0 + resolution: "is-module@npm:1.0.0" + checksum: 10c0/795a3914bcae7c26a1c23a1e5574c42eac13429625045737bf3e324ce865c0601d61aee7a5afbca1bee8cb300c7d9647e7dc98860c9bdbc3b7fdc51d8ac0bffc + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -2260,6 +3692,15 @@ __metadata: languageName: node linkType: hard +"is-reference@npm:^1.2.1": + version: 1.2.1 + resolution: "is-reference@npm:1.2.1" + dependencies: + "@types/estree": "npm:*" + checksum: 10c0/7dc819fc8de7790264a0a5d531164f9f5b9ef5aa1cd05f35322d14db39c8a2ec78fd5d4bf57f9789f3ddd2b3abeea7728432b759636157a42db12a9e8c3b549b + languageName: node + linkType: hard + "is-stream@npm:^4.0.1": version: 4.0.1 resolution: "is-stream@npm:4.0.1" @@ -2297,6 +3738,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + "isomorphic-ws@npm:^4.0.1": version: 4.0.1 resolution: "isomorphic-ws@npm:4.0.1" @@ -2306,6 +3754,28 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jessie.js@npm:^0.3.4": + version: 0.3.4 + resolution: "jessie.js@npm:0.3.4" + dependencies: + "@endo/far": "npm:^1.0.0" + checksum: 10c0/853ab3f8a0e30df11742882f5e11479d1303033a5a203a247d8ffbf4c6f3f3d4bcbefa53084ae4632e6ab106e348f23dc988280486cbeaaf5d16487fa3d40e96 + languageName: node + linkType: hard + "js-string-escape@npm:^1.0.1": version: 1.0.1 resolution: "js-string-escape@npm:1.0.1" @@ -2313,6 +3783,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + "js-yaml@npm:^3.14.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" @@ -2336,6 +3813,31 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -2470,6 +3972,22 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"magic-string@npm:^0.25.7": + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" + dependencies: + sourcemap-codec: "npm:^1.4.8" + checksum: 10c0/37f5e01a7e8b19a072091f0b45ff127cda676232d373ce2c551a162dd4053c575ec048b9cbb4587a1f03adb6c5d0fd0dd49e8ab070cd2c83a4992b2182d9cb56 + languageName: node + linkType: hard + "make-dir@npm:^3.1.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -2479,6 +3997,25 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + "matcher@npm:^5.0.0": version: 5.0.0 resolution: "matcher@npm:5.0.0" @@ -2523,6 +4060,17 @@ __metadata: languageName: node linkType: hard +"microtime@npm:^3.1.0": + version: 3.1.1 + resolution: "microtime@npm:3.1.1" + dependencies: + node-addon-api: "npm:^5.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.4.0" + checksum: 10c0/02512993de914c6f71424d3b8b28ce53de44ba5895b904a213420fd4fc86a084c1d08ec0876ac60cdae6427022766e1b9b86d9b3442bf408701120bd61455e26 + languageName: node + linkType: hard + "mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -2546,6 +4094,13 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + "minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -2560,28 +4115,79 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass-fetch@npm:4.0.0" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/7fa30ce7c373fb6f94c086b374fff1589fd7e78451855d2d06c2e2d9df936d131e73e952163063016592ed3081444bd8d1ea608533313b0149156ce23311da4b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd languageName: node linkType: hard -"minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 languageName: node linkType: hard -"minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb languageName: node linkType: hard @@ -2601,6 +4207,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + "minizlib@npm:^2.1.1": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -2611,6 +4224,23 @@ __metadata: languageName: node linkType: hard +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" + dependencies: + minipass: "npm:^7.0.4" + rimraf: "npm:^5.0.5" + checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -2620,6 +4250,15 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + "ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -2627,6 +4266,13 @@ __metadata: languageName: node linkType: hard +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -2634,6 +4280,31 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.71.0 + resolution: "node-abi@npm:3.71.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/dbd0792ea729329cd9d099f28a5681ff9e8a6db48cf64e1437bf6a7fd669009d1e758a784619a1c4cc8bfd1ed17162f042c787654edf19a1f64b5018457c9c1f + languageName: node + linkType: hard + +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d + languageName: node + linkType: hard + "node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" @@ -2648,14 +4319,34 @@ __metadata: languageName: node linkType: hard -"node-gyp-build@npm:^4.2.2": - version: 4.8.1 - resolution: "node-gyp-build@npm:4.8.1" +"node-gyp-build@npm:^4.2.2, node-gyp-build@npm:^4.4.0": + version: 4.8.4 + resolution: "node-gyp-build@npm:4.8.4" bin: node-gyp-build: bin.js node-gyp-build-optional: optional.js node-gyp-build-test: build-test.js - checksum: 10c0/e36ca3d2adf2b9cca316695d7687207c19ac6ed326d6d7c68d7112cebe0de4f82d6733dff139132539fcc01cf5761f6c9082a21864ab9172edf84282bc849ce7 + checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.0.0 + resolution: "node-gyp@npm:11.0.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/a3b885bbee2d271f1def32ba2e30ffcf4562a3db33af06b8b365e053153e2dd2051b9945783c3c8e852d26a0f20f65b251c7e83361623383a99635c0280ee573 languageName: node linkType: hard @@ -2677,6 +4368,17 @@ __metadata: languageName: node linkType: hard +"nopt@npm:^8.0.0": + version: 8.0.0 + resolution: "nopt@npm:8.0.0" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/19cb986f79abaca2d0f0b560021da7b32ee6fcc3de48f3eaeb0c324d36755c17754f886a754c091f01f740c17caf7d6aea8237b7fbaf39f476ae5e30a249f18f + languageName: node + linkType: hard + "npm-run-path@npm:^5.2.0": version: 5.3.0 resolution: "npm-run-path@npm:5.3.0" @@ -2712,7 +4414,7 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0": +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -2787,6 +4489,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -2856,6 +4565,23 @@ __metadata: languageName: node linkType: hard +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + "path-type@npm:^5.0.0": version: 5.0.0 resolution: "path-type@npm:5.0.0" @@ -2863,7 +4589,14 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.3.1": +"picocolors@npm:^1.0.0": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be @@ -2886,6 +4619,28 @@ __metadata: languageName: node linkType: hard +"prebuild-install@npm:^7.1.1": + version: 7.1.2 + resolution: "prebuild-install@npm:7.1.2" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 10c0/e64868ba9ef2068fd7264f5b03e5298a901e02a450acdb1f56258d88c09dea601eefdb3d1dfdff8513fdd230a92961712be0676192626a3b4d01ba154d48bdd3 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -2902,6 +4657,23 @@ __metadata: languageName: node linkType: hard +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + "protobufjs@npm:^6.8.8": version: 6.11.4 resolution: "protobufjs@npm:6.11.4" @@ -2933,6 +4705,16 @@ __metadata: languageName: node linkType: hard +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f + languageName: node + linkType: hard + "punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -2965,7 +4747,21 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.6.0": +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -3020,6 +4816,39 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.17.0, resolve@npm:^1.19.0": + version: 1.22.9 + resolution: "resolve@npm:1.22.9" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/314cea2c47f956743f106256854203bd43a60a3ec6fb85ee6894e75cf4b16004952e4280319bfeb4c6fb1246e3ecd27f2699abb2e2b316b7c5727ec6491505c9 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": + version: 1.22.9 + resolution: "resolve@patch:resolve@npm%3A1.22.9#optional!builtin::version=1.22.9&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/dadd8c85040784fdc18d6edc0cc27f7f35776c5d904b030ea67485ab9a5607568187afcfaf157e6fa9db9274481d155356bc42ca578c5578be25965b880d1e80 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + "reusify@npm:^1.0.4": version: 1.0.4 resolution: "reusify@npm:1.0.4" @@ -3049,11 +4878,37 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: "npm:^10.3.7" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc + languageName: node + linkType: hard + +"rollup@npm:^2.79.1": + version: 2.79.2 + resolution: "rollup@npm:2.79.2" + dependencies: + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/bc3746c988d903c2211266ddc539379d53d92689b9cc5c2b4e3ae161689de9af491957a567c629b6cc81f48d0928a7591fc4c383fba68a48d2966c9fb8a2bce9 + languageName: node + linkType: hard + "root-workspace-0b6124@workspace:.": version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: "@agoric/cosmic-proto": "npm:dev" + "@agoric/fast-usdc": "npm:dev" "@cosmjs/crypto": "npm:^0.32.4" "@cosmjs/proto-signing": "npm:^0.32.4" "@cosmjs/stargate": "npm:^0.32.4" @@ -3094,7 +4949,14 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0": +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.3.0": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -3193,6 +5055,24 @@ __metadata: languageName: node linkType: hard +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 + languageName: node + linkType: hard + "slash@npm:^2.0.0": version: 2.0.0 resolution: "slash@npm:2.0.0" @@ -3217,6 +5097,55 @@ __metadata: languageName: node linkType: hard +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map@npm:^0.5.0": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + +"sourcemap-codec@npm:^1.4.8": + version: 1.4.8 + resolution: "sourcemap-codec@npm:1.4.8" + checksum: 10c0/f099279fdaae070ff156df7414bbe39aad69cdd615454947ed3e19136bfdfcb4544952685ee73f56e17038f4578091e12b17b283ed8ac013882916594d95b9e6 + languageName: node + linkType: hard + "split-on-first@npm:^3.0.0": version: 3.0.0 resolution: "split-on-first@npm:3.0.0" @@ -3224,6 +5153,13 @@ __metadata: languageName: node linkType: hard +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -3231,6 +5167,15 @@ __metadata: languageName: node linkType: hard +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + "stack-utils@npm:^2.0.6": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" @@ -3252,7 +5197,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -3263,6 +5208,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + "string-width@npm:^7.0.0": version: 7.1.0 resolution: "string-width@npm:7.1.0" @@ -3283,7 +5239,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -3315,6 +5271,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + "supertap@npm:^3.0.1": version: 3.0.1 resolution: "supertap@npm:3.0.1" @@ -3336,6 +5299,13 @@ __metadata: languageName: node linkType: hard +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + "symbol-observable@npm:^2.0.3": version: 2.0.3 resolution: "symbol-observable@npm:2.0.3" @@ -3343,6 +5313,31 @@ __metadata: languageName: node linkType: hard +"tar-fs@npm:^2.0.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 10c0/871d26a934bfb7beeae4c4d8a09689f530b565f79bd0cf489823ff0efa3705da01278160da10bb006d1a793fa0425cf316cec029b32a9159eacbeaff4965fb6d + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + languageName: node + linkType: hard + "tar@npm:^6.1.11": version: 6.2.1 resolution: "tar@npm:6.2.1" @@ -3357,6 +5352,20 @@ __metadata: languageName: node linkType: hard +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + "temp-dir@npm:^3.0.0": version: 3.0.0 resolution: "temp-dir@npm:3.0.0" @@ -3387,6 +5396,13 @@ __metadata: languageName: node linkType: hard +"tmp@npm:^0.2.1": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -3412,7 +5428,7 @@ __metadata: languageName: node linkType: hard -"ts-blank-space@npm:^0.4.4": +"ts-blank-space@npm:^0.4.1, ts-blank-space@npm:^0.4.4": version: 0.4.4 resolution: "ts-blank-space@npm:0.4.4" dependencies: @@ -3421,6 +5437,22 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.7.0": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -3444,7 +5476,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.1.6 - 5.7.x, typescript@npm:~5.7.2": +"typescript@npm:5.1.6 - 5.7.x, typescript@npm:^5.4.5, typescript@npm:~5.7.2": version: 5.7.2 resolution: "typescript@npm:5.7.2" bin: @@ -3454,7 +5486,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.1.6 - 5.7.x#optional!builtin, typescript@patch:typescript@npm%3A~5.7.2#optional!builtin": +"typescript@patch:typescript@npm%3A5.1.6 - 5.7.x#optional!builtin, typescript@patch:typescript@npm%3A^5.4.5#optional!builtin, typescript@patch:typescript@npm%3A~5.7.2#optional!builtin": version: 5.7.2 resolution: "typescript@patch:typescript@npm%3A5.7.2#optional!builtin::version=5.7.2&hash=5786d5" bin: @@ -3478,6 +5510,24 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -3536,6 +5586,17 @@ __metadata: languageName: node linkType: hard +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + "wide-align@npm:^1.1.2": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -3552,7 +5613,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -3563,6 +5624,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -3580,6 +5652,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.17.1": + version: 8.17.1 + resolution: "ws@npm:8.17.1" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/f4a49064afae4500be772abdc2211c8518f39e1c959640457dcee15d4488628620625c783902a52af2dd02f68558da2868fd06e6fd0e67ebcd09e6881b1b5bfe + languageName: node + linkType: hard + "ws@npm:^7": version: 7.5.9 resolution: "ws@npm:7.5.9" @@ -3619,6 +5706,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + "yaml@npm:^2.2.2": version: 2.4.5 resolution: "yaml@npm:2.4.5" diff --git a/packages/boot/test/fast-usdc/fast-usdc.test.ts b/packages/boot/test/fast-usdc/fast-usdc.test.ts index 6eae95b9ad2..3c17e8b6f55 100644 --- a/packages/boot/test/fast-usdc/fast-usdc.test.ts +++ b/packages/boot/test/fast-usdc/fast-usdc.test.ts @@ -7,7 +7,10 @@ import { documentStorageSchema } from '@agoric/governance/tools/storageDoc.js'; import { Fail } from '@endo/errors'; import { unmarshalFromVstorage } from '@agoric/internal/src/marshal.js'; import { makeMarshal } from '@endo/marshal'; -import { defaultMarshaller } from '@agoric/internal/src/storage-test-utils.js'; +import { + defaultMarshaller, + defaultSerializer, +} from '@agoric/internal/src/storage-test-utils.js'; import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; import { BridgeId } from '@agoric/internal'; import { @@ -155,7 +158,7 @@ test.serial('writes fee config to vstorage', async t => { const doc = { node: 'fastUsdc.feeConfig', owner: 'the fee configuration for Fast USDC', - showValue: v => defaultMarshaller.fromCapData(JSON.parse(v)), + showValue: defaultSerializer.parse, }; await documentStorageSchema(t, storage, doc); }); @@ -165,7 +168,7 @@ test.serial('writes pool metrics to vstorage', async t => { const doc = { node: 'fastUsdc.poolMetrics', owner: 'FastUSC LiquidityPool exo', - showValue: v => defaultMarshaller.fromCapData(JSON.parse(v)), + showValue: defaultSerializer.parse, }; await documentStorageSchema(t, storage, doc); }); @@ -255,9 +258,20 @@ test.serial('makes usdc advance', async t => { ); harness?.resetRunPolicy(); + t.deepEqual( + storage + .getValues(`published.fastUsdc.txns.${evidence.txHash}`) + .map(defaultSerializer.parse), + [ + { evidence, status: 'OBSERVED' }, // observation includes evidence observed + { status: 'ADVANCING' }, + ], + ); + const doc = { - node: `fastUsdc.status`, - owner: `the statuses of fast USDC transfers identified by their tx hashes`, + node: `fastUsdc.txns`, + owner: `the Ethereum transactions upon which Fast USDC is acting`, + showValue: defaultSerializer.parse, }; await documentStorageSchema(t, storage, doc); }); diff --git a/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.md b/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.md index f27a41da2c4..eae055ef42a 100644 --- a/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.md +++ b/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.md @@ -161,14 +161,16 @@ Generated by [AVA](https://avajs.dev). ## makes usdc advance -> Under "published", the "fastUsdc.status" node is delegated to the statuses of fast USDC transfers identified by their tx hashes. +> Under "published", the "fastUsdc.txns" node is delegated to the Ethereum transactions upon which Fast USDC is acting. > The example below illustrates the schema of the data published there. > > See also board marshalling conventions (_to appear_). [ [ - 'published.fastUsdc.status.0xc81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761702', - 'ADVANCING', + 'published.fastUsdc.txns.0xc81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761702', + { + status: 'ADVANCING', + }, ], ] diff --git a/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.snap b/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.snap index 4647d12715f..c837074b0fa 100644 Binary files a/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.snap and b/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.snap differ diff --git a/packages/fast-usdc/src/cli/operator-commands.js b/packages/fast-usdc/src/cli/operator-commands.js index 8f849f760db..6a4db0a1c98 100644 --- a/packages/fast-usdc/src/cli/operator-commands.js +++ b/packages/fast-usdc/src/cli/operator-commands.js @@ -99,6 +99,7 @@ export const addOperatorCommands = ( .requiredOption('--chainId ', 'chain id', Number) .requiredOption('--amount ', 'number', parseNat) .requiredOption('--forwardingAddress ', 'bech32 address', String) + .requiredOption('--sender ', 'Ethereum address initiating', String) .requiredOption('--txHash <0xhexo>', 'hex hash', parseHex) .option('--offerId ', 'Offer id', String, `operatorAttest-${now()}`) .action(async opts => { @@ -109,12 +110,13 @@ export const addOperatorCommands = ( recipientAddress, amount, forwardingAddress, + sender, ...flat } = opts; const evidence = harden({ aux: { forwardingChannel, recipientAddress }, - tx: { amount, forwardingAddress }, + tx: { amount, forwardingAddress, sender }, ...flat, }); mustMatch(evidence, CctpTxEvidenceShape); diff --git a/packages/fast-usdc/src/constants.js b/packages/fast-usdc/src/constants.js index d341f6c650d..28ab7775db7 100644 --- a/packages/fast-usdc/src/constants.js +++ b/packages/fast-usdc/src/constants.js @@ -21,7 +21,12 @@ export const TxStatus = /** @type {const} */ ({ }); harden(TxStatus); -// TODO: define valid state transitions +// According to the state diagram +export const TerminalTxStatus = { + [TxStatus.Forwarded]: true, + [TxStatus.ForwardFailed]: true, + [TxStatus.Disbursed]: true, +}; /** * Status values for the StatusManager. diff --git a/packages/fast-usdc/src/exos/settler.js b/packages/fast-usdc/src/exos/settler.js index 931961c01b7..727e02bfbb0 100644 --- a/packages/fast-usdc/src/exos/settler.js +++ b/packages/fast-usdc/src/exos/settler.js @@ -143,7 +143,7 @@ export const prepareSettler = ( ); // given the sourceChannel check, we can be certain of this cast - const sender = /** @type {NobleAddress} */ (tx.sender); + const nfa = /** @type {NobleAddress} */ (tx.sender); if (tx.denom !== remoteDenom) { const { denom: actual } = tx; @@ -170,23 +170,23 @@ export const prepareSettler = ( const amount = BigInt(tx.amount); // TODO: what if this throws? const { self } = this.facets; - const found = statusManager.dequeueStatus(sender, amount); - log('dequeued', found, 'for', sender, amount); + const found = statusManager.dequeueStatus(nfa, amount); + log('dequeued', found, 'for', nfa, amount); switch (found?.status) { case PendingTxStatus.Advanced: - return self.disburse(found.txHash, sender, amount); + return self.disburse(found.txHash, nfa, amount); case PendingTxStatus.Advancing: - this.state.mintedEarly.add(makeMintedEarlyKey(sender, amount)); + this.state.mintedEarly.add(makeMintedEarlyKey(nfa, amount)); return; case PendingTxStatus.Observed: case PendingTxStatus.AdvanceFailed: - return self.forward(found.txHash, sender, amount, EUD); + return self.forward(found.txHash, nfa, amount, EUD); case undefined: default: - log('⚠️ tap: no status for ', sender, amount); + log('⚠️ tap: no status for ', nfa, amount); } }, }, @@ -231,10 +231,10 @@ export const prepareSettler = ( self: { /** * @param {EvmHash} txHash - * @param {NobleAddress} sender + * @param {NobleAddress} nfa * @param {NatValue} fullValue */ - async disburse(txHash, sender, fullValue) { + async disburse(txHash, nfa, fullValue) { const { repayer, settlementAccount } = this.state; const received = AmountMath.make(USDC, fullValue); const { zcfSeat: settlingSeat } = zcf.makeEmptySeatKit(); @@ -264,11 +264,11 @@ export const prepareSettler = ( }, /** * @param {EvmHash} txHash - * @param {NobleAddress} sender + * @param {NobleAddress} nfa * @param {NatValue} fullValue * @param {string} EUD */ - forward(txHash, sender, fullValue, EUD) { + forward(txHash, nfa, fullValue, EUD) { const { settlementAccount, intermediateRecipient } = this.state; const dest = chainHub.makeChainAddress(EUD); @@ -281,7 +281,7 @@ export const prepareSettler = ( ); void vowTools.watch(txfrV, this.facets.transferHandler, { txHash, - sender, + nfa, fullValue, }); }, @@ -293,13 +293,13 @@ export const prepareSettler = ( * * @typedef {{ * txHash: EvmHash; - * sender: NobleAddress; + * nfa: NobleAddress; * fullValue: NatValue; * }} SettlerTransferCtx */ onFulfilled(_result, ctx) { - const { txHash, sender, fullValue } = ctx; - statusManager.forwarded(txHash, sender, fullValue); + const { txHash, nfa, fullValue } = ctx; + statusManager.forwarded(txHash, nfa, fullValue); }, /** * @param {unknown} reason @@ -307,8 +307,8 @@ export const prepareSettler = ( */ onRejected(reason, ctx) { log('⚠️ transfer rejected!', reason, ctx); - // const { txHash, sender, amount } = ctx; - // TODO(#10510): statusManager.forwardFailed(txHash, sender, amount); + // const { txHash, nfa, amount } = ctx; + // TODO(#10510): statusManager.forwardFailed(txHash, nfa, amount); }, }, }, diff --git a/packages/fast-usdc/src/exos/status-manager.js b/packages/fast-usdc/src/exos/status-manager.js index ca17487e01b..588126a3b73 100644 --- a/packages/fast-usdc/src/exos/status-manager.js +++ b/packages/fast-usdc/src/exos/status-manager.js @@ -2,26 +2,23 @@ import { M } from '@endo/patterns'; import { Fail, makeError, q } from '@endo/errors'; import { appendToStoredArray } from '@agoric/store/src/stores/store-utils.js'; import { E } from '@endo/eventual-send'; -import { makeTracer } from '@agoric/internal'; +import { makeTracer, pureDataMarshaller } from '@agoric/internal'; import { CctpTxEvidenceShape, EvmHashShape, PendingTxShape, } from '../type-guards.js'; -import { PendingTxStatus, TxStatus } from '../constants.js'; +import { PendingTxStatus, TerminalTxStatus, TxStatus } from '../constants.js'; /** * @import {MapStore, SetStore} from '@agoric/store'; * @import {Zone} from '@agoric/zone'; - * @import {CctpTxEvidence, NobleAddress, PendingTx, EvmHash, LogFn} from '../types.js'; + * @import {CctpTxEvidence, NobleAddress, PendingTx, EvmHash, LogFn, TransactionRecord} from '../types.js'; */ /** * @typedef {`pendingTx:${bigint}:${NobleAddress}`} PendingTxKey * The string template is for developer visibility but not meant to ever be parsed. - * - * @typedef {`seenTx:${string}:${EvmHash}`} SeenTxKey - * The string template is for developer visibility but not meant to ever be parsed. */ /** @@ -29,13 +26,13 @@ import { PendingTxStatus, TxStatus } from '../constants.js'; * * The key is a composite but not meant to be parsable. * - * @param {NobleAddress} addr + * @param {NobleAddress} nfa Noble Forwarding Account (implies EUD) * @param {bigint} amount * @returns {PendingTxKey} */ -const makePendingTxKey = (addr, amount) => +const makePendingTxKey = (nfa, amount) => // amount can't contain colon - `pendingTx:${amount}:${addr}`; + `pendingTx:${amount}:${nfa}`; /** * Get the key for the pendingTxs MapStore. @@ -48,20 +45,6 @@ const pendingTxKeyOf = evidence => { return makePendingTxKey(forwardingAddress, amount); }; -/** - * Get the key for the seenTxs SetStore. - * - * The key is a composite but not meant to be parsable. - * - * @param {CctpTxEvidence} evidence - * @returns {SeenTxKey} - */ -const seenTxKeyOf = evidence => { - const { txHash, chainId } = evidence; - // chainId can't contain colon - return `seenTx:${chainId}:${txHash}`; -}; - /** * @typedef {{ * log?: LogFn; @@ -76,35 +59,85 @@ const seenTxKeyOf = evidence => { * XXX consider separate facets for `Advancing` and `Settling` capabilities. * * @param {Zone} zone - * @param {ERef} transactionsNode + * @param {ERef} txnsNode * @param {StatusManagerPowers} caps */ export const prepareStatusManager = ( zone, - transactionsNode, + txnsNode, { log = makeTracer('Advancer', true), } = /** @type {StatusManagerPowers} */ ({}), ) => { - /** @type {MapStore} */ + /** + * Keyed by a tuple of the Noble Forwarding Account and amount. + * @type {MapStore} + */ const pendingTxs = zone.mapStore('PendingTxs', { keyShape: M.string(), valueShape: M.arrayOf(PendingTxShape), }); - /** @type {SetStore} */ + /** + * Transactions seen *ever* by the contract. + * + * Note that like all durable stores, this SetStore is stored in IAVL. It + * grows without bound (though the amount of growth per incoming message to + * the contract is bounded). At some point in the future we may want to prune. + * @type {SetStore} + */ const seenTxs = zone.setStore('SeenTxs', { keyShape: M.string(), }); + /** + * Transactions that have completed, but are still in vstorage. + * + * @type {SetStore} + */ + const storedCompletedTxs = zone.setStore('StoredCompletedTxs', { + keyShape: M.string(), + }); + + /** + * @param {EvmHash} txId + * @param {TransactionRecord} record + */ + const publishTxnRecord = (txId, record) => { + const txNode = E(txnsNode).makeChildNode(txId, { + sequence: true, // avoid overwriting other output in the block + }); + void E(txNode).setValue( + JSON.stringify(pureDataMarshaller.toCapData(record)), + ); + }; + + /** + * @param {CctpTxEvidence['txHash']} hash + * @param {CctpTxEvidence} evidence + */ + const publishEvidence = (hash, evidence) => { + // Don't await, just writing to vstorage. + void publishTxnRecord( + hash, + harden({ evidence, status: TxStatus.Observed }), + ); + }; + /** * @param {CctpTxEvidence['txHash']} hash * @param {TxStatus} status */ const publishStatus = (hash, status) => { - const txnNodeP = E(transactionsNode).makeChildNode(hash); // Don't await, just writing to vstorage. - void E(txnNodeP).setValue(status); + void publishTxnRecord(hash, harden({ status })); + if (TerminalTxStatus[status]) { + // UNTIL https://github.com/Agoric/agoric-sdk/issues/7405 + // Queue it for deletion later because if we deleted it now the earlier + // writes in this block would be wiped. For now we keep track of what to + // delete when we know it'll be another block. + storedCompletedTxs.add(hash); + } }; /** @@ -117,32 +150,36 @@ export const prepareStatusManager = ( * @param {PendingTxStatus} status */ const initPendingTx = (evidence, status) => { - const seenKey = seenTxKeyOf(evidence); - if (seenTxs.has(seenKey)) { - throw makeError(`Transaction already seen: ${q(seenKey)}`); + const { txHash } = evidence; + if (seenTxs.has(txHash)) { + throw makeError(`Transaction already seen: ${q(txHash)}`); } - seenTxs.add(seenKey); + seenTxs.add(txHash); appendToStoredArray( pendingTxs, pendingTxKeyOf(evidence), harden({ ...evidence, status }), ); - publishStatus(evidence.txHash, status); + publishEvidence(txHash, evidence); + if (status !== PendingTxStatus.Observed) { + // publishEvidence publishes Observed + publishStatus(txHash, status); + } }; /** * Update the pending transaction status. * - * @param {{sender: NobleAddress, amount: bigint}} keyParts + * @param {{nfa: NobleAddress, amount: bigint}} keyParts * @param {PendingTxStatus} status */ - function setPendingTxStatus({ sender, amount }, status) { - const key = makePendingTxKey(sender, amount); - pendingTxs.has(key) || Fail`no advancing tx with ${{ sender, amount }}`; + function setPendingTxStatus({ nfa, amount }, status) { + const key = makePendingTxKey(nfa, amount); + pendingTxs.has(key) || Fail`no advancing tx with ${{ nfa, amount }}`; const pending = pendingTxs.get(key); const ix = pending.findIndex(tx => tx.status === PendingTxStatus.Advancing); - ix >= 0 || Fail`no advancing tx with ${{ sender, amount }}`; + ix >= 0 || Fail`no advancing tx with ${{ nfa, amount }}`; const [prefix, tx, suffix] = [ pending.slice(0, ix), pending[ix], @@ -161,6 +198,7 @@ export const prepareStatusManager = ( advanceOutcome: M.call(M.string(), M.nat(), M.boolean()).returns(), observe: M.call(CctpTxEvidenceShape).returns(M.undefined()), hasBeenObserved: M.call(CctpTxEvidenceShape).returns(M.boolean()), + deleteCompletedTxs: M.call().returns(M.undefined()), dequeueStatus: M.call(M.string(), M.bigint()).returns( M.or( { @@ -197,14 +235,14 @@ export const prepareStatusManager = ( /** * Record result of ADVANCING * - * @param {NobleAddress} sender + * @param {NobleAddress} nfa Noble Forwarding Account * @param {import('@agoric/ertp').NatValue} amount * @param {boolean} success - Advanced vs. AdvanceFailed * @throws {Error} if nothing to advance */ - advanceOutcome(sender, amount, success) { + advanceOutcome(nfa, amount, success) { setPendingTxStatus( - { sender, amount }, + { nfa, amount }, success ? PendingTxStatus.Advanced : PendingTxStatus.AdvanceFailed, ); }, @@ -223,20 +261,32 @@ export const prepareStatusManager = ( * @param {CctpTxEvidence} evidence */ hasBeenObserved(evidence) { - const seenKey = seenTxKeyOf(evidence); - return seenTxs.has(seenKey); + return seenTxs.has(evidence.txHash); + }, + + // UNTIL https://github.com/Agoric/agoric-sdk/issues/7405 + deleteCompletedTxs() { + for (const txHash of storedCompletedTxs.values()) { + // As of now, setValue('') on a non-sequence node will delete it + const txNode = E(txnsNode).makeChildNode(txHash, { + sequence: false, + }); + void E(txNode) + .setValue('') + .then(() => storedCompletedTxs.delete(txHash)); + } }, /** * Remove and return an `ADVANCED` or `OBSERVED` tx waiting to be `SETTLED`. * - * @param {NobleAddress} address + * @param {NobleAddress} nfa * @param {bigint} amount * @returns {Pick | undefined} undefined if nothing * with this address and amount has been marked pending. */ - dequeueStatus(address, amount) { - const key = makePendingTxKey(address, amount); + dequeueStatus(nfa, amount) { + const key = makePendingTxKey(nfa, amount); if (!pendingTxs.has(key)) return undefined; const pending = pendingTxs.get(key); @@ -272,16 +322,16 @@ export const prepareStatusManager = ( * Mark a transaction as `FORWARDED` * * @param {EvmHash | undefined} txHash - undefined in case mint before observed - * @param {NobleAddress} address + * @param {NobleAddress} nfa * @param {bigint} amount */ - forwarded(txHash, address, amount) { + forwarded(txHash, nfa, amount) { if (txHash) { publishStatus(txHash, TxStatus.Forwarded); } else { // TODO store (early) `Minted` transactions to check against incoming evidence log( - `⚠️ Forwarded minted amount ${amount} from account ${address} before it was observed.`, + `⚠️ Forwarded minted amount ${amount} from account ${nfa} before it was observed.`, ); } }, @@ -291,12 +341,12 @@ export const prepareStatusManager = ( * * XXX only used in tests. should we remove? * - * @param {NobleAddress} address + * @param {NobleAddress} nfa * @param {bigint} amount * @returns {PendingTx[]} */ - lookupPending(address, amount) { - const key = makePendingTxKey(address, amount); + lookupPending(nfa, amount) { + const key = makePendingTxKey(nfa, amount); if (!pendingTxs.has(key)) { return harden([]); } diff --git a/packages/fast-usdc/src/fast-usdc.contract.js b/packages/fast-usdc/src/fast-usdc.contract.js index ff9f08c5000..80f8c4a6df1 100644 --- a/packages/fast-usdc/src/fast-usdc.contract.js +++ b/packages/fast-usdc/src/fast-usdc.contract.js @@ -26,7 +26,7 @@ import { defineInertInvitation } from './utils/zoe.js'; const trace = makeTracer('FastUsdc'); -const STATUS_NODE = 'status'; +const TXNS_NODE = 'txns'; const FEE_NODE = 'feeConfig'; const ADDRESSES_BAGGAGE_KEY = 'addresses'; @@ -39,7 +39,6 @@ const ADDRESSES_BAGGAGE_KEY = 'addresses'; * @import {Zone} from '@agoric/zone'; * @import {OperatorKit} from './exos/operator-kit.js'; * @import {CctpTxEvidence, FeeConfig} from './types.js'; - * @import {RepayAmountKWR, RepayPaymentKWR} from './exos/liquidity-pool.js'; */ /** @@ -110,8 +109,10 @@ export const contract = async (zcf, privateArgs, zone, tools) => { marshaller, ); - const statusNode = E(storageNode).makeChildNode(STATUS_NODE); - const statusManager = prepareStatusManager(zone, statusNode); + const statusManager = prepareStatusManager( + zone, + E(storageNode).makeChildNode(TXNS_NODE), + ); const { USDC } = terms.brands; const { withdrawToSeat } = tools.zoeTools; diff --git a/packages/fast-usdc/src/type-guards.js b/packages/fast-usdc/src/type-guards.js index 5281521ef12..05215f43886 100644 --- a/packages/fast-usdc/src/type-guards.js +++ b/packages/fast-usdc/src/type-guards.js @@ -6,7 +6,7 @@ import { PendingTxStatus } from './constants.js'; * @import {TypedPattern} from '@agoric/internal'; * @import {FastUsdcTerms} from './fast-usdc.contract.js'; * @import {USDCProposalShapes} from './pool-share-math.js'; - * @import {CctpTxEvidence, FeeConfig, PendingTx, PoolMetrics, ChainPolicy, FeedPolicy, AddressHook} from './types.js'; + * @import {CctpTxEvidence, FeeConfig, PendingTx, PoolMetrics, ChainPolicy, FeedPolicy, AddressHook, EvmAddress, EvmHash} from './types.js'; */ /** @@ -36,7 +36,14 @@ export const FastUSDCTermsShape = harden({ usdcDenom: M.string(), }); -/** @type {TypedPattern} */ +/** @type {TypedPattern} */ +export const EvmAddressShape = M.string({ + // 0x + 40 hex digits + stringLengthLimit: 42, +}); +harden(EvmAddressShape); + +/** @type {TypedPattern} */ export const EvmHashShape = M.string({ stringLengthLimit: 66, }); @@ -54,6 +61,7 @@ export const CctpTxEvidenceShape = { tx: { amount: M.nat(), forwardingAddress: M.string(), + sender: EvmAddressShape, }, txHash: EvmHashShape, }; diff --git a/packages/fast-usdc/src/types.ts b/packages/fast-usdc/src/types.ts index 30dd64acbbc..0d3701e9d82 100644 --- a/packages/fast-usdc/src/types.ts +++ b/packages/fast-usdc/src/types.ts @@ -7,10 +7,11 @@ import type { import type { IBCChannelID } from '@agoric/vats'; import type { Amount } from '@agoric/ertp'; import type { CopyRecord, Passable } from '@endo/pass-style'; -import type { PendingTxStatus } from './constants.js'; +import type { PendingTxStatus, TxStatus } from './constants.js'; import type { FastUsdcTerms } from './fast-usdc.contract.js'; export type EvmHash = `0x${string}`; +export type EvmAddress = `0x${string & { length: 40 }}`; export type NobleAddress = `noble1${string}`; export type EvmChainID = number; export type EvmChainName = string; @@ -28,10 +29,20 @@ export interface CctpTxEvidence { tx: { amount: bigint; forwardingAddress: NobleAddress; + sender: EvmAddress; }; txHash: EvmHash; } +/** + * 'evidence' only available when it's first observed and not in subsequent + * updates. + */ +export interface TransactionRecord extends CopyRecord { + evidence?: CctpTxEvidence; + status: TxStatus; +} + export type LogFn = (...args: unknown[]) => void; export interface PendingTx extends CctpTxEvidence { diff --git a/packages/fast-usdc/test/exos/advancer.test.ts b/packages/fast-usdc/test/exos/advancer.test.ts index b91e52485a9..7f118598f88 100644 --- a/packages/fast-usdc/test/exos/advancer.test.ts +++ b/packages/fast-usdc/test/exos/advancer.test.ts @@ -1,29 +1,30 @@ -import type { TestFn } from 'ava'; import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; + +import { + decodeAddressHook, + encodeAddressHook, +} from '@agoric/cosmic-proto/address-hooks.js'; +import type { NatAmount } from '@agoric/ertp'; import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; import { denomHash } from '@agoric/orchestration'; import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info.js'; -import { Far } from '@endo/pass-style'; -import type { NatAmount } from '@agoric/ertp'; import { type ZoeTools } from '@agoric/orchestration/src/utils/zoe-tools.js'; import { q } from '@endo/errors'; -import { - decodeAddressHook, - encodeAddressHook, -} from '@agoric/cosmic-proto/address-hooks.js'; +import { Far } from '@endo/pass-style'; +import type { TestFn } from 'ava'; import { PendingTxStatus } from '../../src/constants.js'; import { prepareAdvancer } from '../../src/exos/advancer.js'; import type { SettlerKit } from '../../src/exos/settler.js'; import { prepareStatusManager } from '../../src/exos/status-manager.js'; +import type { LiquidityPoolKit } from '../../src/types.js'; import { makeFeeTools } from '../../src/utils/fees.js'; -import { commonSetup } from '../supports.js'; import { MockCctpTxEvidences, intermediateRecipient } from '../fixtures.js'; import { makeTestFeeConfig, makeTestLogger, prepareMockOrchAccounts, } from '../mocks.js'; -import type { LiquidityPoolKit } from '../../src/types.js'; +import { commonSetup } from '../supports.js'; const LOCAL_DENOM = `ibc/${denomHash({ denom: 'uusdc', @@ -48,7 +49,7 @@ const createTestExtensions = (t, common: CommonSetup) => { const statusManager = prepareStatusManager( rootZone.subZone('status-manager'), - storageNode.makeChildNode('status'), + storageNode.makeChildNode('txns'), ); const mockAccounts = prepareMockOrchAccounts(rootZone.subZone('accounts'), { @@ -174,8 +175,8 @@ test('updates status to ADVANCING in happy path', async t => { bootstrap: { storage }, } = t.context; - const mockEvidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); - void advancer.handleTransactionEvent(mockEvidence); + const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + void advancer.handleTransactionEvent(evidence); // pretend borrow succeeded and funds were depositing to the LCA resolveLocalTransferV(); @@ -185,8 +186,11 @@ test('updates status to ADVANCING in happy path', async t => { await eventLoopIteration(); t.deepEqual( - storage.data.get(`mockChainStorageRoot.status.${mockEvidence.txHash}`), - PendingTxStatus.Advancing, + storage.getDeserialized(`fun.txns.${evidence.txHash}`), + [ + { evidence, status: PendingTxStatus.Observed }, + { status: PendingTxStatus.Advancing }, + ], 'ADVANCED status in happy path', ); @@ -214,11 +218,11 @@ test('updates status to ADVANCING in happy path', async t => { t.like(inspectNotifyCalls(), [ [ { - txHash: mockEvidence.txHash, - forwardingAddress: mockEvidence.tx.forwardingAddress, - fullAmount: usdc.make(mockEvidence.tx.amount), + txHash: evidence.txHash, + forwardingAddress: evidence.tx.forwardingAddress, + fullAmount: usdc.make(evidence.tx.amount), destination: { - value: decodeAddressHook(mockEvidence.aux.recipientAddress).query.EUD, + value: decodeAddressHook(evidence.aux.recipientAddress).query.EUD, }, }, true, // indicates transfer succeeded @@ -254,13 +258,13 @@ test('updates status to OBSERVED on insufficient pool funds', async t => { intermediateRecipient, }); - const mockEvidence = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); - void advancer.handleTransactionEvent(mockEvidence); + const evidence = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); + void advancer.handleTransactionEvent(evidence); await eventLoopIteration(); t.deepEqual( - storage.data.get(`mockChainStorageRoot.status.${mockEvidence.txHash}`), - PendingTxStatus.Observed, + storage.getDeserialized(`fun.txns.${evidence.txHash}`), + [{ evidence, status: PendingTxStatus.Observed }], 'OBSERVED status on insufficient pool funds', ); @@ -284,12 +288,12 @@ test('updates status to OBSERVED if makeChainAddress fails', async t => { }, } = t.context; - const mockEvidence = MockCctpTxEvidences.AGORIC_UNKNOWN_EUD(); - await advancer.handleTransactionEvent(mockEvidence); + const evidence = MockCctpTxEvidences.AGORIC_UNKNOWN_EUD(); + await advancer.handleTransactionEvent(evidence); t.deepEqual( - storage.data.get(`mockChainStorageRoot.status.${mockEvidence.txHash}`), - PendingTxStatus.Observed, + storage.getDeserialized(`fun.txns.${evidence.txHash}`), + [{ evidence, status: PendingTxStatus.Observed }], 'OBSERVED status on makeChainAddress failure', ); @@ -313,16 +317,19 @@ test('calls notifyAdvancingResult (AdvancedFailed) on failed transfer', async t brands: { usdc }, } = t.context; - const mockEvidence = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); - void advancer.handleTransactionEvent(mockEvidence); + const evidence = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); + void advancer.handleTransactionEvent(evidence); // pretend borrow and deposit to LCA succeed resolveLocalTransferV(); await eventLoopIteration(); t.deepEqual( - storage.data.get(`mockChainStorageRoot.status.${mockEvidence.txHash}`), - PendingTxStatus.Advancing, + storage.getDeserialized(`fun.txns.${evidence.txHash}`), + [ + { evidence, status: PendingTxStatus.Observed }, + { status: PendingTxStatus.Advancing }, + ], 'tx is Advancing', ); @@ -339,14 +346,12 @@ test('calls notifyAdvancingResult (AdvancedFailed) on failed transfer', async t t.like(inspectNotifyCalls(), [ [ { - txHash: mockEvidence.txHash, - forwardingAddress: mockEvidence.tx.forwardingAddress, - fullAmount: usdc.make(mockEvidence.tx.amount), - advanceAmount: feeTools.calculateAdvance( - usdc.make(mockEvidence.tx.amount), - ), + txHash: evidence.txHash, + forwardingAddress: evidence.tx.forwardingAddress, + fullAmount: usdc.make(evidence.tx.amount), + advanceAmount: feeTools.calculateAdvance(usdc.make(evidence.tx.amount)), destination: { - value: decodeAddressHook(mockEvidence.aux.recipientAddress).query.EUD, + value: decodeAddressHook(evidence.aux.recipientAddress).query.EUD, }, }, false, // this indicates transfer failed @@ -363,13 +368,13 @@ test('updates status to OBSERVED if pre-condition checks fail', async t => { }, } = t.context; - const mockEvidence = MockCctpTxEvidences.AGORIC_NO_PARAMS(); + const evidence = MockCctpTxEvidences.AGORIC_NO_PARAMS(); - await advancer.handleTransactionEvent(mockEvidence); + await advancer.handleTransactionEvent(evidence); t.deepEqual( - storage.data.get(`mockChainStorageRoot.status.${mockEvidence.txHash}`), - PendingTxStatus.Observed, + storage.getDeserialized(`fun.txns.${evidence.txHash}`), + [{ evidence, status: PendingTxStatus.Observed }], 'tx is recorded as OBSERVED', ); diff --git a/packages/fast-usdc/test/exos/settler.test.ts b/packages/fast-usdc/test/exos/settler.test.ts index 2c8075e9e2f..f23f90702d4 100644 --- a/packages/fast-usdc/test/exos/settler.test.ts +++ b/packages/fast-usdc/test/exos/settler.test.ts @@ -47,7 +47,7 @@ const makeTestContext = async t => { const { log, inspectLogs } = makeTestLogger(t.log); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - common.commonPrivateArgs.storageNode.makeChildNode('status'), + common.commonPrivateArgs.storageNode.makeChildNode('txns'), { log }, ); const { zcf, callLog } = mockZcf(zone.subZone('Mock ZCF')); @@ -234,11 +234,18 @@ test('happy path: disburse to LPs; StatusManager removes tx', async t => { 'SETTLED entry removed from StatusManger', ); await eventLoopIteration(); - const vstorage = t.context.storage.data; - t.is( - vstorage.get(`mockChainStorageRoot.status.${cctpTxEvidence.txHash}`), - 'DISBURSED', - ); + const { storage } = t.context; + t.deepEqual(storage.getDeserialized(`fun.txns.${cctpTxEvidence.txHash}`), [ + { evidence: cctpTxEvidence, status: 'OBSERVED' }, + { status: 'ADVANCING' }, + { status: 'ADVANCED' }, + { status: 'DISBURSED' }, + ]); + + // Check deletion of DISBURSED transactions + statusManager.deleteCompletedTxs(); + await eventLoopIteration(); + t.is(storage.data.get(`fun.txns.${cctpTxEvidence.txHash}`), undefined); }); test('slow path: forward to EUD; remove pending tx', async t => { @@ -305,11 +312,16 @@ test('slow path: forward to EUD; remove pending tx', async t => { [], 'SETTLED entry removed from StatusManger', ); - const vstorage = t.context.storage.data; - t.is( - vstorage.get(`mockChainStorageRoot.status.${cctpTxEvidence.txHash}`), - 'FORWARDED', - ); + const { storage } = t.context; + t.deepEqual(storage.getDeserialized(`fun.txns.${cctpTxEvidence.txHash}`), [ + { evidence: cctpTxEvidence, status: 'OBSERVED' }, + { status: 'FORWARDED' }, + ]); + + // Check deletion of FORWARDED transactions + statusManager.deleteCompletedTxs(); + await eventLoopIteration(); + t.is(storage.data.get(`fun.txns.${cctpTxEvidence.txHash}`), undefined); }); test('Settlement for unknown transaction', async t => { diff --git a/packages/fast-usdc/test/exos/status-manager.test.ts b/packages/fast-usdc/test/exos/status-manager.test.ts index 71757ea731a..14c45185fa8 100644 --- a/packages/fast-usdc/test/exos/status-manager.test.ts +++ b/packages/fast-usdc/test/exos/status-manager.test.ts @@ -10,7 +10,7 @@ import type { CctpTxEvidence } from '../../src/types.js'; type Common = Awaited>; type TestContext = { - statusNode: ERef; + txnsNode: ERef; storage: Common['bootstrap']['storage']; }; @@ -19,7 +19,7 @@ const test = anyTest as TestFn; test.beforeEach(async t => { const common = await commonSetup(t); t.context = { - statusNode: common.commonPrivateArgs.storageNode.makeChildNode('status'), + txnsNode: common.commonPrivateArgs.storageNode.makeChildNode('txns'), storage: common.bootstrap.storage, }; }); @@ -28,7 +28,7 @@ test('advance creates new entry with ADVANCED status', t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); @@ -46,25 +46,25 @@ test('ADVANCED transactions are published to vstorage', async t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); statusManager.advance(evidence); await eventLoopIteration(); - const vstorage = t.context.storage.data; - t.is( - vstorage.get(`mockChainStorageRoot.status.${evidence.txHash}`), - 'ADVANCING', - ); + const { storage } = t.context; + t.deepEqual(storage.getDeserialized(`fun.txns.${evidence.txHash}`), [ + { evidence, status: 'OBSERVED' }, + { status: 'ADVANCING' }, + ]); }); test('observe creates new entry with OBSERVED status', t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); statusManager.observe(evidence); @@ -81,50 +81,47 @@ test('OBSERVED transactions are published to vstorage', async t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); statusManager.observe(evidence); await eventLoopIteration(); - const vstorage = t.context.storage.data; - t.is( - vstorage.get(`mockChainStorageRoot.status.${evidence.txHash}`), - 'OBSERVED', - ); + const { storage } = t.context; + t.deepEqual(storage.getDeserialized(`fun.txns.${evidence.txHash}`), [ + { evidence, status: 'OBSERVED' }, + ]); }); test('cannot process same tx twice', t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); statusManager.advance(evidence); t.throws(() => statusManager.advance(evidence), { message: - 'Transaction already seen: "seenTx:1:0xc81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761702"', + 'Transaction already seen: "0xc81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761702"', }); t.throws(() => statusManager.observe(evidence), { message: - 'Transaction already seen: "seenTx:1:0xc81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761702"', + 'Transaction already seen: "0xc81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761702"', }); // new txHash should not throw t.notThrows(() => statusManager.advance({ ...evidence, txHash: '0xtest2' })); - // new chainId with existing txHash should not throw - t.notThrows(() => statusManager.advance({ ...evidence, chainId: 9999 })); }); test('isSeen checks if a tx has been processed', t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); @@ -142,7 +139,7 @@ test('dequeueStatus removes entries from PendingTxs', t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); const e2 = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); @@ -194,13 +191,13 @@ test('cannot advanceOutcome without ADVANCING entry', t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); const advanceOutcomeFn = () => statusManager.advanceOutcome(e1.tx.forwardingAddress, e1.tx.amount, true); const expectedErrMsg = - 'no advancing tx with {"amount":"[150000000n]","sender":"noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelqkd"}'; + 'no advancing tx with {"amount":"[150000000n]","nfa":"noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelqkd"}'; t.throws(advanceOutcomeFn, { message: expectedErrMsg, @@ -219,11 +216,11 @@ test('cannot advanceOutcome without ADVANCING entry', t => { }); test('advanceOutcome transitions to ADVANCED and ADVANCE_FAILED', async t => { - const vstorage = t.context.storage.data; + const { storage } = t.context; const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); const e2 = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); @@ -236,10 +233,11 @@ test('advanceOutcome transitions to ADVANCED and ADVANCE_FAILED', async t => { }, ]); await eventLoopIteration(); - t.is( - vstorage.get(`mockChainStorageRoot.status.${e1.txHash}`), - PendingTxStatus.Advanced, - ); + t.deepEqual(storage.getDeserialized(`fun.txns.${e1.txHash}`), [ + { evidence: e1, status: 'OBSERVED' }, + { status: 'ADVANCING' }, + { status: 'ADVANCED' }, + ]); statusManager.advance(e2); statusManager.advanceOutcome(e2.tx.forwardingAddress, e2.tx.amount, false); @@ -249,17 +247,18 @@ test('advanceOutcome transitions to ADVANCED and ADVANCE_FAILED', async t => { }, ]); await eventLoopIteration(); - t.is( - vstorage.get(`mockChainStorageRoot.status.${e2.txHash}`), - PendingTxStatus.AdvanceFailed, - ); + t.deepEqual(storage.getDeserialized(`fun.txns.${e2.txHash}`), [ + { evidence: e2, status: 'OBSERVED' }, + { status: 'ADVANCING' }, + { status: 'ADVANCE_FAILED' }, + ]); }); test('dequeueStatus returns undefined when nothing is settleable', t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); @@ -273,7 +272,7 @@ test('dequeueStatus returns first (earliest) matched entry', async t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); @@ -324,7 +323,7 @@ test('dequeueStatus returns first (earliest) matched entry', async t => { PendingTxStatus.Advanced, 'first settled entry deleted', ); - t.is( + t.deepEqual( entries0?.[1].status, PendingTxStatus.Observed, 'order of remaining entries preserved', @@ -370,7 +369,7 @@ test('lookupPending returns empty array when presented a key it has not seen', t const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); t.deepEqual(statusManager.lookupPending('noble123', 1n), []); }); @@ -379,7 +378,7 @@ test('StatusManagerKey logic handles addresses with hyphens', t => { const zone = provideDurableZone('status-test'); const statusManager = prepareStatusManager( zone.subZone('status-manager'), - t.context.statusNode, + t.context.txnsNode, ); const evidence: CctpTxEvidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); evidence.tx.forwardingAddress = 'noble1-foo'; diff --git a/packages/fast-usdc/test/fixtures.ts b/packages/fast-usdc/test/fixtures.ts index 7ffcedafb73..35ec0c231e2 100644 --- a/packages/fast-usdc/test/fixtures.ts +++ b/packages/fast-usdc/test/fixtures.ts @@ -3,7 +3,7 @@ import { buildVTransferEvent } from '@agoric/orchestration/tools/ibc-mocks.js'; import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info.js'; import type { ChainAddress } from '@agoric/orchestration'; import type { VTransferIBCEvent } from '@agoric/vats'; -import type { CctpTxEvidence } from '../src/types.js'; +import type { CctpTxEvidence, EvmAddress } from '../src/types.js'; const mockScenarios = [ 'AGORIC_PLUS_OSMO', @@ -14,6 +14,10 @@ const mockScenarios = [ type MockScenario = (typeof mockScenarios)[number]; +export const Senders = { + default: '0xDefaultFakeEthereumAddress', +} as unknown as Record; + export const MockCctpTxEvidences: Record< MockScenario, (receiverAddress?: string) => CctpTxEvidence @@ -27,6 +31,7 @@ export const MockCctpTxEvidences: Record< tx: { amount: 150000000n, forwardingAddress: 'noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelqkd', + sender: Senders.default, }, aux: { forwardingChannel: 'channel-21', @@ -48,6 +53,7 @@ export const MockCctpTxEvidences: Record< tx: { amount: 300000000n, forwardingAddress: 'noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelktz', + sender: Senders.default, }, aux: { forwardingChannel: 'channel-21', @@ -69,6 +75,7 @@ export const MockCctpTxEvidences: Record< tx: { amount: 200000000n, forwardingAddress: 'noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelyyy', + sender: Senders.default, }, aux: { forwardingChannel: 'channel-21', @@ -87,6 +94,7 @@ export const MockCctpTxEvidences: Record< tx: { amount: 200000000n, forwardingAddress: 'noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelyyy', + sender: Senders.default, }, aux: { forwardingChannel: 'channel-21', diff --git a/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.md b/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.md index a9fd7cab902..99f90954dbe 100644 --- a/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.md +++ b/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.md @@ -598,6 +598,7 @@ Generated by [AVA](https://avajs.dev). PoolAccount: 'Vow', SeenTxs: [], SettleAccount: 'Vow', + StoredCompletedTxs: [], mint: { PoolShare: 'Alleged: zcfMint', }, diff --git a/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.snap b/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.snap index a0714ea13d2..b4eafafc079 100644 Binary files a/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.snap and b/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.snap differ diff --git a/packages/fast-usdc/test/supports.ts b/packages/fast-usdc/test/supports.ts index 7106b0e948a..8ecdc66bdb6 100644 --- a/packages/fast-usdc/test/supports.ts +++ b/packages/fast-usdc/test/supports.ts @@ -1,6 +1,10 @@ import { makeIssuerKit } from '@agoric/ertp'; import { VTRANSFER_IBC_EVENT } from '@agoric/internal/src/action-types.js'; -import { makeFakeStorageKit } from '@agoric/internal/src/storage-test-utils.js'; +import { + defaultMarshaller, + defaultSerializer, + makeFakeStorageKit, +} from '@agoric/internal/src/storage-test-utils.js'; import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; import { denomHash, @@ -24,7 +28,10 @@ import { makeWellKnownSpaces } from '@agoric/vats/src/core/utils.js'; import { prepareLocalChainTools } from '@agoric/vats/src/localchain.js'; import { prepareTransferTools } from '@agoric/vats/src/transfer.js'; import { makeFakeBankManagerKit } from '@agoric/vats/tools/bank-utils.js'; -import { makeFakeBoard } from '@agoric/vats/tools/board-utils.js'; +import { + makeFakeBoard, + pureDataMarshaller, +} from '@agoric/vats/tools/board-utils.js'; import { makeFakeLocalchainBridge, makeFakeTransferBridge, @@ -37,6 +44,7 @@ import { makeHeapZone, type Zone } from '@agoric/zone'; import { makeDurableZone } from '@agoric/zone/durable.js'; import { E } from '@endo/far'; import type { ExecutionContext } from 'ava'; +import type { PureData } from '@endo/pass-style'; import { makeTestFeeConfig } from './mocks.js'; export { @@ -149,9 +157,15 @@ export const commonSetup = async (t: ExecutionContext) => { }); const timer = buildZoeManualTimer(t.log); const marshaller = makeFakeBoard().getReadonlyMarshaller(); - const storage = makeFakeStorageKit('mockChainStorageRoot', { - sequence: false, - }); + const storage = makeFakeStorageKit( + 'fun', // Fast USDC Node + ); + /** + * Read pure data (CapData that has no slots) from the storage path + * @param path + */ + storage.getDeserialized = (path: string): unknown => + storage.getValues(path).map(defaultSerializer.parse); const { portAllocator, setupIBCProtocol, ibcBridge } = setupFakeNetwork( rootZone.subZone('network'), diff --git a/packages/internal/src/index.js b/packages/internal/src/index.js index d241d8f6ece..662e273110d 100644 --- a/packages/internal/src/index.js +++ b/packages/internal/src/index.js @@ -6,6 +6,7 @@ export * from './config.js'; export * from './debug.js'; export * from './errors.js'; export * from './js-utils.js'; +export { pureDataMarshaller } from './marshal.js'; export * from './method-tools.js'; export * from './ses-utils.js'; export * from './typeCheck.js'; diff --git a/packages/internal/src/marshal.js b/packages/internal/src/marshal.js index 3750b910ad2..ebfaa33d9e6 100644 --- a/packages/internal/src/marshal.js +++ b/packages/internal/src/marshal.js @@ -135,3 +135,10 @@ export const makeHistoryReviver = (entries, slotToVal = undefined) => { return harden({ getItem, children, has }); }; + +/** @param {import('@endo/marshal').CapData} cap */ +const rejectOCap = cap => Fail`${cap} is not pure data`; +export const pureDataMarshaller = makeMarshal(rejectOCap, rejectOCap, { + serializeBodyFormat: 'smallcaps', +}); +harden(pureDataMarshaller); diff --git a/packages/internal/src/storage-test-utils.js b/packages/internal/src/storage-test-utils.js index 143a6bbd444..6babcb12223 100644 --- a/packages/internal/src/storage-test-utils.js +++ b/packages/internal/src/storage-test-utils.js @@ -2,12 +2,12 @@ import { Fail } from '@endo/errors'; import { Far } from '@endo/far'; import { makeMarshal, Remotable } from '@endo/marshal'; -import { unmarshalFromVstorage } from './marshal.js'; import { makeTracer } from './debug.js'; +import { NonNullish } from './errors.js'; import { isStreamCell, makeChainStorageRoot } from './lib-chainStorage.js'; +import { unmarshalFromVstorage } from './marshal.js'; import { bindAllMethods } from './method-tools.js'; import { eventLoopIteration } from './testing-utils.js'; -import { NonNullish } from './errors.js'; /** * @import {TotalMap} from './types.js'; @@ -34,6 +34,16 @@ export const defaultMarshaller = makeMarshal(undefined, slotToRemotable, { serializeBodyFormat: 'smallcaps', }); +/** + * Serialize/deserialize functions using {@link defaultMarshaller} + */ +export const defaultSerializer = { + /** @type {(text: string) => unknown} */ + parse: txt => defaultMarshaller.fromCapData(JSON.parse(txt)), + /** @type {(obj: any) => string} */ + stringify: obj => JSON.stringify(defaultMarshaller.toCapData(obj)), +}; + /** * A deserializer which produces slot strings instead of Remotables, so if `a = * Far('iface')`, and serializing `{ a }` into `capData` assigned it slot @@ -190,10 +200,24 @@ export const makeFakeStorageKit = (rootPath, rootOptions) => { }, ); const rootNode = makeChainStorageRoot(toStorage, rootPath, resolvedOptions); + + /** + * Get the values at a sequence node + * + * @param {string} path + * @returns {string[]} + */ + const getValues = path => { + assert(resolvedOptions.sequence); + const wrapper = JSON.parse(data.get(path)); + return wrapper.values; + }; + return { rootNode, // eslint-disable-next-line object-shorthand data: /** @type {Map} */ (data), + getValues, messages, toStorage, }; diff --git a/packages/internal/test/snapshots/exports.test.js.md b/packages/internal/test/snapshots/exports.test.js.md index 9da2a6a2453..de3a330db68 100644 --- a/packages/internal/test/snapshots/exports.test.js.md +++ b/packages/internal/test/snapshots/exports.test.js.md @@ -34,6 +34,7 @@ Generated by [AVA](https://avajs.dev). 'mustMatch', 'objectMap', 'objectMetaMap', + 'pureDataMarshaller', 'synchronizedTee', 'untilTrue', 'whileTrue', diff --git a/packages/internal/test/snapshots/exports.test.js.snap b/packages/internal/test/snapshots/exports.test.js.snap index 730293f20f6..8f11be2dad6 100644 Binary files a/packages/internal/test/snapshots/exports.test.js.snap and b/packages/internal/test/snapshots/exports.test.js.snap differ