@agoric/ertp 0.16.3-dev-5dc325b.0 → 0.16.3-getting-started-dev-d127d1d.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +759 -0
  2. package/package.json +17 -24
  3. package/src/amountMath.d.ts +53 -0
  4. package/src/amountMath.d.ts.map +1 -0
  5. package/src/amountMath.js +63 -57
  6. package/src/displayInfo.d.ts +2 -0
  7. package/src/displayInfo.d.ts.map +1 -0
  8. package/src/index.d.ts +4 -0
  9. package/src/index.d.ts.map +1 -0
  10. package/src/issuerKit.d.ts +19 -0
  11. package/src/issuerKit.d.ts.map +1 -0
  12. package/src/issuerKit.js +59 -145
  13. package/src/legacy-payment-helpers.d.ts +5 -0
  14. package/src/legacy-payment-helpers.d.ts.map +1 -0
  15. package/src/legacy-payment-helpers.js +28 -23
  16. package/src/mathHelpers/copyBagMathHelpers.d.ts +5 -0
  17. package/src/mathHelpers/copyBagMathHelpers.d.ts.map +1 -0
  18. package/src/mathHelpers/copyBagMathHelpers.js +3 -1
  19. package/src/mathHelpers/copySetMathHelpers.d.ts +5 -0
  20. package/src/mathHelpers/copySetMathHelpers.d.ts.map +1 -0
  21. package/src/mathHelpers/copySetMathHelpers.js +3 -1
  22. package/src/mathHelpers/natMathHelpers.d.ts +14 -0
  23. package/src/mathHelpers/natMathHelpers.d.ts.map +1 -0
  24. package/src/mathHelpers/natMathHelpers.js +7 -6
  25. package/src/mathHelpers/setMathHelpers.d.ts +6 -0
  26. package/src/mathHelpers/setMathHelpers.d.ts.map +1 -0
  27. package/src/payment.d.ts +3 -0
  28. package/src/payment.d.ts.map +1 -0
  29. package/src/payment.js +0 -5
  30. package/src/paymentLedger.d.ts +3 -0
  31. package/src/paymentLedger.d.ts.map +1 -0
  32. package/src/paymentLedger.js +40 -38
  33. package/src/purse.d.ts +13 -0
  34. package/src/purse.d.ts.map +1 -0
  35. package/src/purse.js +0 -18
  36. package/src/transientNotifier.d.ts +5 -0
  37. package/src/transientNotifier.d.ts.map +1 -0
  38. package/src/typeGuards.d.ts +42 -0
  39. package/src/typeGuards.d.ts.map +1 -0
  40. package/src/typeGuards.js +43 -37
  41. package/src/types-ambient.d.ts +376 -0
  42. package/src/types-ambient.d.ts.map +1 -0
  43. package/src/types-ambient.js +314 -218
  44. package/src/types.d.ts +376 -0
  45. package/src/types.d.ts.map +1 -0
  46. package/src/types.js +314 -218
package/src/purse.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export function preparePurseKind(issuerBaggage: any, name: any, assetKind: any, brand: any, PurseIKit: any, purseMethods: any): () => {
2
+ deposit(srcPayment: any, optAmountShape?: undefined): any;
3
+ withdraw(amount: any): any;
4
+ getCurrentAmount(): Amount<any>;
5
+ getCurrentAmountNotifier(): Notifier<any>;
6
+ getAllegedBrand(): any;
7
+ getDepositFacet(): {
8
+ receive(...args: any[]): any;
9
+ };
10
+ getRecoverySet(): CopySet<Payment<AssetKind>>;
11
+ recoverAll(): Amount<any>;
12
+ };
13
+ //# sourceMappingURL=purse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purse.d.ts","sourceRoot":"","sources":["purse.js"],"names":[],"mappings":"AAOO;;;;;;;;;;;EAkHN"}
package/src/purse.js CHANGED
@@ -3,26 +3,8 @@ import { prepareExoClassKit, makeScalarBigSetStore } from '@agoric/vat-data';
3
3
  import { AmountMath } from './amountMath.js';
