@agoric/vats 0.14.1-dev-bf4b59f.0 → 0.14.1-dev-fb2c249.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/vats",
3
- "version": "0.14.1-dev-bf4b59f.0+bf4b59f",
3
+ "version": "0.14.1-dev-fb2c249.0+fb2c249",
4
4
  "description": "Agoric's Vat library",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -28,19 +28,19 @@
28
28
  "author": "Agoric",
29
29
  "license": "Apache-2.0",
30
30
  "dependencies": {
31
- "@agoric/assert": "0.6.1-dev-bf4b59f.0+bf4b59f",
32
- "@agoric/ertp": "0.16.1-dev-bf4b59f.0+bf4b59f",
33
- "@agoric/governance": "0.10.1-dev-bf4b59f.0+bf4b59f",
34
- "@agoric/inter-protocol": "0.14.1-dev-bf4b59f.0+bf4b59f",
35
- "@agoric/internal": "0.3.1-dev-bf4b59f.0+bf4b59f",
36
- "@agoric/notifier": "0.6.1-dev-bf4b59f.0+bf4b59f",
37
- "@agoric/sharing-service": "0.2.10-dev-bf4b59f.0+bf4b59f",
38
- "@agoric/store": "0.9.1-dev-bf4b59f.0+bf4b59f",
39
- "@agoric/swingset-vat": "0.32.1-dev-bf4b59f.0+bf4b59f",
40
- "@agoric/time": "0.3.1-dev-bf4b59f.0+bf4b59f",
41
- "@agoric/vat-data": "0.5.1-dev-bf4b59f.0+bf4b59f",
42
- "@agoric/zoe": "0.26.1-dev-bf4b59f.0+bf4b59f",
43
- "@agoric/zone": "0.2.1-dev-bf4b59f.0+bf4b59f",
31
+ "@agoric/assert": "0.6.1-dev-fb2c249.0+fb2c249",
32
+ "@agoric/ertp": "0.16.1-dev-fb2c249.0+fb2c249",
33
+ "@agoric/governance": "0.10.1-dev-fb2c249.0+fb2c249",
34
+ "@agoric/inter-protocol": "0.14.1-dev-fb2c249.0+fb2c249",
35
+ "@agoric/internal": "0.3.1-dev-fb2c249.0+fb2c249",
36
+ "@agoric/notifier": "0.6.1-dev-fb2c249.0+fb2c249",
37
+ "@agoric/sharing-service": "0.2.10-dev-fb2c249.0+fb2c249",
38
+ "@agoric/store": "0.9.1-dev-fb2c249.0+fb2c249",
39
+ "@agoric/swingset-vat": "0.32.1-dev-fb2c249.0+fb2c249",
40
+ "@agoric/time": "0.3.1-dev-fb2c249.0+fb2c249",
41
+ "@agoric/vat-data": "0.5.1-dev-fb2c249.0+fb2c249",
42
+ "@agoric/zoe": "0.26.1-dev-fb2c249.0+fb2c249",
43
+ "@agoric/zone": "0.2.1-dev-fb2c249.0+fb2c249",
44
44
  "@endo/far": "^0.2.18",
45
45
  "@endo/import-bundle": "^0.3.4",
46
46
  "@endo/init": "^0.5.56",
@@ -50,11 +50,11 @@
50
50
  "jessie.js": "^0.3.2"
51
51
  },
