@ickb/sdk 1000.0.82 → 9001.0.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 (157) hide show
  1. package/README.md +84 -32
  2. package/dist/constants.d.ts +9 -22
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +62 -76
  5. package/dist/constants.js.map +1 -1
  6. package/dist/conversion/estimate.d.ts +33 -0
  7. package/dist/conversion/estimate.d.ts.map +1 -0
  8. package/dist/conversion/estimate.js +117 -0
  9. package/dist/conversion/estimate.js.map +1 -0
  10. package/dist/conversion/maturity.d.ts +15 -0
  11. package/dist/conversion/maturity.d.ts.map +1 -0
  12. package/dist/conversion/maturity.js +113 -0
  13. package/dist/conversion/maturity.js.map +1 -0
  14. package/dist/conversion/plans.d.ts +20 -0
  15. package/dist/conversion/plans.d.ts.map +1 -0
  16. package/dist/conversion/plans.js +106 -0
  17. package/dist/conversion/plans.js.map +1 -0
  18. package/dist/conversion/projection.d.ts +21 -0
  19. package/dist/conversion/projection.d.ts.map +1 -0
  20. package/dist/conversion/projection.js +94 -0
  21. package/dist/conversion/projection.js.map +1 -0
  22. package/dist/conversion/types.d.ts +264 -0
  23. package/dist/conversion/types.d.ts.map +1 -0
  24. package/dist/conversion/types.js +2 -0
  25. package/dist/conversion/types.js.map +1 -0
  26. package/dist/conversion/withdrawal_ring.d.ts +34 -0
  27. package/dist/conversion/withdrawal_ring.d.ts.map +1 -0
  28. package/dist/conversion/withdrawal_ring.js +87 -0
  29. package/dist/conversion/withdrawal_ring.js.map +1 -0
  30. package/dist/dao.d.ts +100 -0
  31. package/dist/dao.d.ts.map +1 -0
  32. package/dist/dao.js +125 -0
  33. package/dist/dao.js.map +1 -0
  34. package/dist/index.d.ts +49 -3
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +20 -3
  37. package/dist/index.js.map +1 -1
  38. package/dist/logic.d.ts +81 -0
  39. package/dist/logic.d.ts.map +1 -0
  40. package/dist/logic.js +173 -0
  41. package/dist/logic.js.map +1 -0
  42. package/dist/order/cells.d.ts +168 -0
  43. package/dist/order/cells.d.ts.map +1 -0
  44. package/dist/order/cells.js +309 -0
  45. package/dist/order/cells.js.map +1 -0
  46. package/dist/order/conversion.d.ts +37 -0
  47. package/dist/order/conversion.d.ts.map +1 -0
  48. package/dist/order/conversion.js +120 -0
  49. package/dist/order/conversion.js.map +1 -0
  50. package/dist/order/fee.d.ts +9 -0
  51. package/dist/order/fee.d.ts.map +1 -0
  52. package/dist/order/fee.js +24 -0
  53. package/dist/order/fee.js.map +1 -0
  54. package/dist/order/fill.d.ts +36 -0
  55. package/dist/order/fill.d.ts.map +1 -0
  56. package/dist/order/fill.js +53 -0
  57. package/dist/order/fill.js.map +1 -0
  58. package/dist/order/info.d.ts +62 -0
  59. package/dist/order/info.d.ts.map +1 -0
  60. package/dist/order/info.js +102 -0
  61. package/dist/order/info.js.map +1 -0
  62. package/dist/order/master.d.ts +49 -0
  63. package/dist/order/master.d.ts.map +1 -0
  64. package/dist/order/master.js +27 -0
  65. package/dist/order/master.js.map +1 -0
  66. package/dist/order/matcher.d.ts +43 -0
  67. package/dist/order/matcher.d.ts.map +1 -0
  68. package/dist/order/matcher.js +124 -0
  69. package/dist/order/matcher.js.map +1 -0
  70. package/dist/order/order.d.ts +63 -0
  71. package/dist/order/order.d.ts.map +1 -0
  72. package/dist/order/order.js +234 -0
  73. package/dist/order/order.js.map +1 -0
  74. package/dist/order/order_data.d.ts +51 -0
  75. package/dist/order/order_data.d.ts.map +1 -0
  76. package/dist/order/order_data.js +67 -0
  77. package/dist/order/order_data.js.map +1 -0
  78. package/dist/order/ratio.d.ts +40 -0
  79. package/dist/order/ratio.d.ts.map +1 -0
  80. package/dist/order/ratio.js +74 -0
  81. package/dist/order/ratio.js.map +1 -0
  82. package/dist/order/relative.d.ts +43 -0
  83. package/dist/order/relative.d.ts.map +1 -0
  84. package/dist/order/relative.js +57 -0
  85. package/dist/order/relative.js.map +1 -0
  86. package/dist/owned_owner.d.ts +108 -0
  87. package/dist/owned_owner.d.ts.map +1 -0
  88. package/dist/owned_owner.js +260 -0
  89. package/dist/owned_owner.js.map +1 -0
  90. package/dist/sdk.d.ts +113 -41
  91. package/dist/sdk.d.ts.map +1 -1
  92. package/dist/sdk.js +410 -209
  93. package/dist/sdk.js.map +1 -1
  94. package/dist/send/sign_and_send_transaction.d.ts +61 -0
  95. package/dist/send/sign_and_send_transaction.d.ts.map +1 -0
  96. package/dist/send/sign_and_send_transaction.js +201 -0
  97. package/dist/send/sign_and_send_transaction.js.map +1 -0
  98. package/dist/send/wait_transaction.d.ts +42 -0
  99. package/dist/send/wait_transaction.d.ts.map +1 -0
  100. package/dist/send/wait_transaction.js +172 -0
  101. package/dist/send/wait_transaction.js.map +1 -0
  102. package/dist/udt.d.ts +108 -0
  103. package/dist/udt.d.ts.map +1 -0
  104. package/dist/udt.js +180 -0
  105. package/dist/udt.js.map +1 -0
  106. package/dist/utils/chain.d.ts +3 -0
  107. package/dist/utils/chain.d.ts.map +1 -0
  108. package/dist/utils/chain.js +2 -0
  109. package/dist/utils/chain.js.map +1 -0
  110. package/dist/utils/codec.d.ts +19 -0
  111. package/dist/utils/codec.d.ts.map +1 -0
  112. package/dist/utils/codec.js +69 -0
  113. package/dist/utils/codec.js.map +1 -0
  114. package/dist/utils/utils.d.ts +99 -0
  115. package/dist/utils/utils.d.ts.map +1 -0
  116. package/dist/utils/utils.js +130 -0
  117. package/dist/utils/utils.js.map +1 -0
  118. package/dist/utils/verified_client.d.ts +19 -0
  119. package/dist/utils/verified_client.d.ts.map +1 -0
  120. package/dist/utils/verified_client.js +92 -0
  121. package/dist/utils/verified_client.js.map +1 -0
  122. package/package.json +19 -26
  123. package/src/constants.ts +65 -181
  124. package/src/conversion/estimate.ts +155 -0
  125. package/src/conversion/maturity.ts +158 -0
  126. package/src/conversion/plans.ts +144 -0
  127. package/src/conversion/projection.ts +136 -0
  128. package/src/conversion/types.ts +302 -0
  129. package/src/conversion/withdrawal_ring.ts +122 -0
  130. package/src/dao.ts +196 -0
  131. package/src/index.ts +89 -3
  132. package/src/logic.ts +283 -0
  133. package/src/order/cells.ts +383 -0
  134. package/src/order/conversion.ts +162 -0
  135. package/src/order/fee.ts +30 -0
  136. package/src/order/fill.ts +83 -0
  137. package/src/order/info.ts +181 -0
  138. package/src/order/master.ts +42 -0
  139. package/src/order/matcher.ts +191 -0
  140. package/src/order/order.ts +288 -0
  141. package/src/order/order_data.ts +131 -0
  142. package/src/order/ratio.ts +127 -0
  143. package/src/order/relative.ts +109 -0
  144. package/src/owned_owner.ts +364 -0
  145. package/src/sdk.ts +542 -440
  146. package/src/send/sign_and_send_transaction.ts +256 -0
  147. package/src/send/wait_transaction.ts +227 -0
  148. package/src/udt.ts +249 -0
  149. package/src/utils/chain.ts +2 -0
  150. package/src/utils/codec.ts +78 -0
  151. package/src/utils/utils.ts +208 -0
  152. package/src/utils/verified_client.ts +136 -0
  153. package/dist/codec.d.ts +0 -3
  154. package/dist/codec.d.ts.map +0 -1
  155. package/dist/codec.js +0 -58
  156. package/dist/codec.js.map +0 -1
  157. package/src/codec.ts +0 -138
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../src/order/matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IAEjB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IAEjB,oEAAoE;IACpE,QAAQ,EAAE,KAAK,CAAC;QACd,kEAAkE;QAClE,KAAK,EAAE,UAAU,CAAC;QAElB,6DAA6D;QAC7D,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC;QAEvB,2DAA2D;QAC3D,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC;KACxB,CAAC,CAAC;CACJ;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACvB,SAAgB,KAAK,EAAE,UAAU,CAAC;IAClC,SAAgB,SAAS,EAAE,OAAO,CAAC;IACnC,SAAgB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAChC,SAAgB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAChC,SAAgB,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC;IACpC,SAAgB,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC;IACpC,SAAgB,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC;IACrC,SAAgB,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC;IAC1C,SAAgB,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC;IAC1C,SAAgB,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC;IAExC,OAAO,eAeN;IAED,qFAAqF;IACrF,OAAc,IAAI,CAChB,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,GAAG,CAAC,UAAU,GAC3B,YAAY,GAAG,SAAS,CAG1B;IAEM,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,KAAK,CAkB9C;IAEM,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,KAAK,CAY/D;CACF"}
@@ -0,0 +1,124 @@
1
+ import { ccc } from "@ckb-ccc/core";
2
+ import { ceilDiv } from "../utils/utils.js";
3
+ /**
4
+ * One order's fills in one direction, in the contract's terms: `a` is the asset the order
5
+ * gives, `b` the asset the caller pays. A partial pays `b` between `bMinMatch` and
6
+ * `bMaxMatch`; paying `bMaxMatch` completes the order.
7
+ */
8
+ export class OrderMatcher {
9
+ group;
10
+ isCkb2Udt;
11
+ aScale;
12
+ bScale;
13
+ aIn;
14
+ bIn;
15
+ aMin;
16
+ bMinMatch;
17
+ bMaxMatch;
18
+ bMaxOut;
19
+ constructor(group, isCkb2Udt, { aScale, bScale, aIn, bIn, aMin, bMinMatch, bMaxMatch, bMaxOut }) {
20
+ this.group = group;
21
+ this.isCkb2Udt = isCkb2Udt;
22
+ this.aScale = aScale;
23
+ this.bScale = bScale;
24
+ this.aIn = aIn;
25
+ this.bIn = bIn;
26
+ this.aMin = aMin;
27
+ this.bMinMatch = bMinMatch;
28
+ this.bMaxMatch = bMaxMatch;
29
+ this.bMaxOut = bMaxOut;
30
+ }
31
+ /** The order's matcher in one direction, or `undefined` when nothing gains in it. */
32
+ static from(group, isCkb2Udt, ckbMiningFee) {
33
+ const terms = orderMatcherTerms(group.order, isCkb2Udt, ckbMiningFee);
34
+ return terms === undefined ? undefined : new OrderMatcher(group, isCkb2Udt, terms);
35
+ }
36
+ match(bAllowance) {
37
+ if (bAllowance < this.bMinMatch) {
38
+ return { ckbDelta: 0n, udtDelta: 0n, partials: [] };
39
+ }
40
+ if (bAllowance >= this.bMaxMatch) {
41
+ return this.create(this.aMin, this.bMaxOut);
42
+ }
43
+ const bOut = this.bIn + bAllowance;
44
+ const aOut = nonDecreasing({
45
+ aScale: this.bScale,
46
+ bScale: this.aScale,
47
+ aIn: this.bIn,
48
+ bIn: this.aIn,
49
+ aOut: bOut,
50
+ });
51
+ return this.create(aOut, bOut);
52
+ }
53
+ create(aOut, bOut) {
54
+ return this.isCkb2Udt
55
+ ? {
56
+ ckbDelta: this.aIn - aOut,
57
+ udtDelta: this.bIn - bOut,
58
+ partials: [{ group: this.group, ckbOut: aOut, udtOut: bOut }],
59
+ }
60
+ : {
61
+ ckbDelta: this.bIn - bOut,
62
+ udtDelta: this.aIn - aOut,
63
+ partials: [{ group: this.group, ckbOut: bOut, udtOut: aOut }],
64
+ };
65
+ }
66
+ }
67
+ function orderMatcherTerms(order, isCkb2Udt, ckbMiningFee) {
68
+ if (isCkb2Udt ? !order.isCkb2UdtMatchable() : !order.isUdt2CkbMatchable()) {
69
+ return undefined;
70
+ }
71
+ const { info } = order.data;
72
+ const ckbMinMatch = info.getCkbMinMatch();
73
+ let terms;
74
+ if (isCkb2Udt) {
75
+ const { ckbScale: aScale, udtScale: bScale } = info.ckbToUdt;
76
+ terms = {
77
+ aScale,
78
+ bScale,
79
+ aIn: order.ckbValue,
80
+ bIn: order.udtValue,
81
+ aMin: order.cell.cellOutput.capacity - order.ckbUnoccupied,
82
+ // The contract's ckb2udt minimum is a plain CKB delta (limit_order entry.rs:116);
83
+ // a value-conserving partial moving u UDT moves u*udtScale/ckbScale CKB, so the
84
+ // UDT-denominated floor is ceil(minMatch * ckbScale / udtScale).
85
+ bMinMatch: ceilDiv(ckbMinMatch * aScale, bScale),
86
+ };
87
+ }
88
+ else {
89
+ const { ckbScale: bScale, udtScale: aScale } = info.udtToCkb;
90
+ // The contract's udt2ckb minimum values the UDT moved at the ratio, and a payment of
91
+ // p CKB moves floor(p*bScale/aScale) UDT, so the smallest payment the contract accepts
92
+ // is the one whose floor reaches ceil(min*bScale/aScale) UDT: the plain minimum,
93
+ // rounded up to the ratio's grid.
94
+ const udtMinMatch = ceilDiv(ckbMinMatch * bScale, aScale);
95
+ terms = {
96
+ aScale,
97
+ bScale,
98
+ aIn: order.udtValue,
99
+ bIn: order.ckbValue,
100
+ aMin: 0n,
101
+ bMinMatch: ceilDiv(udtMinMatch * aScale, bScale),
102
+ };
103
+ }
104
+ const { aScale, bScale, aIn, bIn, aMin, bMinMatch } = terms;
105
+ // A buyer pays the fill's mining fee out of the CKB it gives, so nothing gains once the
106
+ // fee eats that; a seller's fill brings CKB in, and its caller nets the fee (`netOf`).
107
+ if (aIn <= aMin + (isCkb2Udt ? ckbMiningFee : 0n)) {
108
+ return undefined;
109
+ }
110
+ const bMaxOut = nonDecreasing({ aScale, bScale, aIn, bIn, aOut: aMin });
111
+ const bMaxMatch = bMaxOut - bIn;
112
+ return {
113
+ ...terms,
114
+ // An order under its own minimum can only be completed.
115
+ bMinMatch: ccc.numMin(bMinMatch, bMaxMatch),
116
+ bMaxMatch,
117
+ bMaxOut,
118
+ };
119
+ }
120
+ /** The smallest `b` output that keeps the order's value non-decreasing at its ratio. */
121
+ function nonDecreasing({ aScale, bScale, aIn, bIn, aOut, }) {
122
+ return ceilDiv(aScale * (aIn - aOut) + bScale * bIn, bScale);
123
+ }
124
+ //# sourceMappingURL=matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/order/matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { ccc } from "@ckb-ccc/core";
2
+ import { type ScriptDeps, type ValueComponents } from "../utils/utils.js";
3
+ import { OrderGroup } from "./cells.js";
4
+ import { type InfoLike } from "./info.js";
5
+ import type { Match } from "./matcher.js";
6
+ /**
7
+ * Builds and scans iCKB Stack order cells for one order script deployment.
8
+ */
9
+ export declare class OrderManager implements ScriptDeps {
10
+ /** Order lock script this manager scans and builds for. */
11
+ readonly script: ccc.Script;
12
+ /** Cell deps required to execute the order script. */
13
+ readonly cellDeps: ccc.CellDep[];
14
+ /** UDT type script accepted by this order market. */
15
+ readonly udtScript: ccc.Script;
16
+ /**
17
+ * Creates an order manager for one order script, its cell deps, and UDT type.
18
+ */
19
+ constructor(script: ccc.Script, cellDeps: ccc.CellDep[], udtScript: ccc.Script);
20
+ /** Returns true when the cell is an order cell for this manager's scripts. */
21
+ isOrder(cell: ccc.Cell): boolean;
22
+ /**
23
+ * Adds a new order cell and its master cell to a partial transaction.
24
+ *
25
+ * @remarks
26
+ * The order output is locked by the order script and typed by the configured
27
+ * UDT. The following master output is typed by the order script and locked by
28
+ * the caller-provided lock.
29
+ */
30
+ mint(txLike: ccc.TransactionLike, lock: ccc.Script, infoLike: InfoLike, { ckbValue, udtValue }: ValueComponents): ccc.Transaction;
31
+ /**
32
+ * Adds inputs and partial outputs for a chosen match.
33
+ */
34
+ addMatch(txLike: ccc.TransactionLike, match: Match): ccc.Transaction;
35
+ /**
36
+ * Adds order groups and their master cells as melt inputs.
37
+ *
38
+ * @remarks Melts exactly the groups it is given: callers pass fulfilled groups
39
+ * to collect and a live group to cancel it.
40
+ */
41
+ melt(txLike: ccc.TransactionLike, groups: OrderGroup[]): ccc.Transaction;
42
+ /**
43
+ * Finds valid order groups by scanning order cells and master cells. Unresolved or
44
+ * invalid groups are skipped.
45
+ */
46
+ findOrders(client: ccc.Client): Promise<OrderGroup[]>;
47
+ private findSimpleOrders;
48
+ /**
49
+ * Every master with the block that committed it, which is its mint order's block too:
50
+ * a master is created beside its mint order and never changes until melted, so this
51
+ * dates how long the order has been on the book.
52
+ */
53
+ private findAllMasters;
54
+ /** Resolves one master and its descendant orders into a validated order group. */
55
+ private resolveOrderGroup;
56
+ /**
57
+ * The mint order created beside the master, read from the master's transaction: the
58
+ * client cache first, then the node, which records the response for the next read.
59
+ */
60
+ private findOrigin;
61
+ private validatedPartial;
62
+ }
63
+ //# sourceMappingURL=order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../src/order/order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAa,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAyB,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAI1C;;GAEG;AACH,qBAAa,YAAa,YAAW,UAAU;IAC7C,2DAA2D;IAC3D,SAAgB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;IACnC,sDAAsD;IACtD,SAAgB,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IACxC,qDAAqD;IACrD,SAAgB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC;IAEtC;;OAEG;IACH,YAAY,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAI7E;IAED,8EAA8E;IACvE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,OAAO,CAKtC;IAED;;;;;;;OAOG;IACI,IAAI,CACT,MAAM,EAAE,GAAG,CAAC,eAAe,EAC3B,IAAI,EAAE,GAAG,CAAC,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,GACtC,GAAG,CAAC,WAAW,CAwBjB;IAED;;OAEG;IACI,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,WAAW,CA8B1E;IAED;;;;;OAKG;IACI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,WAAW,CAkB9E;IAED;;;OAGG;IACU,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAyBjE;YAEa,gBAAgB;IAc9B;;;;OAIG;YACW,cAAc;IAgB5B,kFAAkF;YACpE,iBAAiB;IAoB/B;;;OAGG;YACW,UAAU;IA2CxB,OAAO,CAAC,gBAAgB;CAiBzB"}
@@ -0,0 +1,234 @@
1
+ import { ccc } from "@ckb-ccc/core";
2
+ import { findCells } from "../utils/utils.js";
3
+ import { MasterCell, OrderCell, OrderGroup } from "./cells.js";
4
+ import { Info } from "./info.js";
5
+ import { OrderData } from "./order_data.js";
6
+ import { Relative } from "./relative.js";
7
+ /**
8
+ * Builds and scans iCKB Stack order cells for one order script deployment.
9
+ */
10
+ export class OrderManager {
11
+ /** Order lock script this manager scans and builds for. */
12
+ script;
13
+ /** Cell deps required to execute the order script. */
14
+ cellDeps;
15
+ /** UDT type script accepted by this order market. */
16
+ udtScript;
17
+ /**
18
+ * Creates an order manager for one order script, its cell deps, and UDT type.
19
+ */
20
+ constructor(script, cellDeps, udtScript) {
21
+ this.script = script;
22
+ this.cellDeps = cellDeps;
23
+ this.udtScript = udtScript;
24
+ }
25
+ /** Returns true when the cell is an order cell for this manager's scripts. */
26
+ isOrder(cell) {
27
+ return (cell.cellOutput.lock.eq(this.script) &&
28
+ Boolean(cell.cellOutput.type?.eq(this.udtScript)));
29
+ }
30
+ /**
31
+ * Adds a new order cell and its master cell to a partial transaction.
32
+ *
33
+ * @remarks
34
+ * The order output is locked by the order script and typed by the configured
35
+ * UDT. The following master output is typed by the order script and locked by
36
+ * the caller-provided lock.
37
+ */
38
+ mint(txLike, lock, infoLike, { ckbValue, udtValue }) {
39
+ const tx = ccc.Transaction.from(txLike);
40
+ const data = OrderData.from({
41
+ udtValue,
42
+ master: { type: "relative", value: Relative.create(1n) },
43
+ info: Info.from(infoLike),
44
+ });
45
+ data.validate();
46
+ if (ckbValue < 0n) {
47
+ throw new Error("ckbValue invalid, negative");
48
+ }
49
+ tx.addCellDeps(this.cellDeps);
50
+ const outputCount = tx.addOutput({ lock: this.script, type: this.udtScript }, data.toBytes());
51
+ const orderOutput = tx.outputs[outputCount - 1];
52
+ if (orderOutput === undefined) {
53
+ throw new Error("Failed to append order output");
54
+ }
55
+ orderOutput.capacity += ckbValue;
56
+ tx.addOutput({ lock, type: this.script });
57
+ return tx;
58
+ }
59
+ /**
60
+ * Adds inputs and partial outputs for a chosen match.
61
+ */
62
+ addMatch(txLike, match) {
63
+ const tx = ccc.Transaction.from(txLike);
64
+ const partials = match.partials.map((partial) => this.validatedPartial(partial));
65
+ let ckbDelta = 0n;
66
+ let udtDelta = 0n;
67
+ for (const { group, ckbOut, udtOut } of partials) {
68
+ ckbDelta += group.order.ckbValue - ckbOut;
69
+ udtDelta += group.order.udtValue - udtOut;
70
+ }
71
+ if (match.ckbDelta !== ckbDelta || match.udtDelta !== udtDelta) {
72
+ throw new Error("Match deltas do not match partial order accounting");
73
+ }
74
+ if (partials.length === 0) {
75
+ return tx;
76
+ }
77
+ tx.addCellDeps(this.cellDeps);
78
+ for (const { group, ckbOut, udtOut } of partials) {
79
+ const { order } = group;
80
+ tx.addInput(order.cell);
81
+ tx.addOutput({ lock: this.script, type: this.udtScript, capacity: ckbOut }, OrderData.from({
82
+ udtValue: udtOut,
83
+ master: { type: "absolute", value: order.getMaster() },
84
+ info: order.data.info,
85
+ }).toBytes());
86
+ }
87
+ return tx;
88
+ }
89
+ /**
90
+ * Adds order groups and their master cells as melt inputs.
91
+ *
92
+ * @remarks Melts exactly the groups it is given: callers pass fulfilled groups
93
+ * to collect and a live group to cancel it.
94
+ */
95
+ melt(txLike, groups) {
96
+ const tx = ccc.Transaction.from(txLike);
97
+ if (groups.length === 0) {
98
+ return tx;
99
+ }
100
+ for (const group of groups) {
101
+ if (!this.isOrder(group.order.cell)) {
102
+ throw new Error(`Melt order ${group.order.cell.outPoint.toHex()} does not match this order manager`);
103
+ }
104
+ }
105
+ tx.addCellDeps(this.cellDeps);
106
+ for (const group of groups) {
107
+ tx.addInput(group.order.cell);
108
+ tx.addInput(group.master.cell);
109
+ }
110
+ return tx;
111
+ }
112
+ /**
113
+ * Finds valid order groups by scanning order cells and master cells. Unresolved or
114
+ * invalid groups are skipped.
115
+ */
116
+ async findOrders(client) {
117
+ const [orders, masters] = await Promise.all([
118
+ this.findSimpleOrders(client),
119
+ this.findAllMasters(client),
120
+ ]);
121
+ const rawGroups = new Map(masters.map(({ master, blockNumber }) => [
122
+ master.cell.outPoint.toHex(),
123
+ { master, blockNumber, orders: new Array() },
124
+ ]));
125
+ for (const order of orders) {
126
+ rawGroups.get(order.getMaster().toHex())?.orders.push(order);
127
+ }
128
+ // Each group's origin is one transaction read; resolving them together turns a book of
129
+ // fifty orders from seconds of round trips into one.
130
+ const groups = await Promise.all([...rawGroups.values()]
131
+ .filter((rawGroup) => rawGroup.orders.length > 0)
132
+ .map(async ({ master, blockNumber, orders: candidates }) => this.resolveOrderGroup(client, master, blockNumber, candidates)));
133
+ return groups.filter((group) => group !== undefined);
134
+ }
135
+ async findSimpleOrders(client) {
136
+ const cells = await findCells(client, {
137
+ script: this.script,
138
+ scriptType: "lock",
139
+ filter: { script: this.udtScript },
140
+ scriptSearchMode: "exact",
141
+ withData: true,
142
+ });
143
+ return cells.flatMap(({ cell }) => {
144
+ const order = OrderCell.tryFrom(cell);
145
+ return order !== undefined && this.isOrder(cell) ? [order] : [];
146
+ });
147
+ }
148
+ /**
149
+ * Every master with the block that committed it, which is its mint order's block too:
150
+ * a master is created beside its mint order and never changes until melted, so this
151
+ * dates how long the order has been on the book.
152
+ */
153
+ async findAllMasters(client) {
154
+ // An exact type search returns master cells only, so nothing re-filters here.
155
+ const cells = await findCells(client, {
156
+ script: this.script,
157
+ scriptType: "type",
158
+ scriptSearchMode: "exact",
159
+ withData: true,
160
+ });
161
+ return cells.map(({ cell, blockNumber }) => ({
162
+ master: new MasterCell(cell),
163
+ blockNumber,
164
+ }));
165
+ }
166
+ /** Resolves one master and its descendant orders into a validated order group. */
167
+ async resolveOrderGroup(client, master, blockNumber, orders) {
168
+ const origin = await this.findOrigin(client, master.cell.outPoint);
169
+ const order = origin?.resolve(orders);
170
+ if (origin === undefined || order === undefined) {
171
+ return undefined;
172
+ }
173
+ const group = OrderGroup.tryFrom(master, order, origin, blockNumber);
174
+ // A dual-ratio order, valid on chain but placed by nothing in the stack, is left to
175
+ // whoever placed it: neither matched, estimated, shown nor melted here.
176
+ if (group === undefined || group.order.data.info.isDualRatio()) {
177
+ return undefined;
178
+ }
179
+ return group;
180
+ }
181
+ /**
182
+ * The mint order created beside the master, read from the master's transaction: the
183
+ * client cache first, then the node, which records the response for the next read.
184
+ */
185
+ async findOrigin(client, master) {
186
+ const { txHash, index: masterIndex } = master;
187
+ // A cached body is trusted like the scan that found the master: an order is a node's
188
+ // claim until the send checks every cell it spends against its creating transaction.
189
+ const response = (await client.cache.getTransactionResponse(txHash)) ??
190
+ (await client.getTransaction(txHash));
191
+ if (response === undefined) {
192
+ return undefined;
193
+ }
194
+ let origin;
195
+ for (const [i, output] of [...response.transaction.outputCells].entries()) {
196
+ const index = BigInt(i);
197
+ if (index === masterIndex) {
198
+ continue;
199
+ }
200
+ const cell = ccc.Cell.from({
201
+ cellOutput: output.cellOutput,
202
+ outputData: output.outputData,
203
+ outPoint: { txHash, index },
204
+ });
205
+ const order = OrderCell.tryFrom(cell);
206
+ if (order === undefined ||
207
+ !this.isOrder(cell) ||
208
+ !order.data.isMint() ||
209
+ !order.getMaster().eq(master)) {
210
+ continue;
211
+ }
212
+ if (origin !== undefined) {
213
+ // Two mint orders pointing at one master: the group is ambiguous, skip it.
214
+ return undefined;
215
+ }
216
+ origin = order;
217
+ }
218
+ return origin;
219
+ }
220
+ validatedPartial({ group, ckbOut, udtOut, }) {
221
+ const outPoint = group.order.cell.outPoint.toHex();
222
+ if (!this.isOrder(group.order.cell)) {
223
+ throw new Error(`Match order ${outPoint} does not match this order manager`);
224
+ }
225
+ if (ckbOut < 0n) {
226
+ throw new Error(`Match order ${outPoint} has negative CKB output`);
227
+ }
228
+ if (udtOut < 0n) {
229
+ throw new Error(`Match order ${outPoint} has negative UDT output`);
230
+ }
231
+ return { group, ckbOut, udtOut };
232
+ }
233
+ }
234
+ //# sourceMappingURL=order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../src/order/order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { ccc } from "@ckb-ccc/core";
2
+ import { Info, type InfoLike } from "./info.js";
3
+ import { type Master, type MasterLike } from "./master.js";
4
+ /**
5
+ * Wire shape for order cell data.
6
+ */
7
+ export interface OrderDataLike {
8
+ /** UDT amount held by the order cell. */
9
+ udtValue: ccc.FixedPointLike;
10
+ /** Relative or absolute pointer to the master cell. */
11
+ master: MasterLike;
12
+ /** Price and minimum-match metadata. */
13
+ info: InfoLike;
14
+ }
15
+ /**
16
+ * Serialized order cell payload.
17
+ */
18
+ export interface OrderData {
19
+ /** UDT amount held by the order cell. */
20
+ udtValue: ccc.FixedPoint;
21
+ /** Master-cell pointer. */
22
+ master: Master;
23
+ /** Price and minimum-match metadata. */
24
+ info: Info;
25
+ /** Creates a copy of this order payload. */
26
+ clone(): OrderData;
27
+ /** Returns whether another value has the same order payload. */
28
+ eq(other: OrderDataLike): boolean;
29
+ /** Resolves a relative master against `current`, or returns the absolute master. */
30
+ getMaster(current: ccc.OutPoint): ccc.OutPoint;
31
+ /** Returns the CKB hash of the serialized order payload. */
32
+ hash(): ccc.Hex;
33
+ /** Returns whether the master pointer is relative to the current output. */
34
+ isMint(): boolean;
35
+ /** Serializes the order payload to bytes. */
36
+ toBytes(): ccc.Bytes;
37
+ /** Serializes the order payload to full-width hexadecimal. */
38
+ toHex(): ccc.Hex;
39
+ /** Throws if the UDT value, master pointer, or info is invalid. */
40
+ validate(): void;
41
+ }
42
+ /** CCC-backed order-data constructor and codec. */
43
+ export declare const OrderData: {
44
+ byteLength?: number;
45
+ new (udtValue: ccc.FixedPoint, master: Master, info: Info): OrderData;
46
+ decode: (encoded: ccc.BytesLike) => OrderData;
47
+ encode: (data: OrderDataLike) => ccc.Bytes;
48
+ from: (data: OrderDataLike) => OrderData;
49
+ fromBytes: (encoded: ccc.BytesLike) => OrderData;
50
+ };
51
+ //# sourceMappingURL=order_data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order_data.d.ts","sourceRoot":"","sources":["../../src/order/order_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAO,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAIrB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC;IAC7B,uDAAuD;IACvD,MAAM,EAAE,UAAU,CAAC;IACnB,wCAAwC;IACxC,IAAI,EAAE,QAAQ,CAAC;CAChB;AAUD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC;IACzB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,IAAI,EAAE,IAAI,CAAC;IACX,4CAA4C;IAC5C,KAAK,IAAI,SAAS,CAAC;IACnB,gEAAgE;IAChE,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAClC,oFAAoF;IACpF,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC/C,4DAA4D;IAC5D,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;IAChB,4EAA4E;IAC5E,MAAM,IAAI,OAAO,CAAC;IAClB,6CAA6C;IAC7C,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC;IACrB,8DAA8D;IAC9D,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;IACjB,mEAAmE;IACnE,QAAQ,IAAI,IAAI,CAAC;CAClB;AA8DD,mDAAmD;AAEnD,eAAO,MAAM,SAAS,EAAE;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACtE,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC;IAC9C,MAAM,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,GAAG,CAAC,KAAK,CAAC;IAC3C,IAAI,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,SAAS,CAAC;IACzC,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC;CACxB,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { ccc, mol } from "@ckb-ccc/core";
2
+ import { CheckedUint128LE } from "../utils/codec.js";
3
+ import { Info } from "./info.js";
4
+ import { MasterCodec, masterFrom, masterValidate, } from "./master.js";
5
+ const maxUint128 = (1n << 128n) - 1n;
6
+ const OrderDataCodec = mol.struct({
7
+ udtValue: CheckedUint128LE,
8
+ master: MasterCodec,
9
+ info: Info,
10
+ });
11
+ const OrderBase = ccc.Entity.Base();
12
+ // An interface, this class expression and a typed const rather than one plain class: a
13
+ // class extending `ccc.Entity.Base<...>()` emits an unexported `*_base` declaration, which
14
+ // API Extractor's ae-forgotten-export rejects (tried 2026-10-30).
15
+ // eslint-disable-next-line @typescript-eslint/no-shadow -- Preserve the runtime constructor name.
16
+ const OrderDataImplementation = class OrderData extends OrderBase {
17
+ static {
18
+ ccc.codec(OrderDataCodec)(this);
19
+ }
20
+ /** UDT amount held by the order cell. */
21
+ udtValue;
22
+ /** Master-cell pointer. */
23
+ master;
24
+ /** Price and minimum-match metadata. */
25
+ info;
26
+ /** Creates normalized order data. */
27
+ constructor(udtValue, master, info) {
28
+ super();
29
+ this.udtValue = udtValue;
30
+ this.master = master;
31
+ this.info = info;
32
+ }
33
+ /** Normalizes an `OrderDataLike` wire object or existing entity into `OrderData`. */
34
+ static from(data) {
35
+ if (data instanceof OrderData) {
36
+ return data;
37
+ }
38
+ const { udtValue, master, info } = data;
39
+ return new OrderData(ccc.numFrom(udtValue), masterFrom(master), Info.from(info));
40
+ }
41
+ /** Throws when the order payload is not internally valid. */
42
+ validate() {
43
+ if (this.udtValue < 0n) {
44
+ throw new Error("udtValue invalid, negative");
45
+ }
46
+ if (this.udtValue > maxUint128) {
47
+ throw new Error("udtValue exceeds Uint128");
48
+ }
49
+ masterValidate(this.master);
50
+ this.info.validate();
51
+ }
52
+ /** Returns true when the master pointer is relative to the current output. */
53
+ isMint() {
54
+ return this.master.type === "relative";
55
+ }
56
+ /** Resolves the master out point relative to the current order out point. */
57
+ getMaster(current) {
58
+ const { type, value } = this.master;
59
+ return type === "relative"
60
+ ? new ccc.OutPoint(current.txHash, current.index + value.distance)
61
+ : value;
62
+ }
63
+ };
64
+ /** CCC-backed order-data constructor and codec. */
65
+ // eslint-disable-next-line @typescript-eslint/no-redeclare -- The public type and runtime constructor intentionally share a name.
66
+ export const OrderData = OrderDataImplementation;
67
+ //# sourceMappingURL=order_data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order_data.js","sourceRoot":"","sources":["../../src/order/order_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,GAGf,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AAcrC,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,gBAAgB;IAC1B,MAAM,EAAE,WAAW;IACnB,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAA4B,CAAC;AA8B9D,uFAAuF;AACvF,2FAA2F;AAC3F,kEAAkE;AAClE,kGAAkG;AAClG,MAAM,uBAAuB,GAAG,MAAM,SAAU,SAAQ,SAAS;IAC/D;QACE,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,yCAAyC;IACzB,QAAQ,CAAiB;IACzC,2BAA2B;IACX,MAAM,CAAS;IAC/B,wCAAwC;IACxB,IAAI,CAAO;IAE3B,qCAAqC;IACrC,YAAY,QAAwB,EAAE,MAAc,EAAE,IAAU;QAC9D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,qFAAqF;IAC9E,MAAM,CAAU,IAAI,CAAC,IAAmB;QAC7C,IAAI,IAAI,YAAY,SAAS,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACxC,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,6DAA6D;IACtD,QAAQ;QACb,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QACD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACvB,CAAC;IAED,8EAA8E;IACvE,MAAM;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;IACzC,CAAC;IAED,6EAA6E;IACtE,SAAS,CAAC,OAAqB;QACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACpC,OAAO,IAAI,KAAK,UAAU;YACxB,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAClE,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC;CACF,CAAC;AAEF,mDAAmD;AACnD,kIAAkI;AAClI,MAAM,CAAC,MAAM,SAAS,GAOlB,uBAAuB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { ccc } from "@ckb-ccc/core";
2
+ import { type ExchangeRatio } from "../utils/utils.js";
3
+ /**
4
+ * Serialized exchange ratio used by order info.
5
+ *
6
+ * @remarks
7
+ * A ratio is either empty (`0, 0`) or populated with both scales greater than
8
+ * zero. Mixed empty/populated values are invalid.
9
+ */
10
+ export interface Ratio extends ExchangeRatio {
11
+ /** Creates a copy of this ratio. */
12
+ clone(): Ratio;
13
+ /** Compares effective CKB-to-UDT prices, returning their numeric ordering. */
14
+ compare(other: Ratio): number;
15
+ /** Returns whether another value has the same scales. */
16
+ eq(other: ExchangeRatio): boolean;
17
+ /** Returns the CKB hash of the serialized ratio. */
18
+ hash(): ccc.Hex;
19
+ /** Returns whether both scales are zero. */
20
+ isEmpty(): boolean;
21
+ /** Returns whether both scales are positive. */
22
+ isPopulated(): boolean;
23
+ /** Serializes the ratio to bytes. */
24
+ toBytes(): ccc.Bytes;
25
+ /** Serializes the ratio to full-width hexadecimal. */
26
+ toHex(): ccc.Hex;
27
+ /** Throws unless both scales fit Uint64 and are both zero or both positive. */
28
+ validate(): void;
29
+ }
30
+ /** CCC-backed ratio constructor and codec. */
31
+ export declare const Ratio: {
32
+ byteLength?: number;
33
+ new (ckbScale: ccc.Num, udtScale: ccc.Num): Ratio;
34
+ decode: (encoded: ccc.BytesLike) => Ratio;
35
+ empty: () => Ratio;
36
+ encode: (ratio: ExchangeRatio) => ccc.Bytes;
37
+ from: (ratio: ExchangeRatio) => Ratio;
38
+ fromBytes: (encoded: ccc.BytesLike) => Ratio;
39
+ };
40
+ //# sourceMappingURL=ratio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratio.d.ts","sourceRoot":"","sources":["../../src/order/ratio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAO,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWtE;;;;;;GAMG;AACH,MAAM,WAAW,KAAM,SAAQ,aAAa;IAC1C,oCAAoC;IACpC,KAAK,IAAI,KAAK,CAAC;IACf,8EAA8E;IAC9E,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9B,yDAAyD;IACzD,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAClC,oDAAoD;IACpD,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;IAChB,4CAA4C;IAC5C,OAAO,IAAI,OAAO,CAAC;IACnB,gDAAgD;IAChD,WAAW,IAAI,OAAO,CAAC;IACvB,qCAAqC;IACrC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC;IACrB,sDAAsD;IACtD,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;IACjB,+EAA+E;IAC/E,QAAQ,IAAI,IAAI,CAAC;CAClB;AA6ED,8CAA8C;AAE9C,eAAO,MAAM,KAAK,EAAE;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;IAClD,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC;IAC1C,KAAK,EAAE,MAAM,KAAK,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,CAAC,KAAK,CAAC;IAC5C,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,KAAK,CAAC;IACtC,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC;CACxB,CAAC"}