@agoric/vats 0.15.2-dev-3294e0c.0.3294e0c → 0.15.2-dev-488dec7.0.488dec7

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.
@@ -0,0 +1,145 @@
1
+ import {
2
+ handleParamGovernance,
3
+ ParamTypes,
4
+ publicMixinAPI,
5
+ } from '@agoric/governance';
6
+ import { InvitationShape } from '@agoric/governance/src/typeGuards.js';
7
+ import { wrapRemoteMarshaller } from '@agoric/internal/src/marshal/wrap-marshaller.js';
8
+ import { M } from '@agoric/store';
9
+ import { prepareExo } from '@agoric/vat-data';
10
+ import { provideSingleton } from '@agoric/zoe/src/contractSupport/durability.js';
11
+ import { prepareRecorderKitMakers } from '@agoric/zoe/src/contractSupport/recorder.js';
12
+ import { TopicsRecordShape } from '@agoric/zoe/src/contractSupport/topics.js';
13
+ import { makeDurableZone } from '@agoric/zone/durable.js';
14
+ import {
15
+ prepareBridgeProvisionTool,
16
+ prepareProvisionPoolKit,
17
+ } from './provisionPoolKit.js';
18
+
19
+ /**
20
+ * @import {Remote} from '@agoric/internal';
21
+ * @import {Amount, Brand, Payment, Purse} from '@agoric/ertp';
22
+ * @import {ContractMeta, Invitation, StandardTerms, ZCF} from '@agoric/zoe';
23
+ * @import {GovernanceTerms} from '@agoric/governance/src/types.js';
24
+ * @import {ERef} from '@endo/far';
25
+ * @import {Bank} from '@agoric/vats/src/vat-bank.js';
26
+ * @import {MetricsNotification} from './provisionPoolKit.js';
27
+ * @import {Baggage} from '@agoric/vat-data';
28
+ * @import {StorageNode} from '@agoric/internal/src/lib-chainStorage.js';
29
+ * @import {Marshaller} from '@agoric/internal/src/lib-chainStorage.js';
30
+ */
31
+
32
+ /** @type {ContractMeta<typeof start>} */
33
+ export const meta = {
34
+ // @ts-expect-error splitRecord loses the property keys
35
+ privateArgsShape: M.splitRecord(
36
+ {
37
+ poolBank: M.eref(M.remotable('bank')),
38
+ storageNode: M.eref(M.remotable('storageNode')),
39
+ marshaller: M.eref(M.remotable('marshaller')),
40
+ },
41
+ {
42
+ // only necessary on first invocation, not subsequent
43
+ initialPoserInvitation: InvitationShape,
44
+ metricsOverride: M.recordOf(M.string()),
45
+ },
46
+ ),
47
+ upgradability: 'canUpgrade',
48
+ };
49
+ harden(meta);
50
+
51
+ /**
52
+ * @typedef {StandardTerms &
53
+ * GovernanceTerms<{
54
+ * PerAccountInitialAmount: 'amount';
55
+ * }>} ProvisionTerms
56
+ * TODO: ERef<GovernedCreatorFacet<ProvisionCreator>>
57
+ * @param {ZCF<ProvisionTerms>} zcf
58
+ * @param {{
59
+ * poolBank: ERef<Bank>;
60
+ * initialPoserInvitation: Invitation;
61
+ * storageNode: Remote<StorageNode>;
62
+ * marshaller: Remote<Marshaller>;
63
+ * metricsOverride?: MetricsNotification;
64
+ * governedParamOverrides?: Record<string, Amount | undefined>;
65
+ * }} privateArgs
66
+ * @param {Baggage} baggage
67
+ */
68
+ export const start = async (zcf, privateArgs, baggage) => {
69
+ const { poolBank, metricsOverride } = privateArgs;
70
+
71
+ const { marshaller: remoteMarshaller } = privateArgs;
72
+ const cachingMarshaller = wrapRemoteMarshaller(remoteMarshaller);
73
+
74
+ const { makeRecorderKit } = prepareRecorderKitMakers(
75
+ baggage,
76
+ cachingMarshaller,
77
+ );
78
+
79
+ // Governance
80
+ const { publicMixin, makeDurableGovernorFacet, params } =
81
+ await handleParamGovernance(
82
+ zcf,
83
+ privateArgs.initialPoserInvitation,
84
+ {
85
+ PerAccountInitialAmount: ParamTypes.AMOUNT,
86
+ },
87
+ privateArgs.storageNode,
88
+ privateArgs.marshaller,
89
+ privateArgs.governedParamOverrides,
90
+ );
91
+
92
+ const zone = makeDurableZone(baggage);
93
+
94
+ const makeBridgeProvisionTool = prepareBridgeProvisionTool(zone);
95
+ const makeProvisionPoolKit = prepareProvisionPoolKit(zone, {
96
+ makeRecorderKit,
97
+ params,
98
+ poolBank,
99
+ zcf,
100
+ makeBridgeProvisionTool,
101
+ });
102
+
103
+ const poolBrand = /** @type {Brand<'nat'>} */ (
104
+ params.getPerAccountInitialAmount().brand
105
+ );
106
+ const provisionPoolKit = await provideSingleton(
107
+ baggage,
108
+ 'provisionPoolKit',
109
+ () =>
110
+ makeProvisionPoolKit({
111
+ poolBrand,
112
+ storageNode: privateArgs.storageNode,
113
+ }),
114
+ );
115
+ provisionPoolKit.helper.start(poolBrand, { metrics: metricsOverride });
116
+
117
+ const publicFacet = prepareExo(
118
+ baggage,
119
+ 'Provisioning Pool public',
120
+ M.interface('ProvisionPool', {
121
+ getMetrics: M.callWhen().returns(M.remotable('MetricsSubscriber')),
122
+ getPublicTopics: M.callWhen().returns(TopicsRecordShape),
123
+ ...publicMixinAPI,
124
+ }),
125
+ {
126
+ async getMetrics() {
127
+ await null;
128
+ return provisionPoolKit.public.getPublicTopics().metrics.subscriber;
129
+ },
130
+ async getPublicTopics() {
131
+ await null;
132
+ return provisionPoolKit.public.getPublicTopics();
133
+ },
134
+ ...publicMixin,
135
+ },
136
+ );
137
+
138
+ return harden({
139
+ creatorFacet: makeDurableGovernorFacet(baggage, provisionPoolKit.machine)
140
+ .governorFacet,
141
+ publicFacet,
142
+ });
143
+ };
144
+
145
+ harden(start);
@@ -0,0 +1,77 @@
1
+ export function prepareBridgeProvisionTool(zone: Zone): (bankManager: ERef<import("@endo/exo").Guarded<{
2
+ getAssetSubscription(): import("@agoric/notifier").IterableEachTopic<AssetDescriptor>;
3
+ getRewardDistributorDepositFacet(denom: string, feeKit: AssetIssuerKit): ERef<import("@endo/far").EOnly<import("@agoric/ertp").DepositFacet>>;
4
+ getModuleAccountAddress(moduleName: string): Promise<string | null>;
5
+ addAsset(denom: string, issuerName: string, proposedName: string, kit: AssetIssuerKit & {
6
+ payment?: ERef<Payment<"nat">>;
7
+ }): Promise<void>;
8
+ getBankForAddress(address: string): Promise<Bank>;
9
+ }>>, walletFactory: ERef<import("@endo/exo").Guarded<{
10
+ provideSmartWallet(address: string, bank: ERef<Bank>, namesByAddressAdmin: ERef<NameAdmin>): Promise<[wallet: import("@agoric/smart-wallet/src/smartWallet.js").SmartWallet, isNew: boolean]>;
11
+ }>>, namesByAddressAdmin: ERef<NameAdmin>, forHandler: any) => import("@endo/exo").Guarded<{
12
+ /** @param {BridgeMessage} obj */
13
+ fromBridge(obj: BridgeMessage): Promise<void>;
14
+ }>;
15
+ export function prepareProvisionPoolKit(zone: Zone, { makeRecorderKit, params, poolBank, zcf, makeBridgeProvisionTool }: {
16
+ makeRecorderKit: MakeRecorderKit;
17
+ params: any;
18
+ poolBank: ERef<Bank>;
19
+ zcf: ZCF;
20
+ makeBridgeProvisionTool: ReturnType<typeof prepareBridgeProvisionTool>;
21
+ }): ({ poolBrand, storageNode }: {
22
+ poolBrand: Brand<"nat">;
23
+ storageNode: ERemote<StorageNode>;
24
+ }) => Promise<ProvisionPoolKit>;
25
+ export type ProvisionPoolKit = {
26
+ machine: {
27
+ addRevivableAddresses: (oldAddresses: string[]) => void;
28
+ getWalletReviver: () => ERef<any>;
29
+ setReferences: (erefs: ProvisionPoolKitReferences) => Promise<void>;
30
+ makeHandler: () => ERef<BridgeHandler>;
31
+ };
32
+ helper: any;
33
+ forHandler: any;
34
+ public: any;
35
+ };
36
+ export type ProvisionPoolKitReferences = {
37
+ bankManager: ERef<BankManager>;
38
+ namesByAddressAdmin: ERef<NameAdmin>;
39
+ walletFactory: ERef<WalletFactoryStartResult["creatorFacet"]>;
40
+ };
41
+ /**
42
+ * Metrics naming scheme is that nouns are
43
+ * present values and past-participles are accumulative.
44
+ */
45
+ export type MetricsNotification = {
46
+ /**
47
+ * count of new wallets provisioned
48
+ */
49
+ walletsProvisioned: bigint;
50
+ /**
51
+ * running sum of Minted provided
52
+ * to new wallets
53
+ */
54
+ totalMintedProvided: Amount<"nat">;
55
+ /**
56
+ * running sum of Minted ever
57
+ * received by the contract
58
+ */
59
+ totalMintedConverted: Amount<"nat">;
60
+ };
61
+ import type { Zone } from '@agoric/zone';
62
+ import type { AssetDescriptor } from '@agoric/vats/src/vat-bank.js';
63
+ import type { ERef } from '@endo/far';
64
+ import type { Payment } from '@agoric/ertp';
65
+ import type { Bank } from '@agoric/vats/src/vat-bank.js';
66
+ import type { NameAdmin } from '@agoric/vats';
67
+ import type { BridgeMessage } from '@agoric/cosmic-swingset/src/types.js';
68
+ import type { MakeRecorderKit } from '@agoric/zoe/src/contractSupport/recorder.js';
69
+ import type { ZCF } from '@agoric/zoe';
70
+ import type { Brand } from '@agoric/ertp';
71
+ import type { StorageNode } from '@agoric/internal/src/lib-chainStorage.js';
72
+ import type { ERemote } from '@agoric/internal';
73
+ import type { BridgeHandler } from '@agoric/vats';
74
+ import type { BankManager } from '@agoric/vats/src/vat-bank.js';
75
+ import type { WalletFactoryStartResult } from '@agoric/vats/src/core/startWalletFactory.js';
76
+ import type { Amount } from '@agoric/ertp';
77
+ //# sourceMappingURL=provisionPoolKit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provisionPoolKit.d.ts","sourceRoot":"","sources":["provisionPoolKit.js"],"names":[],"mappings":"AAqFO,iDAFI,IAAI;;;;;eA4cooG,CAAC;;;;;;IAvb9oG,iCAAiC;oBAArB,aAAa;GA6B5B;AAYI,8CATI,IAAI,uEACJ;IACN,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;IACrB,GAAG,EAAE,GAAG,CAAC;IACT,uBAAuB,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC;CACxE,gCA8XC;IAA2B,SAAS,EAA5B,MAAM,KAAK,CAAC;IACe,WAAW,EAAtC,QAAQ,WAAW,CAAC;CAC5B,KAAU,OAAO,CAAC,gBAAgB,CAAC,CAevC;+BA7eY;IACR,OAAO,EAAE;QACP,qBAAqB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;QACxD,gBAAgB,EAAE,MAAM,KAAK,GAAG,CAAC,CAAC;QAClC,aAAa,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACpE,WAAW,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC;KACxC,CAAC;IACF,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;CACb;;iBAKU,KAAK,WAAW,CAAC;yBACjB,KAAK,SAAS,CAAC;mBACf,KAAK,wBAAwB,CAAC,cAAc,CAAC,CAAC;;;;;;;;;;wBAM9C,MAAM;;;;;yBACN,OAAO,KAAK,CAAC;;;;;0BAEb,OAAO,KAAK,CAAC;;0BA1CJ,cAAc;qCAKH,8BAA8B;0BAVzC,WAAW;6BAJc,cAAc;0BAK1B,8BAA8B;+BAEtC,cAAc;mCARV,sCAAsC;qCAYpC,6CAA6C;yBARzD,aAAa;2BAHa,cAAc;iCAEhC,0CAA0C;6BADtC,kBAAkB;mCAYpB,cAAc;iCARV,8BAA8B;8CAGvB,6CAA6C;4BARxC,cAAc"}