52
52
  "devDependencies": {
53
- "@agoric/cosmic-swingset": "0.41.1-dev-bf4b59f.0+bf4b59f",
54
- "@agoric/deploy-script-support": "0.10.1-dev-bf4b59f.0+bf4b59f",
55
- "@agoric/smart-wallet": "0.5.1-dev-bf4b59f.0+bf4b59f",
56
- "@agoric/swing-store": "0.9.1-dev-bf4b59f.0+bf4b59f",
57
- "@agoric/swingset-liveslots": "0.10.1-dev-bf4b59f.0+bf4b59f",
53
+ "@agoric/cosmic-swingset": "0.41.1-dev-fb2c249.0+fb2c249",
54
+ "@agoric/deploy-script-support": "0.10.1-dev-fb2c249.0+fb2c249",
55
+ "@agoric/smart-wallet": "0.5.1-dev-fb2c249.0+fb2c249",
56
+ "@agoric/swing-store": "0.9.1-dev-fb2c249.0+fb2c249",
57
+ "@agoric/swingset-liveslots": "0.10.1-dev-fb2c249.0+fb2c249",
58
58
  "@endo/bundle-source": "^2.5.1",
59
59
  "@endo/captp": "^3.1.1",
60
60
  "@endo/stream": "^0.3.25",
@@ -83,5 +83,5 @@
83
83
  "timeout": "20m",
84
84
  "workerThreads": false
85
85
  },
