@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 +20 -20
- package/src/vat-bank.d.ts.map +1 -1
- package/src/vat-bank.js +54 -43
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/vats",
|
|
3
|
-
"version": "0.14.1-dev-
|
|
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-
|
|
32
|
-
"@agoric/ertp": "0.16.1-dev-
|
|
33
|
-
"@agoric/governance": "0.10.1-dev-
|
|
34
|
-
"@agoric/inter-protocol": "0.14.1-dev-
|
|
35
|
-
"@agoric/internal": "0.3.1-dev-
|
|
36
|
-
"@agoric/notifier": "0.6.1-dev-
|
|
37
|
-
"@agoric/sharing-service": "0.2.10-dev-
|
|
38
|
-
"@agoric/store": "0.9.1-dev-
|
|
39
|
-
"@agoric/swingset-vat": "0.32.1-dev-
|
|
40
|
-
"@agoric/time": "0.3.1-dev-
|
|
41
|
-
"@agoric/vat-data": "0.5.1-dev-
|
|
42
|
-
"@agoric/zoe": "0.26.1-dev-
|
|
43
|
-
"@agoric/zone": "0.2.1-dev-
|
|
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-
|
|
54
|
-
"@agoric/deploy-script-support": "0.10.1-dev-
|
|
55
|
-
"@agoric/smart-wallet": "0.5.1-dev-
|
|
56
|
-
"@agoric/swing-store": "0.9.1-dev-
|
|
57
|
-
"@agoric/swingset-liveslots": "0.10.1-dev-
|
|
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": "
|
|
86
|
+
"gitHead": "fb2c24900340da870b85f4bb1dd132d8bf97e139"
|
|
87
87
|
}
|
package/src/vat-bank.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat-bank.d.ts","sourceRoot":"","sources":["vat-bank.js"],"names":[],"mappings":"
|
|
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 {
|
|
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 {
|
|
14
|
-
import {
|
|
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
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
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
|
-
|
|
467
|
-
|
|
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
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
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
|
);
|