4
4
  import { makeTransientNotifierKit } from './transientNotifier.js';
5
5
 
6
- // TODO `InterfaceGuard` type parameter
7
- /** @typedef {import('@endo/patterns').InterfaceGuard} InterfaceGuard */
8
- /** @typedef {import('@agoric/vat-data').Baggage} Baggage */
9
-
10
6
  const { Fail } = assert;
11
7
 
12
- /**
13
- * @param {Baggage} issuerBaggage
14
- * @param {string} name
15
- * @param {AssetKind} assetKind
16
- * @param {Brand} brand
17
- * @param {{
18
- * purse: InterfaceGuard;
19
- * depositFacet: InterfaceGuard;
20
- * }} PurseIKit
21
- * @param {{
22
- * depositInternal: any;
23
- * withdrawInternal: any;
24
- * }} purseMethods
25
- */
26
8
  export const preparePurseKind = (
27
9
  issuerBaggage,
28
10
  name,
@@ -0,0 +1,5 @@
1
+ export function makeTransientNotifierKit(): {
2
+ provideNotifier: (key: any) => Notifier<any>;
3
+ update: (key: any, newValue: any) => void;
4
+ };
5
+ //# sourceMappingURL=transientNotifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transientNotifier.d.ts","sourceRoot":"","sources":["transientNotifier.js"],"names":[],"mappings":"AAQO;;;EAoBN"}
@@ -0,0 +1,42 @@
1
+ export const BrandShape: import("@endo/patterns").Matcher;
2
+ export const IssuerShape: import("@endo/patterns").Matcher;
3
+ export const PaymentShape: import("@endo/patterns").Matcher;
4
+ export const PurseShape: import("@endo/patterns").Matcher;
5
+ export const DepositFacetShape: import("@endo/patterns").Matcher;
6
+ export const NotifierShape: import("@endo/patterns").Matcher;
7
+ export const MintShape: import("@endo/patterns").Matcher;
8
+ export namespace AmountShape {
9
+ export { BrandShape as brand };
10
+ export { AmountValueShape as value };
11
+ }
12
+ export namespace RatioShape {
13
+ export { AmountShape as numerator };
14
+ export { AmountShape as denominator };
15
+ }
16
+ export function isNatValue(value: AmountValue): value is bigint;
17
+ export function isCopySetValue(value: AmountValue): value is CopySet<any>;
18
+ export function isSetValue(value: AmountValue): value is SetValue;
19
+ export function isCopyBagValue(value: AmountValue): value is CopyBag<any>;
20
+ export const MAX_ABSOLUTE_DECIMAL_PLACES: 100;
21
+ export const AssetKindShape: import("@endo/patterns").Matcher;
22
+ export const DisplayInfoShape: import("@endo/patterns").Matcher;
23
+ export namespace IssuerKitShape {
24
+ export { BrandShape as brand };
25
+ export { MintShape as mint };
26
+ export { PurseShape as mintRecoveryPurse };
27
+ export { IssuerShape as issuer };
28
+ export { DisplayInfoShape as displayInfo };
29
+ }
30
+ export const BrandI: import("@endo/patterns").InterfaceGuard;
31
+ export function makeIssuerInterfaces(brandShape?: Pattern, assetKindShape?: Pattern, amountShape?: Pattern): {
32
+ IssuerI: import("@endo/patterns").InterfaceGuard;
33
+ MintI: import("@endo/patterns").InterfaceGuard;
34
+ PaymentI: import("@endo/patterns").InterfaceGuard;
35
+ PurseIKit: {
36
+ purse: import("@endo/patterns").InterfaceGuard;
37
+ depositFacet: import("@endo/patterns").InterfaceGuard;
38
+ };
39
+ };
40
+ declare const AmountValueShape: import("@endo/patterns").Matcher;
41
+ export {};
42
+ //# sourceMappingURL=typeGuards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeGuards.d.ts","sourceRoot":"","sources":["typeGuards.js"],"names":[],"mappings":"AAIA,0DAA+C;AAC/C,2DAAiD;AACjD,4DAAmD;AACnD,0DAA+C;AAC/C,iEAA6D;AAC7D,6DAAqD;AACrD,yDAA6C;;;;;;;;;AAqFtC,kCAHI,WAAW,mBAG0C;AASzD,sCAHI,WAAW,yBAGkD;AAYjE,kCAHI,WAAW,qBAG0C;AASzD,sCAHI,WAAW,yBAGkD;AAIxE,8CAA+C;AAE/C,8DAAuE;AAEvE,gEAaE;;;;;;;;AAYF,6DAKG;AAOI,kDAJI,OAAO,mBACP,OAAO,gBACP,OAAO;;;;;;;;EAkEjB;AAlKD,iEAKE"}
package/src/typeGuards.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // @jessie-check
2
2
 
3
- import { M, matches, getInterfaceGuardPayload } from '@endo/patterns';
3
+ import { M, matches } from '@agoric/store';
4
4
 
5
5
  export const BrandShape = M.remotable('Brand');
6
6
  export const IssuerShape = M.remotable('Issuer');
@@ -11,56 +11,62 @@ export const NotifierShape = M.remotable('Notifier');
11
11
  export const MintShape = M.remotable('Mint');
12
12
 
13
13
  /**
14
- * When the AmountValue of an Amount fits the NatValueShape, i.e., when it is a
15
- * non-negative bigint, then it represents that many units of the fungible asset
16
- * represented by that amount. The brand of that amount should indeed represent
17
- * a kind of asset consisting of a countable set of fungible units.
14
+ * When the AmountValue of an Amount fits the NatValueShape, i.e., when it is
15
+ * a non-negative bigint, then it represents that many units of the
16
+ * fungible asset represented by that amount. The brand of that amount
17
+ * should indeed represent a kind of asset consisting of a countable
18
+ * set of fungible units.
18
19
  */
19
20
  const NatValueShape = M.nat();
20
21
 
21
22
  /**
22
23
  * When the AmountValue of an Amount fits the CopySetValueShape, i.e., when it
23
- * is a CopySet, then it represents the set of those keys, where each key
24
- * represents some individual non-fungible item, like a concert ticket, from the
25
- * non-fungible asset class represented by that amount's brand. The amount
26
- * itself represents the set of these items, as opposed to any of the other
27
- * items from the same asset class.
24
+ * is a CopySet, then it represents the set of those
25
+ * keys, where each key represents some individual non-fungible
26
+ * item, like a concert ticket, from the non-fungible asset class
27
+ * represented by that amount's brand. The amount itself represents
28
+ * the set of these items, as opposed to any of the other items
29
+ * from the same asset class.
28
30
  *
29
- * If a given value class represents concert tickets, it seems bizarre that we
30
- * can form amounts of any key. The hard constraint is that the code that holds
31
- * the mint for that asset class---the one associated with that brand, only
32
- * mints the items representing the real units of that asset class as defined by
33
- * it. Anyone else can put together an amount expressing, for example, that they
34
- * "want" some items that will never be minted. That want will never be
35
- * satisfied. "You can't always get..."
31
+ * If a given value class represents concert tickets, it seems bizarre
32
+ * that we can form amounts of any key. The hard constraint is that
33
+ * the code that holds the mint for that asset class---the one associated
34
+ * with that brand, only mints the items representing the real units
35
+ * of that asset class as defined by it. Anyone else can put together
36
+ * an amount expressing, for example, that they "want" some items that
37
+ * will never be minted. That want will never be satisfied.
38
+ * "You can't always get..."
36
39
  */
37
40
  const CopySetValueShape = M.set();
38
41
 
39
42
  /**
40
- * When the AmountValue of an Amount fits the SetValueShape, i.e., when it is a
41
- * CopyArray of passable Keys. This representation is deprecated.
43
+ * When the AmountValue of an Amount fits the SetValueShape, i.e., when it
44
+ * is a CopyArray of passable Keys. This representation is deprecated.
42
45
  *
43
46
  * @deprecated Please change from using array-based SetValues to CopySet-based
44
- * CopySetValues.
47
+ * CopySetValues.
45
48
  */
46
49
  const SetValueShape = M.arrayOf(M.key());
47
50
 
48
51
  /**
49
52
  * When the AmountValue of an Amount fits the CopyBagValueShape, i.e., when it
50
- * is a CopyBag, then it represents the bag (multiset) of those keys, where each
51
- * key represents some individual semi-fungible item, like a concert ticket,
52
- * from the semi-fungible asset class represented by that amount's brand. The
53
- * number of times that key appears in the bag is the number of fungible units
54
- * of that key. The amount itself represents the bag of these items, as opposed
55
- * to any of the other items from the same asset class.
53
+ * is a CopyBag, then it represents the bag (multiset) of those
54
+ * keys, where each key represents some individual semi-fungible
55
+ * item, like a concert ticket, from the semi-fungible asset class
56
+ * represented by that amount's brand. The number of times that key
57
+ * appears in the bag is the number of fungible units of that key.
58
+ * The amount itself represents
59
+ * the bag of these items, as opposed to any of the other items
60
+ * from the same asset class.
56
61
  *
57
- * If a given value class represents concert tickets, it seems bizarre that we
58
- * can form amounts of any key. The hard constraint is that the code that holds
59
- * the mint for that asset class---the one associated with that brand, only
60
- * mints the items representing the real units of that asset class as defined by
61
- * it. Anyone else can put together an amount expressing, for example, that they
62
- * "want" some items that will never be minted. That want will never be
63
- * satisfied. "You can't always get..."
62
+ * If a given value class represents concert tickets, it seems bizarre
63
+ * that we can form amounts of any key. The hard constraint is that
64
+ * the code that holds the mint for that asset class---the one associated
65
+ * with that brand, only mints the items representing the real units
66
+ * of that asset class as defined by it. Anyone else can put together
67
+ * an amount expressing, for example, that they "want" some items that
68
+ * will never be minted. That want will never be satisfied.
69
+ * "You can't always get..."
64
70
  */
65
71
  const CopyBagValueShape = M.bag();
66
72
 
@@ -100,11 +106,11 @@ export const isCopySetValue = value => matches(value, CopySetValueShape);
100
106
  harden(isCopySetValue);
101
107
 
102
108
  /**
103
- * Returns true if value is a pass by copy array structure. Does not check for
104
- * duplicates. To check for duplicates, use setMathHelpers.coerce.
109
+ * Returns true if value is a pass by copy array structure. Does not
110
+ * check for duplicates. To check for duplicates, use setMathHelpers.coerce.
105
111
  *
106
112
  * @deprecated Please change from using array-based SetValues to CopySet-based
107
- * CopySetValues.
113
+ * CopySetValues.
108
114
  * @param {AmountValue} value
109
115
  * @returns {value is SetValue}
110
116
  */
@@ -212,7 +218,7 @@ export const makeIssuerInterfaces = (
212
218
  });
