@sovryn-zero/lib-base 0.1.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 (84) hide show
  1. package/.eslintrc.json +17 -0
  2. package/.mocharc.yml +1 -0
  3. package/LICENSE +905 -0
  4. package/README.md +23 -0
  5. package/api-extractor.json +4 -0
  6. package/dist/index.d.ts +14 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +26 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/src/Decimal.d.ts +89 -0
  11. package/dist/src/Decimal.d.ts.map +1 -0
  12. package/dist/src/Decimal.js +361 -0
  13. package/dist/src/Decimal.js.map +1 -0
  14. package/dist/src/Fees.d.ts +82 -0
  15. package/dist/src/Fees.d.ts.map +1 -0
  16. package/dist/src/Fees.js +123 -0
  17. package/dist/src/Fees.js.map +1 -0
  18. package/dist/src/LiquityStore.d.ts +209 -0
  19. package/dist/src/LiquityStore.d.ts.map +1 -0
  20. package/dist/src/LiquityStore.js +209 -0
  21. package/dist/src/LiquityStore.js.map +1 -0
  22. package/dist/src/ObservableLiquity.d.ts +15 -0
  23. package/dist/src/ObservableLiquity.d.ts.map +1 -0
  24. package/dist/src/ObservableLiquity.js +3 -0
  25. package/dist/src/ObservableLiquity.js.map +1 -0
  26. package/dist/src/PopulatableLiquity.d.ts +125 -0
  27. package/dist/src/PopulatableLiquity.d.ts.map +1 -0
  28. package/dist/src/PopulatableLiquity.js +3 -0
  29. package/dist/src/PopulatableLiquity.js.map +1 -0
  30. package/dist/src/ReadableLiquity.d.ts +156 -0
  31. package/dist/src/ReadableLiquity.d.ts.map +1 -0
  32. package/dist/src/ReadableLiquity.js +3 -0
  33. package/dist/src/ReadableLiquity.js.map +1 -0
  34. package/dist/src/SendableLiquity.d.ts +156 -0
  35. package/dist/src/SendableLiquity.d.ts.map +1 -0
  36. package/dist/src/SendableLiquity.js +20 -0
  37. package/dist/src/SendableLiquity.js.map +1 -0
  38. package/dist/src/StabilityDeposit.d.ts +59 -0
  39. package/dist/src/StabilityDeposit.d.ts.map +1 -0
  40. package/dist/src/StabilityDeposit.js +80 -0
  41. package/dist/src/StabilityDeposit.js.map +1 -0
  42. package/dist/src/TransactableLiquity.d.ts +414 -0
  43. package/dist/src/TransactableLiquity.d.ts.map +1 -0
  44. package/dist/src/TransactableLiquity.js +18 -0
  45. package/dist/src/TransactableLiquity.js.map +1 -0
  46. package/dist/src/Trove.d.ts +367 -0
  47. package/dist/src/Trove.d.ts.map +1 -0
  48. package/dist/src/Trove.js +423 -0
  49. package/dist/src/Trove.js.map +1 -0
  50. package/dist/src/ZEROStake.d.ts +52 -0
  51. package/dist/src/ZEROStake.d.ts.map +1 -0
  52. package/dist/src/ZEROStake.js +74 -0
  53. package/dist/src/ZEROStake.js.map +1 -0
  54. package/dist/src/_CachedReadableLiquity.d.ts +55 -0
  55. package/dist/src/_CachedReadableLiquity.d.ts.map +1 -0
  56. package/dist/src/_CachedReadableLiquity.js +93 -0
  57. package/dist/src/_CachedReadableLiquity.js.map +1 -0
  58. package/dist/src/constants.d.ts +61 -0
  59. package/dist/src/constants.d.ts.map +1 -0
  60. package/dist/src/constants.js +64 -0
  61. package/dist/src/constants.js.map +1 -0
  62. package/dist/tsdoc-metadata.json +11 -0
  63. package/etc/lib-base.api.md +788 -0
  64. package/index.ts +13 -0
  65. package/package.json +52 -0
  66. package/src/Decimal.ts +456 -0
  67. package/src/Fees.ts +160 -0
  68. package/src/LiquityStore.ts +563 -0
  69. package/src/ObservableLiquity.ts +32 -0
  70. package/src/PopulatableLiquity.ts +280 -0
  71. package/src/ReadableLiquity.ts +175 -0
  72. package/src/SendableLiquity.ts +251 -0
  73. package/src/StabilityDeposit.ts +126 -0
  74. package/src/TransactableLiquity.ts +471 -0
  75. package/src/Trove.ts +824 -0
  76. package/src/ZEROStake.ts +99 -0
  77. package/src/_CachedReadableLiquity.ts +186 -0
  78. package/src/constants.ts +68 -0
  79. package/test/Decimal.test.ts +212 -0
  80. package/test/StabilityDeposit.test.ts +30 -0
  81. package/test/Trove.test.ts +143 -0
  82. package/test/ZEROStake.test.ts +24 -0
  83. package/tsconfig.dist.json +8 -0
  84. package/tsconfig.json +5 -0
