@agoric/ertp 0.16.3-other-dev-8f8782b.0 → 0.16.3-other-dev-3eb1a1d.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/exported.d.ts +37 -0
- package/exported.js +2 -1
- package/package.json +35 -35
- package/src/amountMath.d.ts +42 -38
- package/src/amountMath.d.ts.map +1 -1
- package/src/amountMath.js +131 -127
- package/src/amountStore.d.ts +9 -0
- package/src/amountStore.d.ts.map +1 -0
- package/src/amountStore.js +34 -0
- package/src/displayInfo.d.ts +3 -0
- package/src/displayInfo.d.ts.map +1 -1
- package/src/displayInfo.js +3 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +4 -0
- package/src/issuerKit.d.ts +30 -5
- package/src/issuerKit.d.ts.map +1 -1
- package/src/issuerKit.js +218 -76
- package/src/legacy-payment-helpers.d.ts +6 -1
- package/src/legacy-payment-helpers.d.ts.map +1 -1
- package/src/legacy-payment-helpers.js +34 -34
- package/src/mathHelpers/copyBagMathHelpers.d.ts +3 -4
- package/src/mathHelpers/copyBagMathHelpers.d.ts.map +1 -1
- package/src/mathHelpers/copyBagMathHelpers.js +4 -5
- package/src/mathHelpers/copySetMathHelpers.d.ts +3 -3
- package/src/mathHelpers/copySetMathHelpers.d.ts.map +1 -1
- package/src/mathHelpers/copySetMathHelpers.js +6 -4
- package/src/mathHelpers/natMathHelpers.d.ts +8 -7
- package/src/mathHelpers/natMathHelpers.d.ts.map +1 -1
- package/src/mathHelpers/natMathHelpers.js +8 -9
- package/src/mathHelpers/setMathHelpers.d.ts +2 -0
- package/src/mathHelpers/setMathHelpers.d.ts.map +1 -1
- package/src/mathHelpers/setMathHelpers.js +2 -1
- package/src/payment.d.ts +4 -2
- package/src/payment.d.ts.map +1 -1
- package/src/payment.js +6 -7
- package/src/paymentLedger.d.ts +6 -2
- package/src/paymentLedger.d.ts.map +1 -1
- package/src/paymentLedger.js +76 -95
- package/src/purse.d.ts +19 -9
- package/src/purse.d.ts.map +1 -1
- package/src/purse.js +86 -26
- package/src/transientNotifier.d.ts +1 -1
- package/src/transientNotifier.d.ts.map +1 -1
- package/src/transientNotifier.js +5 -0
- package/src/typeGuards.d.ts +60 -13
- package/src/typeGuards.d.ts.map +1 -1
- package/src/typeGuards.js +69 -57
- package/src/types-index.d.ts +2 -0
- package/src/types-index.js +2 -0
- package/src/types.d.ts +253 -219
- package/src/types.d.ts.map +1 -1
- package/src/types.ts +468 -0
- package/CHANGELOG.md +0 -743
- package/src/types-ambient.d.ts +0 -376
- package/src/types-ambient.d.ts.map +0 -1
- package/src/types-ambient.js +0 -440
- package/src/types.js +0 -441
package/src/types.d.ts
CHANGED
|
@@ -1,17 +1,39 @@
|
|
|
1
|
+
import type { LatestTopic } from '@agoric/notifier';
|
|
2
|
+
import type { ERef } from '@endo/far';
|
|
3
|
+
import type { RemotableObject } from '@endo/pass-style';
|
|
4
|
+
import type { CopyBag, CopySet, Key, Pattern } from '@endo/patterns';
|
|
5
|
+
import type { AssetKind } from './amountMath.js';
|
|
6
|
+
export type { AssetKind } from './amountMath.js';
|
|
7
|
+
export type NatAmount = {
|
|
8
|
+
brand: Brand<'nat'>;
|
|
9
|
+
value: bigint;
|
|
10
|
+
};
|
|
11
|
+
export type SetAmount<K extends Key> = {
|
|
12
|
+
brand: Brand<'set'>;
|
|
13
|
+
value: K[];
|
|
14
|
+
};
|
|
15
|
+
export type CopySetAmount<K extends Key> = {
|
|
16
|
+
brand: Brand<'copySet'>;
|
|
17
|
+
value: CopySet<K>;
|
|
18
|
+
};
|
|
19
|
+
export type CopyBagAmount<K extends Key> = {
|
|
20
|
+
brand: Brand<'copyBag'>;
|
|
21
|
+
value: CopyBag<K>;
|
|
22
|
+
};
|
|
23
|
+
export type AnyAmount = {
|
|
24
|
+
brand: Brand<any>;
|
|
25
|
+
value: any;
|
|
26
|
+
};
|
|
1
27
|
/**
|
|
2
|
-
* Amounts are descriptions of digital assets, answering the questions
|
|
3
|
-
*
|
|
28
|
+
* Amounts are descriptions of digital assets, answering the questions "how
|
|
29
|
+
* much" and "of what kind". Amounts are values labeled with a brand.
|
|
4
30
|
* AmountMath executes the logic of how amounts are changed when digital
|
|
5
|
-
* assets are merged, separated, or otherwise manipulated. For
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* portion.
|
|
31
|
+
* assets are merged, separated, or otherwise manipulated. For example, a
|
|
32
|
+
* deposit of 2 bucks into a purse that already has 3 bucks gives a new purse
|
|
33
|
+
* balance of 5 bucks. An empty purse has 0 bucks. AmountMath relies heavily
|
|
34
|
+
* on polymorphic MathHelpers, which manipulate the unbranded portion.
|
|
10
35
|
*/
|
|
11
|
-
export type Amount<K extends AssetKind = AssetKind> =
|
|
12
|
-
brand: Brand<K>;
|
|
13
|
-
value: AssetValueForKind<K>;
|
|
14
|
-
};
|
|
36
|
+
export type Amount<K extends AssetKind = AssetKind, M extends Key = Key> = K extends 'nat' ? NatAmount : K extends 'set' ? SetAmount<M> : K extends 'copySet' ? CopySetAmount<M> : K extends 'copyBag' ? CopyBagAmount<M> : AnyAmount;
|
|
15
37
|
/**
|
|
16
38
|
* An `AmountValue` describes a set or quantity of assets that can be owned or
|
|
17
39
|
* shared.
|
|
@@ -21,340 +43,350 @@ export type Amount<K extends AssetKind = AssetKind> = {
|
|
|
21
43
|
*
|
|
22
44
|
* A non-fungible `AmountValue` uses an array or CopySet of `Key`s to represent
|
|
23
45
|
* a set of whatever asset each key represents. A `Key` is a passable value
|
|
24
|
-
* that can be used as an element in a set (SetStore or CopySet) or as the
|
|
25
|
-
*
|
|
46
|
+
* that can be used as an element in a set (SetStore or CopySet) or as the key
|
|
47
|
+
* in a map (MapStore or CopyMap).
|
|
26
48
|
*
|
|
27
49
|
* `SetValue` is for the deprecated set representation, using an array directly
|
|
28
50
|
* to represent the array of its elements. `CopySet` is the proper
|
|
29
51
|
* representation using a CopySet.
|
|
30
52
|
*
|
|
31
|
-
* A semi-fungible `CopyBag` is represented as a
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* by that key.
|
|
53
|
+
* A semi-fungible `CopyBag` is represented as a `CopyBag` of `Key` objects.
|
|
54
|
+
* "Bag" is synonymous with MultiSet, where an element of a bag can be present
|
|
55
|
+
* once or more times, i.e., some positive bigint number of times,
|
|
56
|
+
* representing that quantity of the asset represented by that key.
|
|
36
57
|
*/
|
|
37
|
-
export type AmountValue = NatValue |
|
|
58
|
+
export type AmountValue = NatValue | SetValue | CopySet | import('@endo/patterns').CopyBag;
|
|
38
59
|
/**
|
|
39
|
-
* See doc-comment
|
|
60
|
+
* See doc-comment
|
|
61
|
+
* for `AmountValue`.
|
|
40
62
|
*/
|
|
41
|
-
export type AssetKind = 'nat'
|
|
42
|
-
export type
|
|
43
|
-
export type
|
|
63
|
+
export type AssetValueForKind<K extends AssetKind, M extends Key = Key> = K extends 'nat' ? NatValue : K extends 'set' ? SetValue<M> : K extends 'copySet' ? CopySet<M> : K extends 'copyBag' ? CopyBag<M> : never;
|
|
64
|
+
export type AssetKindForValue<V extends AmountValue> = V extends NatValue ? 'nat' : V extends SetValue ? 'set' : V extends CopySet ? 'copySet' : V extends import('@endo/patterns').CopyBag ? 'copyBag' : never;
|
|
65
|
+
export type Ratio = {
|
|
66
|
+
numerator: Amount<'nat'>;
|
|
67
|
+
denominator: Amount<'nat'>;
|
|
68
|
+
};
|
|
69
|
+
/** @deprecated */
|
|
44
70
|
export type DisplayInfo<K extends AssetKind = AssetKind> = {
|
|
45
71
|
/**
|
|
46
|
-
* Tells the display software how
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* should be used for *display purposes only*. Any other use is an
|
|
72
|
+
* Tells the display software how many
|
|
73
|
+
* decimal places to move the decimal over to the left, or in other words,
|
|
74
|
+
* which position corresponds to whole numbers. We require fungible digital
|
|
75
|
+
* assets to be represented in integers, in the smallest unit (i.e. USD might
|
|
76
|
+
* be represented in mill, a thousandth of a dollar. In that case,
|
|
77
|
+
* `decimalPlaces` would be 3.) This property is optional, and for
|
|
78
|
+
* non-fungible digital assets, should not be specified. The decimalPlaces
|
|
79
|
+
* property should be used for _display purposes only_. Any other use is an
|
|
55
80
|
* anti-pattern.
|
|
56
81
|
*/
|
|
57
82
|
decimalPlaces?: number | undefined;
|
|
58
83
|
/**
|
|
59
|
-
* - the kind of asset, either
|
|
60
|
-
* AssetKind.
|
|
61
|
-
* AssetKind.SET or AssetKind.COPY_SET (non-fungible)
|
|
84
|
+
* - the kind of asset, either AssetKind.NAT (fungible)
|
|
85
|
+
* or AssetKind.SET or AssetKind.COPY_SET (non-fungible)
|
|
62
86
|
*/
|
|
63
87
|
assetKind: K;
|
|
64
88
|
};
|
|
65
|
-
|
|
66
|
-
* The brand identifies the kind of issuer, and has a function to get the
|
|
67
|
-
* alleged name for the kind of asset described. The alleged name (such
|
|
68
|
-
* as 'BTC' or 'moola') is provided by the maker of the issuer and should
|
|
69
|
-
* not be trusted as accurate.
|
|
70
|
-
*
|
|
71
|
-
* Every amount created by a particular AmountMath will share the same brand,
|
|
72
|
-
* but recipients cannot rely on the brand to verify that a purported amount
|
|
73
|
-
* represents the issuer they intended, since the same brand can be reused by
|
|
74
|
-
* a misbehaving issuer.
|
|
75
|
-
*/
|
|
76
|
-
export type Brand<K extends AssetKind = AssetKind> = {
|
|
89
|
+
export type BrandMethods<K extends AssetKind> = {
|
|
77
90
|
/**
|
|
78
|
-
*
|
|
91
|
+
* Should be used with `issuer.getBrand` to ensure an issuer and brand match.
|
|
79
92
|
*/
|
|
80
|
-
isMyIssuer: (allegedIssuer: ERef<Issuer
|
|
93
|
+
isMyIssuer: (allegedIssuer: ERef<Issuer<K>>) => Promise<boolean>;
|
|
81
94
|
getAllegedName: () => string;
|
|
82
|
-
/**
|
|
83
|
-
* Give information to UI on how to display the amount.
|
|
84
|
-
*/
|
|
95
|
+
/** @deprecated look up in boardAux */
|
|
85
96
|
getDisplayInfo: () => DisplayInfo<K>;
|
|
86
97
|
getAmountShape: () => Pattern;
|
|
87
98
|
};
|
|
88
99
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*/
|
|
94
|
-
export type IssuerIsLive = (payment: ERef<Payment>) => Promise<boolean>;
|
|
95
|
-
/**
|
|
96
|
-
* Get the amount of digital assets in the payment. Because the
|
|
97
|
-
* payment is not trusted, we cannot call a method on it directly, and
|
|
98
|
-
* must use the issuer instead.
|
|
100
|
+
* The brand identifies the
|
|
101
|
+
* kind of issuer, and has a function to get the alleged name for the kind of
|
|
102
|
+
* asset described. The alleged name (such as 'BTC' or 'moola') is provided by
|
|
103
|
+
* the maker of the issuer and should not be trusted as accurate.
|
|
99
104
|
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
105
|
+
* Every amount created by a particular issuer will share the same brand, but
|
|
106
|
+
* recipients cannot rely on the brand to verify that a purported amount
|
|
107
|
+
* represents the issuer they intended, since the same brand can be reused by
|
|
108
|
+
* a misbehaving issuer.
|
|
102
109
|
*/
|
|
103
|
-
export type
|
|
110
|
+
export type Brand<K extends AssetKind = AssetKind> = RemotableObject & BrandMethods<K>;
|
|
104
111
|
/**
|
|
105
|
-
*
|
|
106
|
-
* payment. `optAmount` is optional. If `optAmount` is present, the
|
|
107
|
-
* code will insist that the amount of the digital assets in the
|
|
108
|
-
* payment is equal to `optAmount`, to prevent sending the wrong
|
|
109
|
-
* payment and other confusion.
|
|
112
|
+
* Return true if the payment continues to exist.
|
|
110
113
|
*
|
|
111
|
-
*
|
|
112
|
-
* resolution.
|
|
114
|
+
* If the payment is a promise, the operation will proceed upon fulfillment.
|
|
113
115
|
*/
|
|
114
|
-
export type
|
|
116
|
+
export type IssuerIsLive = (payment: ERef<Payment>) => Promise<boolean>;
|
|
115
117
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* the payment is equal to `optAmount`, to prevent sending the wrong
|
|
120
|
-
* payment and other confusion.
|
|
118
|
+
* Get the amount of digital assets in the payment.
|
|
119
|
+
* Because the payment is not trusted, we cannot call a method on it directly,
|
|
120
|
+
* and must use the issuer instead.
|
|
121
121
|
*
|
|
122
|
-
*
|
|
123
|
-
* resolution.
|
|
122
|
+
* If the payment is a promise, the operation will proceed upon fulfillment.
|
|
124
123
|
*/
|
|
125
|
-
export type
|
|
124
|
+
export type IssuerGetAmountOf<K extends AssetKind, M extends Key = Key> = (payment: ERef<Payment<K, M>>) => Promise<Amount<K, M>>;
|
|
126
125
|
/**
|
|
127
|
-
*
|
|
126
|
+
* Burn all of the digital assets in the payment.
|
|
127
|
+
* `optAmountShape` is optional. If the `optAmountShape` pattern is present,
|
|
128
|
+
* the amount of the digital assets in the payment must match
|
|
129
|
+
* `optAmountShape`, to prevent sending the wrong payment and other
|
|
130
|
+
* confusion.
|
|
128
131
|
*
|
|
129
|
-
*
|
|
130
|
-
* upon resolution.
|
|
131
|
-
*/
|
|
132
|
-
export type IssuerCombine<K extends AssetKind> = (paymentsArray: ERef<Payment<K>>[], optTotalAmount?: Amount<K> | undefined) => Promise<Payment<K>>;
|
|
133
|
-
/**
|
|
134
|
-
* Split a single payment into two payments,
|
|
135
|
-
* A and B, according to the paymentAmountA passed in.
|
|
132
|
+
* If the payment is a promise, the operation will proceed upon fulfillment.
|
|
136
133
|
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
134
|
+
* As always with optional `Pattern` arguments, keep in mind that technically
|
|
135
|
+
* the value `undefined` itself is a valid `Key` and therefore a valid
|
|
136
|
+
* `Pattern`. But in optional pattern position, a top level `undefined` will
|
|
137
|
+
* be interpreted as absence. If you want to express a `Pattern` that will
|
|
138
|
+
* match only `undefined`, use `M.undefined()` instead.
|
|
139
139
|
*/
|
|
140
|
-
export type
|
|
141
|
-
/**
|
|
142
|
-
* Split a single payment into many payments, according to the amounts
|
|
143
|
-
* passed in.
|
|
144
|
-
*
|
|
145
|
-
* If the payment is a promise, the operation will proceed upon
|
|
146
|
-
* resolution.
|
|
147
|
-
*/
|
|
148
|
-
export type IssuerSplitMany = (payment: ERef<Payment>, amounts: Amount[]) => Promise<Payment[]>;
|
|
140
|
+
export type IssuerBurn = (payment: ERef<Payment>, optAmountShape?: Pattern) => Promise<Amount>;
|
|
149
141
|
/**
|
|
150
|
-
*
|
|
151
|
-
* and payments. The issuer can also transform payments (splitting
|
|
152
|
-
* payments, combining payments, burning payments, and claiming
|
|
153
|
-
* payments exclusively). The issuer should be gotten from a trusted
|
|
154
|
-
* source and then relied upon as the decider of whether an untrusted
|
|
155
|
-
* payment is valid.
|
|
142
|
+
* Work around JSDoc union handling
|
|
156
143
|
*/
|
|
157
|
-
export type
|
|
144
|
+
export type IssuerMethods<K extends AssetKind, M extends Key> = {
|
|
158
145
|
/**
|
|
159
|
-
* Get the Brand for this Issuer. The
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* can use another issuer's brand.
|
|
146
|
+
* Get the Brand for this Issuer. The Brand
|
|
147
|
+
* indicates the type of digital asset and is shared by the mint, the issuer,
|
|
148
|
+
* and any purses and payments of this particular kind. The brand is not
|
|
149
|
+
* closely held, so this function should not be trusted to identify an issuer
|
|
150
|
+
* alone. Fake digital assets and amount can use another issuer's brand.
|
|
165
151
|
*/
|
|
166
152
|
getBrand: () => Brand<K>;
|
|
167
153
|
/**
|
|
168
|
-
* Get the allegedName for
|
|
169
|
-
*
|
|
154
|
+
* Get the allegedName for this
|
|
155
|
+
* mint/issuer
|
|
170
156
|
*/
|
|
171
157
|
getAllegedName: () => string;
|
|
172
158
|
/**
|
|
173
|
-
* Get the kind of
|
|
174
|
-
*
|
|
175
|
-
*/
|
|
176
|
-
getAssetKind: () => AssetKind;
|
|
177
|
-
/**
|
|
178
|
-
* Give information to UI
|
|
179
|
-
* on how to display amounts for this issuer.
|
|
159
|
+
* Get the kind of MathHelpers used by this
|
|
160
|
+
* Issuer.
|
|
180
161
|
*/
|
|
162
|
+
getAssetKind: () => K;
|
|
163
|
+
/** @deprecated look up in boardAux */
|
|
181
164
|
getDisplayInfo: () => DisplayInfo<K>;
|
|
182
165
|
/**
|
|
183
166
|
* Make an empty purse of this
|
|
184
167
|
* brand.
|
|
185
168
|
*/
|
|
186
|
-
makeEmptyPurse: () => Purse<K>;
|
|
169
|
+
makeEmptyPurse: () => Purse<K, M>;
|
|
187
170
|
isLive: IssuerIsLive;
|
|
188
|
-
getAmountOf: IssuerGetAmountOf<K>;
|
|
171
|
+
getAmountOf: IssuerGetAmountOf<K, M>;
|
|
189
172
|
burn: IssuerBurn;
|
|
190
173
|
};
|
|
174
|
+
/**
|
|
175
|
+
* The issuer cannot
|
|
176
|
+
* mint a new amount, but it can create empty purses and payments. The issuer
|
|
177
|
+
* can also transform payments (splitting payments, combining payments,
|
|
178
|
+
* burning payments, and claiming payments exclusively). The issuer should be
|
|
179
|
+
* gotten from a trusted source and then relied upon as the decider of whether
|
|
180
|
+
* an untrusted payment is valid.
|
|
181
|
+
*/
|
|
182
|
+
export type Issuer<K extends AssetKind = AssetKind, M extends Key = Key> = RemotableObject & IssuerMethods<K, M>;
|
|
191
183
|
export type PaymentLedger<K extends AssetKind = AssetKind> = {
|
|
192
184
|
mint: Mint<K>;
|
|
185
|
+
/**
|
|
186
|
+
* Externally useful only if this issuer
|
|
187
|
+
* uses recovery sets. Can be used to get the recovery set associated with
|
|
188
|
+
* minted payments that are still live.
|
|
189
|
+
*/
|
|
193
190
|
mintRecoveryPurse: Purse<K>;
|
|
194
191
|
issuer: Issuer<K>;
|
|
195
192
|
brand: Brand<K>;
|
|
196
193
|
};
|
|
197
|
-
export type IssuerKit<K extends AssetKind = AssetKind> = {
|
|
198
|
-
mint: Mint<K>;
|
|
199
|
-
|
|
200
|
-
|
|
194
|
+
export type IssuerKit<K extends AssetKind = AssetKind, M extends Key = Key> = {
|
|
195
|
+
mint: Mint<K, M>;
|
|
196
|
+
/**
|
|
197
|
+
* Externally useful only if this
|
|
198
|
+
* issuer uses recovery sets. Can be used to get the recovery set associated
|
|
199
|
+
* with minted payments that are still live.
|
|
200
|
+
*/
|
|
201
|
+
mintRecoveryPurse: Purse<K, M>;
|
|
202
|
+
issuer: Issuer<K, M>;
|
|
201
203
|
brand: Brand<K>;
|
|
202
204
|
displayInfo: DisplayInfo;
|
|
203
205
|
};
|
|
204
206
|
export type AdditionalDisplayInfo = {
|
|
205
207
|
/**
|
|
206
|
-
* Tells the display software how
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
* should be used for *display purposes only*. Any other use is an
|
|
208
|
+
* Tells the display software how many
|
|
209
|
+
* decimal places to move the decimal over to the left, or in other words,
|
|
210
|
+
* which position corresponds to whole numbers. We require fungible digital
|
|
211
|
+
* assets to be represented in integers, in the smallest unit (i.e. USD might
|
|
212
|
+
* be represented in mill, a thousandth of a dollar. In that case,
|
|
213
|
+
* `decimalPlaces` would be 3.) This property is optional, and for
|
|
214
|
+
* non-fungible digital assets, should not be specified. The decimalPlaces
|
|
215
|
+
* property should be used for _display purposes only_. Any other use is an
|
|
215
216
|
* anti-pattern.
|
|
216
217
|
*/
|
|
217
218
|
decimalPlaces?: number | undefined;
|
|
218
219
|
assetKind?: AssetKind | undefined;
|
|
219
220
|
};
|
|
220
|
-
export type ShutdownWithFailure = import('@agoric/swingset-vat').ShutdownWithFailure;
|
|
221
221
|
/**
|
|
222
|
-
* Holding a Mint carries the right to issue new digital
|
|
223
|
-
* assets all have the same kind, which is called a Brand.
|
|
222
|
+
* Holding a Mint carries the right to issue new digital
|
|
223
|
+
* assets. These assets all have the same kind, which is called a Brand.
|
|
224
224
|
*/
|
|
225
|
-
export type Mint<K extends AssetKind = AssetKind> = {
|
|
225
|
+
export type Mint<K extends AssetKind = AssetKind, M extends Key = Key> = {
|
|
226
226
|
/**
|
|
227
227
|
* Gets the Issuer for this mint.
|
|
228
228
|
*/
|
|
229
|
-
getIssuer: () => Issuer<K>;
|
|
229
|
+
getIssuer: () => Issuer<K, M>;
|
|
230
230
|
/**
|
|
231
|
-
* Creates a new
|
|
231
|
+
* Creates a new
|
|
232
|
+
* Payment containing newly minted amount.
|
|
232
233
|
*/
|
|
233
|
-
mintPayment: (newAmount: Amount<K>) => Payment<K>;
|
|
234
|
+
mintPayment: (newAmount: Amount<K>) => Payment<K, M>;
|
|
234
235
|
};
|
|
236
|
+
/**
|
|
237
|
+
* Issuers first became durable with mandatory recovery sets. Later they were
|
|
238
|
+
* made optional, but there is no support for converting from one state to the
|
|
239
|
+
* other. Thus, absence of a `RecoverySetsOption` state is equivalent to
|
|
240
|
+
* `'hasRecoverySets'`. In the absence of a `recoverySetsOption` parameter,
|
|
241
|
+
* upgradeIssuerKit defaults to the predecessor's `RecoverySetsOption` state, or
|
|
242
|
+
* `'hasRecoverySets'` if none.
|
|
243
|
+
*
|
|
244
|
+
* At this time, issuers started in one of the states (`'noRecoverySets'`, or
|
|
245
|
+
* `'hasRecoverySets'`) cannot be converted to the other on upgrade. If this
|
|
246
|
+
* transition is needed, it can likely be supported in a future upgrade. File an
|
|
247
|
+
* issue on github and explain what you need and why.
|
|
248
|
+
*/
|
|
249
|
+
export type RecoverySetsOption = 'hasRecoverySets' | 'noRecoverySets';
|
|
235
250
|
export type DepositFacetReceive = (payment: Payment, optAmountShape?: Pattern) => Amount;
|
|
236
251
|
export type DepositFacet = {
|
|
237
252
|
/**
|
|
238
|
-
* Deposit all the contents of payment
|
|
239
|
-
*
|
|
240
|
-
* amount of digital assets in the
|
|
253
|
+
* Deposit all the contents of payment
|
|
254
|
+
* into the purse that made this facet, returning the amount. If the optional
|
|
255
|
+
* argument `optAmount` does not equal the amount of digital assets in the
|
|
256
|
+
* payment, throw an error.
|
|
241
257
|
*
|
|
242
258
|
* If payment is a promise, throw an error.
|
|
243
259
|
*/
|
|
244
260
|
receive: DepositFacetReceive;
|
|
245
261
|
};
|
|
246
|
-
export type PurseDeposit<K extends AssetKind> = (payment: Payment<K>, optAmountShape?: Pattern) => Amount<K>;
|
|
247
262
|
/**
|
|
248
|
-
* Purses hold amount of
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
* The primary use for Purses and Payments is for currency-like and goods-like
|
|
254
|
-
* digital assets, but they can also be used to represent other kinds of rights,
|
|
255
|
-
* such as the right to participate in a particular contract.
|
|
263
|
+
* Purses hold amount of
|
|
264
|
+
* digital assets of the same brand, but unlike Payments, they are not meant
|
|
265
|
+
* to be sent to others. To transfer digital assets, a Payment should be
|
|
266
|
+
* withdrawn from a Purse. The amount of digital assets in a purse can change
|
|
267
|
+
* through the action of deposit() and withdraw().
|
|
256
268
|
*/
|
|
257
|
-
export type Purse<K extends AssetKind = AssetKind> =
|
|
269
|
+
export type Purse<K extends AssetKind = AssetKind, M extends Key = Key> = RemotableObject & PurseMethods<K, M>;
|
|
270
|
+
/**
|
|
271
|
+
* The primary use for Purses and Payments is for
|
|
272
|
+
* currency-like and goods-like digital assets, but they can also be used to
|
|
273
|
+
* represent other kinds of rights, such as the right to participate in a
|
|
274
|
+
* particular contract.
|
|
275
|
+
*/
|
|
276
|
+
export type PurseMethods<K extends AssetKind = AssetKind, M extends Key = Key> = {
|
|
258
277
|
/**
|
|
259
|
-
* Get the alleged Brand for this
|
|
278
|
+
* Get the alleged Brand for this
|
|
279
|
+
* Purse
|
|
260
280
|
*/
|
|
261
281
|
getAllegedBrand: () => Brand<K>;
|
|
262
282
|
/**
|
|
263
|
-
* Get the amount contained in
|
|
283
|
+
* Get the amount contained in
|
|
284
|
+
* this purse.
|
|
264
285
|
*/
|
|
265
|
-
getCurrentAmount: () => Amount<K>;
|
|
286
|
+
getCurrentAmount: () => Amount<K, M>;
|
|
266
287
|
/**
|
|
267
|
-
* Get a
|
|
288
|
+
* Get a
|
|
289
|
+
* lossy notifier for changes to this purse's balance.
|
|
268
290
|
*/
|
|
269
|
-
getCurrentAmountNotifier: () => LatestTopic<Amount<K>>;
|
|
291
|
+
getCurrentAmountNotifier: () => LatestTopic<Amount<K, M>>;
|
|
270
292
|
/**
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
293
|
+
* Deposit all the contents of payment into this purse, returning the amount. If
|
|
294
|
+
* the optional argument `optAmount` does not equal the amount of digital
|
|
295
|
+
* assets in the payment, throw an error.
|
|
274
296
|
*
|
|
275
|
-
*
|
|
297
|
+
* If payment is a promise, throw an error.
|
|
276
298
|
*/
|
|
277
|
-
deposit:
|
|
299
|
+
deposit: <P extends Payment<K, M>>(payment: P, optAmountShape?: Pattern) => P extends Payment<K, M> ? Amount<K, M> : never;
|
|
278
300
|
/**
|
|
279
|
-
* Return an object whose
|
|
301
|
+
* Return an object whose
|
|
302
|
+
* `receive` method deposits to the current Purse.
|
|
280
303
|
*/
|
|
281
304
|
getDepositFacet: () => DepositFacet;
|
|
282
305
|
/**
|
|
283
|
-
* Withdraw amount
|
|
306
|
+
* Withdraw amount
|
|
307
|
+
* from this purse into a new Payment.
|
|
284
308
|
*/
|
|
285
|
-
withdraw: (amount: Amount<K>) => Payment<K>;
|
|
309
|
+
withdraw: (amount: Amount<K, M>) => Payment<K, M>;
|
|
286
310
|
/**
|
|
287
|
-
* The set of payments
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
*
|
|
291
|
-
*
|
|
292
|
-
* things. Afterwards, if the recipient
|
|
293
|
-
* around to depositing it, their deposit
|
|
311
|
+
* The set of payments
|
|
312
|
+
* withdrawn from this purse that are still live. These are the payments that
|
|
313
|
+
* can still be recovered in emergencies by, for example, depositing into this
|
|
314
|
+
* purse. Such a deposit action is like canceling an outstanding check because
|
|
315
|
+
* you're tired of waiting for it. Once your cancellation is acknowledged, you
|
|
316
|
+
* can spend the assets at stake on other things. Afterwards, if the recipient
|
|
317
|
+
* of the original check finally gets around to depositing it, their deposit
|
|
318
|
+
* fails.
|
|
319
|
+
*
|
|
320
|
+
* Returns an empty set if this issuer does not support recovery sets.
|
|
294
321
|
*/
|
|
295
|
-
getRecoverySet: () => CopySet<Payment<K>>;
|
|
322
|
+
getRecoverySet: () => CopySet<Payment<K, M>>;
|
|
296
323
|
/**
|
|
297
|
-
* For use in emergencies, such as
|
|
298
|
-
* upgrade. This deposits all the
|
|
299
|
-
* into the purse itself, returning the
|
|
324
|
+
* For use in emergencies, such as
|
|
325
|
+
* coming back from a traumatic crash and upgrade. This deposits all the
|
|
326
|
+
* payments in this purse's recovery set into the purse itself, returning the
|
|
327
|
+
* total amount of assets recovered.
|
|
328
|
+
*
|
|
329
|
+
* Returns an empty amount if this issuer does not support recovery sets.
|
|
300
330
|
*/
|
|
301
|
-
recoverAll: () => Amount<K>;
|
|
331
|
+
recoverAll: () => Amount<K, M>;
|
|
302
332
|
};
|
|
303
333
|
/**
|
|
304
|
-
* Payments hold amount
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
* that either a payment has
|
|
308
|
-
* started with, or it is used up
|
|
309
|
-
* payment.
|
|
334
|
+
* Payments hold amount
|
|
335
|
+
* of digital assets of the same brand in transit. Payments can be deposited
|
|
336
|
+
* in purses, split into multiple payments, combined, and claimed (getting an
|
|
337
|
+
* exclusive payment). Payments are linear, meaning that either a payment has
|
|
338
|
+
* the same amount of digital assets it started with, or it is used up
|
|
339
|
+
* entirely. It is impossible to partially use a payment.
|
|
310
340
|
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
341
|
+
* Payments are often received from other actors and therefore should not be
|
|
342
|
+
* trusted themselves. To get the amount of digital assets in a payment, use
|
|
343
|
+
* the trusted issuer: issuer.getAmountOf(payment),
|
|
314
344
|
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
345
|
+
* Payments can be converted to Purses by getting a trusted issuer and calling
|
|
346
|
+
* `issuer.makeEmptyPurse()` to create a purse, then
|
|
347
|
+
* `purse.deposit(payment)`.
|
|
318
348
|
*/
|
|
319
|
-
export type Payment<K extends AssetKind = AssetKind> =
|
|
349
|
+
export type Payment<K extends AssetKind = AssetKind, M extends Key = Key> = RemotableObject & PaymentMethods<K>;
|
|
350
|
+
export type PaymentMethods<K extends AssetKind = AssetKind> = {
|
|
320
351
|
/**
|
|
321
|
-
* Get the allegedBrand, indicating
|
|
322
|
-
* payment purports to be, and which issuer to
|
|
323
|
-
* are not trusted, any method calls on payments should
|
|
324
|
-
* with suspicion and verified elsewhere.
|
|
352
|
+
* Get the allegedBrand, indicating
|
|
353
|
+
* the type of digital asset this payment purports to be, and which issuer to
|
|
354
|
+
* use. Because payments are not trusted, any method calls on payments should
|
|
355
|
+
* be treated with suspicion and verified elsewhere.
|
|
325
356
|
*/
|
|
326
357
|
getAllegedBrand: () => Brand<K>;
|
|
327
358
|
};
|
|
328
359
|
/**
|
|
329
|
-
* All of the difference in how digital asset
|
|
330
|
-
* reduced to the behavior of the math on
|
|
331
|
-
* custom logic into mathHelpers. MathHelpers are
|
|
332
|
-
* arithmetic, whereas AmountMath is about amounts, which are the
|
|
333
|
-
*
|
|
334
|
-
*
|
|
360
|
+
* All of the difference in how digital asset
|
|
361
|
+
* amount are manipulated can be reduced to the behavior of the math on
|
|
362
|
+
* values. We extract this custom logic into mathHelpers. MathHelpers are
|
|
363
|
+
* about value arithmetic, whereas AmountMath is about amounts, which are the
|
|
364
|
+
* values labeled with a brand. AmountMath use mathHelpers to do their value
|
|
365
|
+
* arithmetic, and then brand the results, making a new amount.
|
|
335
366
|
*
|
|
336
|
-
*
|
|
337
|
-
*
|
|
338
|
-
*
|
|
339
|
-
* invalid output.
|
|
367
|
+
* The MathHelpers are designed to be called only from AmountMath, and so all
|
|
368
|
+
* methods but coerce can assume their inputs are valid. They only need to do
|
|
369
|
+
* output validation, and only when there is a possibility of invalid output.
|
|
340
370
|
*/
|
|
341
371
|
export type MathHelpers<V extends AmountValue> = {
|
|
342
372
|
/**
|
|
343
|
-
* Check the kind of this value and
|
|
344
|
-
* expected kind.
|
|
373
|
+
* Check the kind of this value and
|
|
374
|
+
* throw if it is not the expected kind.
|
|
345
375
|
*/
|
|
346
376
|
doCoerce: (allegedValue: V) => V;
|
|
347
377
|
/**
|
|
348
|
-
* Get the representation for the identity
|
|
349
|
-
* empty array)
|
|
378
|
+
* Get the representation for the identity
|
|
379
|
+
* element (often 0 or an empty array)
|
|
350
380
|
*/
|
|
351
381
|
doMakeEmpty: () => V;
|
|
352
382
|
/**
|
|
353
|
-
* Is the value the identity
|
|
383
|
+
* Is the value the identity
|
|
384
|
+
* element?
|
|
354
385
|
*/
|
|
355
386
|
doIsEmpty: (value: V) => boolean;
|
|
356
387
|
/**
|
|
357
|
-
* Is the left greater than
|
|
388
|
+
* Is the left greater than
|
|
389
|
+
* or equal to the right?
|
|
358
390
|
*/
|
|
359
391
|
doIsGTE: (left: V, right: V) => boolean;
|
|
360
392
|
/**
|
|
@@ -362,15 +394,17 @@ export type MathHelpers<V extends AmountValue> = {
|
|
|
362
394
|
*/
|
|
363
395
|
doIsEqual: (left: V, right: V) => boolean;
|
|
364
396
|
/**
|
|
365
|
-
* Return the left combined with the
|
|
397
|
+
* Return the left combined with the
|
|
398
|
+
* right.
|
|
366
399
|
*/
|
|
367
400
|
doAdd: (left: V, right: V) => V;
|
|
368
401
|
/**
|
|
369
|
-
* Return what remains after
|
|
370
|
-
* something in the right was not in the
|
|
402
|
+
* Return what remains after
|
|
403
|
+
* removing the right from the left. If something in the right was not in the
|
|
404
|
+
* left, we throw an error.
|
|
371
405
|
*/
|
|
372
406
|
doSubtract: (left: V, right: V) => V;
|
|
373
407
|
};
|
|
374
408
|
export type NatValue = bigint;
|
|
375
|
-
export type SetValue =
|
|
409
|
+
export type SetValue<K extends Key = Key> = K[];
|
|
376
410
|
//# sourceMappingURL=types.d.ts.map
|