@agoric/solo 0.10.3-dev-b8d6697.0 → 0.10.4-calypso-dev-84eb287.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ### [0.10.3](https://github.com/Agoric/agoric-sdk/compare/@agoric/solo@0.10.2...@agoric/solo@0.10.3) (2023-06-09)
7
+
8
+ **Note:** Version bump only for package @agoric/solo
9
+
10
+
11
+
12
+
13
+
6
14
  ### [0.10.2](https://github.com/Agoric/agoric-sdk/compare/@agoric/solo@0.10.1...@agoric/solo@0.10.2) (2023-06-02)
7
15
 
8
16
  **Note:** Version bump only for package @agoric/solo
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/solo",
3
- "version": "0.10.3-dev-b8d6697.0+b8d6697",
3
+ "version": "0.10.4-calypso-dev-84eb287.0+84eb287",
4
4
  "description": "Agoric's Solo vat runner",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,34 +15,33 @@
15
15
  "test:xs": "exit 0",
16
16
  "lint-fix": "yarn lint:eslint --fix",
17
17
  "lint": "run-s --continue-on-error lint:*",
18
- "lint:types": "tsc -p jsconfig.json",
18
+ "lint:types": "tsc",
19
19
  "lint:eslint": "eslint ."
20
20
  },
21
21
  "keywords": [],
22
22
  "author": "Agoric",
23
23
  "license": "Apache-2.0",
24
24
  "dependencies": {
25
- "@agoric/access-token": "0.4.22-dev-b8d6697.0+b8d6697",
26
- "@agoric/assert": "0.6.1-dev-b8d6697.0+b8d6697",
27
- "@agoric/cache": "0.3.3-dev-b8d6697.0+b8d6697",
28
- "@agoric/cosmic-swingset": "0.41.3-dev-b8d6697.0+b8d6697",
29
- "@agoric/internal": "0.3.3-dev-b8d6697.0+b8d6697",
30
- "@agoric/notifier": "0.6.3-dev-b8d6697.0+b8d6697",
31
- "@agoric/spawner": "0.6.9-dev-b8d6697.0+b8d6697",
32
- "@agoric/store": "0.9.3-dev-b8d6697.0+b8d6697",
33
- "@agoric/swing-store": "0.9.2-dev-b8d6697.0+b8d6697",
34
- "@agoric/swingset-vat": "0.32.3-dev-b8d6697.0+b8d6697",
35
- "@agoric/telemetry": "0.6.3-dev-b8d6697.0+b8d6697",
36
- "@agoric/time": "0.3.3-dev-b8d6697.0+b8d6697",
37
- "@agoric/vats": "0.15.1-dev-b8d6697.0+b8d6697",
38
- "@agoric/wallet": "0.18.3-dev-b8d6697.0+b8d6697",
39
- "@endo/captp": "^3.1.1",
40
- "@endo/eventual-send": "^0.17.2",
41
- "@endo/import-bundle": "^0.3.4",
42
- "@endo/init": "^0.5.56",
43
- "@endo/marshal": "^0.8.5",
44
- "@endo/promise-kit": "^0.2.56",
45
- "agoric": "0.21.1-dev-b8d6697.0+b8d6697",
25
+ "@agoric/access-token": "0.4.22-calypso-dev-84eb287.0+84eb287",
26
+ "@agoric/assert": "0.6.1-calypso-dev-84eb287.0+84eb287",
27
+ "@agoric/cache": "0.3.3-calypso-dev-84eb287.0+84eb287",
28
+ "@agoric/cosmic-swingset": "0.41.4-calypso-dev-84eb287.0+84eb287",
29
+ "@agoric/internal": "0.3.3-calypso-dev-84eb287.0+84eb287",
30
+ "@agoric/notifier": "0.6.3-calypso-dev-84eb287.0+84eb287",
31
+ "@agoric/spawner": "0.6.9-calypso-dev-84eb287.0+84eb287",
32
+ "@agoric/store": "0.9.3-calypso-dev-84eb287.0+84eb287",
33
+ "@agoric/swing-store": "0.9.2-calypso-dev-84eb287.0+84eb287",
34
+ "@agoric/swingset-vat": "0.32.3-calypso-dev-84eb287.0+84eb287",
35
+ "@agoric/telemetry": "0.6.3-calypso-dev-84eb287.0+84eb287",
36
+ "@agoric/time": "0.3.3-calypso-dev-84eb287.0+84eb287",
37
+ "@agoric/vats": "0.15.2-calypso-dev-84eb287.0+84eb287",
38
+ "@agoric/wallet": "0.18.4-calypso-dev-84eb287.0+84eb287",
39
+ "@endo/captp": "^4.2.0",
40
+ "@endo/eventual-send": "^1.2.2",
41
+ "@endo/import-bundle": "^1.1.2",
42
+ "@endo/init": "^1.1.2",
43
+ "@endo/marshal": "^1.5.0",
44
+ "@endo/promise-kit": "^1.1.2",
46
45
  "anylogger": "^0.21.0",
47
46
  "deterministic-json": "^1.0.5",
48
47
  "esm": "agoric-labs/esm#Agoric-built",
@@ -50,30 +49,36 @@
50
49
  "http-proxy-middleware": "^2.0.6",
51
50
  "import-meta-resolve": "^2.2.1",
52
51
  "minimist": "^1.2.0",
53
- "morgan": "^1.9.1",
52
+ "morgan": "^1.10.0",
54
53
  "node-fetch": "^2.6.0",
55
54
  "temp": "^0.9.1",
56
55
  "tmp": "^0.2.1",
57
56
  "ws": "^7.2.0"
58
57
  },