86
- "gitHead": "bf4b59f2128aca73d786429c6ef4a7c9cdfb6700"
86
+ "gitHead": "fb2c24900340da870b85f4bb1dd132d8bf97e139"
87
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vat-bank.d.ts","sourceRoot":"","sources":["vat-bank.js"],"names":[],"mappings":"AAozBA;IASI;;;;;;OAMG;yCALQ,KAAK,OAAO,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;gBAG3C,OAAO,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC;;QAnPhE;;;;WAIG;gCADU,kBAAkB,eAAe,CAAC;QAS/C;;;;WAIG;gDAHQ,MAAM,UACN,cAAc,GACZ,OAAO,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QAkBpD;;;;;;WAMG;4CAHQ,MAAM,GACJ,QAAQ,MAAM,GAAG,IAAI,CAAC;QAenC;;;;;;;;;;;WAWG;wBAJQ,MAAM,cACN,MAAM,gBACN,MAAM;;;QA2EjB;;;;;WAKG;mCAFQ,MAAM,GACJ,QAAQ,IAAI,CAAC;;QA5I1B;;;;WAIG;gCADU,kBAAkB,eAAe,CAAC;QAS/C;;;;WAIG;gDAHQ,MAAM,UACN,cAAc,GACZ,OAAO,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QAkBpD;;;;;;WAMG;4CAHQ,MAAM,GACJ,QAAQ,MAAM,GAAG,IAAI,CAAC;QAenC;;;;;;;;;;;WAWG;wBAJQ,MAAM,cACN,MAAM,gBACN,MAAM;;;QA2EjB;;;;;WAKG;mCAFQ,MAAM,GACJ,QAAQ,IAAI,CAAC;;;IAmG5B;;;;;;OAMG;yCALQ,KAAK,OAAO,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;gBAG3C,OAAO,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC;;QAnPhE;;;;WAIG;gCADU,kBAAkB,eAAe,CAAC;QAS/C;;;;WAIG;gDAHQ,MAAM,UACN,cAAc,GACZ,OAAO,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QAkBpD;;;;;;WAMG;4CAHQ,MAAM,GACJ,QAAQ,MAAM,GAAG,IAAI,CAAC;QAenC;;;;;;;;;;;WAWG;wBAJQ,MAAM,cACN,MAAM,gBACN,MAAM;;;QA2EjB;;;;;WAKG;mCAFQ,MAAM,GACJ,QAAQ,IAAI,CAAC;;QA5I1B;;;;WAIG;gCADU,kBAAkB,eAAe,CAAC;QAS/C;;;;WAIG;gDAHQ,MAAM,UACN,cAAc,GACZ,OAAO,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QAkBpD;;;;;;WAMG;4CAHQ,MAAM,GACJ,QAAQ,MAAM,GAAG,IAAI,CAAC;QAenC;;;;;;;;;;;WAWG;wBAJQ,MAAM,cACN,MAAM,gBACN,MAAM;;;QA2EjB;;;;;WAKG;mCAFQ,MAAM,GACJ,QAAQ,IAAI,CAAC;;GAmJ/B;AAtgBD;;GAEG;AAEH;;;;;;;GAOG;AAEH;;;;;GAKG;AAEH;;;;;;GAMG;AAEH,4DAGG;qCAtWU,OAAO,iBAAiB,EAAE,sBAAsB;2BAChD,QAAQ,WAAW,WAAW,0BAA0B,CAAC,CAAC,CAAC;;oBAKlD,MAAM,UAAU,MAAM,KAAK,IAAI;;4BAOvC,KAAK,OAAO,YAAY,EAAE,mBAAmB,EAAE,YAAY,GAAG,UAAU,CAAC;;;YA6SzE,KAAK,OAAO,CAAC,CAAC,CAAC;WACf,MAAM,CAAC,CAAC;;0BAaT,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;CAAE;;WAK5D,KAAK;YACL,KAAK,MAAM,CAAC;gBACZ,MAAM;WACN,MAAM;kBACN,MAAM;;wBAIN,eAAe,GAAG;IAC/B,MAAU,EAAE,OAAO,KAAK,CAAC,CAAC;IAC1B,WAAe,EAAE,WAAW,CAAC;CAC1B;;;;;;0BAKU,MAAM,kBAAkB,eAAe,CAAC;;;;;sBAEhC,KAAK,KAAK,QAAQ,YAAY,CAAC"}
1
+ {"version":3,"file":"vat-bank.d.ts","sourceRoot":"","sources":["vat-bank.js"],"names":[],"mappings":"AA+zBA;IASI;;;;;;OAMG;yCALQ,KAAK,OAAO,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;gBAG3C,OAAO,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC;;QAnPhE;;;;WAIG;gCADU,kBAAkB,eAAe,CAAC;QAS/C;;;;WAIG;gDAHQ,MAAM,UACN,cAAc,GACZ,OAAO,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QAkBpD;;;;;;WAMG;4CAHQ,MAAM,GACJ,QAAQ,MAAM,GAAG,IAAI,CAAC;QAenC;;;;;;;;;;;WAWG;wBAJQ,MAAM,cACN,MAAM,gBACN,MAAM;;;QA2EjB;;;;;WAKG;mCAFQ,MAAM,GACJ,QAAQ,IAAI,CAAC;;QA5I1B;;;;WAIG;gCADU,kBAAkB,eAAe,CAAC;QAS/C;;;;WAIG;gDAHQ,MAAM,UACN,cAAc,GACZ,OAAO,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QAkBpD;;;;;;WAMG;4CAHQ,MAAM,GACJ,QAAQ,MAAM,GAAG,IAAI,CAAC;QAenC;;;;;;;;;;;WAWG;wBAJQ,MAAM,cACN,MAAM,gBACN,MAAM;;;QA2EjB;;;;;WAKG;mCAFQ,MAAM,GACJ,QAAQ,IAAI,CAAC;;;IAmG5B;;;;;;OAMG;yCALQ,KAAK,OAAO,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;gBAG3C,OAAO,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC;;QAnPhE;;;;WAIG;gCADU,kBAAkB,eAAe,CAAC;QAS/C;;;;WAIG;gDAHQ,MAAM,UACN,cAAc,GACZ,OAAO,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QAkBpD;;;;;;WAMG;4CAHQ,MAAM,GACJ,QAAQ,MAAM,GAAG,IAAI,CAAC;QAenC;;;;;;;;;;;WAWG;wBAJQ,MAAM,cACN,MAAM,gBACN,MAAM;;;QA2EjB;;;;;WAKG;mCAFQ,MAAM,GACJ,QAAQ,IAAI,CAAC;;QA5I1B;;;;WAIG;gCADU,kBAAkB,eAAe,CAAC;QAS/C;;;;WAIG;gDAHQ,MAAM,UACN,cAAc,GACZ,OAAO,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QAkBpD;;;;;;WAMG;4CAHQ,MAAM,GACJ,QAAQ,MAAM,GAAG,IAAI,CAAC;QAenC;;;;;;;;;;;WAWG;wBAJQ,MAAM,cACN,MAAM,gBACN,MAAM;;;QA2EjB;;;;;WAKG;mCAFQ,MAAM,GACJ,QAAQ,IAAI,CAAC;;GAmJ/B;AAhhBD;;GAEG;AAEH;;;;;;;GAOG;AAEH;;;;;GAKG;AAEH;;;;;;GAMG;AAEH,4DAGG;qCAtWU,OAAO,iBAAiB,EAAE,sBAAsB;2BAChD,QAAQ,WAAW,WAAW,0BAA0B,CAAC,CAAC,CAAC;;oBAKlD,MAAM,UAAU,MAAM,KAAK,IAAI;;4BAOvC,KAAK,OAAO,YAAY,EAAE,mBAAmB,EAAE,YAAY,GAAG,UAAU,CAAC;;;YA6SzE,KAAK,OAAO,CAAC,CAAC,CAAC;WACf,MAAM,CAAC,CAAC;;0BAaT,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;CAAE;;WAK5D,KAAK;YACL,KAAK,MAAM,CAAC;gBACZ,MAAM;WACN,MAAM;kBACN,MAAM;;wBAIN,eAAe,GAAG;IAC/B,MAAU,EAAE,OAAO,KAAK,CAAC,CAAC;IAC1B,WAAe,EAAE,WAAW,CAAC;CAC1B;;;;;;0BAKU,MAAM,kBAAkB,eAAe,CAAC;;;;;sBAEhC,KAAK,KAAK,QAAQ,YAAY,CAAC"}
package/src/vat-bank.js CHANGED
@@ -1,6 +1,7 @@
1
1
  // @ts-check
