diff --git a/a3p-integration/proposals/n:upgrade-next/package.json b/a3p-integration/proposals/n:upgrade-next/package.json index c3bd2a7c3c10..2f77b86a9e84 100644 --- a/a3p-integration/proposals/n:upgrade-next/package.json +++ b/a3p-integration/proposals/n:upgrade-next/package.json @@ -18,7 +18,7 @@ "type": "module", "license": "Apache-2.0", "dependencies": { - "@agoric/synthetic-chain": "^0.1.0", + "@agoric/synthetic-chain": "^0.2.1", "ava": "^5.3.1" }, "ava": { diff --git a/a3p-integration/proposals/n:upgrade-next/performAction.js b/a3p-integration/proposals/n:upgrade-next/performAction.js new file mode 100644 index 000000000000..36b17c62a29e --- /dev/null +++ b/a3p-integration/proposals/n:upgrade-next/performAction.js @@ -0,0 +1,40 @@ +#!/usr/bin/env node + +import { + GOV1ADDR, + CHAINID, + agd, + agopsInter, + addUser, + waitForBlock, + provisionSmartWallet, + ATOM_DENOM, +} from '@agoric/synthetic-chain'; + +export const bankSend = (from, addr, wanted) => { + const chain = ['--chain-id', CHAINID]; + const fromArg = ['--from', from]; + const testKeyring = ['--keyring-backend', 'test']; + const noise = [...fromArg, ...chain, ...testKeyring, '--yes']; + + return agd.tx('bank', 'send', from, addr, wanted, ...noise); +}; + +const bidder = await addUser('long-living-bidder'); +console.log('BIDDDER', bidder); +await bankSend(GOV1ADDR, bidder, `80000000uist`); +console.log('IST sent'); +await provisionSmartWallet(bidder, `20000000ubld,100000000${ATOM_DENOM}`); +console.log('Provision sent'); +await waitForBlock(3); +console.log('Wait For Block done. Sending bid offer'); +agopsInter( + 'bid', + 'by-price', + `--price 49.0`, + `--give 80IST`, + '--from', + bidder, + '--keyring-backend test', + `--offer-id long-living-bid-for-acceptance`, +); diff --git a/a3p-integration/proposals/n:upgrade-next/tsconfig.json b/a3p-integration/proposals/n:upgrade-next/tsconfig.json index 39de5a422e95..835db5a03167 100644 --- a/a3p-integration/proposals/n:upgrade-next/tsconfig.json +++ b/a3p-integration/proposals/n:upgrade-next/tsconfig.json @@ -1,7 +1,8 @@ { "compilerOptions": { "target": "esnext", - "module": "esnext", + "module": "NodeNext", + "moduleResolution": "NodeNext", "allowJs": true, "checkJs": true, "strict": false, diff --git a/a3p-integration/proposals/n:upgrade-next/use.sh b/a3p-integration/proposals/n:upgrade-next/use.sh new file mode 100644 index 000000000000..d1cd92ac17cc --- /dev/null +++ b/a3p-integration/proposals/n:upgrade-next/use.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Exit when any command fails +set -e + +source /usr/src/upgrade-test-scripts/env_setup.sh + +./performAction.js diff --git a/a3p-integration/proposals/n:upgrade-next/yarn.lock b/a3p-integration/proposals/n:upgrade-next/yarn.lock index 71cdf48439b7..f60559d279ae 100644 --- a/a3p-integration/proposals/n:upgrade-next/yarn.lock +++ b/a3p-integration/proposals/n:upgrade-next/yarn.lock @@ -5,24 +5,25 @@ __metadata: version: 8 cacheKey: 10c0 -"@agoric/synthetic-chain@npm:^0.1.0": - version: 0.1.0 - resolution: "@agoric/synthetic-chain@npm:0.1.0" +"@agoric/synthetic-chain@npm:^0.2.1": + version: 0.2.1 + resolution: "@agoric/synthetic-chain@npm:0.2.1" dependencies: - "@endo/zip": "npm:^1.0.1" - better-sqlite3: "npm:^9.4.0" + "@endo/zip": "npm:^1.0.6" + better-sqlite3: "npm:^9.6.0" chalk: "npm:^5.3.0" + cosmjs-types: "npm:^0.9.0" execa: "npm:^8.0.1" bin: synthetic-chain: dist/cli/cli.js - checksum: 10c0/8305293d085cde9cbf94670134216e06337c5624c45faf5dfebb86762042abe7b4340cf3205e671dfce54e888bd4e9b3428400756833fa06f2bbb21b44668c44 + checksum: 10c0/ca3bfe968d0f157b4fdad3cc7e234c0d38f2eb8cc55ce4cb0a82f02a5371ef49d534fec05be6ef769cb166d0da278fb3e900b5882d08410008c2bb5e7e719de3 languageName: node linkType: hard -"@endo/zip@npm:^1.0.1": - version: 1.0.1 - resolution: "@endo/zip@npm:1.0.1" - checksum: 10c0/1074bdc10287f4c94b3423e130da88f9c6ba09c999483c1164b3eed061350a060d2dbe377cfa3b8d4a86b3f1c3aed5cbf0cdd78ee2bf2cb9b837caa2ebbf712f +"@endo/zip@npm:^1.0.6": + version: 1.0.7 + resolution: "@endo/zip@npm:1.0.7" + checksum: 10c0/a1c0d155448ce877012b34c8fe8cd3a58de9eb807514c81cddeebb802ee8e552b27d8a9a40fab3f3e4c49e0cb7fea6902fa1dd12a23ff6f30b56161fc3edc1f8 languageName: node linkType: hard @@ -290,14 +291,14 @@ __metadata: languageName: node linkType: hard -"better-sqlite3@npm:^9.4.0": - version: 9.4.0 - resolution: "better-sqlite3@npm:9.4.0" +"better-sqlite3@npm:^9.6.0": + 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/42b2edfa46d62763514b87122245a3513a5ff20f05fef4fb49fec33f3de0a51a29025596178f57c634b8013f16bbdf8169a308fb3e3b8d126d715788d72d1e74 + checksum: 10c0/8db9b38f414e26a56d4c40fc16e94a253118491dae0e2c054338a9e470f1a883c7eb4cb330f2f5737db30f704d4f2e697c59071ca04e03364ee9fe04375aa9c8 languageName: node linkType: hard @@ -559,6 +560,13 @@ __metadata: languageName: node linkType: hard +"cosmjs-types@npm:^0.9.0": + version: 0.9.0 + resolution: "cosmjs-types@npm:0.9.0" + checksum: 10c0/bc20f4293fb34629d7c5f96bafe533987f753df957ff68eb078d0128ae5a418320cb945024441769a07bb9bc5dde9d22b972fd40d485933e5706ea191c43727b + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -1820,7 +1828,7 @@ __metadata: version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: - "@agoric/synthetic-chain": "npm:^0.1.0" + "@agoric/synthetic-chain": "npm:^0.2.1" ava: "npm:^5.3.1" languageName: unknown linkType: soft diff --git a/a3p-integration/proposals/z:acceptance/auction.test.js b/a3p-integration/proposals/z:acceptance/auction.test.js index ea45cb580be3..6da02f85159f 100644 --- a/a3p-integration/proposals/z:acceptance/auction.test.js +++ b/a3p-integration/proposals/z:acceptance/auction.test.js @@ -1,28 +1,29 @@ /** * @file In this file we aim to test auctioneer in an isolated manner. Here's the scenario to test; * - Send 100 ATOMs to gov1 from validator - * - Make sure auctioneer params like ClockStep, StartFrequency are reduced * - For book0, ATOM is collateral, set two types of bids; by price and by percentage, user1 is the bidder - * - Deposit some collateral into book0, gov1 is the depositor + * - Deposit 100 ATOMs into book0, gov1 is the depositor * - Wait until placed bids get their payouts - * - Make sure the depositer gets correct amounts + * - Make sure the depositor gets correct amounts */ +/** @typedef {import('./test-lib/sync-tools.js').RetyrOptions} RetryOptions */ + import { addPreexistingOracles, agd, agopsInter, agoric, ATOM_DENOM, - bankSend, - createBid, + CHAINID, executeOffer, - getLiveOffers, getPriceQuote, + getUser, GOV1ADDR, + GOV3ADDR, pushPrices, USER1ADDR, - waitForBlock, + VALIDATORADDR, } from '@agoric/synthetic-chain'; import '@endo/init'; import test from 'ava'; @@ -32,144 +33,168 @@ import { waitUntilAccountFunded, waitUntilOfferResult, } from './test-lib/sync-tools.js'; +import { AmountMath } from '@agoric/ertp'; + +export const scale6 = x => BigInt(Math.round(x * 1_000_000)); -const ambientAuthroity = { +const ambientAuthority = { query: agd.query, follow: agoric.follow, setTimeout: globalThis.setTimeout, }; +const fromBoard = makeFromBoard(); +const marshaller = boardSlottingMarshaller(fromBoard.convertSlotToVal); + +export const bankSend = (from, addr, wanted) => { + const chain = ['--chain-id', CHAINID]; + const fromArg = ['--from', from]; + const testKeyring = ['--keyring-backend', 'test']; + const noise = [...fromArg, ...chain, ...testKeyring, '--yes']; + + return agd.tx('bank', 'send', from, addr, wanted, ...noise); +}; + const config = { - price: 9.99, + depositor: { + depositValue: '100000000', + offerId: `gov1-deposit-${Date.now()}`, + }, + price: 50.0, bidsSetup: [ { - give: '80IST', - discount: 0.1, - }, - { + bidder: USER1ADDR, + bidderFund: { + value: 90000000, + denom: 'uist', + }, + offerId: `user1-bid-${Date.now()}`, give: '90IST', - price: 9.0, + price: 46, }, { + bidder: GOV3ADDR, + bidderFund: { + value: 150000000, + denom: 'uist', + }, + offerId: `gov3-bid-${Date.now()}`, give: '150IST', - discount: 0.15, + discount: '13', }, ], bidsOutcome: [ { payouts: { Bid: 0, - Collateral: 8.897786, + Collateral: 1.68421, }, }, { payouts: { Bid: 0, - Collateral: 10.01001, + Collateral: 2.0, }, }, { payouts: { - Bid: 10.46, - Collateral: 16.432903, + Bid: 0, + Collateral: 3.448275, }, }, ], }; -const oraclesByBrand = new Map(); - -let roundId = 2; - -const setupOracles = async t => { +const pushPricesForAuction = async t => { + const oraclesByBrand = new Map(); await addPreexistingOracles('ATOM', oraclesByBrand); - await pushPrices(9.99, 'ATOM', oraclesByBrand, roundId); - roundId += 1; + await pushPrices(config.price, 'ATOM', oraclesByBrand, t.context.roundId + 1); + await retryUntilCondition( () => getPriceQuote('ATOM'), - res => res === '+9990000', - 'error', - { log: t.log, setTimeout: globalThis.setTimeout }, + res => res === `+${scale6(config.price).toString()}`, + 'price not pushed yet', + { + log: t.log, + setTimeout: globalThis.setTimeout, + ...t.context.pushPriceRetryOpts, + }, ); }; -const BID_OFFER_ID = `bid-acceptance-${Date.now()}`; -const DEPOSIT_OFFER_ID = `gov1-deposit-${Date.now()}`; +const fundAccts = async (depositorAmt = '100000000', t) => { + const retryOpts = t.context.retryOpts.bankSendRetryOpts; -const createNewBid = async t => { - await createBid('20', USER1ADDR, BID_OFFER_ID); - const liveOffers = await getLiveOffers(USER1ADDR); - t.true(liveOffers[0].includes(BID_OFFER_ID)); -}; - -const getBalance = async (target, addr) => { - const { balances } = await agd.query('bank', 'balances', addr); - const { amount } = balances.find(({ denom }) => denom === target); - return Number(amount); -}; + await bankSend(VALIDATORADDR, GOV1ADDR, `${depositorAmt}${ATOM_DENOM}`), + await waitUntilAccountFunded( + GOV1ADDR, + ambientAuthority, + { denom: ATOM_DENOM, value: Number(depositorAmt) }, + { errorMessage: 'gov1 not funded yet', ...retryOpts }, + ); -const fundAccts = async ( - depositorAmt = '100000000', - bidderAmt = '100000000', -) => { - await Promise.all([ - bankSend(GOV1ADDR, `${depositorAmt}${ATOM_DENOM}`), - bankSend(USER1ADDR, `${bidderAmt}${ATOM_DENOM}`), - ]); + const user1Fund = config.bidsSetup[0].bidderFund; + await bankSend(GOV1ADDR, USER1ADDR, `${user1Fund.value}${user1Fund.denom}`); + await waitUntilAccountFunded(USER1ADDR, ambientAuthority, user1Fund, { + errorMessage: 'user1 not funded yet', + ...retryOpts, + }); - await Promise.all([ - waitUntilAccountFunded( - GOV1ADDR, - ambientAuthroity, - { denom: 'uist', value: Number(depositorAmt) }, - { errorMessage: 'gov1 not funded yet' }, - ), - waitUntilAccountFunded( - USER1ADDR, - ambientAuthroity, - { denom: ATOM_DENOM, value: Number(bidderAmt) }, - { errorMessage: 'user1 not funded yet' }, - ), - ]); + const gov3Fund = config.bidsSetup[1].bidderFund; + await bankSend(GOV1ADDR, GOV3ADDR, `${gov3Fund.value}${gov3Fund.denom}`); + await waitUntilAccountFunded(GOV3ADDR, ambientAuthority, gov3Fund, { + errorMessage: 'gov3 not funded yet', + ...retryOpts, + }); }; -const bidByPrice = (price, give, offerId) => { - agopsInter( +const bidByPrice = (price, give, offerId, bidder, t) => { + return agopsInter( 'bid', 'by-price', `--price ${price}`, `--give ${give}`, '--from', - USER1ADDR, + bidder, '--keyring-backend test', `--offer-id ${offerId}`, ); - - return waitUntilOfferResult(USER1ADDR, offerId, true, ambientAuthroity, { - errorMessage: 'bid not settled yet', - maxRetries: 10, - retryIntervalMs: 10000, - }); }; -const depositCollateral = async t => { - const fromBoard = makeFromBoard(); - const marshaller = boardSlottingMarshaller(fromBoard.convertSlotToVal); +const bidByDiscount = (discount, give, offerId, bidder, t) => { + return agopsInter( + 'bid', + 'by-discount', + `--discount ${discount}`, + `--give ${give}`, + '--from', + bidder, + '--keyring-backend test', + `--offer-id ${offerId}`, + ); +}; - const brandsRaw = await agoric.follow( - '-lF', - ':published.agoricNames.brand', - '-o', - 'text', +const placeBids = t => { + return [...config.bidsSetup].map( + ({ bidder, offerId, price, give, discount }) => { + if (price) return bidByPrice(price, give, offerId, bidder, t); + return bidByDiscount(discount, give, offerId, bidder, t); + }, ); +}; + +const depositCollateral = async t => { + const [brandsRaw, retryOptions] = await Promise.all([ + agoric.follow('-lF', ':published.agoricNames.brand', '-o', 'text'), + calculateRetryUntilNextStartTime(), + ]); const brands = Object.fromEntries( marshaller.fromCapData(JSON.parse(brandsRaw)), ); - t.log(brands); const offerSpec = { - id: DEPOSIT_OFFER_ID, + id: config.depositor.offerId, invitationSpec: { source: 'agoricContract', instancePath: ['auctioneer'], @@ -191,31 +216,174 @@ const depositCollateral = async t => { t.log('OFFER', offer); executeOffer(GOV1ADDR, offer); - return waitUntilOfferResult(GOV1ADDR, DEPOSIT_OFFER_ID, true, ambientAuthroity, { - errorMessage: 'proceeds not distributed yet', - maxRetries: 10, - retryIntervalMs: 10000, - }); + return waitUntilOfferResult( + GOV1ADDR, + config.depositor.offerId, + true, + ambientAuthority, + { + errorMessage: 'proceeds not distributed yet', + ...retryOptions, + }, + ); +}; + +const checkBidsOutcome = (settledBids, t, brands) => { + [...settledBids] + .map(bidResult => bidResult.status.payouts) + .forEach(({ Bid, Collateral }, i) => { + const { + payouts: { Bid: outcomeBidVal, Collateral: outcomeColVal }, + } = config.bidsOutcome[i]; + t.is( + AmountMath.isEqual( + Bid, + AmountMath.make(brands.IST, scale6(outcomeBidVal)), + ), + true, + ); + t.is( + AmountMath.isGTE( + Collateral, + AmountMath.make(brands.ATOM, scale6(outcomeColVal)), + ), + true, + ); + }); +}; + +const getCapturedPrice = async bookId => { + const result = await agoric.follow('-lF', `:published.auction.${bookId}`); + return result; +}; + +const checkPrice = (res, expected) => { + if (res.startPrice === null) return false; + else if (res.startPrice.numerator.value === expected) return true; + return false; +}; + +/** + * Calculates a set of retry options based on current auction params + */ +const calculateRetryUntilNextStartTime = async () => { + const schedule = await agoric.follow('-lF', ':published.auction.schedule'); + const nextStartTime = parseInt(schedule.nextStartTime.absValue); + + /** @type {RetryOptions} */ + const capturePriceRetryOpts = { + maxRetries: Math.round((nextStartTime * 1000 - Date.now()) / 10000) + 2, // wait until next schedule + retryIntervalMs: 10000, // 10 seconds in ms + }; + + return capturePriceRetryOpts; }; +test.before(async t => { + /** @type {RetryOptions} */ + const pushPriceRetryOpts = { + maxRetries: 5, // arbitrary + retryIntervalMs: 5000, // in ms + }; + + /** @type {RetryOptions} */ + const bankSendRetryOpts = { + maxRetries: 3, // arbitrary + retryIntervalMs: 3000, // in ms + }; + + // Get current round id + const round = await agoric.follow( + '-lF', + ':published.priceFeed.ATOM-USD_price_feed.latestRound', + ); + + t.context = { + roundId: parseInt(round.roundId), + retryOpts: { + bankSendRetryOpts, + pushPriceRetryOpts, + }, + }; +}); + test.only('run auction', async t => { - await setupOracles(t); - await fundAccts(); - const settleBidP = bidByPrice( - config.bidsSetup[1].price, - config.bidsSetup[1].give, - BID_OFFER_ID, + // Push the price to a point where only our bids can settle + await pushPricesForAuction(t); + + // Wait until next round starts. Retry error message is useful for debugging + const retryOptions = await calculateRetryUntilNextStartTime(); + await retryUntilCondition( + () => getCapturedPrice('book0'), + res => checkPrice(res, scale6(config.price).toString()), // scale price to uist + 'price not captured yet [AUCTION TEST]', + { + log: t.log, + ...ambientAuthority, + ...retryOptions, + }, ); - const proceedsP = depositCollateral(t); - await Promise.all([settleBidP, proceedsP]); + // Make sure depositor and bidders have enough balance + await fundAccts(config.depositor.depositValue, t); + const bidsP = placeBids(t); + const proceedsP = depositCollateral(t); - const [gov1Results, user1Results] = await Promise.all([ - agoric.follow('-lF', `:published.wallet.${GOV1ADDR}`), - agoric.follow('-lF', `:published.wallet.${USER1ADDR}`), + // Resolves when auction finalizes and depositor gets payouts + const [longLivingBidderAddr] = await Promise.all([ + getUser('long-living-bidder'), + ...bidsP, + proceedsP, ]); - t.log('GOV1', gov1Results.status.payouts); - t.log('USER1', user1Results.status.payouts); - t.log('DONE!'); - t.pass(); + + // Query wallets of the actors involved for assertions + const [gov1Results, longLivingBidResults, user1Results, gov3Results, brands] = + await Promise.all([ + agoric + .follow('-lF', `:published.wallet.${GOV1ADDR}`, '-o', 'text') + .then(res => marshaller.fromCapData(JSON.parse(res))), + agoric + .follow( + '-lF', + `:published.wallet.${longLivingBidderAddr}`, + '-o', + 'text', + ) + .then(res => marshaller.fromCapData(JSON.parse(res))), + agoric + .follow('-lF', `:published.wallet.${USER1ADDR}`, '-o', 'text') + .then(res => marshaller.fromCapData(JSON.parse(res))), + agoric + .follow('-lF', `:published.wallet.${GOV3ADDR}`, '-o', 'text') + .then(res => marshaller.fromCapData(JSON.parse(res))), + agoric + .follow('-lF', ':published.agoricNames.brand', '-o', 'text') + .then(res => + Object.fromEntries(marshaller.fromCapData(JSON.parse(res))), + ), + ]); + + // Assert depositor paid correctly + const { Bid: depositorBid, Collateral: depositorCol } = + gov1Results.status.payouts; + + t.is( + AmountMath.isEqual(depositorBid, AmountMath.make(brands.IST, 320_000_000n)), + true, + ); + + t.is( + AmountMath.isGTE( + AmountMath.make(brands.ATOM, 100_000_000n - 7_132_485n), + depositorCol, + ), + true, + ); + + // Assert bidders paid correctly + checkBidsOutcome( + [longLivingBidResults, user1Results, gov3Results], + t, + brands, + ); }); diff --git a/a3p-integration/proposals/z:acceptance/package.json b/a3p-integration/proposals/z:acceptance/package.json index fde9a21fc4d0..329bf232d87b 100644 --- a/a3p-integration/proposals/z:acceptance/package.json +++ b/a3p-integration/proposals/z:acceptance/package.json @@ -9,6 +9,7 @@ "type": "module", "license": "Apache-2.0", "dependencies": { + "@agoric/ertp": "0.16.3-u17.1", "@agoric/internal": "0.3.3-dev-5676146.0", "@agoric/synthetic-chain": "^0.2.1", "@endo/errors": "^1.2.2", diff --git a/a3p-integration/proposals/z:acceptance/scripts/test-vaults.mts b/a3p-integration/proposals/z:acceptance/scripts/test-vaults.mts index 7a1df695135c..7fdbcef510ab 100755 --- a/a3p-integration/proposals/z:acceptance/scripts/test-vaults.mts +++ b/a3p-integration/proposals/z:acceptance/scripts/test-vaults.mts @@ -15,9 +15,9 @@ import { setDebtLimit, } from '../lib/vaults.mjs'; -const START_FREQUENCY = 120; // StartFrequency: 600s (auction runs every 10m) -const CLOCK_STEP = 10; // ClockStep: 20s (ensures auction completes in time) -const PRICE_LOCK_PERIOD = 60; +const START_FREQUENCY = 600; // StartFrequency: 600s (auction runs every 10m) +const CLOCK_STEP = 20; // ClockStep: 20s (ensures auction completes in time) +const PRICE_LOCK_PERIOD = 300; const oraclesAddresses = [GOV1ADDR, GOV2ADDR]; const oracles = [] as { address: string; id: string }[]; diff --git a/a3p-integration/proposals/z:acceptance/test.sh b/a3p-integration/proposals/z:acceptance/test.sh index 0eb07f8af7f8..3e9de8bd73de 100755 --- a/a3p-integration/proposals/z:acceptance/test.sh +++ b/a3p-integration/proposals/z:acceptance/test.sh @@ -5,7 +5,7 @@ set -ueo pipefail # The effects of this step are not persisted in further proposal layers. # test the state right after the previous proposals -yarn ava initial.test.js +# yarn ava initial.test.js # XXX some of these tests have path dependencies so no globs yarn ava core-eval.test.js @@ -22,3 +22,6 @@ yarn ava valueVow.test.js echo ACCEPTANCE TESTING state sync ./state-sync-snapshots-test.sh ./genesis-test.sh + +echo ACCEPTANCE TESTING auction +yarn ava auction.test.js diff --git a/a3p-integration/proposals/z:acceptance/yarn.lock b/a3p-integration/proposals/z:acceptance/yarn.lock index aaf12baa475e..e7c2baa08639 100644 --- a/a3p-integration/proposals/z:acceptance/yarn.lock +++ b/a3p-integration/proposals/z:acceptance/yarn.lock @@ -26,6 +26,40 @@ __metadata: languageName: node linkType: hard +"@agoric/base-zone@npm:0.1.1-upgrade-17-dev-ec448b0.0+ec448b0": + version: 0.1.1-upgrade-17-dev-ec448b0.0 + resolution: "@agoric/base-zone@npm:0.1.1-upgrade-17-dev-ec448b0.0" + dependencies: + "@agoric/store": "npm:0.9.3-upgrade-17-dev-ec448b0.0+ec448b0" + "@endo/common": "npm:^1.2.5" + "@endo/errors": "npm:^1.2.5" + "@endo/exo": "npm:^1.5.3" + "@endo/far": "npm:^1.1.5" + "@endo/pass-style": "npm:^1.4.3" + "@endo/patterns": "npm:^1.4.3" + checksum: 10c0/b30362368bd2d29b12e19f4809023844a44ed512369cba37a27107b41f66c782d68cc58fde749089465d872bf435b73991792dbcf439c9e85591e2e187c4066f + languageName: node + linkType: hard + +"@agoric/ertp@npm:0.16.3-u17.1": + version: 0.16.3-u17.1 + resolution: "@agoric/ertp@npm:0.16.3-u17.1" + dependencies: + "@agoric/notifier": "npm:^0.7.0-u17.1" + "@agoric/store": "npm:^0.9.3-u17.1" + "@agoric/vat-data": "npm:^0.5.3-u17.1" + "@agoric/zone": "npm:^0.3.0-u17.1" + "@endo/errors": "npm:^1.2.5" + "@endo/eventual-send": "npm:^1.2.5" + "@endo/far": "npm:^1.1.5" + "@endo/marshal": "npm:^1.5.3" + "@endo/nat": "npm:^5.0.10" + "@endo/patterns": "npm:^1.4.3" + "@endo/promise-kit": "npm:^1.1.5" + checksum: 10c0/54a543dea2e4087214da76734146e3e5bfd1bb6f666110495c6e8c6bfe6bc11148e2a507906e255f8140debcb3f95b69a2cf2a960c3cba9b0e3a3ccc204014ab + languageName: node + linkType: hard + "@agoric/internal@npm:0.3.3-dev-5676146.0": version: 0.3.3-dev-5676146.0 resolution: "@agoric/internal@npm:0.3.3-dev-5676146.0" @@ -45,6 +79,41 @@ __metadata: languageName: node linkType: hard +"@agoric/internal@npm:0.4.0-upgrade-17-dev-ec448b0.0+ec448b0": + version: 0.4.0-upgrade-17-dev-ec448b0.0 + resolution: "@agoric/internal@npm:0.4.0-upgrade-17-dev-ec448b0.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-upgrade-17-dev-ec448b0.0+ec448b0" + "@endo/common": "npm:^1.2.5" + "@endo/errors": "npm:^1.2.5" + "@endo/far": "npm:^1.1.5" + "@endo/init": "npm:^1.1.4" + "@endo/marshal": "npm:^1.5.3" + "@endo/pass-style": "npm:^1.4.3" + "@endo/patterns": "npm:^1.4.3" + "@endo/promise-kit": "npm:^1.1.5" + "@endo/stream": "npm:^1.2.5" + anylogger: "npm:^0.21.0" + jessie.js: "npm:^0.3.4" + checksum: 10c0/141817835928f890d874aeebbddb59e0f88a8683f15691687a6888bcc44885eb678a931bfee10af5e913f77ae9c7078216eab4252dd14a0ef101c8211e7416ce + languageName: node + linkType: hard + +"@agoric/notifier@npm:^0.7.0-u17.1": + version: 0.7.0-upgrade-17-dev-ec448b0.0 + resolution: "@agoric/notifier@npm:0.7.0-upgrade-17-dev-ec448b0.0" + dependencies: + "@agoric/internal": "npm:0.4.0-upgrade-17-dev-ec448b0.0+ec448b0" + "@agoric/vat-data": "npm:0.5.3-upgrade-17-dev-ec448b0.0+ec448b0" + "@endo/errors": "npm:^1.2.5" + "@endo/far": "npm:^1.1.5" + "@endo/marshal": "npm:^1.5.3" + "@endo/patterns": "npm:^1.4.3" + "@endo/promise-kit": "npm:^1.1.5" + checksum: 10c0/af93e56e082342facdd87d5265dc7988d641f2d011da03b9c63563c99a9065676dd4d9f869d0a4d83d90bdc6e2c91ce7039aa036c887b8cdd4b454ac17393905 + languageName: node + linkType: hard + "@agoric/store@npm:0.9.3-dev-5676146.0+5676146": version: 0.9.3-dev-5676146.0 resolution: "@agoric/store@npm:0.9.3-dev-5676146.0" @@ -57,6 +126,40 @@ __metadata: languageName: node linkType: hard +"@agoric/store@npm:0.9.3-upgrade-17-dev-ec448b0.0+ec448b0, @agoric/store@npm:^0.9.3-u17.1": + version: 0.9.3-upgrade-17-dev-ec448b0.0 + resolution: "@agoric/store@npm:0.9.3-upgrade-17-dev-ec448b0.0" + dependencies: + "@endo/errors": "npm:^1.2.5" + "@endo/exo": "npm:^1.5.3" + "@endo/marshal": "npm:^1.5.3" + "@endo/pass-style": "npm:^1.4.3" + "@endo/patterns": "npm:^1.4.3" + checksum: 10c0/1ef22b1508979b5cdbed7a705fc84cb3f5d9d1a53afa34446d48c4b633d42a17881e7b8281e7c8458457d34889e9bab6e75acc5878bc4664390cd776dd8364a6 + languageName: node + linkType: hard + +"@agoric/swingset-liveslots@npm:0.10.3-upgrade-17-dev-ec448b0.0+ec448b0": + version: 0.10.3-upgrade-17-dev-ec448b0.0 + resolution: "@agoric/swingset-liveslots@npm:0.10.3-upgrade-17-dev-ec448b0.0" + dependencies: + "@agoric/internal": "npm:0.4.0-upgrade-17-dev-ec448b0.0+ec448b0" + "@agoric/store": "npm:0.9.3-upgrade-17-dev-ec448b0.0+ec448b0" + "@endo/env-options": "npm:^1.1.6" + "@endo/errors": "npm:^1.2.5" + "@endo/eventual-send": "npm:^1.2.5" + "@endo/exo": "npm:^1.5.3" + "@endo/far": "npm:^1.1.5" + "@endo/init": "npm:^1.1.4" + "@endo/marshal": "npm:^1.5.3" + "@endo/nat": "npm:^5.0.10" + "@endo/pass-style": "npm:^1.4.3" + "@endo/patterns": "npm:^1.4.3" + "@endo/promise-kit": "npm:^1.1.5" + checksum: 10c0/6ac445b9729f737f4a2a3f43f25b255df293e0e6df710920a3879d693da4240e968580cd70b1c2e7a92e38090afc47d2c5d990ed2f2535002734de1e84c63dab + languageName: node + linkType: hard + "@agoric/synthetic-chain@npm:^0.2.1": version: 0.2.1 resolution: "@agoric/synthetic-chain@npm:0.2.1" @@ -72,6 +175,33 @@ __metadata: languageName: node linkType: hard +"@agoric/vat-data@npm:0.5.3-upgrade-17-dev-ec448b0.0+ec448b0, @agoric/vat-data@npm:^0.5.3-u17.1": + version: 0.5.3-upgrade-17-dev-ec448b0.0 + resolution: "@agoric/vat-data@npm:0.5.3-upgrade-17-dev-ec448b0.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-upgrade-17-dev-ec448b0.0+ec448b0" + "@agoric/store": "npm:0.9.3-upgrade-17-dev-ec448b0.0+ec448b0" + "@agoric/swingset-liveslots": "npm:0.10.3-upgrade-17-dev-ec448b0.0+ec448b0" + "@endo/errors": "npm:^1.2.5" + "@endo/exo": "npm:^1.5.3" + "@endo/patterns": "npm:^1.4.3" + checksum: 10c0/6b7cf74253187971da6a79ff7e90e0256390233f79f1645f30c9267ab46095e93251bc012b8abde8161ef866904b22ce77aaf67c11976f2d7ce1ab5e0fd13c8e + languageName: node + linkType: hard + +"@agoric/zone@npm:^0.3.0-u17.1": + version: 0.3.0-upgrade-17-dev-ec448b0.0 + resolution: "@agoric/zone@npm:0.3.0-upgrade-17-dev-ec448b0.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-upgrade-17-dev-ec448b0.0+ec448b0" + "@agoric/vat-data": "npm:0.5.3-upgrade-17-dev-ec448b0.0+ec448b0" + "@endo/errors": "npm:^1.2.5" + "@endo/far": "npm:^1.1.5" + "@endo/pass-style": "npm:^1.4.3" + checksum: 10c0/0275010c155aa3e860ffb9d4de18d56db87f06552bbb9f2a81d4c678f9c503ac19c93eebe95fc727221209d889d5dc7853eaa70dc915edadb2943c3af87637d6 + languageName: node + linkType: hard + "@endo/base64@npm:^1.0.7": version: 1.0.7 resolution: "@endo/base64@npm:1.0.7" @@ -115,7 +245,7 @@ __metadata: languageName: node linkType: hard -"@endo/exo@npm:^1.2.1": +"@endo/exo@npm:^1.2.1, @endo/exo@npm:^1.5.3": version: 1.5.3 resolution: "@endo/exo@npm:1.5.3" dependencies: @@ -218,7 +348,7 @@ __metadata: languageName: node linkType: hard -"@endo/stream@npm:^1.1.0": +"@endo/stream@npm:^1.1.0, @endo/stream@npm:^1.2.5": version: 1.2.5 resolution: "@endo/stream@npm:1.2.5" dependencies: @@ -1844,7 +1974,7 @@ __metadata: languageName: node linkType: hard -"jessie.js@npm:^0.3.2": +"jessie.js@npm:^0.3.2, jessie.js@npm:^0.3.4": version: 0.3.4 resolution: "jessie.js@npm:0.3.4" dependencies: @@ -2511,6 +2641,7 @@ __metadata: version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: + "@agoric/ertp": "npm:0.16.3-u17.1" "@agoric/internal": "npm:0.3.3-dev-5676146.0" "@agoric/synthetic-chain": "npm:^0.2.1" "@endo/errors": "npm:^1.2.2"