@morpho-org/midnight-sdk 0.1.0 → 1.1.1

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 (128) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -46
  3. package/lib/cjs/abis.d.ts +1185 -996
  4. package/lib/cjs/abis.js +1445 -1211
  5. package/lib/cjs/api/MidnightApi.d.ts +22 -16
  6. package/lib/cjs/api/MidnightApi.js +89 -19
  7. package/lib/cjs/api/helpers.d.ts +11 -1
  8. package/lib/cjs/api/helpers.js +54 -4
  9. package/lib/cjs/api/types.d.ts +35 -9
  10. package/lib/cjs/constants.d.ts +12 -11
  11. package/lib/cjs/constants.js +14 -12
  12. package/lib/cjs/errors.d.ts +89 -1
  13. package/lib/cjs/errors.js +114 -3
  14. package/lib/cjs/fetch/Market.js +37 -3
  15. package/lib/cjs/fetch/index.d.ts +0 -1
  16. package/lib/cjs/fetch/index.js +0 -1
  17. package/lib/cjs/fetch/utils.d.ts +1 -1
  18. package/lib/cjs/fetch/utils.js +9 -2
  19. package/lib/cjs/index.d.ts +1 -1
  20. package/lib/cjs/index.js +2 -23
  21. package/lib/cjs/market/Market.d.ts +99 -33
  22. package/lib/cjs/market/Market.js +137 -28
  23. package/lib/cjs/market/MarketUtils.d.ts +61 -41
  24. package/lib/cjs/market/MarketUtils.js +108 -48
  25. package/lib/cjs/market/Position.d.ts +16 -11
  26. package/lib/cjs/market/Position.js +18 -12
  27. package/lib/cjs/market/PositionUtils.d.ts +6 -4
  28. package/lib/cjs/market/PositionUtils.js +9 -6
  29. package/lib/cjs/math/TickLib.d.ts +22 -0
  30. package/lib/cjs/math/TickLib.js +30 -0
  31. package/lib/cjs/math/index.d.ts +0 -1
  32. package/lib/cjs/math/index.js +0 -1
  33. package/lib/cjs/offers/Offer.d.ts +218 -12
  34. package/lib/cjs/offers/Offer.js +215 -7
  35. package/lib/cjs/offers/OfferUtils.d.ts +249 -143
  36. package/lib/cjs/offers/OfferUtils.js +326 -45
  37. package/lib/cjs/queries/GetPosition.d.ts +1 -1
  38. package/lib/cjs/queries/GetPosition.js +1 -1
  39. package/lib/cjs/signatures/EcrecoverRatifierUtils.d.ts +184 -38
  40. package/lib/cjs/signatures/EcrecoverRatifierUtils.js +296 -80
  41. package/lib/cjs/signatures/Group.d.ts +12 -4
  42. package/lib/cjs/signatures/Group.js +17 -7
  43. package/lib/cjs/signatures/GroupUtils.d.ts +60 -4
  44. package/lib/cjs/signatures/GroupUtils.js +57 -2
  45. package/lib/cjs/signatures/Payload.d.ts +277 -277
  46. package/lib/cjs/signatures/Payload.js +517 -534
  47. package/lib/cjs/signatures/RatifierUtils.d.ts +57 -0
  48. package/lib/cjs/signatures/RatifierUtils.js +105 -0
  49. package/lib/cjs/signatures/SetterRatifierUtils.d.ts +52 -13
  50. package/lib/cjs/signatures/SetterRatifierUtils.js +62 -19
  51. package/lib/cjs/signatures/Tree.d.ts +28 -16
  52. package/lib/cjs/signatures/Tree.js +35 -15
  53. package/lib/cjs/signatures/TreeUtils.d.ts +185 -63
  54. package/lib/cjs/signatures/TreeUtils.js +89 -79
  55. package/lib/cjs/signatures/eip712.d.ts +22 -0
  56. package/lib/cjs/signatures/eip712.js +26 -0
  57. package/lib/cjs/signatures/index.d.ts +2 -0
  58. package/lib/cjs/signatures/index.js +4 -0
  59. package/lib/cjs/signatures/offerStructInternal.d.ts +14 -0
  60. package/lib/cjs/signatures/offerStructInternal.js +72 -0
  61. package/lib/esm/abis.d.ts +1185 -996
  62. package/lib/esm/abis.js +1445 -1211
  63. package/lib/esm/api/MidnightApi.d.ts +22 -16
  64. package/lib/esm/api/MidnightApi.js +91 -21
  65. package/lib/esm/api/helpers.d.ts +11 -1
  66. package/lib/esm/api/helpers.js +54 -5
  67. package/lib/esm/api/types.d.ts +35 -9
  68. package/lib/esm/constants.d.ts +12 -11
  69. package/lib/esm/constants.js +13 -11
  70. package/lib/esm/errors.d.ts +89 -1
  71. package/lib/esm/errors.js +108 -2
  72. package/lib/esm/fetch/Market.js +38 -4
  73. package/lib/esm/fetch/index.d.ts +0 -1
  74. package/lib/esm/fetch/index.js +0 -1
  75. package/lib/esm/fetch/utils.d.ts +1 -1
  76. package/lib/esm/fetch/utils.js +9 -2
  77. package/lib/esm/index.d.ts +1 -1
  78. package/lib/esm/index.js +1 -1
  79. package/lib/esm/market/Market.d.ts +99 -33
  80. package/lib/esm/market/Market.js +137 -28
  81. package/lib/esm/market/MarketUtils.d.ts +61 -41
  82. package/lib/esm/market/MarketUtils.js +109 -49
  83. package/lib/esm/market/Position.d.ts +16 -11
  84. package/lib/esm/market/Position.js +19 -13
  85. package/lib/esm/market/PositionUtils.d.ts +6 -4
  86. package/lib/esm/market/PositionUtils.js +9 -6
  87. package/lib/esm/math/TickLib.d.ts +22 -0
  88. package/lib/esm/math/TickLib.js +31 -1
  89. package/lib/esm/math/index.d.ts +0 -1
  90. package/lib/esm/math/index.js +0 -1
  91. package/lib/esm/offers/Offer.d.ts +218 -12
  92. package/lib/esm/offers/Offer.js +216 -8
  93. package/lib/esm/offers/OfferUtils.d.ts +249 -143
  94. package/lib/esm/offers/OfferUtils.js +329 -48
  95. package/lib/esm/queries/GetPosition.d.ts +1 -1
  96. package/lib/esm/queries/GetPosition.js +1 -1
  97. package/lib/esm/signatures/EcrecoverRatifierUtils.d.ts +184 -38
  98. package/lib/esm/signatures/EcrecoverRatifierUtils.js +298 -82
  99. package/lib/esm/signatures/Group.d.ts +12 -4
  100. package/lib/esm/signatures/Group.js +17 -7
  101. package/lib/esm/signatures/GroupUtils.d.ts +60 -4
  102. package/lib/esm/signatures/GroupUtils.js +57 -2
  103. package/lib/esm/signatures/Payload.d.ts +277 -277
  104. package/lib/esm/signatures/Payload.js +517 -531
  105. package/lib/esm/signatures/RatifierUtils.d.ts +57 -0
  106. package/lib/esm/signatures/RatifierUtils.js +105 -0
  107. package/lib/esm/signatures/SetterRatifierUtils.d.ts +52 -13
  108. package/lib/esm/signatures/SetterRatifierUtils.js +62 -19
  109. package/lib/esm/signatures/Tree.d.ts +28 -16
  110. package/lib/esm/signatures/Tree.js +36 -16
  111. package/lib/esm/signatures/TreeUtils.d.ts +185 -63
  112. package/lib/esm/signatures/TreeUtils.js +91 -81
  113. package/lib/esm/signatures/eip712.d.ts +22 -0
  114. package/lib/esm/signatures/eip712.js +22 -0
  115. package/lib/esm/signatures/index.d.ts +2 -0
  116. package/lib/esm/signatures/index.js +2 -0
  117. package/lib/esm/signatures/offerStructInternal.d.ts +14 -0
  118. package/lib/esm/signatures/offerStructInternal.js +67 -0
  119. package/package.json +31 -34
  120. package/lib/cjs/fetch/Offer.d.ts +0 -74
  121. package/lib/cjs/fetch/Offer.js +0 -119
  122. package/lib/cjs/math/ConsumableUnitsLib.d.ts +0 -57
  123. package/lib/cjs/math/ConsumableUnitsLib.js +0 -77
  124. package/lib/esm/fetch/Offer.d.ts +0 -74
  125. package/lib/esm/fetch/Offer.js +0 -116
  126. package/lib/esm/math/ConsumableUnitsLib.d.ts +0 -57
  127. package/lib/esm/math/ConsumableUnitsLib.js +0 -74
  128. package/src/index.ts +0 -19