2
2
  import { AmountMath, AssetKind, BrandShape } from '@agoric/ertp';
3
- import { E, Far } from '@endo/far';
3
+ import { deeplyFulfilledObject } from '@agoric/internal';
4
+ import { prepareGuardedAttenuator } from '@agoric/internal/src/callback.js';
4
5
  import {
5
6
  IterableEachTopicI,
6
7
  makeNotifierKit,
@@ -10,8 +11,8 @@ import {
10
11
  } from '@agoric/notifier';
11
12
  import { M, provideLazy } from '@agoric/store';
12
13
  import { makeDurableZone } from '@agoric/zone/durable.js';
13
- import { prepareGuardedAttenuator } from '@agoric/internal/src/callback.js';
14
- import { deeplyFulfilledObject } from '@agoric/internal';
14
+ import { E, Far } from '@endo/far';
15
+ import { makeAtomicProvider } from '@agoric/store/src/stores/store-utils.js';
15
16
  import { BridgeHandlerI, BridgeScopedManagerI } from './bridge.js';
16
17
  import {
17
18
  makeVirtualPurseKitIKit,
@@ -404,6 +405,14 @@ const prepareBank = (
404
405
  const makeBalanceUpdater = prepareBalanceUpdater(zone);
405
406
  const makeBankPurseController = prepareBankPurseController(zone);
406
407
 
408
+ // Using a `purseProvider` singleton requires a single map with composite keys
409
+ // (which we emulate, since we know both address and denom are JSONable). If
410
+ // we decide to partition the provider and use `brandToVPurse` directly, we'd
411
+ // need ephemera for each `makeBank` call.
412
+ const addressDenomToPurse = zone.mapStore('addressDenomToPurse');
413
+ /** @type {import('@agoric/store/src/stores/store-utils.js').AtomicProvider<string, VirtualPurse>} */
414
+ const purseProvider = makeAtomicProvider(addressDenomToPurse);
415
+
407
416
  const makeBank = zone.exoClass(
408
417
  'Bank',
409
418
  BankI,
@@ -443,6 +452,7 @@ const prepareBank = (
443
452
  this.state.assetSubscriber,
444
453
  );
445
454
  },
455
+ /** @param {Brand} brand */
446
456
  async getPurse(brand) {
447
457
  const {
448
458
  bankChannel,
@@ -451,54 +461,55 @@ const prepareBank = (
451
461
  brandToAssetRecord,
452
462
  denomToAddressUpdater,
453
463
  } = this.state;
454
-
455
464
  if (brandToVPurse.has(brand)) {
456
465
  return brandToVPurse.get(brand);
457
466
  }
458
467
 
459
- /** @param {ERef<VirtualPurse>} purseP */
460
- const keepPurse = async purseP => {
461
- const purse = await purseP;
462
- // Need to recheck as we may have raced with another call.
463
- if (brandToVPurse.has(brand)) {
464
- return brandToVPurse.get(brand);
468
+ const assetRecord = brandToAssetRecord.get(brand);
469
+ // Create a composite key that doesn't rely on the contents of the
470
+ // address and denom, only that they are strings.
471
+ const providerKey = JSON.stringify([address, assetRecord.denom]);
472
+
473
+ /** @type {() => Promise<VirtualPurse>} */
474
+ const makePurse = async () => {
475
+ if (!bankChannel) {
476
+ // Just emulate with a real purse.
477
+ return E(assetRecord.issuer).makeEmptyPurse();
465
478
  }
466
- brandToVPurse.init(brand, purse);
467
- return purse;
479
+ const addressToUpdater = denomToAddressUpdater.get(assetRecord.denom);
480
+
481
+ /** @type {PublishKit<Amount>} */
482
+ const { publisher, subscriber } = makePublishKit();
483
+ const balanceUpdater = makeBalanceUpdater(brand, publisher);
484
+ addressToUpdater.init(address, balanceUpdater);
485
+ // Get the initial balance.
486
+ const balanceString = await bankChannel.toBridge({
487
+ type: 'VBANK_GET_BALANCE',
488
+ address,
489
+ denom: assetRecord.denom,
490
+ });
491
+ balanceUpdater.update(balanceString);
492
+
493
+ // Create and return the virtual purse.
494
+ const vpc = makeBankPurseController(
495
+ bankChannel,
496
+ assetRecord.denom,
497
+ brand,
498
+ address,
499
+ subscriber,
500
+ );
501
+ return makeVirtualPurse(vpc, assetRecord);
468
502
  };
469
503
 
470
- const assetRecord = brandToAssetRecord.get(brand);
471
- if (!bankChannel) {
472
- // Just emulate with a real purse.
473
- return keepPurse(E(assetRecord.issuer).makeEmptyPurse());
474
- }
475
-
476
- const addressToUpdater = denomToAddressUpdater.get(assetRecord.denom);
477
-
478
- /** @type {PublishKit<Amount>} */
479
- const { publisher, subscriber } = makePublishKit();
480
- const balanceUpdater = makeBalanceUpdater(brand, publisher);
481
-
482
- // Abort if we lost the race to another call.
483
- addressToUpdater.init(address, balanceUpdater);
484
-
485
- // Get the initial balance.
486
- const balanceString = await bankChannel.toBridge({
487
- type: 'VBANK_GET_BALANCE',
488
- address,
489
- denom: assetRecord.denom,
490
- });
491
- balanceUpdater.update(balanceString);
492
-
493
- // Create and return the virtual purse.
494
- const vpc = makeBankPurseController(
495
- bankChannel,
496
- assetRecord.denom,
497
- brand,
498
- address,
499
- subscriber,
504
+ return purseProvider.provideAsync(
505
+ providerKey,
506
+ makePurse,
507
+ async (_key, purse) => {
508
+ // Move it from the provider to this Exo's storage
509
+ brandToVPurse.init(brand, purse);
510
+ addressDenomToPurse.delete(providerKey);
511
+ },
500
512
  );
501
- return keepPurse(makeVirtualPurse(vpc, assetRecord));
502
513
  },
503
514
  },
504
515
  );