59
58
  "devDependencies": {
60
- "@agoric/ertp": "0.16.3-dev-b8d6697.0+b8d6697",
61
- "@endo/bundle-source": "^2.5.1",
59
+ "@agoric/ertp": "0.16.3-calypso-dev-84eb287.0+84eb287",
60
+ "@endo/bundle-source": "^3.2.3",
62
61
  "ava": "^5.3.0",
63
- "c8": "^7.13.0"
62
+ "c8": "^9.1.0"
64
63
  },
65
64
  "publishConfig": {
66
65
  "access": "public"
67
66
  },
68
67
  "engines": {
69
- "node": ">=14.15.0"
68
+ "node": "^18.12 || ^20.9"
70
69
  },
71
70
  "ava": {
72
71
  "files": [
73
- "test/**/test-*.js"
72
+ "test/**/*.test.*"
73
+ ],
74
+ "require": [
75
+ "@endo/init/debug.js"
74
76
  ],
75
77
  "timeout": "20m",
76
78
  "workerThreads": false
77
79
  },
78
- "gitHead": "b8d6697074b899630909440f0ea3caa519cdad44"
80
+ "typeCoverage": {
81
+ "atLeast": 73.11
82
+ },
83
+ "gitHead": "84eb287915c8255d68e845a9b6e10c790f0d54cb"
79
84
  }
package/public/main.js CHANGED
@@ -237,7 +237,6 @@ function run() {
237
237
  }
238
238
  call({ type: 'getHighestHistory' })
239
239
  .then(res => {
240
- // eslint-disable-next-line no-use-before-define
241
240
  setNextHistNum(res.highestHistory + 1);
242
241
  // console.debug(`nextHistNum is now ${nextHistNum}`, res);
243
242
  })
@@ -265,7 +264,7 @@ function run() {
265
264
  commands[commands.length - 1] = inp.value;
266
265
  commands[commands.length] = '';
267
266
  inp.value = '';
268
- call({ type: 'doEval', number, body: command });
267
+ void call({ type: 'doEval', number, body: command });
269
268
  }
270
269
 
271
270
  function inputKeyup(ev) {
package/src/add-chain.js CHANGED
@@ -13,7 +13,7 @@ const DEFAULT_CHAIN_CONFIG = 'https://testnet.agoric.com/network-config';
13
13
  /**
14
14
  * @param {string} basedir
15
15
  * @param {string} [chainConfig]
16
- * @param {boolean} [force=false]
16
+ * @param {boolean} [force]
17
17
  */
18
18
  async function addChain(basedir, chainConfig, force = false) {
19
19
  let actualConfig = chainConfig;
package/src/captp.js CHANGED
@@ -42,7 +42,9 @@ export const getCapTPHandler = (send, getLocalBootstrap, fallback) => {
42
42
  dispatch,
43
43
  abort,
44
44
  });
45
- doFallback('onOpen', obj, meta);
45
+ doFallback('onOpen', obj, meta).catch(e => {
46
+ console.error(`Error in fallback onOpen`, e);
47
+ });
46
48
  },