@@ -1,5 +1,5 @@
1
1
  import { zeroAddress } from "viem";
2
- import { MarketParams, } from "../market/index.js";
2
+ import { Market, MarketParams, } from "../market/index.js";
3
3
  import { OfferUtils } from "./OfferUtils.js";
4
4
  /**
5
5
  * Maker-side Midnight offer.
@@ -19,12 +19,14 @@ import { OfferUtils } from "./OfferUtils.js";
19
19
  *
20
20
  * const offer = Offer.create({
21
21
  * market: {
22
+ * chainId: 8453,
23
+ * midnight: "0x0000000000000000000000000000000000001000",
22
24
  * loanToken: "0x0000000000000000000000000000000000000001",
23
25
  * collateralParams: [
24
26
  * {
25
27
  * token: "0x0000000000000000000000000000000000007000",
26
28
  * lltv: 770000000000000000n,
27
- * maxLif: 1061007957559681697n,
29
+ * liquidationCursor: 250000000000000000n,
28
30
  * oracle: "0x0000000000000000000000000000000000008000",
29
31
  * },
30
32
  * ],
@@ -82,7 +84,10 @@ export class Offer {
82
84
  /** Maximum market continuous fee accepted by this offer. */
83
85
  continuousFeeCap;
84
86
  constructor(offer) {
85
- this.market = MarketParams.from(offer.market);
87
+ this.market =
88
+ "params" in offer.market
89
+ ? Market.from(offer.market)
90
+ : MarketParams.from(offer.market);
86
91
  this.buy = offer.buy;
87
92
  this.maker = offer.maker;
88
93
  this.start = BigInt(offer.start);
@@ -114,12 +119,14 @@ export class Offer {
114
119
  *
115
120
  * const offer = Offer.from({
116
121
  * market: {
122
+ * chainId: 8453,
123
+ * midnight: "0x0000000000000000000000000000000000001000",
117
124
  * loanToken: "0x0000000000000000000000000000000000006000",
118
125
  * collateralParams: [
119
126
  * {
120
127
  * token: "0x0000000000000000000000000000000000007000",
121
128
  * lltv: 770000000000000000n,
122
- * maxLif: 1061007957559681697n,
129
+ * liquidationCursor: 250000000000000000n,
123
130
  * oracle: "0x0000000000000000000000000000000000008000",
124
131
  * },
125
132
  * ],
@@ -169,12 +176,14 @@ export class Offer {
169
176
  *
170
177
  * const offer = Offer.create({
171
178
  * market: {
179
+ * chainId: 8453,
180
+ * midnight: "0x0000000000000000000000000000000000001000",
172
181
  * loanToken,
173
182
  * collateralParams: [
174
183
  * {
175
184
  * token: collateralToken,
176
185
  * lltv: 770000000000000000n,
177
- * maxLif: 1061007957559681697n,
186
+ * liquidationCursor: 250000000000000000n,
178
187
  * oracle,
179
188
  * },
180
189
  * ],
@@ -192,7 +201,7 @@ export class Offer {
192
201
  * });
193
202
  *
194
203
  * const group = offer.group;
195
- * // group satisfies Hash
204
+ * console.log(group);
196
205
  * ```
197
206
  */
198
207
  get group() {
@@ -219,12 +228,14 @@ export class Offer {
219
228
  *
220
229
  * const offer = Offer.create({
221
230
  * market: {
231
+ * chainId: 8453,
232
+ * midnight: "0x0000000000000000000000000000000000001000",
222
233
  * loanToken,
223
234
  * collateralParams: [
224
235
  * {
225
236
  * token: collateralToken,
226
237
  * lltv: 770000000000000000n,
227
- * maxLif: 1061007957559681697n,
238
+ * liquidationCursor: 250000000000000000n,
228
239
  * oracle,
229
240
  * },
230
241
  * ],
@@ -249,6 +260,201 @@ export class Offer {
249
260
  this.cachedHash ??= OfferUtils.hash(this);
250
261
  return this.cachedHash;
251
262
  }
263
+ /**
264
+ * WAD zero-coupon price at this offer's tick.
265
+ *
266
+ * @returns WAD price rounded to the protocol price quantum.
267
+ * @throws {NegativeValueError} when `tick` is negative.
268
+ * @throws {TickOutOfRangeError} when `tick` exceeds `MAX_TICK`.
269
+ * @example
270
+ * ```ts
271
+ * import { Offer } from "@morpho-org/midnight-sdk";
272
+ *
273
+ * const offer = Offer.create({
274
+ * market: {
275
+ * loanToken: "0x0000000000000000000000000000000000006000",
276
+ * collateralParams: [
277
+ * {
278
+ * token: "0x0000000000000000000000000000000000007000",
279
+ * lltv: 770000000000000000n,
280
+ * liquidationCursor: 250000000000000000n,
281
+ * oracle: "0x0000000000000000000000000000000000008000",
282
+ * },
283
+ * ],
284
+ * maturity: 54_000n,
285
+ * rcfThreshold: 0n,
286
+ * enterGate: "0x0000000000000000000000000000000000000000",
287
+ * liquidatorGate: "0x0000000000000000000000000000000000000000",
288
+ * },
289
+ * buy: true,
290
+ * maker: "0x0000000000000000000000000000000000009000",
291
+ * tick: 5_000n,
292
+ * expiry: 3_600n,
293
+ * ratifier: "0x0000000000000000000000000000000000004000",
294
+ * maxUnits: 100n,
295
+ * });
296
+ * console.log(offer.price);
297
+ * ```
298
+ */
299
+ get price() {
300
+ return OfferUtils.getPrice(this);
301
+ }
302
+ /**
303
+ * Converts this offer's tick into a WAD per-second simple rate at a timestamp.
304
+ *
305
+ * @param timestamp - Timestamp at which the rate is calculated.
306
+ * @returns WAD per-second simple rate rounded up.
307
+ * @throws {NegativeValueError} when market maturity, `timestamp`, or `tick` is negative.
308
+ * @throws {TickOutOfRangeError} when `tick` exceeds `MAX_TICK`.
309
+ * @throws {DivisionByZeroError} when the tick price is zero or `timestamp` is at or after maturity.
310
+ * @example
311
+ * ```ts
312
+ * import { Offer } from "@morpho-org/midnight-sdk";
313
+ *
314
+ * const offer = Offer.create({
315
+ * market: {
316
+ * loanToken: "0x0000000000000000000000000000000000006000",
317
+ * collateralParams: [
318
+ * {
319
+ * token: "0x0000000000000000000000000000000000007000",
320
+ * lltv: 770000000000000000n,
321
+ * liquidationCursor: 250000000000000000n,
322
+ * oracle: "0x0000000000000000000000000000000000008000",
323
+ * },
324
+ * ],
325
+ * maturity: 54_000n,
326
+ * rcfThreshold: 0n,
327
+ * enterGate: "0x0000000000000000000000000000000000000000",
328
+ * liquidatorGate: "0x0000000000000000000000000000000000000000",
329
+ * },
330
+ * buy: true,
331
+ * maker: "0x0000000000000000000000000000000000009000",
332
+ * tick: 5_000n,
333
+ * expiry: 3_600n,
334
+ * ratifier: "0x0000000000000000000000000000000000004000",
335
+ * maxUnits: 100n,
336
+ * });
337
+ * const rate = offer.getRate(1_000n);
338
+ * console.log(rate);
339
+ * ```
340
+ */
341
+ getRate(timestamp) {
342
+ return OfferUtils.getRate({ offer: this, timestamp });
343
+ }
344
+ /**
345
+ * Converts this offer's tick into a WAD simple annual percentage rate at a timestamp.
346
+ *
347
+ * @param timestamp - Timestamp at which the APR is calculated.
348
+ * @returns WAD simple APR rounded up.
349
+ * @throws {NegativeValueError} when market maturity, `timestamp`, or `tick` is negative.
350
+ * @throws {TickOutOfRangeError} when `tick` exceeds `MAX_TICK`.
351
+ * @throws {DivisionByZeroError} when the tick price is zero or `timestamp` is at or after maturity.
352
+ * @example
353
+ * ```ts
354
+ * import { Offer } from "@morpho-org/midnight-sdk";
355
+ *
356
+ * const offer = Offer.create({
357
+ * market: {
358
+ * loanToken: "0x0000000000000000000000000000000000006000",
359
+ * collateralParams: [
360
+ * {
361
+ * token: "0x0000000000000000000000000000000000007000",
362
+ * lltv: 770000000000000000n,
363
+ * liquidationCursor: 250000000000000000n,
364
+ * oracle: "0x0000000000000000000000000000000000008000",
365
+ * },
366
+ * ],
367
+ * maturity: 54_000n,
368
+ * rcfThreshold: 0n,
369
+ * enterGate: "0x0000000000000000000000000000000000000000",
370
+ * liquidatorGate: "0x0000000000000000000000000000000000000000",
371
+ * },
372
+ * buy: true,
373
+ * maker: "0x0000000000000000000000000000000000009000",
374
+ * tick: 5_000n,
375
+ * expiry: 3_600n,
376
+ * ratifier: "0x0000000000000000000000000000000000004000",
377
+ * maxUnits: 100n,
378
+ * });
379
+ * const apr = offer.getApr(1_000n);
380
+ * console.log(apr);
381
+ * ```
382
+ */
383
+ getApr(timestamp) {
384
+ return OfferUtils.getApr({ offer: this, timestamp });
385
+ }
386
+ /**
387
+ * Returns remaining units accepted by this offer's cap at a timestamp.
388
+ *
389
+ * The offer must carry a hydrated {@link Market} so the current market
390
+ * continuous fee and settlement-fee buckets are available locally. Fetch the
391
+ * current `consumed(maker, group)` value separately and pass it as input.
392
+ *
393
+ * @param params.consumed - Amount already consumed from this offer's group.
394
+ * @param params.timestamp - Timestamp used to compute the market time to maturity.
395
+ * @returns Remaining consumable units accepted by Midnight `take`.
396
+ * @throws {InvalidOfferParameterError} when this offer does not carry hydrated market state or has invalid caps.
397
+ * @throws {NegativeValueError} when `consumed`, `timestamp`, offer limits, or delegated math inputs are negative.
398
+ * @throws {TickOutOfRangeError} when `tick` exceeds `MAX_TICK`.
399
+ * @throws {SettlementFeeExceedsPriceError} when settlement fee exceeds a buy-offer price.
400
+ * @example
401
+ * ```ts
402
+ * import { Offer } from "@morpho-org/midnight-sdk";
403
+ *
404
+ * const offer = Offer.from({
405
+ * market: {
406
+ * params: {
407
+ * chainId: 8453,
408
+ * midnight: "0x0000000000000000000000000000000000001000",
409
+ * loanToken: "0x0000000000000000000000000000000000006000",
410
+ * collateralParams: [
411
+ * {
412
+ * token: "0x0000000000000000000000000000000000007000",
413
+ * lltv: 770000000000000000n,
414
+ * liquidationCursor: 250000000000000000n,
415
+ * oracle: "0x0000000000000000000000000000000000008000",
416
+ * },
417
+ * ],
418
+ * maturity: 54_000n,
419
+ * rcfThreshold: 0n,
420
+ * enterGate: "0x0000000000000000000000000000000000000000",
421
+ * liquidatorGate: "0x0000000000000000000000000000000000000000",
422
+ * },
423
+ * totalUnits: 1_000n,
424
+ * lossFactor: 0n,
425
+ * withdrawable: 500n,
426
+ * continuousFeeCredit: 0n,
427
+ * settlementFeeCbps: [1, 2, 3, 4, 5, 6, 7],
428
+ * continuousFee: 10,
429
+ * tickSpacing: 4,
430
+ * },
431
+ * buy: true,
432
+ * maker: "0x0000000000000000000000000000000000009000",
433
+ * start: 0n,
434
+ * expiry: 3_600n,
435
+ * tick: 5_000n,
436
+ * callback: "0x0000000000000000000000000000000000000000",
437
+ * callbackData: "0x",
438
+ * receiverIfMakerIsSeller: "0x0000000000000000000000000000000000000000",
439
+ * ratifier: "0x0000000000000000000000000000000000004000",
440
+ * reduceOnly: false,
441
+ * maxUnits: 100n,
442
+ * maxAssets: 0n,
443
+ * continuousFeeCap: 317097919n,
444
+ * });
445
+ * const consumed = await readContract(client, {
446
+ * address: "0x0000000000000000000000000000000000001000",
447
+ * abi: midnightAbi,
448
+ * functionName: "consumed",
449
+ * args: [offer.maker, offer.group],
450
+ * });
451
+ * const units = offer.getConsumableUnits({ consumed, timestamp: 1_000n });
452
+ * console.log(units);
453
+ * ```
454
+ */
455
+ getConsumableUnits(params) {
456
+ return OfferUtils.getConsumableUnits({ offer: this, ...params });
457
+ }
252
458
  /**
253
459
  * Creates a validated maker-side Midnight offer.
254
460
  *
@@ -291,12 +497,14 @@ export class Offer {
291
497
  *
292
498
  * const offer = Offer.create({
293
499
  * market: {
500
+ * chainId: 8453,
501
+ * midnight: "0x0000000000000000000000000000000000001000",
294
502
  * loanToken,
295
503
  * collateralParams: [
296
504
  * {
297
505
  * token: collateralToken,
298
506
  * lltv: 770000000000000000n,
299
- * maxLif: 1061007957559681697n,
507
+ * liquidationCursor: 250000000000000000n,
300
508
  * oracle,
301
509
  * },
302
510
  * ],