213
219
 
214
220
  const DepositFacetI = M.interface('DepositFacet', {
215
- receive: getInterfaceGuardPayload(PurseI).methodGuards.deposit,
221
+ receive: PurseI.methodGuards.deposit,
216
222
  });
217
223
 
218
224
  const PurseIKit = harden({
@@ -0,0 +1,376 @@
1
+ /**
2
+ * Amounts are descriptions of digital assets, answering the questions
3
+ * "how much" and "of what kind". Amounts are values labeled with a brand.
4
+ * AmountMath executes the logic of how amounts are changed when digital
5
+ * assets are merged, separated, or otherwise manipulated. For
6
+ * example, a deposit of 2 bucks into a purse that already has 3 bucks
7
+ * gives a new purse balance of 5 bucks. An empty purse has 0 bucks. AmountMath
8
+ * relies heavily on polymorphic MathHelpers, which manipulate the unbranded
9
+ * portion.
10
+ */
11
+ type Amount<K extends AssetKind = AssetKind> = {
12
+ brand: Brand<K>;
13
+ value: AssetValueForKind<K>;
14
+ };
15
+ /**
16
+ * An `AmountValue` describes a set or quantity of assets that can be owned or
17
+ * shared.
18
+ *
19
+ * A fungible `AmountValue` uses a non-negative bigint to represent a quantity
20
+ * of that many assets.
21
+ *
22
+ * A non-fungible `AmountValue` uses an array or CopySet of `Key`s to represent
23
+ * 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
+ * key in a map (MapStore or CopyMap).
26
+ *
27
+ * `SetValue` is for the deprecated set representation, using an array directly
28
+ * to represent the array of its elements. `CopySet` is the proper
29
+ * representation using a CopySet.
30
+ *
31
+ * A semi-fungible `CopyBag` is represented as a
32
+ * `CopyBag` of `Key` objects. "Bag" is synonymous with MultiSet, where an
33
+ * element of a bag can be present once or more times, i.e., some positive
34
+ * bigint number of times, representing that quantity of the asset represented
35
+ * by that key.
36
+ */
37
+ type AmountValue = NatValue | any[] | CopySet | CopyBag;
38
+ /**
39
+ * See doc-comment for `AmountValue`.
40
+ */
41
+ type AssetKind = 'nat' | 'set' | 'copySet' | 'copyBag';
42
+ type AssetValueForKind<K extends AssetKind> = K extends 'nat' ? NatValue : K extends 'set' ? any[] : K extends 'copySet' ? CopySet : K extends 'copyBag' ? CopyBag : never;
43
+ type AssetKindForValue<V extends AmountValue> = V extends NatValue ? 'nat' : V extends any[] ? 'set' : V extends CopySet ? 'copySet' : V extends CopyBag ? 'copyBag' : never;
44
+ type DisplayInfo<K extends AssetKind = AssetKind> = {
45
+ /**
46
+ * Tells the display software how
47
+ * many decimal places to move the decimal over to the left, or in
48
+ * other words, which position corresponds to whole numbers. We
49
+ * require fungible digital assets to be represented in integers, in
50
+ * the smallest unit (i.e. USD might be represented in mill, a
51
+ * thousandth of a dollar. In that case, `decimalPlaces` would be
52
+ * 3.) This property is optional, and for non-fungible digital
53
+ * assets, should not be specified. The decimalPlaces property
54
+ * should be used for *display purposes only*. Any other use is an
55
+ * anti-pattern.
56
+ */
57
+ decimalPlaces?: number | undefined;
58
+ /**
59
+ * - the kind of asset, either
60
+ * AssetKind.NAT (fungible) or
61
+ * AssetKind.SET or AssetKind.COPY_SET (non-fungible)
62
+ */
63
+ assetKind: K;
64
+ };
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
+ type Brand<K extends AssetKind = AssetKind> = {
77
+ /**
78
+ * Should be used with `issuer.getBrand` to ensure an issuer and brand match.
79
+ */
80
+ isMyIssuer: (allegedIssuer: ERef<Issuer>) => Promise<boolean>;
81
+ getAllegedName: () => string;
82
+ /**
83
+ * Give information to UI on how to display the amount.
84
+ */
85
+ getDisplayInfo: () => DisplayInfo<K>;
86
+ getAmountShape: () => Pattern;
87
+ };
88
+ /**
89
+ * Return true if the payment continues to exist.
90
+ *
91
+ * If the payment is a promise, the operation will proceed upon
92
+ * resolution.
93
+ */
94
+ 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.
99
+ *
100
+ * If the payment is a promise, the operation will proceed upon
101
+ * resolution.
102
+ */
103
+ type IssuerGetAmountOf<K extends AssetKind> = (payment: ERef<Payment>) => Promise<Amount<K>>;
104
+ /**
105
+ * Burn all of the digital assets in the
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.
110
+ *
111
+ * If the payment is a promise, the operation will proceed upon
112
+ * resolution.
113
+ */
114
+ type IssuerBurn = (payment: ERef<Payment>, optAmountShape?: Pattern) => Promise<Amount>;
115
+ /**
116
+ * Transfer all digital assets from the payment to a new payment and
117
+ * delete the original. `optAmount` is optional. If `optAmount` is
118
+ * present, the code will insist that the amount of digital assets in
119
+ * the payment is equal to `optAmount`, to prevent sending the wrong
120
+ * payment and other confusion.
121
+ *
122
+ * If the payment is a promise, the operation will proceed upon
123
+ * resolution.
124
+ */
125
+ type IssuerClaim<K extends AssetKind> = (payment: ERef<Payment<K>>, optAmountShape?: Pattern) => Promise<Payment<K>>;
126
+ /**
127
+ * Combine multiple payments into one payment.
128
+ *
129
+ * If any of the payments is a promise, the operation will proceed
130
+ * upon resolution.
131
+ */
132
+ 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.
136
+ *
137
+ * If the payment is a promise, the operation will proceed upon
138
+ * resolution.
139
+ */
140
+ type IssuerSplit<K extends AssetKind> = (payment: ERef<Payment<K>>, paymentAmountA: Amount<K>) => Promise<Payment<K>[]>;
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
+ type IssuerSplitMany = (payment: ERef<Payment>, amounts: Amount[]) => Promise<Payment[]>;
149
+ /**
150
+ * The issuer cannot mint a new amount, but it can create empty purses
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.
156
+ */
157
+ type Issuer<K extends AssetKind = AssetKind> = {
158
+ /**
159
+ * Get the Brand for this Issuer. The
160
+ * Brand indicates the type of digital asset and is shared by the
161
+ * mint, the issuer, and any purses and payments of this particular
162
+ * kind. The brand is not closely held, so this function should not be
163
+ * trusted to identify an issuer alone. Fake digital assets and amount
164
+ * can use another issuer's brand.
165
+ */
166
+ getBrand: () => Brand<K>;
167
+ /**
168
+ * Get the allegedName for
169
+ * this mint/issuer
170
+ */
171
+ getAllegedName: () => string;
172
+ /**
173
+ * Get the kind of
174
+ * MathHelpers used by this Issuer.
175
+ */
176
+ getAssetKind: () => AssetKind;
177
+ /**
178
+ * Give information to UI
179
+ * on how to display amounts for this issuer.
180
+ */
181
+ getDisplayInfo: () => DisplayInfo<K>;
182
+ /**
183
+ * Make an empty purse of this
184
+ * brand.
185
+ */
186
+ makeEmptyPurse: () => Purse<K>;
187
+ isLive: IssuerIsLive;
188
+ getAmountOf: IssuerGetAmountOf<K>;
189
+ burn: IssuerBurn;
190
+ };
191
+ type PaymentLedger<K extends AssetKind = AssetKind> = {
192
+ mint: Mint<K>;
193
+ mintRecoveryPurse: Purse<K>;
194
+ issuer: Issuer<K>;
195
+ brand: Brand<K>;
196
+ };
197
+ type IssuerKit<K extends AssetKind = AssetKind> = {
198
+ mint: Mint<K>;
199
+ mintRecoveryPurse: Purse<K>;
200
+ issuer: Issuer<K>;
201
+ brand: Brand<K>;
202
+ displayInfo: DisplayInfo;
203
+ };
204
+ type AdditionalDisplayInfo = {
205
+ /**
206
+ * Tells the display software how
207
+ * many decimal places to move the decimal over to the left, or in
208
+ * other words, which position corresponds to whole numbers. We
209
+ * require fungible digital assets to be represented in integers, in
210
+ * the smallest unit (i.e. USD might be represented in mill, a
211
+ * thousandth of a dollar. In that case, `decimalPlaces` would be
212
+ * 3.) This property is optional, and for non-fungible digital
213
+ * assets, should not be specified. The decimalPlaces property
214
+ * should be used for *display purposes only*. Any other use is an
215
+ * anti-pattern.
216
+ */
217
+ decimalPlaces?: number | undefined;
218
+ assetKind?: AssetKind | undefined;
219
+ };
220
+ type ShutdownWithFailure = import('@agoric/swingset-vat').ShutdownWithFailure;
221
+ /**
222
+ * Holding a Mint carries the right to issue new digital assets. These
223
+ * assets all have the same kind, which is called a Brand.
224
+ */
225
+ type Mint<K extends AssetKind = AssetKind> = {
226
+ /**
227
+ * Gets the Issuer for this mint.
228
+ */
229
+ getIssuer: () => Issuer<K>;
230
+ /**
231
+ * Creates a new Payment containing newly minted amount.
232
+ */
233
+ mintPayment: (newAmount: Amount<K>) => Payment<K>;
234
+ };
235
+ type DepositFacetReceive = (payment: Payment, optAmountShape?: Pattern) => Amount;
236
+ type DepositFacet = {
237
+ /**
238
+ * Deposit all the contents of payment into the purse that made this facet,
239
+ * returning the amount. If the optional argument `optAmount` does not equal the
240
+ * amount of digital assets in the payment, throw an error.
241
+ *
242
+ * If payment is a promise, throw an error.
243
+ */
244
+ receive: DepositFacetReceive;
245
+ };
246
+ type PurseDeposit<K extends AssetKind> = (payment: Payment<K>, optAmountShape?: Pattern) => Amount<K>;
247
+ /**
248
+ * Purses hold amount of digital assets of the same brand, but unlike Payments,
249
+ * they are not meant to be sent to others. To transfer digital assets, a
250
+ * Payment should be withdrawn from a Purse. The amount of digital
251
+ * assets in a purse can change through the action of deposit() and withdraw().
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.
256
+ */
257
+ type Purse<K extends AssetKind = AssetKind> = {
258
+ /**
259
+ * Get the alleged Brand for this Purse
260
+ */
261
+ getAllegedBrand: () => Brand<K>;
262
+ /**
263
+ * Get the amount contained in this purse.
264
+ */
265
+ getCurrentAmount: () => Amount<K>;
266
+ /**
267
+ * Get a lossy notifier for changes to this purse's balance.
268
+ */
269
+ getCurrentAmountNotifier: () => LatestTopic<Amount<K>>;
270
+ /**
271
+ * Deposit all the contents of payment into this purse, returning the
272
+ * amount. If the optional argument `optAmount` does not equal the
273
+ * amount of digital assets in the payment, throw an error.
274
+ *
275
+ * If payment is a promise, throw an error.
276
+ */
277
+ deposit: PurseDeposit<K>;
278
+ /**
279
+ * Return an object whose `receive` method deposits to the current Purse.
280
+ */
281
+ getDepositFacet: () => DepositFacet;
282
+ /**
283
+ * Withdraw amount from this purse into a new Payment.
284
+ */
285
+ withdraw: (amount: Amount<K>) => Payment<K>;
286
+ /**
287
+ * The set of payments withdrawn from this purse that are still live. These
288
+ * are the payments that can still be recovered in emergencies by, for example,
289
+ * depositing into this purse. Such a deposit action is like canceling an
290
+ * outstanding check because you're tired of waiting for it. Once your
291
+ * cancellation is acknowledged, you can spend the assets at stake on other
292
+ * things. Afterwards, if the recipient of the original check finally gets
293
+ * around to depositing it, their deposit fails.
294
+ */
295
+ getRecoverySet: () => CopySet<Payment<K>>;
296
+ /**
297
+ * For use in emergencies, such as coming back from a traumatic crash and
298
+ * upgrade. This deposits all the payments in this purse's recovery set
299
+ * into the purse itself, returning the total amount of assets recovered.
300
+ */
301
+ recoverAll: () => Amount<K>;
302
+ };
303
+ /**
304
+ * Payments hold amount of digital assets of the same brand in transit. Payments
305
+ * can be deposited in purses, split into multiple payments, combined, and
306
+ * claimed (getting an exclusive payment). Payments are linear, meaning
307
+ * that either a payment has the same amount of digital assets it
308
+ * started with, or it is used up entirely. It is impossible to partially use a
309
+ * payment.
310
+ *
311
+ * Payments are often received from other actors and therefore should
312
+ * not be trusted themselves. To get the amount of digital assets in a payment,
313
+ * use the trusted issuer: issuer.getAmountOf(payment),
314
+ *
315
+ * Payments can be converted to Purses by getting a trusted issuer and
316
+ * calling `issuer.makeEmptyPurse()` to create a purse, then
317
+ * `purse.deposit(payment)`.
318
+ */
319
+ type Payment<K extends AssetKind = AssetKind> = {
320
+ /**
321
+ * Get the allegedBrand, indicating the type of digital asset this
322
+ * payment purports to be, and which issuer to use. Because payments
323
+ * are not trusted, any method calls on payments should be treated
324
+ * with suspicion and verified elsewhere.
325
+ */
326
+ getAllegedBrand: () => Brand<K>;
327
+ };
328
+ /**
329
+ * All of the difference in how digital asset amount are manipulated can be
330
+ * reduced to the behavior of the math on values. We extract this
331
+ * custom logic into mathHelpers. MathHelpers are about value
332
+ * arithmetic, whereas AmountMath is about amounts, which are the
333
+ * values labeled with a brand. AmountMath use mathHelpers to do their value
334
+ * arithmetic, and then brand the results, making a new amount.
335
+ *
336
+ * The MathHelpers are designed to be called only from AmountMath, and so
337
+ * all methods but coerce can assume their inputs are valid. They only
338
+ * need to do output validation, and only when there is a possibility of
339
+ * invalid output.
340
+ */
341
+ type MathHelpers<V extends AmountValue> = {
342
+ /**
343
+ * Check the kind of this value and throw if it is not the
344
+ * expected kind.
345
+ */
346
+ doCoerce: (allegedValue: V) => V;
347
+ /**
348
+ * Get the representation for the identity element (often 0 or an
349
+ * empty array)
350
+ */
351
+ doMakeEmpty: () => V;
352
+ /**
353
+ * Is the value the identity element?
354
+ */
355
+ doIsEmpty: (value: V) => boolean;
356
+ /**
357
+ * Is the left greater than or equal to the right?
358
+ */
359
+ doIsGTE: (left: V, right: V) => boolean;
360
+ /**
361
+ * Does left equal right?
362
+ */
363
+ doIsEqual: (left: V, right: V) => boolean;
364
+ /**
365
+ * Return the left combined with the right.
366
+ */
367
+ doAdd: (left: V, right: V) => V;
368
+ /**
369
+ * Return what remains after removing the right from the left. If
370
+ * something in the right was not in the left, we throw an error.
371
+ */
372
+ doSubtract: (left: V, right: V) => V;
373
+ };
374
+ type NatValue = bigint;
375
+ type SetValue = Array<Key>;
376
+ //# sourceMappingURL=types-ambient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-ambient.d.ts","sourceRoot":"","sources":["types-ambient.js"],"names":[],"mappings":"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"}