47
49
  onClose(obj, meta) {
48
50
  console.debug(`Finishing CapTP`, meta);
@@ -52,7 +54,9 @@ export const getCapTPHandler = (send, getLocalBootstrap, fallback) => {
52
54
  abort();
53
55
  }
54
56
  chans.delete(meta.channelHandle);
55
- doFallback('onClose', obj, meta);
57
+ doFallback('onClose', obj, meta).catch(e => {
58
+ console.error(`Error in fallback onClose`, e);
59
+ });
56
60
  },
57
61
  onError(obj, meta) {
58
62
  console.debug(`Error in CapTP`, meta, obj.error);
@@ -61,7 +65,9 @@ export const getCapTPHandler = (send, getLocalBootstrap, fallback) => {
61
65
  const { abort } = chan;
62
66
  abort(obj.error);
63
67
  }
64
- doFallback('onError', obj, meta);
68
+ doFallback('onError', obj, meta).catch(e => {
69
+ console.error(`Error in fallback onError`, e);
70
+ });
65
71
  },
66
72
  async onMessage(obj, meta) {
67
73
  console.debug('processing inbound', obj);
@@ -160,7 +160,7 @@ export async function connectToChain(
160
160
  );
161
161
 
162
162
  // The helper address may not have a token balance, and instead uses a
163
- // separate fee account, set up with something like:
163
+ // separate fee granter account, set up with something like:
164
164
  //
165
165
  // agd tx feegrant grant --period=5 --period-limit=200000uist \
166
166
  // $(cat cosmos-fee-account) $(cat ag-cosmos-helper-address)
@@ -172,7 +172,7 @@ export async function connectToChain(
172
172
  let lastGoodRpcHrefIndex = 0;
173
173
  async function retryRpcHref(tryOnce) {
174
174
  let rpcHrefIndex = lastGoodRpcHrefIndex;
175
- // eslint-disable-next-line no-constant-condition
175
+
176
176
  for await (const _ of forever) {
177
177
  const thisRpcHref = rpcHrefs[rpcHrefIndex];
178
178
 
@@ -257,7 +257,7 @@ export async function connectToChain(
257
257
  */
258
258
  const getMailboxNotifier = () => {
259
259
  const { notifier, updater } = makeNotifierKit();
260
- retryRpcHref(async rpcHref => {
260
+ void retryRpcHref(async rpcHref => {
261
261
  // Every time we enter this function, we are establishing a
262
262
  // new websocket to a potentially different RPC server.
263
263
  //
@@ -485,7 +485,7 @@ export async function connectToChain(
485
485
 
486
486
  waitForTxHash = subscribeAndWaitForTxHash;
487
487
  if (postponedTxHash) {
488
- subscribeAndWaitForTxHash(postponedTxHash);
488
+ void subscribeAndWaitForTxHash(postponedTxHash);
489
489
  }
490
490
 
491
491
  subscribeToStorage(`mailbox.${clientAddr}`, (err, storageValue) => {
@@ -652,7 +652,7 @@ ${chainID} chain does not yet know of address ${clientAddr}${adviseEgress(
652
652
 
653
653
  // Use the feeAccount for any fees.
654
654
  if (feeAccountAddr) {
655
- txArgs.push(`--fee-account=${feeAccountAddr}`);
655
+ txArgs.push(`--fee-granter=${feeAccountAddr}`);
656
656
  }
657
657
 
658
658
  // We just try a single delivery per block.
@@ -691,15 +691,20 @@ ${chainID} chain does not yet know of address ${clientAddr}${adviseEgress(
691
691
  // Wait for the transaction to be included in a block.
692
692
  const txHash = out.txhash;
693
693
 
694
- waitForTxHash(txHash).then(txResult => {
695
- // The result had an error code (not 0 or undefined for success).
696
- if (txResult.code) {
694
+ waitForTxHash(txHash)
695
+ .then(txResult => {
696
+ // The result had an error code (not 0 or undefined for success).
697
+ if (txResult.code) {
698
+ // eslint-disable-next-line no-use-before-define
699
+ failedSend(
700
+ assert.error(`Error in tx processing: ${txResult.log}`),
701
+ );
702
+ }
703
+ })
704
+ .catch(err =>
697
705
  // eslint-disable-next-line no-use-before-define
698
- failedSend(
699
- assert.error(`Error in tx processing: ${txResult.log}`),
700
- );
701
- }
702
- });
706
+ failedSend(assert.error(`Error in tx processing: ${err}`)),
707
+ );
703
708
 
704
709
  // We submitted the transaction to the mempool successfully.
705
710
  // Preemptively increment our sequence number to avoid needing to
@@ -721,9 +726,8 @@ ${chainID} chain does not yet know of address ${clientAddr}${adviseEgress(
721
726
  * @param {bigint} [lastMailboxUpdate]
722
727
  */
723
728
  const recurseEachMailboxUpdate = async (lastMailboxUpdate = undefined) => {
724
- const { updateCount, value: mailbox } = await mbNotifier.getUpdateSince(
725
- lastMailboxUpdate,
726
- );
729
+ const { updateCount, value: mailbox } =
730
+ await mbNotifier.getUpdateSince(lastMailboxUpdate);
727
731
  updateCount || Fail`${GCI} unexpectedly finished!`;
728
732
  if (mailbox) {
729
733
  const { outbox, ack } = mailbox;
@@ -777,11 +781,11 @@ ${chainID} chain does not yet know of address ${clientAddr}${adviseEgress(
777
781
  updateCount || Fail`Sending unexpectedly finished!`;
778
782
 
779
783
  await sendFromMessagePool().then(successfulSend, failedSend);
780
- recurseEachSend(updateCount);
784
+ void recurseEachSend(updateCount);
781
785
  };
782
786
 
783
787
  // Begin the sender when we get the first (empty) mailbox update.
784
- mbNotifier.getUpdateSince().then(() => recurseEachSend());
788
+ void mbNotifier.getUpdateSince().then(() => recurseEachSend());
785
789
 
786
790
  async function deliver(newMessages, acknum) {
787
791
  let doSend = false;
package/src/entrypoint.js CHANGED
@@ -7,7 +7,7 @@ import 'esm';
7
7
 
8
8
  // we need to enable Math.random as a workaround for 'brace-expansion' module
9
9
  // (dep chain: temp->glob->minimatch->brace-expansion)
10
- import '@endo/init';
10
+ import '@endo/init/legacy.js';
11
11
 
12
12
  import process from 'process';
13
13
  import path from 'path';
@@ -12,8 +12,7 @@ const console = anylogger('ag-solo:init');
12
12
 
13
13
  const DEFAULT_WALLET = '@agoric/wallet';
14
14
 
15
- const filename = new URL(import.meta.url).pathname;
16
- const dirname = path.dirname(filename);
15
+ const dirname = path.dirname(new URL(import.meta.url).pathname);
17
16
 
18
17
  /**
19
18
  * @param {string} basedir
@@ -55,7 +54,7 @@ export default function initBasedir(
55
54
  `${JSON.stringify(connections)}\n`,
56
55
  );
57
56
  const dstHtmldir = path.join(basedir, 'html');
58
- fs.mkdirSync(dstHtmldir);
57
+ fs.mkdirSync(dstHtmldir, { recursive: true });
59
58
 
60
59
  // Save the configuration options.
61
60
  fs.writeFileSync(path.join(basedir, 'options.json'), JSON.stringify(options));
@@ -1,7 +1,7 @@
1
1
  /* global process */
2
2
  // @ts-check
3
3
  import '@endo/init/pre-bundle-source.js';
4
- import '@endo/init';
4
+ import '@endo/init/unsafe-fast.js';
5
5
 
6
6
  import { parse, stringify } from '@endo/marshal';
7
7
  import { makePromiseKit } from '@endo/promise-kit';
@@ -29,6 +29,7 @@ const main = async () => {
29
29
  mutex.resolve(undefined);
30
30
  return;
31
31
  }
32
+ /** @type {any} */
32
33
  const as = parse(`${msg}`);
33
34
  deliverator(...as).then(() => send('go'));
34
35
  });
@@ -59,7 +60,13 @@ const main = async () => {
59
60
  send('go');
60
61
  };
61
62
 
62
- main().catch(e => {
63
- console.error(e);
64
- process.exitCode = 1;
65
- });
63
+ process.exitCode = 1;
64
+ main().then(
65
+ () => {
66
+ process.exitCode = 0;
67
+ },
68
+ err => {
69
+ console.error('Failed with', err);
70
+ process.exit(process.exitCode || 1);
71
+ },
72
+ );
package/src/pipe.js CHANGED
@@ -7,8 +7,7 @@ import { parse, stringify } from '@endo/marshal';
7
7
 
8
8
  import { makeShutdown } from '@agoric/internal/src/node/shutdown.js';
9
9
 
10
- const filename = new URL(import.meta.url).pathname;
11
- const dirname = path.dirname(filename);
10
+ const dirname = path.dirname(new URL(import.meta.url).pathname);
12
11
 
13
12
  export const connectToPipe = async ({ method, args, deliverInboundToMbx }) => {
14
13
  // console.log('connectToPipe', method, args);
@@ -31,6 +30,7 @@ export const connectToPipe = async ({ method, args, deliverInboundToMbx }) => {
31
30
  return;
32
31
  }
33
32
  // console.log('pipe.js', msg);
33
+ /** @type {any} */
34
34
  const as = parse(`${msg}`);
35
35
  deliverInboundToMbx(...as).then(() => cp.send('go'));
36
36
  });
package/src/start.js CHANGED
@@ -371,10 +371,13 @@ const deployWallet = async ({ agWallet, deploys, hostport }) => {
371
371
 
372
372
  // Use the same verbosity as our caller did for us.
373
373
  let verbosity;
374
- if (process.env.DEBUG === undefined) {
375
- verbosity = [];
376
- } else if (process.env.DEBUG.includes('agoric')) {
374
+ const DEBUG_LIST = (process.env.DEBUG || '').split(',');
375
+ if (
376
+ DEBUG_LIST.find(selector => ['agoric:debug', 'agoric'].includes(selector))
377
+ ) {
377
378
  verbosity = ['-vv'];
379
+ } else if (DEBUG_LIST.includes('agoric:info') || process.env.DEBUG === '') {
380
+ verbosity = [];
378
381
  } else {
379
382
  verbosity = ['-v'];
380
383
  }
@@ -471,7 +474,7 @@ const start = async (basedir, argv) => {
471
474
 
472
475
  // Start timer here!
473
476
  startTimer(800);
474
- resetOutdatedState();
477
+ await resetOutdatedState();
475
478
 
476
479
  // Remove wallet traces.
477
480
  await unlink('html/wallet').catch(_ => {});
@@ -485,8 +488,14 @@ const start = async (basedir, argv) => {
485
488
  const { 'agoric-wallet': { htmlBasedir = 'ui/build', deploy = [] } = {} } =
486
489
  JSON.parse(fs.readFileSync(pjs, 'utf-8'));
487
490
 
491
+ const htmlBasePath = String(htmlBasedir).replace(
492
+ /^\.\.\/\.\.\/node_modules\//,
493
+ '',
494
+ );
495
+
488
496
  const agWallet = path.dirname(pjs);
489
- const agWalletHtml = path.resolve(agWallet, htmlBasedir);
497
+ const agWalletHtmlUrl = await importMetaResolve(htmlBasePath, packageUrl);
498
+ const agWalletHtml = new URL(agWalletHtmlUrl).pathname;
490
499
 
491
500
  let hostport;
492
501
  await Promise.all(
package/src/vat-http.js CHANGED
@@ -106,8 +106,8 @@ export function buildRootObject(vatPowers) {
106
106
  setCommandDevice(d) {
107
107
  commandDevice = d;
108
108
 
109
- const replHandler = getReplHandler(replObjects, send, vatPowers);
110
- registerURLHandler(replHandler, '/private/repl');
109
+ const replHandler = getReplHandler(replObjects, send);
110
+ void registerURLHandler(replHandler, '/private/repl');
111
111
 
112
112
  // Assign the captp handler.
113
113
  const captpHandler = Far('captpHandler', {
@@ -126,7 +126,7 @@ export function buildRootObject(vatPowers) {
126
126
  return harden(exported);
127
127
  },
128
128
  });
129
- registerURLHandler(captpHandler, '/private/captp');
129
+ void registerURLHandler(captpHandler, '/private/captp');
130
130
  },
131
131
 
132
132
  registerURLHandler,
package/src/web.js CHANGED
@@ -9,6 +9,7 @@ import { createProxyMiddleware } from 'http-proxy-middleware';
9
9
  import WebSocket from 'ws';
10
10
  import anylogger from 'anylogger';
11
11
  import morgan from 'morgan';
12
+ import { format as urlFormat } from 'url';
12
13
 
13
14
  import { getAccessToken } from '@agoric/access-token';
14
15
 
@@ -148,21 +149,29 @@ export async function makeHTTPListener(
148
149
  const htmldir = path.join(basedir, 'html');
149
150
  log(`Serving static files from ${htmldir}`);
150
151
  app.use(express.static(htmldir));
151
- app.use(express.static(new URL('../public', import.meta.url).pathname));
152
+ const soloHtmlDir = new URL('../public', import.meta.url).pathname;
153
+ app.use(express.static(soloHtmlDir));
152
154
 
153
155
  if (walletHtmlDir && !bridgeTarget) {
154
- // Transition localStorage based bridge
156
+ // Guide all callers to /wallet/bridge.html
155
157
  if (existsSync(path.join(walletHtmlDir, 'bridge.html'))) {
156
- console.log('redirecting wallet bridge');
158
+ console.log('redirecting /wallet-bridge.html to /wallet/bridge.html');
157
159
  app.get('/wallet-bridge.html', (req, res) =>
158
- res.redirect('/wallet/bridge.html'),
160
+ res.redirect(
161
+ urlFormat({ pathname: '/wallet/bridge.html', query: req.query }),
162
+ ),
163
+ );
164
+ } else {
165
+ console.log('serving /wallet/bridge.html from solo wallet-bridge.html');
166
+ app.get('/wallet/bridge.html', (_, res) =>
167
+ res.sendFile(path.resolve(soloHtmlDir, 'wallet-bridge.html')),
159
168
  );
160
169
  }
161
170
 
162
171
  // Serve the wallet directory.
163
172
  app.use('/wallet', express.static(walletHtmlDir));
164
173
 
165
- // Default GETs to /wallet/index.html for history routing.
174
+ // Default non-bridge GETs to /wallet/index.html for history routing.
166
175
  app.get('/wallet/*', (_, res) =>
167
176
  res.sendFile(path.resolve(walletHtmlDir, 'index.html')),
168
177
  );
@@ -108,7 +108,7 @@ export async function makeFixture(PORT, noisy = false) {
108
108
  // We only reject if the child exits before CapTP is established.
109
109
  reject(Error(`CapTP fixture exited with ${code}`));
110
110
  });
111
- tryConnect(resolve, reject);
111
+ void tryConnect(resolve, reject);
112
112
  });
113
113
  }
114
114
 
@@ -5,7 +5,6 @@ import { test } from '@agoric/swingset-vat/tools/prepare-test-env-ava.js';
5
5
  import bundleSourceAmbient from '@endo/bundle-source';
6
6
  import { AmountMath } from '@agoric/ertp';
7
7
  import { TimeMath } from '@agoric/time';
8
- import { Stable } from '@agoric/vats/src/tokens.js';
9
8
  import { Far } from '@endo/marshal';
10
9
  import { resolve as importMetaResolve } from 'import-meta-resolve';
11
10
 
@@ -13,6 +12,21 @@ import { makeFixture, E } from './captp-fixture.js';
13
12
 
14
13
  const SOLO_PORT = 7999;
15
14
 
15
+ // XXX test depends on this exact value from the Inter Protocol economy,
16
+ // by way of agoric-cli (which this test covertly depends upon)
17
+ export const Stable = harden(
18
+ /** @type {const } */ ({
19
+ symbol: 'IST',
20
+ denom: 'uist',
21
+ proposedName: 'Agoric stable token',
22
+ assetKind: 'nat',
23
+ displayInfo: {
24
+ decimalPlaces: 6,
25
+ assetKind: 'nat',
26
+ },
27
+ }),
28
+ );
29
+
16
30
  //#region setup (ambient authority is confined to this region)
17
31
  test.before('setup', async t => {
18
32
  const loadBundle = async specifier => {
@@ -81,9 +95,8 @@ test.serial('home.wallet - receive zoe invite', async t => {
81
95
  '@agoric/zoe/src/contracts/automaticRefund.js',
82
96
  );
83
97
  const installationHandle = await E(zoe).install(bundle);
84
- const { creatorInvitation: invite } = await E(zoe).startInstance(
85
- installationHandle,
86
- );
98
+ const { creatorInvitation: invite } =
99
+ await E(zoe).startInstance(installationHandle);
87
100
 
88
101
  // Check that the wallet knows about the Zoe invite issuer and starts out
89
102
  // with a default Zoe invite issuer purse.
@@ -141,7 +154,7 @@ test.serial('home.localTimerService makeNotifier', async t => {
141
154
  const notifier = E(localTimerService).makeNotifier(1n, 1n);
142
155
  const update1 = await E(notifier).getUpdateSince();
143
156
  const firstUpdate = update1.updateCount;
144
- t.truthy(firstUpdate > 0);
157
+ t.true(firstUpdate > 0);
145
158
  const update2 = await E(notifier).getUpdateSince(update1.updateCount);
146
159
  t.truthy(BigInt(update2.updateCount) > BigInt(firstUpdate));
147
160
 
File without changes