package/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # @sovryn-zero/lib-base
2
+
3
+ [![GitHub license](https://img.shields.io/github/license/DistributedCollective/zero)](/LICENSE)
4
+ [![GitHub stars](https://img.shields.io/github/stars/DistributedCollective/zero)](https://github.com/DistributedCollective/zero/stargazers)
5
+ [![Zero README](https://img.shields.io/badge/readme-gray?style=flat&logo=ZeroMQ&logoColor=green&link=/README.md)](/README.md)
6
+
7
+ Shared interfaces and classes of Zero SDK.
8
+
9
+ ## Quickstart
10
+
11
+ ### Installation:
12
+
13
+ ```shell
14
+ npm install @sovryn-zero/lib-base
15
+ ```
16
+
17
+ This packiage is a dependency for other Zero SDK packages like [@sovryn-zero/lib-ethers](https://www.npmjs.com/package/@sovryn-zero/lib-ethers).
18
+
19
+ ## API
20
+
21
+ [API Reference](https://github.com/DistributedCollective/zero/blob/master/docs/sdk/lib-base.md)
22
+
23
+
@@ -0,0 +1,4 @@
1
+ {
2
+ "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
+ "extends": "../../api-extractor.base.json"
4
+ }
@@ -0,0 +1,14 @@
1
+ export * from "./src/constants";
2
+ export * from "./src/Decimal";
3
+ export * from "./src/Trove";
4
+ export * from "./src/StabilityDeposit";
5
+ export * from "./src/ZEROStake";
6
+ export * from "./src/Fees";
7
+ export * from "./src/ReadableLiquity";
8
+ export * from "./src/ObservableLiquity";
9
+ export * from "./src/TransactableLiquity";
10
+ export * from "./src/SendableLiquity";
11
+ export * from "./src/PopulatableLiquity";
12
+ export * from "./src/LiquityStore";
13
+ export * from "./src/_CachedReadableLiquity";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./src/constants"), exports);
14
+ __exportStar(require("./src/Decimal"), exports);
15
+ __exportStar(require("./src/Trove"), exports);
16
+ __exportStar(require("./src/StabilityDeposit"), exports);
17
+ __exportStar(require("./src/ZEROStake"), exports);
18
+ __exportStar(require("./src/Fees"), exports);
19
+ __exportStar(require("./src/ReadableLiquity"), exports);
20
+ __exportStar(require("./src/ObservableLiquity"), exports);
21
+ __exportStar(require("./src/TransactableLiquity"), exports);
22
+ __exportStar(require("./src/SendableLiquity"), exports);
23
+ __exportStar(require("./src/PopulatableLiquity"), exports);
24
+ __exportStar(require("./src/LiquityStore"), exports);
25
+ __exportStar(require("./src/_CachedReadableLiquity"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAAgC;AAChC,gDAA8B;AAC9B,8CAA4B;AAC5B,yDAAuC;AACvC,kDAAgC;AAChC,6CAA2B;AAC3B,wDAAsC;AACtC,0DAAwC;AACxC,4DAA0C;AAC1C,wDAAsC;AACtC,2DAAyC;AACzC,qDAAmC;AACnC,+DAA6C"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Types that can be converted into a Decimal.
3
+ *
4
+ * @public
5
+ */
6
+ export declare type Decimalish = Decimal | number | string;
7
+ /**
8
+ * Fixed-point decimal bignumber with 18 digits of precision.
9
+ *
10
+ * @remarks
11
+ * Used by Zero libraries to precisely represent native currency (e.g. Ether), ZUSD and ZERO
12
+ * amounts, as well as derived metrics like collateral ratios.
13
+ *
14
+ * @public
15
+ */
16
+ export declare class Decimal {
17
+ static readonly INFINITY: Decimal;
18
+ static readonly ZERO: Decimal;
19
+ static readonly HALF: Decimal;
20
+ static readonly ONE: Decimal;
21
+ private readonly _bigNumber;
22
+ /** @internal */
23
+ get hex(): string;
24
+ /** @internal */
25
+ get bigNumber(): string;
26
+ private constructor();
27
+ static fromBigNumberString(bigNumberString: string): Decimal;
28
+ private static _fromString;
29
+ static from(decimalish: Decimalish): Decimal;
30
+ private _toStringWithAutomaticPrecision;
31
+ private _roundUp;
32
+ private _toStringWithPrecision;
33
+ toString(precision?: number): string;
34
+ prettify(precision?: number): string;
35
+ shorten(): string;
36
+ add(addend: Decimalish): Decimal;
37
+ sub(subtrahend: Decimalish): Decimal;
38
+ mul(multiplier: Decimalish): Decimal;
39
+ div(divider: Decimalish): Decimal;
40
+ /** @internal */
41
+ _divCeil(divider: Decimalish): Decimal;
42
+ mulDiv(multiplier: Decimalish, divider: Decimalish): Decimal;
43
+ pow(exponent: number): Decimal;
44
+ get isZero(): boolean;
45
+ get zero(): this | undefined;
46
+ get nonZero(): this | undefined;
47
+ get infinite(): this | undefined;
48
+ get finite(): this | undefined;
49
+ /** @internal */
50
+ get absoluteValue(): this;
51
+ lt(that: Decimalish): boolean;
52
+ eq(that: Decimalish): boolean;
53
+ gt(that: Decimalish): boolean;
54
+ gte(that: Decimalish): boolean;
55
+ lte(that: Decimalish): boolean;
56
+ static min(a: Decimalish, b: Decimalish): Decimal;
57
+ static max(a: Decimalish, b: Decimalish): Decimal;
58
+ }
59
+ /** @alpha */
60
+ export declare class Difference {
61
+ private _number?;
62
+ private constructor();
63
+ static between(d1: Decimalish | undefined, d2: Decimalish | undefined): Difference;
64
+ toString(precision?: number): string;
65
+ prettify(precision?: number): string;
66
+ mul(multiplier: Decimalish): Difference;
67
+ get nonZero(): this | undefined;
68
+ get positive(): this | undefined;
69
+ get negative(): this | undefined;
70
+ get absoluteValue(): Decimal | undefined;
71
+ get infinite(): this | undefined;
72
+ get finite(): this | undefined;
73
+ }
74
+ /** @alpha */
75
+ export declare class Percent<T extends {
76
+ infinite?: T | undefined;
77
+ absoluteValue?: A | undefined;
78
+ mul?(hundred: 100): T;
79
+ toString(precision?: number): string;
80
+ }, A extends {
81
+ gte(n: string): boolean;
82
+ }> {
83
+ private _percent;
84
+ constructor(ratio: T);
85
+ nonZeroish(precision: number): this | undefined;
86
+ toString(precision: number): string;
87
+ prettify(): string;
88
+ }
89
+ //# sourceMappingURL=Decimal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Decimal.d.ts","sourceRoot":"","sources":["../../src/Decimal.ts"],"names":[],"mappings":"AAkBA;;;;GAIG;AACH,oBAAY,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD;;;;;;;;GAQG;AACH,qBAAa,OAAO;IAClB,MAAM,CAAC,QAAQ,CAAC,QAAQ,UAA6C;IACrE,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAmB;IACvC,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAqB;IACzC,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAmB;IAEtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IAEvC,gBAAgB;IAChB,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,gBAAgB;IAChB,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,OAAO;IAQP,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO;IAI5D,OAAO,CAAC,MAAM,CAAC,WAAW;IA8C1B,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAiB5C,OAAO,CAAC,+BAA+B;IAavC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,sBAAsB;IAkB9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAUpC,QAAQ,CAAC,SAAS,SAAI,GAAG,MAAM;IAO/B,OAAO,IAAI,MAAM;IAUjB,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAIhC,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAIpC,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAIpC,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAUjC,gBAAgB;IAChB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAYtC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO;IAW5D,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IA0B9B,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,IAAI,IAAI,IAAI,GAAG,SAAS,CAI3B;IAED,IAAI,OAAO,IAAI,IAAI,GAAG,SAAS,CAI9B;IAED,IAAI,QAAQ,IAAI,IAAI,GAAG,SAAS,CAI/B;IAED,IAAI,MAAM,IAAI,IAAI,GAAG,SAAS,CAI7B;IAED,gBAAgB;IAChB,IAAI,aAAa,IAAI,IAAI,CAExB;IAED,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAI7B,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAI7B,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAI7B,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAI9B,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAI9B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO;IAOjD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO;CAMlD;AAID,aAAa;AACb,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAC,CAA2B;IAE3C,OAAO;IAIP,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,GAAG,SAAS,EAAE,EAAE,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU;IAuBlF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAQpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAQpC,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU;IASvC,IAAI,OAAO,IAAI,IAAI,GAAG,SAAS,CAE9B;IAED,IAAI,QAAQ,IAAI,IAAI,GAAG,SAAS,CAE/B;IAED,IAAI,QAAQ,IAAI,IAAI,GAAG,SAAS,CAE/B;IAED,IAAI,aAAa,IAAI,OAAO,GAAG,SAAS,CAEvC;IAED,IAAI,QAAQ,IAAI,IAAI,GAAG,SAAS,CAE/B;IAED,IAAI,MAAM,IAAI,IAAI,GAAG,SAAS,CAE7B;CACF;AAED,aAAa;AACb,qBAAa,OAAO,CAClB,CAAC,SAAS;IACR,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAC9B,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACtC,EACD,CAAC,SAAS;IACR,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;IAED,OAAO,CAAC,QAAQ,CAAI;gBAED,KAAK,EAAE,CAAC;IAI3B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAQ/C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAOnC,QAAQ,IAAI,MAAM;CASnB"}
@@ -0,0 +1,361 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Percent = exports.Difference = exports.Decimal = void 0;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const bignumber_1 = require("@ethersproject/bignumber");
9
+ const getDigits = (numDigits) => TEN.pow(numDigits);
10
+ const MAX_UINT_256 = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
11
+ const PRECISION = 18;
12
+ const ONE = bignumber_1.BigNumber.from(1);
13
+ const TEN = bignumber_1.BigNumber.from(10);
14
+ const DIGITS = getDigits(PRECISION);
15
+ const stringRepresentationFormat = /^[0-9]*(\.[0-9]*)?(e[-+]?[0-9]+)?$/;
16
+ const trailingZeros = /0*$/;
17
+ const magnitudes = ["", "K", "M", "B", "T"];
18
+ const roundedMul = (x, y) => x.mul(y).add(Decimal.HALF.hex).div(DIGITS);
19
+ /**
20
+ * Fixed-point decimal bignumber with 18 digits of precision.
21
+ *
22
+ * @remarks
23
+ * Used by Zero libraries to precisely represent native currency (e.g. Ether), ZUSD and ZERO
24
+ * amounts, as well as derived metrics like collateral ratios.
25
+ *
26
+ * @public
27
+ */
28
+ class Decimal {
29
+ constructor(bigNumber) {
30
+ if (bigNumber.isNegative()) {
31
+ throw new Error("negatives not supported by Decimal");
32
+ }
33
+ this._bigNumber = bigNumber;
34
+ }
35
+ /** @internal */
36
+ get hex() {
37
+ return this._bigNumber.toHexString();
38
+ }
39
+ /** @internal */
40
+ get bigNumber() {
41
+ return this._bigNumber.toString();
42
+ }
43
+ static fromBigNumberString(bigNumberString) {
44
+ return new Decimal(bignumber_1.BigNumber.from(bigNumberString));
45
+ }
46
+ static _fromString(representation) {
47
+ if (!representation || !representation.match(stringRepresentationFormat)) {
48
+ throw new Error(`bad decimal format: "${representation}"`);
49
+ }
50
+ if (representation.includes("e")) {
51
+ // eslint-disable-next-line prefer-const
52
+ let [coefficient, exponent] = representation.split("e");
53
+ if (exponent.startsWith("-")) {
54
+ return new Decimal(Decimal._fromString(coefficient)._bigNumber.div(TEN.pow(bignumber_1.BigNumber.from(exponent.substr(1)))));
55
+ }
56
+ if (exponent.startsWith("+")) {
57
+ exponent = exponent.substr(1);
58
+ }
59
+ return new Decimal(Decimal._fromString(coefficient)._bigNumber.mul(TEN.pow(bignumber_1.BigNumber.from(exponent))));
60
+ }
61
+ if (!representation.includes(".")) {
62
+ return new Decimal(bignumber_1.BigNumber.from(representation).mul(DIGITS));
63
+ }
64
+ // eslint-disable-next-line prefer-const
65
+ let [characteristic, mantissa] = representation.split(".");
66
+ if (mantissa.length < PRECISION) {
67
+ mantissa += "0".repeat(PRECISION - mantissa.length);
68
+ }
69
+ else {
70
+ mantissa = mantissa.substr(0, PRECISION);
71
+ }
72
+ return new Decimal(bignumber_1.BigNumber.from(characteristic || 0)
73
+ .mul(DIGITS)
74
+ .add(mantissa));
75
+ }
76
+ static from(decimalish) {
77
+ switch (typeof decimalish) {
78
+ case "object":
79
+ if (decimalish instanceof Decimal) {
80
+ return decimalish;
81
+ }
82
+ else {
83
+ throw new Error("invalid Decimalish value");
84
+ }
85
+ case "string":
86
+ return Decimal._fromString(decimalish);
87
+ case "number":
88
+ return Decimal._fromString(decimalish.toString());
89
+ default:
90
+ throw new Error("invalid Decimalish value");
91
+ }
92
+ }
93
+ _toStringWithAutomaticPrecision() {
94
+ const characteristic = this._bigNumber.div(DIGITS);
95
+ const mantissa = this._bigNumber.mod(DIGITS);
96
+ if (mantissa.isZero()) {
97
+ return characteristic.toString();
98
+ }
99
+ else {
100
+ const paddedMantissa = mantissa.toString().padStart(PRECISION, "0");
101
+ const trimmedMantissa = paddedMantissa.replace(trailingZeros, "");
102
+ return characteristic.toString() + "." + trimmedMantissa;
103
+ }
104
+ }
105
+ _roundUp(precision) {
106
+ const halfDigit = getDigits(PRECISION - 1 - precision).mul(5);
107
+ return this._bigNumber.add(halfDigit);
108
+ }
109
+ _toStringWithPrecision(precision) {
110
+ if (precision < 0) {
111
+ throw new Error("precision must not be negative");
112
+ }
113
+ const value = precision < PRECISION ? this._roundUp(precision) : this._bigNumber;
114
+ const characteristic = value.div(DIGITS);
115
+ const mantissa = value.mod(DIGITS);
116
+ if (precision === 0) {
117
+ return characteristic.toString();
118
+ }
119
+ else {
120
+ const paddedMantissa = mantissa.toString().padStart(PRECISION, "0");
121
+ const trimmedMantissa = paddedMantissa.substr(0, precision);
122
+ return characteristic.toString() + "." + trimmedMantissa;
123
+ }
124
+ }
125
+ toString(precision) {
126
+ if (this.infinite) {
127
+ return "∞";
128
+ }
129
+ else if (precision !== undefined) {
130
+ return this._toStringWithPrecision(precision);
131
+ }
132
+ else {
133
+ return this._toStringWithAutomaticPrecision();
134
+ }
135
+ }
136
+ prettify(precision = 2) {
137
+ const [characteristic, mantissa] = parseFloat(this.toString(precision)).toString().split(".");
138
+ const prettyCharacteristic = characteristic.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
139
+ return mantissa !== undefined ? prettyCharacteristic + "." + mantissa : prettyCharacteristic;
140
+ }
141
+ shorten() {
142
+ const characteristicLength = this.toString(0).length;
143
+ const magnitude = Math.min(Math.floor((characteristicLength - 1) / 3), magnitudes.length - 1);
144
+ const precision = Math.max(3 * (magnitude + 1) - characteristicLength, 0);
145
+ const normalized = this.div(new Decimal(getDigits(PRECISION + 3 * magnitude)));
146
+ return normalized.prettify(precision) + magnitudes[magnitude];
147
+ }
148
+ add(addend) {
149
+ return new Decimal(this._bigNumber.add(Decimal.from(addend)._bigNumber));
150
+ }
151
+ sub(subtrahend) {
152
+ return new Decimal(this._bigNumber.sub(Decimal.from(subtrahend)._bigNumber));
153
+ }
154
+ mul(multiplier) {
155
+ return new Decimal(this._bigNumber.mul(Decimal.from(multiplier)._bigNumber).div(DIGITS));
156
+ }
157
+ div(divider) {
158
+ divider = Decimal.from(divider);
159
+ if (divider.isZero) {
160
+ return Decimal.INFINITY;
161
+ }
162
+ return new Decimal(this._bigNumber.mul(DIGITS).div(divider._bigNumber));
163
+ }
164
+ /** @internal */
165
+ _divCeil(divider) {
166
+ divider = Decimal.from(divider);
167
+ if (divider.isZero) {
168
+ return Decimal.INFINITY;
169
+ }
170
+ return new Decimal(this._bigNumber.mul(DIGITS).add(divider._bigNumber.sub(ONE)).div(divider._bigNumber));
171
+ }
172
+ mulDiv(multiplier, divider) {
173
+ multiplier = Decimal.from(multiplier);
174
+ divider = Decimal.from(divider);
175
+ if (divider.isZero) {
176
+ return Decimal.INFINITY;
177
+ }
178
+ return new Decimal(this._bigNumber.mul(multiplier._bigNumber).div(divider._bigNumber));
179
+ }
180
+ pow(exponent) {
181
+ assert_1.default(Number.isInteger(exponent));
182
+ assert_1.default(0 <= exponent && exponent <= 0xffffffff); // Ensure we're safe to use bitwise ops
183
+ if (exponent === 0) {
184
+ return Decimal.ONE;
185
+ }
186
+ if (exponent === 1) {
187
+ return this;
188
+ }
189
+ let x = this._bigNumber;
190
+ let y = DIGITS;
191
+ for (; exponent > 1; exponent >>>= 1) {
192
+ if (exponent & 1) {
193
+ y = roundedMul(x, y);
194
+ }
195
+ x = roundedMul(x, x);
196
+ }
197
+ return new Decimal(roundedMul(x, y));
198
+ }
199
+ get isZero() {
200
+ return this._bigNumber.isZero();
201
+ }
202
+ get zero() {
203
+ if (this.isZero) {
204
+ return this;
205
+ }
206
+ }
207
+ get nonZero() {
208
+ if (!this.isZero) {
209
+ return this;
210
+ }
211
+ }
212
+ get infinite() {
213
+ if (this.eq(Decimal.INFINITY)) {
214
+ return this;
215
+ }
216
+ }
217
+ get finite() {
218
+ if (!this.eq(Decimal.INFINITY)) {
219
+ return this;
220
+ }
221
+ }
222
+ /** @internal */
223
+ get absoluteValue() {
224
+ return this;
225
+ }
226
+ lt(that) {
227
+ return this._bigNumber.lt(Decimal.from(that)._bigNumber);
228
+ }
229
+ eq(that) {
230
+ return this._bigNumber.eq(Decimal.from(that)._bigNumber);
231
+ }
232
+ gt(that) {
233
+ return this._bigNumber.gt(Decimal.from(that)._bigNumber);
234
+ }
235
+ gte(that) {
236
+ return this._bigNumber.gte(Decimal.from(that)._bigNumber);
237
+ }
238
+ lte(that) {
239
+ return this._bigNumber.lte(Decimal.from(that)._bigNumber);
240
+ }
241
+ static min(a, b) {
242
+ a = Decimal.from(a);
243
+ b = Decimal.from(b);
244
+ return a.lt(b) ? a : b;
245
+ }
246
+ static max(a, b) {
247
+ a = Decimal.from(a);
248
+ b = Decimal.from(b);
249
+ return a.gt(b) ? a : b;
250
+ }
251
+ }
252
+ exports.Decimal = Decimal;
253
+ Decimal.INFINITY = Decimal.fromBigNumberString(MAX_UINT_256);
254
+ Decimal.ZERO = Decimal.from(0);
255
+ Decimal.HALF = Decimal.from(0.5);
256
+ Decimal.ONE = Decimal.from(1);
257
+ /** @alpha */
258
+ class Difference {
259
+ constructor(number) {
260
+ this._number = number;
261
+ }
262
+ static between(d1, d2) {
263
+ if (d1 === undefined || d2 === undefined) {
264
+ return new Difference(undefined);
265
+ }
266
+ d1 = Decimal.from(d1);
267
+ d2 = Decimal.from(d2);
268
+ if (d1.infinite && d2.infinite) {
269
+ return new Difference(undefined);
270
+ }
271
+ else if (d1.infinite) {
272
+ return new Difference({ sign: "+", absoluteValue: d1 });
273
+ }
274
+ else if (d2.infinite) {
275
+ return new Difference({ sign: "-", absoluteValue: d2 });
276
+ }
277
+ else if (d1.gt(d2)) {
278
+ return new Difference({ sign: "+", absoluteValue: Decimal.from(d1).sub(d2) });
279
+ }
280
+ else if (d2.gt(d1)) {
281
+ return new Difference({ sign: "-", absoluteValue: Decimal.from(d2).sub(d1) });
282
+ }
283
+ else {
284
+ return new Difference({ sign: "", absoluteValue: Decimal.ZERO });
285
+ }
286
+ }
287
+ toString(precision) {
288
+ if (!this._number) {
289
+ return "N/A";
290
+ }
291
+ return this._number.sign + this._number.absoluteValue.toString(precision);
292
+ }
293
+ prettify(precision) {
294
+ if (!this._number) {
295
+ return this.toString();
296
+ }
297
+ return this._number.sign + this._number.absoluteValue.prettify(precision);
298
+ }
299
+ mul(multiplier) {
300
+ return new Difference(this._number && {
301
+ sign: this._number.sign,
302
+ absoluteValue: this._number.absoluteValue.mul(multiplier)
303
+ });
304
+ }
305
+ get nonZero() {
306
+ var _a;
307
+ return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.absoluteValue.nonZero) && this;
308
+ }
309
+ get positive() {
310
+ var _a;
311
+ return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.sign) === "+" ? this : undefined;
312
+ }
313
+ get negative() {
314
+ var _a;
315
+ return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.sign) === "-" ? this : undefined;
316
+ }
317
+ get absoluteValue() {
318
+ var _a;
319
+ return (_a = this._number) === null || _a === void 0 ? void 0 : _a.absoluteValue;
320
+ }
321
+ get infinite() {
322
+ var _a;
323
+ return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.absoluteValue.infinite) && this;
324
+ }
325
+ get finite() {
326
+ var _a;
327
+ return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.absoluteValue.finite) && this;
328
+ }
329
+ }
330
+ exports.Difference = Difference;
331
+ /** @alpha */
332
+ class Percent {
333
+ constructor(ratio) {
334
+ this._percent = ratio.infinite || (ratio.mul && ratio.mul(100)) || ratio;
335
+ }
336
+ nonZeroish(precision) {
337
+ var _a;
338
+ const zeroish = `0.${"0".repeat(precision)}5`;
339
+ if ((_a = this._percent.absoluteValue) === null || _a === void 0 ? void 0 : _a.gte(zeroish)) {
340
+ return this;
341
+ }
342
+ }
343
+ toString(precision) {
344
+ return (this._percent.toString(precision) +
345
+ (this._percent.absoluteValue && !this._percent.infinite ? "%" : ""));
346
+ }
347
+ prettify() {
348
+ var _a, _b;
349
+ if ((_a = this._percent.absoluteValue) === null || _a === void 0 ? void 0 : _a.gte("1000")) {
350
+ return this.toString(0);
351
+ }
352
+ else if ((_b = this._percent.absoluteValue) === null || _b === void 0 ? void 0 : _b.gte("10")) {
353
+ return this.toString(1);
354
+ }
355
+ else {
356
+ return this.toString(2);
357
+ }
358
+ }
359
+ }
360
+ exports.Percent = Percent;
361
+ //# sourceMappingURL=Decimal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Decimal.js","sourceRoot":"","sources":["../../src/Decimal.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAE5B,wDAAqD;AAErD,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAE5D,MAAM,YAAY,GAAG,oEAAoE,CAAC;AAC1F,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,GAAG,GAAG,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9B,MAAM,GAAG,GAAG,qBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAEpC,MAAM,0BAA0B,GAAG,oCAAoC,CAAC;AACxE,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE5C,MAAM,UAAU,GAAG,CAAC,CAAY,EAAE,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAS9F;;;;;;;;GAQG;AACH,MAAa,OAAO;IAkBlB,YAAoB,SAAoB;QACtC,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAhBD,gBAAgB;IAChB,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC;IAED,gBAAgB;IAChB,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;IAUD,MAAM,CAAC,mBAAmB,CAAC,eAAuB;QAChD,OAAO,IAAI,OAAO,CAAC,qBAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACtD,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,cAAsB;QAC/C,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;YACxE,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,GAAG,CAAC,CAAC;SAC5D;QAED,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAChC,wCAAwC;YACxC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAExD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBAC5B,OAAO,IAAI,OAAO,CAChB,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,CAC7C,GAAG,CAAC,GAAG,CAAC,qBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5C,CACF,CAAC;aACH;YAED,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBAC5B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC/B;YAED,OAAO,IAAI,OAAO,CAChB,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACnF,CAAC;SACH;QAED,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACjC,OAAO,IAAI,OAAO,CAAC,qBAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;SAChE;QAED,wCAAwC;QACxC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE3D,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE;YAC/B,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;SACrD;aAAM;YACL,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;SAC1C;QAED,OAAO,IAAI,OAAO,CAChB,qBAAS,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;aAChC,GAAG,CAAC,MAAM,CAAC;aACX,GAAG,CAAC,QAAQ,CAAC,CACjB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,UAAsB;QAChC,QAAQ,OAAO,UAAU,EAAE;YACzB,KAAK,QAAQ;gBACX,IAAI,UAAU,YAAY,OAAO,EAAE;oBACjC,OAAO,UAAU,CAAC;iBACnB;qBAAM;oBACL,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;iBAC7C;YACH,KAAK,QAAQ;gBACX,OAAO,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACzC,KAAK,QAAQ;gBACX,OAAO,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpD;gBACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC/C;IACH,CAAC;IAEO,+BAA+B;QACrC,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE;YACrB,OAAO,cAAc,CAAC,QAAQ,EAAE,CAAC;SAClC;aAAM;YACL,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACpE,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,eAAe,CAAC;SAC1D;IACH,CAAC;IAEO,QAAQ,CAAC,SAAiB;QAChC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAEO,sBAAsB,CAAC,SAAiB;QAC9C,IAAI,SAAS,GAAG,CAAC,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QAED,MAAM,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QACjF,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,OAAO,cAAc,CAAC,QAAQ,EAAE,CAAC;SAClC;aAAM;YACL,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACpE,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC5D,OAAO,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,eAAe,CAAC;SAC1D;IACH,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,GAAG,CAAC;SACZ;aAAM,IAAI,SAAS,KAAK,SAAS,EAAE;YAClC,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;SAC/C;aAAM;YACL,OAAO,IAAI,CAAC,+BAA+B,EAAE,CAAC;SAC/C;IACH,CAAC;IAED,QAAQ,CAAC,SAAS,GAAG,CAAC;QACpB,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9F,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAEtF,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAC/F,CAAC;IAED,OAAO;QACL,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE9F,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE/E,OAAO,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,GAAG,CAAC,MAAkB;QACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,GAAG,CAAC,UAAsB;QACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,GAAG,CAAC,UAAsB;QACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,GAAG,CAAC,OAAmB;QACrB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,OAAO,CAAC,QAAQ,CAAC;SACzB;QAED,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,gBAAgB;IAChB,QAAQ,CAAC,OAAmB;QAC1B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,OAAO,CAAC,QAAQ,CAAC;SACzB;QAED,OAAO,IAAI,OAAO,CAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CACrF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAsB,EAAE,OAAmB;QAChD,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,OAAO,CAAC,QAAQ,CAAC;SACzB;QAED,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,gBAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnC,gBAAM,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC,uCAAuC;QAExF,IAAI,QAAQ,KAAK,CAAC,EAAE;YAClB,OAAO,OAAO,CAAC,GAAG,CAAC;SACpB;QAED,IAAI,QAAQ,KAAK,CAAC,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QACxB,IAAI,CAAC,GAAG,MAAM,CAAC;QAEf,OAAO,QAAQ,GAAG,CAAC,EAAE,QAAQ,MAAM,CAAC,EAAE;YACpC,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAChB,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACtB;YAED,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACtB;QAED,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,IAAI,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,IAAI,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,aAAa;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,IAAgB;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,EAAE,CAAC,IAAgB;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,EAAE,CAAC,IAAgB;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,GAAG,CAAC,IAAgB;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,GAAG,CAAC,IAAgB;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,CAAa,EAAE,CAAa;QACrC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,CAAa,EAAE,CAAa;QACrC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;;AArSH,0BAsSC;AArSiB,gBAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;AACrD,YAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,YAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,WAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAsSxC,aAAa;AACb,MAAa,UAAU;IAGrB,YAAoB,MAAiC;QACnD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,EAA0B,EAAE,EAA0B;QACnE,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,EAAE;YACxC,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;SAClC;QAED,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtB,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,EAAE;YAC9B,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;SAClC;aAAM,IAAI,EAAE,CAAC,QAAQ,EAAE;YACtB,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;SACzD;aAAM,IAAI,EAAE,CAAC,QAAQ,EAAE;YACtB,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;SACzD;aAAM,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACpB,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC/E;aAAM,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACpB,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC/E;aAAM;YACL,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;SAClE;IACH,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;SACxB;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED,GAAG,CAAC,UAAsB;QACxB,OAAO,IAAI,UAAU,CACnB,IAAI,CAAC,OAAO,IAAI;YACd,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACvB,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;SAC1D,CACF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO;;QACT,OAAO,OAAA,IAAI,CAAC,OAAO,0CAAE,aAAa,CAAC,OAAO,KAAI,IAAI,CAAC;IACrD,CAAC;IAED,IAAI,QAAQ;;QACV,OAAO,OAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,MAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;IAED,IAAI,QAAQ;;QACV,OAAO,OAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,MAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;IAED,IAAI,aAAa;;QACf,aAAO,IAAI,CAAC,OAAO,0CAAE,aAAa,CAAC;IACrC,CAAC;IAED,IAAI,QAAQ;;QACV,OAAO,OAAA,IAAI,CAAC,OAAO,0CAAE,aAAa,CAAC,QAAQ,KAAI,IAAI,CAAC;IACtD,CAAC;IAED,IAAI,MAAM;;QACR,OAAO,OAAA,IAAI,CAAC,OAAO,0CAAE,aAAa,CAAC,MAAM,KAAI,IAAI,CAAC;IACpD,CAAC;CACF;AA9ED,gCA8EC;AAED,aAAa;AACb,MAAa,OAAO;IAalB,YAAmB,KAAQ;QACzB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;IAC3E,CAAC;IAED,UAAU,CAAC,SAAiB;;QAC1B,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;QAE9C,UAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,0CAAE,GAAG,CAAC,OAAO,GAAG;YAC7C,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,QAAQ,CAAC,SAAiB;QACxB,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YACjC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACpE,CAAC;IACJ,CAAC;IAED,QAAQ;;QACN,UAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,0CAAE,GAAG,CAAC,MAAM,GAAG;YAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM,UAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,0CAAE,GAAG,CAAC,IAAI,GAAG;YACjD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM;YACL,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACzB;IACH,CAAC;CACF;AAzCD,0BAyCC"}
@@ -0,0 +1,82 @@
1
+ import { Decimal, Decimalish } from "./Decimal";
2
+ /**
3
+ * Calculator for fees.
4
+ *
5
+ * @remarks
6
+ * Returned by the {@link ReadableLiquity.getFees | getFees()} function.
7
+ *
8
+ * @public
9
+ */
10
+ export declare class Fees {
11
+ private readonly _baseRateWithoutDecay;
12
+ private readonly _minuteDecayFactor;
13
+ private readonly _beta;
14
+ private readonly _lastFeeOperation;
15
+ private readonly _timeOfLatestBlock;
16
+ private readonly _recoveryMode;
17
+ /** @internal */
18
+ constructor(baseRateWithoutDecay: Decimalish, minuteDecayFactor: Decimalish, beta: Decimalish, lastFeeOperation: Date, timeOfLatestBlock: Date, recoveryMode: boolean);
19
+ /** @internal */
20
+ _setRecoveryMode(recoveryMode: boolean): Fees;
21
+ /**
22
+ * Compare to another instance of `Fees`.
23
+ */
24
+ equals(that: Fees): boolean;
25
+ /** @internal */
26
+ toString(): string;
27
+ /** @internal */
28
+ baseRate(when?: Date): Decimal;
29
+ /**
30
+ * Calculate the current borrowing rate.
31
+ *
32
+ * @param when - Optional timestamp that can be used to calculate what the borrowing rate would
33
+ * decay to at a point of time in the future.
34
+ *
35
+ * @remarks
36
+ * By default, the fee is calculated at the time of the latest block. This can be overridden using
37
+ * the `when` parameter.
38
+ *
39
+ * To calculate the borrowing fee in ZUSD, multiply the borrowed ZUSD amount by the borrowing rate.
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const fees = await zero.getFees();
44
+ *
45
+ * const borrowedZUSDAmount = 100;
46
+ * const borrowingRate = fees.borrowingRate();
47
+ * const borrowingFeeZUSD = borrowingRate.mul(borrowedZUSDAmount);
48
+ * ```
49
+ */
50
+ borrowingRate(when?: Date): Decimal;
51
+ /**
52
+ * Calculate the current redemption rate.
53
+ *
54
+ * @param redeemedFractionOfSupply - The amount of ZUSD being redeemed divided by the total supply.
55
+ * @param when - Optional timestamp that can be used to calculate what the redemption rate would
56
+ * decay to at a point of time in the future.
57
+ *
58
+ * @remarks
59
+ * By default, the fee is calculated at the time of the latest block. This can be overridden using
60
+ * the `when` parameter.
61
+
62
+ * Unlike the borrowing rate, the redemption rate depends on the amount being redeemed. To be more
63
+ * precise, it depends on the fraction of the redeemed amount compared to the total ZUSD supply,
64
+ * which must be passed as a parameter.
65
+ *
66
+ * To calculate the redemption fee in ZUSD, multiply the redeemed ZUSD amount with the redemption
67
+ * rate.
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const fees = await zero.getFees();
72
+ * const total = await zero.getTotal();
73
+ *
74
+ * const redeemedZUSDAmount = Decimal.from(100);
75
+ * const redeemedFractionOfSupply = redeemedZUSDAmount.div(total.debt);
76
+ * const redemptionRate = fees.redemptionRate(redeemedFractionOfSupply);
77
+ * const redemptionFeeZUSD = redemptionRate.mul(redeemedZUSDAmount);
78
+ * ```
79
+ */
80
+ redemptionRate(redeemedFractionOfSupply?: Decimalish, when?: Date): Decimal;
81
+ }
82
+ //# sourceMappingURL=Fees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fees.d.ts","sourceRoot":"","sources":["../../src/Fees.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAQhD;;;;;;;GAOG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IACzC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAO;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IAExC,gBAAgB;gBAEd,oBAAoB,EAAE,UAAU,EAChC,iBAAiB,EAAE,UAAU,EAC7B,IAAI,EAAE,UAAU,EAChB,gBAAgB,EAAE,IAAI,EACtB,iBAAiB,EAAE,IAAI,EACvB,YAAY,EAAE,OAAO;IAYvB,gBAAgB;IAChB,gBAAgB,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;IAW7C;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAW3B,gBAAgB;IAChB,QAAQ,IAAI,MAAM;IAQlB,gBAAgB;IAChB,QAAQ,CAAC,IAAI,OAA0B,GAAG,OAAO;IAYjD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO;IAMnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,cAAc,CAAC,wBAAwB,GAAE,UAAyB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO;CAU1F"}