@agoric/smart-wallet 0.5.4-u15.0 → 0.5.4-u16.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 +32 -28
- package/src/invitations.d.ts +14 -10
- package/src/invitations.d.ts.map +1 -1
- package/src/invitations.js +32 -28
- package/src/marshal-contexts.d.ts +44 -41
- package/src/marshal-contexts.d.ts.map +1 -1
- package/src/marshal-contexts.js +65 -58
- package/src/offerWatcher.d.ts +21 -39
- package/src/offerWatcher.d.ts.map +1 -1
- package/src/offerWatcher.js +34 -24
- package/src/offers.d.ts +7 -7
- package/src/offers.d.ts.map +1 -1
- package/src/offers.js +9 -9
- package/src/proposals/upgrade-wallet-factory2-proposal.d.ts.map +1 -1
- package/src/proposals/upgrade-wallet-factory2-proposal.js +2 -1
- package/src/proposals/upgrade-walletFactory-proposal.d.ts +1 -1
- package/src/proposals/upgrade-walletFactory-proposal.d.ts.map +1 -1
- package/src/proposals/upgrade-walletFactory-proposal.js +45 -21
- package/src/smartWallet.d.ts +80 -60
- package/src/smartWallet.d.ts.map +1 -1
- package/src/smartWallet.js +156 -109
- package/src/typeGuards.d.ts +1 -1
- package/src/types.d.ts +14 -13
- package/src/utils.d.ts +17 -14
- package/src/utils.d.ts.map +1 -1
- package/src/utils.js +18 -6
- package/src/walletFactory.d.ts +24 -80
- package/src/walletFactory.d.ts.map +1 -1
- package/src/walletFactory.js +55 -36
- package/CHANGELOG.md +0 -250
|
@@ -8,21 +8,26 @@ console.warn('upgrade-walletFactory-proposal.js module evaluating');
|
|
|
8
8
|
const { Fail } = assert;
|
|
9
9
|
|
|
10
10
|
// vstorage paths under published.*
|
|
11
|
+
const WALLET_STORAGE_PATH_SEGMENT = 'wallet';
|
|
11
12
|
const BOARD_AUX = 'boardAux';
|
|
12
13
|
|
|
13
14
|
const marshalData = makeMarshal(_val => Fail`data only`);
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
|
-
* @param {
|
|
17
|
-
*
|
|
17
|
+
* @param {BootstrapPowers} powers
|
|
18
18
|
* @param {object} config
|
|
19
19
|
* @param {{ walletFactoryRef: VatSourceRef & { bundleID: string } }} config.options
|
|
20
20
|
*/
|
|
21
21
|
export const upgradeWalletFactory = async (
|
|
22
22
|
{
|
|
23
|
-
consume: {
|
|
23
|
+
consume: {
|
|
24
|
+
contractKits,
|
|
25
|
+
governedContractKits,
|
|
26
|
+
chainStorage,
|
|
27
|
+
walletBridgeManager: walletBridgeManagerP,
|
|
28
|
+
},
|
|
24
29
|
instance: {
|
|
25
|
-
consume: { walletFactory: wfInstanceP },
|
|
30
|
+
consume: { walletFactory: wfInstanceP, provisionPool: ppInstanceP },
|
|
26
31
|
},
|
|
27
32
|
},
|
|
28
33
|
config,
|
|
@@ -30,26 +35,42 @@ export const upgradeWalletFactory = async (
|
|
|
30
35
|
console.log('upgradeWalletFactory: config', config);
|
|
31
36
|
const { walletFactoryRef } = config.options;
|
|
32
37
|
|
|
33
|
-
console.log('upgradeWalletFactory: awaiting
|
|
34
|
-
const wfInstance
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
// console.log('upgradeWalletFactory: awaiting instances etc.');
|
|
39
|
+
const { wfInstance, ppInstance, walletBridgeManager, storageNode } =
|
|
40
|
+
await allValues({
|
|
41
|
+
wfInstance: wfInstanceP,
|
|
42
|
+
ppInstance: ppInstanceP,
|
|
43
|
+
walletBridgeManager: walletBridgeManagerP,
|
|
44
|
+
// @ts-expect-error chainStorage is only falsy in testing
|
|
45
|
+
storageNode: E(chainStorage).makeChildNode(WALLET_STORAGE_PATH_SEGMENT),
|
|
46
|
+
});
|
|
47
|
+
// console.log('upgradeWalletFactory: awaiting contract kits');
|
|
48
|
+
const { wfKit, ppKit } = await allValues({
|
|
49
|
+
wfKit: E(contractKits).get(wfInstance),
|
|
50
|
+
ppKit: E(governedContractKits).get(ppInstance),
|
|
39
51
|
});
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
52
|
+
// console.log('upgradeWalletFactory: awaiting walletReviver');
|
|
53
|
+
const walletReviver = await E(ppKit.creatorFacet).getWalletReviver();
|
|
54
|
+
const newPrivateArgs = harden({
|
|
55
|
+
storageNode,
|
|
56
|
+
walletBridgeManager,
|
|
57
|
+
walletReviver,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
console.log(
|
|
61
|
+
'upgradeWalletFactory: upgrading with newPrivateArgs',
|
|
62
|
+
newPrivateArgs,
|
|
63
|
+
);
|
|
64
|
+
await E(wfKit.adminFacet).upgradeContract(
|
|
65
|
+
walletFactoryRef.bundleID,
|
|
66
|
+
newPrivateArgs,
|
|
67
|
+
);
|
|
47
68
|
console.log('upgradeWalletFactory: done');
|
|
48
69
|
};
|
|
49
70
|
harden(upgradeWalletFactory);
|
|
50
71
|
|
|
51
72
|
/**
|
|
52
|
-
* @param {
|
|
73
|
+
* @param {BootstrapPowers} powers
|
|
53
74
|
*/
|
|
54
75
|
export const publishAgoricBrandsDisplayInfo = async ({
|
|
55
76
|
consume: { agoricNames, board, chainStorage },
|
|
@@ -68,7 +89,7 @@ export const publishAgoricBrandsDisplayInfo = async ({
|
|
|
68
89
|
await E(node).setValue(JSON.stringify(aux));
|
|
69
90
|
};
|
|
70
91
|
|
|
71
|
-
/** @type {ERef<NameHub>} */
|
|
92
|
+
/** @type {ERef<import('@agoric/vats').NameHub>} */
|
|
72
93
|
const brandHub = E(agoricNames).lookup('brand');
|
|
73
94
|
const brands = await E(brandHub).values();
|
|
74
95
|
// tolerate failure; in particular, for the timer brand
|
|
@@ -76,13 +97,16 @@ export const publishAgoricBrandsDisplayInfo = async ({
|
|
|
76
97
|
};
|
|
77
98
|
harden(publishAgoricBrandsDisplayInfo);
|
|
78
99
|
|
|
79
|
-
/** @type {
|
|
100
|
+
/** @type {import('@agoric/vats/src/core/lib-boot').BootstrapManifest} */
|
|
80
101
|
const manifest = {
|
|
81
102
|
[upgradeWalletFactory.name]: {
|
|
82
103
|
// include rationale for closely-held, high authority capabilities
|
|
83
104
|
consume: {
|
|
84
105
|
contractKits: `to upgrade walletFactory using its adminFacet`,
|
|
85
|
-
|
|
106
|
+
governedContractKits:
|
|
107
|
+
'to get walletReviver from provisionPool.creatorFacet',
|
|
108
|
+
chainStorage: 'to allow walletFactory to (continue) write to vstorage',
|
|
109
|
+
walletBridgeManager: 'to handle bridged cosmos SpendAction messages',
|
|
86
110
|
},
|
|
87
111
|
// widely-shared, low authority instance handles need no rationale
|
|
88
112
|
instance: {
|
package/src/smartWallet.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
export const BRAND_TO_PURSES_KEY: "brandToPurses";
|
|
2
|
-
export function prepareSmartWallet(baggage:
|
|
2
|
+
export function prepareSmartWallet(baggage: import("@agoric/vat-data").Baggage, shared: SharedParams): (uniqueWithoutChildNodes: Omit<UniqueParams, "currentStorageNode" | "walletStorageNode"> & {
|
|
3
3
|
walletStorageNode: ERef<StorageNode>;
|
|
4
|
-
}) => Promise<{
|
|
4
|
+
}) => Promise<import("@endo/exo").Guarded<{
|
|
5
5
|
/**
|
|
6
|
-
* Umarshals the actionCapData and delegates to the appropriate action
|
|
6
|
+
* Umarshals the actionCapData and delegates to the appropriate action
|
|
7
|
+
* handler.
|
|
7
8
|
*
|
|
8
|
-
* @param {import('@endo/marshal').CapData<string>} actionCapData
|
|
9
|
+
* @param {import('@endo/marshal').CapData<string | null>} actionCapData
|
|
10
|
+
* of type BridgeAction
|
|
9
11
|
* @param {boolean} [canSpend]
|
|
10
12
|
* @returns {Promise<void>}
|
|
11
13
|
*/
|
|
12
|
-
handleBridgeAction(actionCapData: import(
|
|
13
|
-
getDepositFacet(): {
|
|
14
|
+
handleBridgeAction(actionCapData: import("@endo/marshal").CapData<string | null>, canSpend?: boolean | undefined): Promise<void>;
|
|
15
|
+
getDepositFacet(): import("@endo/exo").Guarded<{
|
|
14
16
|
/**
|
|
15
17
|
* Put the assets from the payment into the appropriate purse.
|
|
16
18
|
*
|
|
@@ -18,17 +20,21 @@ export function prepareSmartWallet(baggage: MapStore<string, unknown>, shared: S
|
|
|
18
20
|
*
|
|
19
21
|
* @param {Payment} payment
|
|
20
22
|
* @returns {Promise<Amount>}
|
|
21
|
-
* @throws if there's not yet a purse, though the payment is held to try
|
|
23
|
+
* @throws if there's not yet a purse, though the payment is held to try
|
|
24
|
+
* again when there is
|
|
22
25
|
*/
|
|
23
26
|
receive(payment: Payment): Promise<Amount>;
|
|
24
|
-
}
|
|
25
|
-
getOffersFacet(): {
|
|
27
|
+
}>;
|
|
28
|
+
getOffersFacet(): import("@endo/exo").Guarded<{
|
|
26
29
|
/**
|
|
27
|
-
* Take an offer description provided in capData, augment it with
|
|
30
|
+
* Take an offer description provided in capData, augment it with
|
|
31
|
+
* payments and call zoe.offer()
|
|
28
32
|
*
|
|
29
33
|
* @param {OfferSpec} offerSpec
|
|
30
|
-
* @returns {Promise<void>} after the offer has been both seated and
|
|
31
|
-
*
|
|
34
|
+
* @returns {Promise<void>} after the offer has been both seated and
|
|
35
|
+
* exited by Zoe.
|
|
36
|
+
* @throws if any parts of the offer can be determined synchronously to
|
|
37
|
+
* be invalid
|
|
32
38
|
*/
|
|
33
39
|
executeOffer(offerSpec: OfferSpec): Promise<void>;
|
|
34
40
|
/**
|
|
@@ -39,20 +45,20 @@ export function prepareSmartWallet(baggage: MapStore<string, unknown>, shared: S
|
|
|
39
45
|
* @throws if the seat can't be found or E(seatRef).tryExit() fails.
|
|
40
46
|
*/
|
|
41
47
|
tryExitOffer(offerId: OfferId): Promise<void>;
|
|
42
|
-
}
|
|
48
|
+
}>;
|
|
43
49
|
/** @deprecated use getPublicTopics */
|
|
44
|
-
getCurrentSubscriber(): Subscriber<CurrentWalletRecord>;
|
|
50
|
+
getCurrentSubscriber(): globalThis.Subscriber<CurrentWalletRecord>;
|
|
45
51
|
/** @deprecated use getPublicTopics */
|
|
46
|
-
getUpdatesSubscriber(): Subscriber<UpdateRecord>;
|
|
52
|
+
getUpdatesSubscriber(): globalThis.Subscriber<UpdateRecord>;
|
|
47
53
|
getPublicTopics(): {
|
|
48
54
|
current: {
|
|
49
55
|
description: string;
|
|
50
|
-
subscriber: Subscriber<CurrentWalletRecord>;
|
|
56
|
+
subscriber: globalThis.Subscriber<CurrentWalletRecord>;
|
|
51
57
|
storagePath: Promise<string>;
|
|
52
58
|
};
|
|
53
59
|
updates: {
|
|
54
60
|
description: string;
|
|
55
|
-
subscriber: Subscriber<UpdateRecord>;
|
|
61
|
+
subscriber: globalThis.Subscriber<UpdateRecord>;
|
|
56
62
|
storagePath: Promise<string>;
|
|
57
63
|
};
|
|
58
64
|
};
|
|
@@ -62,125 +68,137 @@ export function prepareSmartWallet(baggage: MapStore<string, unknown>, shared: S
|
|
|
62
68
|
* @param {object} key
|
|
63
69
|
*/
|
|
64
70
|
repairWalletForIncarnation2(key: object): void;
|
|
65
|
-
}
|
|
71
|
+
}>>;
|
|
66
72
|
export type OfferId = number | string;
|
|
67
73
|
export type OfferSpec = {
|
|
68
74
|
id: OfferId;
|
|
69
|
-
invitationSpec: import(
|
|
75
|
+
invitationSpec: import("./invitations").InvitationSpec;
|
|
70
76
|
proposal: Proposal;
|
|
71
|
-
offerArgs?:
|
|
77
|
+
offerArgs?: any;
|
|
72
78
|
};
|
|
73
79
|
export type ExecutorPowers = {
|
|
74
80
|
logger: {
|
|
75
81
|
info: (...args: any[]) => void;
|
|
76
82
|
error: (...args: any[]) => void;
|
|
77
83
|
};
|
|
78
|
-
makeOfferWatcher: import(
|
|
84
|
+
makeOfferWatcher: import("./offerWatcher.js").MakeOfferWatcher;
|
|
79
85
|
invitationFromSpec: ERef<Invitation>;
|
|
80
86
|
};
|
|
81
87
|
export type ExecuteOfferAction = {
|
|
82
|
-
method:
|
|
88
|
+
method: "executeOffer";
|
|
83
89
|
offer: OfferSpec;
|
|
84
90
|
};
|
|
85
91
|
export type TryExitOfferAction = {
|
|
86
|
-
method:
|
|
92
|
+
method: "tryExitOffer";
|
|
87
93
|
offerId: OfferId;
|
|
88
94
|
};
|
|
89
95
|
export type BridgeAction = ExecuteOfferAction | TryExitOfferAction;
|
|
90
96
|
/**
|
|
91
|
-
* Purses is an array to support a future requirement of multiple purses per
|
|
97
|
+
* Purses is an array to support a future requirement of multiple purses per
|
|
98
|
+
* brand.
|
|
92
99
|
*
|
|
93
|
-
* Each map is encoded as an array of entries because a Map doesn't serialize
|
|
94
|
-
* We also considered having a vstorage key for each offer but for now
|
|
100
|
+
* Each map is encoded as an array of entries because a Map doesn't serialize
|
|
101
|
+
* directly. We also considered having a vstorage key for each offer but for now
|
|
102
|
+
* are sticking with this design.
|
|
95
103
|
*
|
|
96
104
|
* Cons
|
|
97
|
-
*
|
|
98
|
-
*
|
|
105
|
+
*
|
|
106
|
+
* - Reserializes previously written results when a new result is added
|
|
107
|
+
* - Optimizes reads though writes are on-chain (~100 machines) and reads are
|
|
108
|
+
* off-chain (to 1 machine)
|
|
99
109
|
*
|
|
100
110
|
* Pros
|
|
101
|
-
* - Reading all offer results happens much more (>100) often than storing a new offer result
|
|
102
|
-
* - Reserialization and writes are paid in execution gas, whereas reads are not
|
|
103
111
|
*
|
|
104
|
-
*
|
|
112
|
+
* - Reading all offer results happens much more (>100) often than storing a new
|
|
113
|
+
* offer result
|
|
114
|
+
* - Reserialization and writes are paid in execution gas, whereas reads are not
|
|
115
|
+
*
|
|
116
|
+
* This design should be revisited if ever batch querying across vstorage keys
|
|
117
|
+
* become cheaper or reads be paid.
|
|
105
118
|
*/
|
|
106
119
|
export type CurrentWalletRecord = {
|
|
107
|
-
purses:
|
|
120
|
+
purses: {
|
|
108
121
|
brand: Brand;
|
|
109
122
|
balance: Amount;
|
|
110
|
-
}
|
|
111
|
-
offerToUsedInvitation:
|
|
123
|
+
}[];
|
|
124
|
+
offerToUsedInvitation: [offerId: string, usedInvitation: Amount][];
|
|
112
125
|
offerToPublicSubscriberPaths: [offerId: string, publicTopics: {
|
|
113
126
|
[subscriberName: string]: string;
|
|
114
127
|
}][];
|
|
115
|
-
liveOffers:
|
|
128
|
+
liveOffers: [OfferId, OfferStatus][];
|
|
116
129
|
};
|
|
117
130
|
/**
|
|
118
131
|
* Record of an update to the state of this wallet.
|
|
119
132
|
*
|
|
120
|
-
* Client is responsible for coalescing updates into a current state. See
|
|
133
|
+
* Client is responsible for coalescing updates into a current state. See
|
|
134
|
+
* `coalesceUpdates` utility.
|
|
121
135
|
*
|
|
122
|
-
* The reason for this burden on the client is that publishing
|
|
123
|
-
*
|
|
136
|
+
* The reason for this burden on the client is that publishing the full history
|
|
137
|
+
* of offers with each change is untenable.
|
|
124
138
|
*
|
|
125
139
|
* `balance` update supports forward-compatibility for more than one purse per
|
|
126
|
-
* brand. An additional key will be needed to disambiguate. For now the brand
|
|
127
|
-
* the amount suffices.
|
|
140
|
+
* brand. An additional key will be needed to disambiguate. For now the brand
|
|
141
|
+
* in the amount suffices.
|
|
128
142
|
*/
|
|
129
143
|
export type UpdateRecord = {
|
|
130
|
-
updated:
|
|
131
|
-
status:
|
|
144
|
+
updated: "offerStatus";
|
|
145
|
+
status: OfferStatus;
|
|
132
146
|
} | {
|
|
133
|
-
updated:
|
|
147
|
+
updated: "balance";
|
|
134
148
|
currentAmount: Amount;
|
|
135
149
|
} | {
|
|
136
|
-
updated:
|
|
150
|
+
updated: "walletAction";
|
|
137
151
|
status: {
|
|
138
152
|
error: string;
|
|
139
153
|
};
|
|
140
154
|
};
|
|
141
155
|
/**
|
|
142
|
-
* For use by clients to describe brands to users. Includes `displayInfo` to
|
|
156
|
+
* For use by clients to describe brands to users. Includes `displayInfo` to
|
|
157
|
+
* save a remote call.
|
|
143
158
|
*/
|
|
144
159
|
export type BrandDescriptor = {
|
|
145
160
|
brand: Brand;
|
|
146
161
|
displayInfo: DisplayInfo;
|
|
147
162
|
issuer: Issuer;
|
|
148
|
-
petname: import(
|
|
163
|
+
petname: import("./types.js").Petname;
|
|
149
164
|
};
|
|
150
165
|
export type UniqueParams = {
|
|
151
166
|
address: string;
|
|
152
|
-
bank: ERef<import(
|
|
167
|
+
bank: ERef<import("@agoric/vats/src/vat-bank.js").Bank>;
|
|
153
168
|
currentStorageNode: StorageNode;
|
|
154
|
-
invitationPurse: Purse<
|
|
169
|
+
invitationPurse: Purse<"set", InvitationDetails>;
|
|
155
170
|
walletStorageNode: StorageNode;
|
|
156
171
|
};
|
|
157
|
-
export type BrandDescriptorRegistry = Pick<MapStore<Brand, BrandDescriptor>,
|
|
172
|
+
export type BrandDescriptorRegistry = Pick<MapStore<Brand, BrandDescriptor>, "has" | "get" | "values">;
|
|
158
173
|
export type SharedParams = {
|
|
159
|
-
agoricNames: ERef<import(
|
|
174
|
+
agoricNames: ERef<import("@agoric/vats").NameHub>;
|
|
160
175
|
registry: BrandDescriptorRegistry;
|
|
161
|
-
invitationIssuer: Issuer<
|
|
162
|
-
invitationBrand: Brand<
|
|
176
|
+
invitationIssuer: Issuer<"set">;
|
|
177
|
+
invitationBrand: Brand<"set">;
|
|
163
178
|
invitationDisplayInfo: DisplayInfo;
|
|
164
179
|
publicMarshaller: Marshaller;
|
|
165
180
|
zoe: ERef<ZoeService>;
|
|
166
181
|
secretWalletFactoryKey: any;
|
|
167
182
|
};
|
|
168
183
|
/**
|
|
169
|
-
* - `brandPurses` is precious
|
|
184
|
+
* - `brandPurses` is precious
|
|
185
|
+
* and closely held. defined as late as possible to reduce its scope.
|
|
186
|
+
*
|
|
170
187
|
* - `offerToInvitationMakers` is precious and closely held.
|
|
171
188
|
* - `offerToPublicSubscriberPaths` is precious and closely held.
|
|
172
|
-
* - `purseBalances` is a cache of what we've received from purses. Held so we can
|
|
189
|
+
* - `purseBalances` is a cache of what we've received from purses. Held so we can
|
|
190
|
+
* publish all balances on change.
|
|
173
191
|
*/
|
|
174
192
|
export type State = ImmutableState & MutableState;
|
|
175
193
|
export type ImmutableState = Readonly<UniqueParams & {
|
|
176
|
-
paymentQueues: MapStore<Brand,
|
|
177
|
-
offerToInvitationMakers: MapStore<string, import(
|
|
194
|
+
paymentQueues: MapStore<Brand, Payment[]>;
|
|
195
|
+
offerToInvitationMakers: MapStore<string, import("./types.js").InvitationMakers>;
|
|
178
196
|
offerToPublicSubscriberPaths: MapStore<string, Record<string, string>>;
|
|
179
|
-
offerToUsedInvitation: MapStore<string, Amount<
|
|
197
|
+
offerToUsedInvitation: MapStore<string, Amount<"set">>;
|
|
180
198
|
purseBalances: MapStore<Purse, Amount>;
|
|
181
|
-
updateRecorderKit: import(
|
|
182
|
-
currentRecorderKit: import(
|
|
183
|
-
liveOffers: MapStore<OfferId,
|
|
199
|
+
updateRecorderKit: import("@agoric/zoe/src/contractSupport/recorder.js").RecorderKit<UpdateRecord>;
|
|
200
|
+
currentRecorderKit: import("@agoric/zoe/src/contractSupport/recorder.js").RecorderKit<CurrentWalletRecord>;
|
|
201
|
+
liveOffers: MapStore<OfferId, OfferStatus>;
|
|
184
202
|
liveOfferSeats: MapStore<OfferId, UserSeat<unknown>>;
|
|
185
203
|
liveOfferPayments: MapStore<OfferId, MapStore<Brand, Payment>>;
|
|
186
204
|
}>;
|
|
@@ -189,4 +207,6 @@ export type PurseRecord = BrandDescriptor & {
|
|
|
189
207
|
};
|
|
190
208
|
export type MutableState = {};
|
|
191
209
|
export type SmartWallet = Awaited<ReturnType<ReturnType<typeof prepareSmartWallet>>>;
|
|
210
|
+
import type { OfferId } from './offers.js';
|
|
211
|
+
import type { OfferStatus } from './offers.js';
|
|
192
212
|
//# sourceMappingURL=smartWallet.d.ts.map
|
package/src/smartWallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartWallet.d.ts","sourceRoot":"","sources":["smartWallet.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"smartWallet.d.ts","sourceRoot":"","sources":["smartWallet.js"],"names":[],"mappings":"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"}
|