@kaspacom/kcc20-tx-builder 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 (234) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +104 -0
  3. package/artifacts/KCC20.placeholder.json +77479 -0
  4. package/artifacts/KCC20FeeTicket.placeholder.json +16846 -0
  5. package/artifacts/KCC20Orderbook.placeholder.json +78001 -0
  6. package/artifacts/KCC20Vesting.placeholder.json +4298 -0
  7. package/artifacts/KCC20Wrapper.placeholder.json +12246 -0
  8. package/dist/abi.d.ts +44 -0
  9. package/dist/abi.d.ts.map +1 -0
  10. package/dist/abi.js +336 -0
  11. package/dist/abi.js.map +1 -0
  12. package/dist/action-source-resolver.d.ts +80 -0
  13. package/dist/action-source-resolver.d.ts.map +1 -0
  14. package/dist/action-source-resolver.js +412 -0
  15. package/dist/action-source-resolver.js.map +1 -0
  16. package/dist/artifacts.d.ts +14 -0
  17. package/dist/artifacts.d.ts.map +1 -0
  18. package/dist/artifacts.js +44 -0
  19. package/dist/artifacts.js.map +1 -0
  20. package/dist/builder.d.ts +12 -0
  21. package/dist/builder.d.ts.map +1 -0
  22. package/dist/builder.js +18 -0
  23. package/dist/builder.js.map +1 -0
  24. package/dist/cjs/abi.d.ts +43 -0
  25. package/dist/cjs/abi.js +361 -0
  26. package/dist/cjs/abi.js.map +1 -0
  27. package/dist/cjs/action-source-resolver.d.ts +79 -0
  28. package/dist/cjs/action-source-resolver.js +435 -0
  29. package/dist/cjs/action-source-resolver.js.map +1 -0
  30. package/dist/cjs/artifacts.d.ts +13 -0
  31. package/dist/cjs/artifacts.js +51 -0
  32. package/dist/cjs/artifacts.js.map +1 -0
  33. package/dist/cjs/builder.d.ts +11 -0
  34. package/dist/cjs/builder.js +22 -0
  35. package/dist/cjs/builder.js.map +1 -0
  36. package/dist/cjs/deploy-operation.d.ts +103 -0
  37. package/dist/cjs/deploy-operation.js +335 -0
  38. package/dist/cjs/deploy-operation.js.map +1 -0
  39. package/dist/cjs/encoding.d.ts +5 -0
  40. package/dist/cjs/encoding.js +51 -0
  41. package/dist/cjs/encoding.js.map +1 -0
  42. package/dist/cjs/engine.d.ts +40 -0
  43. package/dist/cjs/engine.js +8972 -0
  44. package/dist/cjs/engine.js.map +1 -0
  45. package/dist/cjs/errors.d.ts +7 -0
  46. package/dist/cjs/errors.js +23 -0
  47. package/dist/cjs/errors.js.map +1 -0
  48. package/dist/cjs/fee-ticket-operation.d.ts +204 -0
  49. package/dist/cjs/fee-ticket-operation.js +327 -0
  50. package/dist/cjs/fee-ticket-operation.js.map +1 -0
  51. package/dist/cjs/index.d.ts +27 -0
  52. package/dist/cjs/index.js +45 -0
  53. package/dist/cjs/index.js.map +1 -0
  54. package/dist/cjs/ladder-limit-orders.d.ts +41 -0
  55. package/dist/cjs/ladder-limit-orders.js +129 -0
  56. package/dist/cjs/ladder-limit-orders.js.map +1 -0
  57. package/dist/cjs/mint-availability-operation.d.ts +56 -0
  58. package/dist/cjs/mint-availability-operation.js +95 -0
  59. package/dist/cjs/mint-availability-operation.js.map +1 -0
  60. package/dist/cjs/models.d.ts +90 -0
  61. package/dist/cjs/models.js +6 -0
  62. package/dist/cjs/models.js.map +1 -0
  63. package/dist/cjs/operations.d.ts +6 -0
  64. package/dist/cjs/operations.js +41 -0
  65. package/dist/cjs/operations.js.map +1 -0
  66. package/dist/cjs/package.json +1 -0
  67. package/dist/cjs/paid-mint-amount.d.ts +69 -0
  68. package/dist/cjs/paid-mint-amount.js +281 -0
  69. package/dist/cjs/paid-mint-amount.js.map +1 -0
  70. package/dist/cjs/protocol.d.ts +21 -0
  71. package/dist/cjs/protocol.js +25 -0
  72. package/dist/cjs/protocol.js.map +1 -0
  73. package/dist/cjs/runtime.d.ts +27 -0
  74. package/dist/cjs/runtime.js +3 -0
  75. package/dist/cjs/runtime.js.map +1 -0
  76. package/dist/cjs/sale-common.d.ts +287 -0
  77. package/dist/cjs/sale-common.js +928 -0
  78. package/dist/cjs/sale-common.js.map +1 -0
  79. package/dist/cjs/source-provider.d.ts +11 -0
  80. package/dist/cjs/source-provider.js +3 -0
  81. package/dist/cjs/source-provider.js.map +1 -0
  82. package/dist/cjs/source-validation.d.ts +9 -0
  83. package/dist/cjs/source-validation.js +33 -0
  84. package/dist/cjs/source-validation.js.map +1 -0
  85. package/dist/cjs/token-amount.d.ts +31 -0
  86. package/dist/cjs/token-amount.js +252 -0
  87. package/dist/cjs/token-amount.js.map +1 -0
  88. package/dist/cjs/token-operation.d.ts +135 -0
  89. package/dist/cjs/token-operation.js +236 -0
  90. package/dist/cjs/token-operation.js.map +1 -0
  91. package/dist/cjs/trade-fee.d.ts +60 -0
  92. package/dist/cjs/trade-fee.js +185 -0
  93. package/dist/cjs/trade-fee.js.map +1 -0
  94. package/dist/cjs/trading-operation.d.ts +212 -0
  95. package/dist/cjs/trading-operation.js +587 -0
  96. package/dist/cjs/trading-operation.js.map +1 -0
  97. package/dist/cjs/verify-operation.d.ts +79 -0
  98. package/dist/cjs/verify-operation.js +246 -0
  99. package/dist/cjs/verify-operation.js.map +1 -0
  100. package/dist/cjs/wallet-operation.d.ts +52 -0
  101. package/dist/cjs/wallet-operation.js +58 -0
  102. package/dist/cjs/wallet-operation.js.map +1 -0
  103. package/dist/cjs/wasm-provider.d.ts +15 -0
  104. package/dist/cjs/wasm-provider.js +20 -0
  105. package/dist/cjs/wasm-provider.js.map +1 -0
  106. package/dist/cjs/wrapper-operation.d.ts +196 -0
  107. package/dist/cjs/wrapper-operation.js +317 -0
  108. package/dist/cjs/wrapper-operation.js.map +1 -0
  109. package/dist/deploy-operation.d.ts +104 -0
  110. package/dist/deploy-operation.d.ts.map +1 -0
  111. package/dist/deploy-operation.js +327 -0
  112. package/dist/deploy-operation.js.map +1 -0
  113. package/dist/encoding.d.ts +6 -0
  114. package/dist/encoding.d.ts.map +1 -0
  115. package/dist/encoding.js +44 -0
  116. package/dist/encoding.js.map +1 -0
  117. package/dist/engine.d.ts +41 -0
  118. package/dist/engine.d.ts.map +1 -0
  119. package/dist/engine.js +8969 -0
  120. package/dist/engine.js.map +1 -0
  121. package/dist/errors.d.ts +8 -0
  122. package/dist/errors.d.ts.map +1 -0
  123. package/dist/errors.js +18 -0
  124. package/dist/errors.js.map +1 -0
  125. package/dist/fee-ticket-operation.d.ts +205 -0
  126. package/dist/fee-ticket-operation.d.ts.map +1 -0
  127. package/dist/fee-ticket-operation.js +320 -0
  128. package/dist/fee-ticket-operation.js.map +1 -0
  129. package/dist/index.d.ts +28 -0
  130. package/dist/index.d.ts.map +1 -0
  131. package/dist/index.js +28 -0
  132. package/dist/index.js.map +1 -0
  133. package/dist/ladder-limit-orders.d.ts +42 -0
  134. package/dist/ladder-limit-orders.d.ts.map +1 -0
  135. package/dist/ladder-limit-orders.js +121 -0
  136. package/dist/ladder-limit-orders.js.map +1 -0
  137. package/dist/mint-availability-operation.d.ts +57 -0
  138. package/dist/mint-availability-operation.d.ts.map +1 -0
  139. package/dist/mint-availability-operation.js +91 -0
  140. package/dist/mint-availability-operation.js.map +1 -0
  141. package/dist/models.d.ts +91 -0
  142. package/dist/models.d.ts.map +1 -0
  143. package/dist/models.js +3 -0
  144. package/dist/models.js.map +1 -0
  145. package/dist/operations.d.ts +7 -0
  146. package/dist/operations.d.ts.map +1 -0
  147. package/dist/operations.js +36 -0
  148. package/dist/operations.js.map +1 -0
  149. package/dist/paid-mint-amount.d.ts +70 -0
  150. package/dist/paid-mint-amount.d.ts.map +1 -0
  151. package/dist/paid-mint-amount.js +268 -0
  152. package/dist/paid-mint-amount.js.map +1 -0
  153. package/dist/protocol.d.ts +22 -0
  154. package/dist/protocol.d.ts.map +1 -0
  155. package/dist/protocol.js +22 -0
  156. package/dist/protocol.js.map +1 -0
  157. package/dist/runtime.d.ts +28 -0
  158. package/dist/runtime.d.ts.map +1 -0
  159. package/dist/runtime.js +2 -0
  160. package/dist/runtime.js.map +1 -0
  161. package/dist/sale-common.d.ts +288 -0
  162. package/dist/sale-common.d.ts.map +1 -0
  163. package/dist/sale-common.js +844 -0
  164. package/dist/sale-common.js.map +1 -0
  165. package/dist/source-provider.d.ts +12 -0
  166. package/dist/source-provider.d.ts.map +1 -0
  167. package/dist/source-provider.js +2 -0
  168. package/dist/source-provider.js.map +1 -0
  169. package/dist/source-validation.d.ts +10 -0
  170. package/dist/source-validation.d.ts.map +1 -0
  171. package/dist/source-validation.js +28 -0
  172. package/dist/source-validation.js.map +1 -0
  173. package/dist/token-amount.d.ts +32 -0
  174. package/dist/token-amount.d.ts.map +1 -0
  175. package/dist/token-amount.js +237 -0
  176. package/dist/token-amount.js.map +1 -0
  177. package/dist/token-operation.d.ts +136 -0
  178. package/dist/token-operation.d.ts.map +1 -0
  179. package/dist/token-operation.js +231 -0
  180. package/dist/token-operation.js.map +1 -0
  181. package/dist/trade-fee.d.ts +61 -0
  182. package/dist/trade-fee.d.ts.map +1 -0
  183. package/dist/trade-fee.js +173 -0
  184. package/dist/trade-fee.js.map +1 -0
  185. package/dist/trading-operation.d.ts +213 -0
  186. package/dist/trading-operation.d.ts.map +1 -0
  187. package/dist/trading-operation.js +580 -0
  188. package/dist/trading-operation.js.map +1 -0
  189. package/dist/verify-operation.d.ts +80 -0
  190. package/dist/verify-operation.d.ts.map +1 -0
  191. package/dist/verify-operation.js +243 -0
  192. package/dist/verify-operation.js.map +1 -0
  193. package/dist/wallet-operation.d.ts +53 -0
  194. package/dist/wallet-operation.d.ts.map +1 -0
  195. package/dist/wallet-operation.js +55 -0
  196. package/dist/wallet-operation.js.map +1 -0
  197. package/dist/wasm-provider.d.ts +16 -0
  198. package/dist/wasm-provider.d.ts.map +1 -0
  199. package/dist/wasm-provider.js +17 -0
  200. package/dist/wasm-provider.js.map +1 -0
  201. package/dist/wrapper-operation.d.ts +197 -0
  202. package/dist/wrapper-operation.d.ts.map +1 -0
  203. package/dist/wrapper-operation.js +311 -0
  204. package/dist/wrapper-operation.js.map +1 -0
  205. package/index.d.ts +1 -0
  206. package/package.json +84 -0
  207. package/src/abi.ts +493 -0
  208. package/src/action-source-resolver.ts +660 -0
  209. package/src/artifacts.ts +87 -0
  210. package/src/builder.ts +37 -0
  211. package/src/deploy-operation.ts +458 -0
  212. package/src/encoding.ts +58 -0
  213. package/src/engine.ts +13226 -0
  214. package/src/errors.ts +35 -0
  215. package/src/fee-ticket-operation.ts +518 -0
  216. package/src/index.ts +27 -0
  217. package/src/ladder-limit-orders.ts +184 -0
  218. package/src/mint-availability-operation.ts +146 -0
  219. package/src/models.ts +103 -0
  220. package/src/operations.ts +46 -0
  221. package/src/paid-mint-amount.ts +402 -0
  222. package/src/protocol.ts +28 -0
  223. package/src/runtime.ts +29 -0
  224. package/src/sale-common.ts +1238 -0
  225. package/src/source-provider.ts +12 -0
  226. package/src/source-validation.ts +47 -0
  227. package/src/token-amount.ts +302 -0
  228. package/src/token-operation.ts +384 -0
  229. package/src/trade-fee.ts +264 -0
  230. package/src/trading-operation.ts +842 -0
  231. package/src/verify-operation.ts +400 -0
  232. package/src/wallet-operation.ts +86 -0
  233. package/src/wasm-provider.ts +32 -0
  234. package/src/wrapper-operation.ts +531 -0
@@ -0,0 +1,587 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildKcc20OrderOperation = buildKcc20OrderOperation;
4
+ exports.buildKcc20FillOperation = buildKcc20FillOperation;
5
+ exports.buildKcc20SweepOperation = buildKcc20SweepOperation;
6
+ exports.buildKcc20CancelOperation = buildKcc20CancelOperation;
7
+ exports.buildKcc20WrappedConsolidationOperation = buildKcc20WrappedConsolidationOperation;
8
+ const action_source_resolver_js_1 = require("./action-source-resolver.js");
9
+ const trade_fee_js_1 = require("./trade-fee.js");
10
+ const token_amount_js_1 = require("./token-amount.js");
11
+ const sale_common_js_1 = require("./sale-common.js");
12
+ const wallet_operation_js_1 = require("./wallet-operation.js");
13
+ function buildKcc20OrderOperation(wallet, context, draft, options = {}) {
14
+ requireTradableWrapper(context.wrapper, draft.wrappedMarketId);
15
+ const canonicalId = contractCanonicalId(context);
16
+ const marketId = requireHex32(context.wrapper.marketId, "wrappedMarketId");
17
+ const amount = displayAmount(draft.tokenAmount, context.tokenDecimals);
18
+ const priceScale = priceScaleFor(context.tokenDecimals);
19
+ const feeTicketId = validatedWrapperFeeTicket(context.wrapper, draft.feeTicketId);
20
+ const root = draft.side === "buy"
21
+ ? (0, action_source_resolver_js_1.selectWrappedRootUtxo)(context.wrappedTokenUtxos, canonicalId)
22
+ : null;
23
+ const holders = draft.side === "sell"
24
+ ? (0, action_source_resolver_js_1.ownerWrappedHolderUtxos)(context.wrappedTokenUtxos, wallet.kcc20Owner, canonicalId)
25
+ : [];
26
+ const holder = draft.side === "sell"
27
+ ? (0, action_source_resolver_js_1.selectOwnerWrappedHolderUtxo)(context.wrappedTokenUtxos, wallet.kcc20Owner, amount, canonicalId, true)
28
+ : null;
29
+ const summary = draft.side === "sell" ? (0, action_source_resolver_js_1.summarizeHolderUtxos)(holders, amount) : null;
30
+ if (draft.side === "buy" && !root)
31
+ throw new Error("Wrapped market root UTXO is not available");
32
+ if (draft.side === "sell" && !holder) {
33
+ throw new Error(summary?.fragmented
34
+ ? "No single wrapped holder UTXO is large enough; consolidate the wrapped balance first"
35
+ : "Sell order requires a wrapped holder UTXO owned by this wallet");
36
+ }
37
+ const buying = draft.side === "buy";
38
+ return (0, wallet_operation_js_1.buildKcc20WalletOperationFromPlan)(wallet, {
39
+ builderKey: buying
40
+ ? "kcc20orderbook.create-bid"
41
+ : "kcc20orderbook.create-ask",
42
+ operation: buying ? "create-buy-order" : "create-sell-order",
43
+ contract: "KCC20Orderbook",
44
+ action: buying ? "createBid" : "createAsk",
45
+ description: `Build a KCC20 DEX Orderbook V1 ${draft.side} order request.`,
46
+ params: {
47
+ canonicalCovenantId: canonicalId,
48
+ wrappedMarketId: marketId,
49
+ side: draft.side,
50
+ tokenAmount: amount,
51
+ unitPriceSompi: requireUnsigned(draft.unitPriceSompi, "unitPriceSompi"),
52
+ feeTicketId,
53
+ feeTicketSupported: Boolean(feeTicketId),
54
+ feeQuote: (0, trade_fee_js_1.buildCreateOrderFeeQuote)({
55
+ side: draft.side,
56
+ tokenAmount: amount,
57
+ unitPriceSompi: draft.unitPriceSompi,
58
+ priceScale,
59
+ temporaryKasDepositSompi: buying ? "200000000" : "0",
60
+ }),
61
+ ...(context.wrapper.activeCovenantId
62
+ ? { activeWrapperCovenantId: context.wrapper.activeCovenantId }
63
+ : {}),
64
+ activeWrappedRootUtxo: root,
65
+ activeWrappedHolderUtxo: holder,
66
+ },
67
+ sourceRequirements: buying
68
+ ? [
69
+ {
70
+ type: "kaspa-funding-utxo",
71
+ ownerAddress: wallet.walletAddress,
72
+ minimumGrossSompiExpression: "tokenAmount * unitPriceSompi / priceScale + temporary holder deposit + network fee",
73
+ },
74
+ {
75
+ type: "kcc20-orderbook-root-utxo",
76
+ covenantId: marketId,
77
+ outpoint: root?.outpoint,
78
+ amount: root?.state?.["amount"],
79
+ purpose: "authorize bid output creation",
80
+ },
81
+ ]
82
+ : [
83
+ {
84
+ type: "kcc20-orderbook-holder-utxo",
85
+ covenantId: marketId,
86
+ owner: wallet.kcc20Owner,
87
+ minimumTokenAmount: amount,
88
+ ...(summary ?? {}),
89
+ outpoint: holder?.outpoint,
90
+ amount: holder?.state?.["amount"],
91
+ },
92
+ ],
93
+ warnings: [
94
+ "Crossed orders are settled by the backend matcher after normal bid/ask creation.",
95
+ "Fee discount tickets apply only to supported fill paths.",
96
+ ],
97
+ }, options);
98
+ }
99
+ function buildKcc20FillOperation(wallet, context, draft, options = {}) {
100
+ requireTradableWrapper(context.wrapper, draft.wrappedMarketId);
101
+ const canonicalId = contractCanonicalId(context);
102
+ const marketId = requireHex32(context.wrapper.marketId, "wrappedMarketId");
103
+ const amount = displayAmount(draft.tokenAmount, context.tokenDecimals);
104
+ const fillsAsk = draft.side === "buy";
105
+ const order = (0, action_source_resolver_js_1.selectWrappedOrderUtxo)(context.wrappedTokenUtxos, {
106
+ orderId: requireOrderId(draft.targetOrderId),
107
+ mode: fillsAsk ? 2 : 3,
108
+ canonicalTokenId: canonicalId,
109
+ requestedAmount: amount,
110
+ unitPriceSompi: requireUnsigned(draft.unitPriceSompi, "unitPriceSompi"),
111
+ });
112
+ if (!order)
113
+ throw new Error(`Selected ${fillsAsk ? "ask" : "bid"} order is not open or does not match fill terms`);
114
+ const holders = fillsAsk
115
+ ? []
116
+ : (0, action_source_resolver_js_1.ownerWrappedHolderUtxos)(context.wrappedTokenUtxos, wallet.kcc20Owner, canonicalId);
117
+ const holder = fillsAsk
118
+ ? null
119
+ : (0, action_source_resolver_js_1.selectOwnerWrappedHolderUtxo)(context.wrappedTokenUtxos, wallet.kcc20Owner, amount, canonicalId, true);
120
+ const summary = fillsAsk ? null : (0, action_source_resolver_js_1.summarizeHolderUtxos)(holders, amount);
121
+ if (!fillsAsk && !holder)
122
+ throw new Error("Fill bid requires a wrapped holder UTXO owned by the seller");
123
+ const requestedTicket = draft.useFeeTicket || draft.feeTicketId;
124
+ const orderTicketId = normalizeOptionalHex32(order.state?.["feeTicketId"]);
125
+ const feeTicketId = requestedTicket
126
+ ? validatedFillFeeTicket(context.wrapper, orderTicketId, draft.feeTicketId)
127
+ : null;
128
+ const ticket = feeTicketId
129
+ ? (0, action_source_resolver_js_1.selectOwnerFeeTicketUtxos)(context.feeTicketUtxos ?? [], wallet.kcc20Owner)[0]
130
+ : undefined;
131
+ if (feeTicketId && !ticket)
132
+ throw new Error("No active FeeTicket UTXO is available for this wallet");
133
+ const feeQuote = (0, trade_fee_js_1.buildStandaloneFillFeeQuote)({
134
+ side: draft.side,
135
+ tokenAmount: amount,
136
+ unitPriceSompi: draft.unitPriceSompi,
137
+ priceScale: String(order.state?.["priceScale"] ??
138
+ order.state?.["tokenDisplayScale"] ??
139
+ priceScaleFor(context.tokenDecimals)),
140
+ feeTicketApplied: Boolean(ticket),
141
+ });
142
+ const operation = fillsAsk ? "fill-ask-order" : "fill-bid-order";
143
+ return (0, wallet_operation_js_1.buildKcc20WalletOperationFromPlan)(wallet, {
144
+ builderKey: fillsAsk
145
+ ? "kcc20orderbook.fill-ask"
146
+ : "kcc20orderbook.fill-bid",
147
+ operation,
148
+ contract: "KCC20Orderbook",
149
+ action: fillsAsk ? "fillAsk" : "fillBid",
150
+ description: `Build a KCC20 DEX Orderbook V1 ${draft.side} fill request.`,
151
+ params: {
152
+ canonicalCovenantId: canonicalId,
153
+ wrappedMarketId: marketId,
154
+ side: draft.side,
155
+ targetOrderId: draft.targetOrderId.toLowerCase(),
156
+ tokenAmount: amount,
157
+ unitPriceSompi: draft.unitPriceSompi,
158
+ feeTicketId,
159
+ feeTicketSupported: Boolean(feeTicketId),
160
+ feeQuote,
161
+ ...(context.wrapper.activeCovenantId
162
+ ? { activeWrapperCovenantId: context.wrapper.activeCovenantId }
163
+ : {}),
164
+ activeTargetOrderUtxo: order,
165
+ activeWrappedHolderUtxo: holder,
166
+ activeFeeTicketUtxo: ticket ?? null,
167
+ },
168
+ sourceRequirements: [
169
+ {
170
+ type: fillsAsk
171
+ ? "kcc20-orderbook-ask-order-utxo"
172
+ : "kcc20-orderbook-bid-order-utxo",
173
+ orderId: draft.targetOrderId,
174
+ covenantId: marketId,
175
+ outpoint: order.outpoint,
176
+ amount: order.state?.["amount"],
177
+ unitPriceSompi: order.state?.["unitPriceSompi"],
178
+ },
179
+ ...(fillsAsk
180
+ ? [
181
+ {
182
+ type: "kaspa-funding-utxo",
183
+ ownerAddress: wallet.walletAddress,
184
+ minimumGrossSompiExpression: "tokenAmount * unitPriceSompi / priceScale + protocol fee + network fee",
185
+ },
186
+ ]
187
+ : [
188
+ {
189
+ type: "kcc20-orderbook-holder-utxo",
190
+ covenantId: marketId,
191
+ owner: wallet.kcc20Owner,
192
+ minimumTokenAmount: amount,
193
+ ...(summary ?? {}),
194
+ outpoint: holder?.outpoint,
195
+ amount: holder?.state?.["amount"],
196
+ },
197
+ ]),
198
+ ...(ticket
199
+ ? [
200
+ {
201
+ type: "fee-ticket-utxo",
202
+ rootId: feeTicketId,
203
+ owner: wallet.kcc20Owner,
204
+ outpoint: ticket.outpoint,
205
+ amountSompi: ticket.amountSompi,
206
+ address: ticket.address,
207
+ purpose: "burn one FeeTicket for this standalone fill discount",
208
+ },
209
+ ]
210
+ : []),
211
+ ],
212
+ warnings: [
213
+ ticket
214
+ ? "This fill burns one selected FeeTicket UTXO for the protocol-fee discount."
215
+ : "No FeeTicket was selected; this fill pays the normal KAS protocol fee.",
216
+ ],
217
+ }, options);
218
+ }
219
+ function buildKcc20SweepOperation(wallet, context, draft, options = {}) {
220
+ requireTradableWrapper(context.wrapper, draft.wrappedMarketId);
221
+ if (draft.expectedFills.length < 2)
222
+ throw new Error("Multi-order sweep requires at least two fill legs");
223
+ const canonicalId = contractCanonicalId(context);
224
+ const marketId = requireHex32(context.wrapper.marketId, "wrappedMarketId");
225
+ const tokenAmount = displayAmount(draft.tokenAmount, context.tokenDecimals);
226
+ const sweepsAsks = draft.side === "buy";
227
+ const orders = draft.expectedFills.flatMap((fill) => {
228
+ const selected = (0, action_source_resolver_js_1.selectWrappedOrderUtxo)(context.wrappedTokenUtxos, {
229
+ orderId: fill.orderId,
230
+ mode: sweepsAsks ? 2 : 3,
231
+ canonicalTokenId: canonicalId,
232
+ requestedAmount: fill.tokenAmount,
233
+ unitPriceSompi: fill.unitPriceSompi,
234
+ });
235
+ return selected ? [selected] : [];
236
+ });
237
+ if (orders.length !== draft.expectedFills.length)
238
+ throw new Error("One or more matched order UTXOs are no longer open");
239
+ const sweepAmount = draft.expectedFills.reduce((sum, fill) => sum + BigInt(fill.tokenAmount), 0n);
240
+ const holders = sweepsAsks
241
+ ? []
242
+ : (0, action_source_resolver_js_1.ownerWrappedHolderUtxos)(context.wrappedTokenUtxos, wallet.kcc20Owner, canonicalId);
243
+ const singleHolder = sweepsAsks
244
+ ? null
245
+ : (0, action_source_resolver_js_1.selectOwnerWrappedHolderUtxo)(context.wrappedTokenUtxos, wallet.kcc20Owner, sweepAmount.toString(), canonicalId);
246
+ const pairedHolders = [];
247
+ if (!sweepsAsks && !singleHolder) {
248
+ const used = new Set();
249
+ for (const fill of draft.expectedFills) {
250
+ const match = holders
251
+ .filter((candidate) => !used.has(candidate.outpoint))
252
+ .sort((a, b) => BigInt(String(a.state?.["amount"])) <
253
+ BigInt(String(b.state?.["amount"]))
254
+ ? -1
255
+ : 1)
256
+ .find((candidate) => BigInt(String(candidate.state?.["amount"])) >=
257
+ BigInt(fill.tokenAmount));
258
+ if (match) {
259
+ used.add(match.outpoint);
260
+ pairedHolders.push(match);
261
+ }
262
+ }
263
+ }
264
+ const hasSingleHolder = !sweepsAsks &&
265
+ draft.expectedFills.length <= sale_common_js_1.KCC20_ORDERBOOK_MAX_EXPANDED_SWEEP_BID_LEGS &&
266
+ Boolean(singleHolder);
267
+ if (!sweepsAsks &&
268
+ !hasSingleHolder &&
269
+ pairedHolders.length !== draft.expectedFills.length) {
270
+ throw new Error("Sweep bid orders requires one holder covering the full amount or one distinct holder per bid leg");
271
+ }
272
+ const feeTicketId = draft.feeTicketId
273
+ ? requireHex32(draft.feeTicketId, "feeTicketId")
274
+ : null;
275
+ if (feeTicketId && context.wrapper.feeTicketId?.toLowerCase() !== feeTicketId)
276
+ throw new Error("Requested FeeTicket root does not match this wrapped market");
277
+ if (feeTicketId &&
278
+ orders.some((order) => normalizeOptionalHex32(order.state?.["feeTicketId"]) !== feeTicketId)) {
279
+ throw new Error("One or more sweep orders are not bound to the requested FeeTicket root");
280
+ }
281
+ const ticket = feeTicketId
282
+ ? (0, action_source_resolver_js_1.selectOwnerFeeTicketUtxos)(context.feeTicketUtxos ?? [], wallet.kcc20Owner)[0]
283
+ : undefined;
284
+ if (feeTicketId && !ticket)
285
+ throw new Error("FeeTicket sweep requires one active ticket UTXO");
286
+ const gross = requireUnsigned(draft.grossSompi, "grossSompi");
287
+ const protocolFee = ticket
288
+ ? "0"
289
+ : requireUnsigned(draft.protocolFeeSompi, "protocolFeeSompi");
290
+ const buyerPays = ticket
291
+ ? gross
292
+ : requireUnsigned(draft.buyerPaysSompi, "buyerPaysSompi");
293
+ const sellerReceives = ticket
294
+ ? gross
295
+ : requireUnsigned(draft.sellerReceivesSompi, "sellerReceivesSompi");
296
+ if (draft.maxBuyerPaysSompi &&
297
+ BigInt(buyerPays) > BigInt(draft.maxBuyerPaysSompi))
298
+ throw new Error("The market buy cost is higher than the approved quote");
299
+ if (draft.minSellerReceivesSompi &&
300
+ BigInt(sellerReceives) < BigInt(draft.minSellerReceivesSompi))
301
+ throw new Error("The market sell proceeds are lower than the approved quote");
302
+ const summary = sweepsAsks
303
+ ? null
304
+ : (0, action_source_resolver_js_1.summarizeHolderUtxos)(holders, sweepAmount.toString());
305
+ return (0, wallet_operation_js_1.buildKcc20WalletOperationFromPlan)(wallet, {
306
+ builderKey: sweepsAsks
307
+ ? "kcc20orderbook.sweep-asks"
308
+ : "kcc20orderbook.sweep-bids",
309
+ operation: sweepsAsks ? "sweep-ask-orders" : "sweep-bid-orders",
310
+ contract: "KCC20Orderbook",
311
+ action: sweepsAsks ? "sweepAsks" : "sweepBids",
312
+ description: `Build a KCC20 DEX Orderbook V1 ${draft.side} multi-order sweep request.`,
313
+ params: {
314
+ canonicalCovenantId: canonicalId,
315
+ wrappedMarketId: marketId,
316
+ side: draft.side,
317
+ tokenAmount,
318
+ mode: draft.mode,
319
+ limitUnitPriceSompi: draft.limitUnitPriceSompi ?? null,
320
+ fills: draft.expectedFills,
321
+ grossSompi: gross,
322
+ protocolFeeSompi: protocolFee,
323
+ quotedProtocolFeeSompi: ticket ? draft.protocolFeeSompi : null,
324
+ buyerPaysSompi: buyerPays,
325
+ sellerReceivesSompi: sellerReceives,
326
+ averageUnitPriceSompi: draft.averageUnitPriceSompi ?? null,
327
+ feeTicketId,
328
+ activeFeeTicketUtxos: ticket ? [ticket] : [],
329
+ ...(context.wrapper.activeCovenantId
330
+ ? { activeWrapperCovenantId: context.wrapper.activeCovenantId }
331
+ : {}),
332
+ activeTargetOrderUtxos: orders,
333
+ activeWrappedHolderUtxo: singleHolder,
334
+ activeWrappedHolderUtxos: hasSingleHolder ? [] : pairedHolders,
335
+ },
336
+ sourceRequirements: [
337
+ ...draft.expectedFills.map((fill, index) => ({
338
+ type: sweepsAsks
339
+ ? "kcc20-orderbook-ask-order-utxo"
340
+ : "kcc20-orderbook-bid-order-utxo",
341
+ orderId: fill.orderId,
342
+ covenantId: marketId,
343
+ tokenAmount: fill.tokenAmount,
344
+ unitPriceSompi: fill.unitPriceSompi,
345
+ outpoint: orders[index]?.outpoint,
346
+ amount: orders[index]?.state?.["amount"],
347
+ })),
348
+ ...(!sweepsAsks && singleHolder
349
+ ? [
350
+ {
351
+ type: "kcc20-orderbook-holder-utxo",
352
+ covenantId: marketId,
353
+ owner: wallet.kcc20Owner,
354
+ minimumTokenAmount: sweepAmount.toString(),
355
+ outpoint: singleHolder.outpoint,
356
+ amount: singleHolder.state?.["amount"],
357
+ },
358
+ ]
359
+ : []),
360
+ ...(!sweepsAsks && !singleHolder
361
+ ? pairedHolders.map((holder, index) => ({
362
+ type: "kcc20-orderbook-holder-utxo",
363
+ covenantId: marketId,
364
+ owner: wallet.kcc20Owner,
365
+ legIndex: index,
366
+ minimumTokenAmount: draft.expectedFills[index]?.tokenAmount,
367
+ outpoint: holder.outpoint,
368
+ amount: holder.state?.["amount"],
369
+ }))
370
+ : []),
371
+ ...(ticket
372
+ ? [
373
+ {
374
+ type: "kcc20-fee-ticket-utxo",
375
+ covenantId: feeTicketId,
376
+ purpose: "burn one ticket for the sweep transaction",
377
+ outpoint: ticket.outpoint,
378
+ amountSompi: ticket.amountSompi,
379
+ },
380
+ ]
381
+ : []),
382
+ ...(!sweepsAsks
383
+ ? [
384
+ {
385
+ type: "kcc20-orderbook-holder-utxo-summary",
386
+ covenantId: marketId,
387
+ owner: wallet.kcc20Owner,
388
+ minimumTokenAmount: sweepAmount.toString(),
389
+ ...(summary ?? {}),
390
+ },
391
+ ]
392
+ : []),
393
+ {
394
+ type: "kaspa-funding-utxo",
395
+ ownerAddress: wallet.walletAddress,
396
+ purpose: "fund sweep settlement outputs and network fee",
397
+ },
398
+ ],
399
+ warnings: [
400
+ "This sweep spends multiple matched orders atomically in one transaction.",
401
+ ticket
402
+ ? "This sweep burns one FeeTicket UTXO."
403
+ : "This sweep pays the normal KAS protocol fee.",
404
+ ],
405
+ }, options);
406
+ }
407
+ function buildKcc20CancelOperation(wallet, context, draft, options = {}) {
408
+ const canonicalId = contractCanonicalId(context);
409
+ const marketId = requireHex32(context.wrapper.marketId, "wrappedMarketId");
410
+ const orderId = requireOrderId(draft.targetOrderId);
411
+ const cancelsAsk = draft.side === "ask";
412
+ const order = (0, action_source_resolver_js_1.selectWrappedOrderUtxo)(context.wrappedTokenUtxos, {
413
+ orderId,
414
+ mode: cancelsAsk ? 2 : 3,
415
+ canonicalTokenId: canonicalId,
416
+ owner: wallet.kcc20Owner,
417
+ });
418
+ if (!order)
419
+ throw new Error(`Selected ${draft.side} order is not open or not owned by this wallet`);
420
+ return (0, wallet_operation_js_1.buildKcc20WalletOperationFromPlan)(wallet, {
421
+ builderKey: cancelsAsk
422
+ ? "kcc20orderbook.cancel-ask"
423
+ : "kcc20orderbook.cancel-bid",
424
+ operation: cancelsAsk ? "cancel-ask-order" : "cancel-bid-order",
425
+ contract: "KCC20Orderbook",
426
+ action: cancelsAsk ? "cancelAsk" : "cancelBid",
427
+ description: `Build a KCC20 DEX Orderbook V1 ${draft.side} cancel request.`,
428
+ params: {
429
+ canonicalCovenantId: canonicalId,
430
+ wrappedMarketId: marketId,
431
+ side: draft.side,
432
+ targetOrderId: orderId,
433
+ ...(context.wrapper.activeCovenantId
434
+ ? { activeWrapperCovenantId: context.wrapper.activeCovenantId }
435
+ : {}),
436
+ activeTargetOrderUtxo: order,
437
+ },
438
+ sourceRequirements: [
439
+ {
440
+ type: cancelsAsk
441
+ ? "kcc20-orderbook-ask-order-utxo"
442
+ : "kcc20-orderbook-bid-order-utxo",
443
+ orderId,
444
+ covenantId: marketId,
445
+ owner: wallet.kcc20Owner,
446
+ outpoint: order.outpoint,
447
+ amount: order.state?.["amount"],
448
+ unitPriceSompi: order.state?.["unitPriceSompi"],
449
+ purpose: "consume the open order UTXO and return remaining assets to owner",
450
+ },
451
+ {
452
+ type: "kaspa-funding-utxo",
453
+ ownerAddress: wallet.walletAddress,
454
+ purpose: "fund output dust and network fee",
455
+ },
456
+ ],
457
+ warnings: [
458
+ "Cancel spends the selected open order UTXO and returns remaining assets to the order owner.",
459
+ "Indexer order status remains source of truth after broadcast.",
460
+ ],
461
+ }, options);
462
+ }
463
+ function buildKcc20WrappedConsolidationOperation(wallet, context, sourceOutpoints, options = {}) {
464
+ const canonicalId = contractCanonicalId(context);
465
+ const marketId = requireHex32(context.wrapper.marketId, "wrappedMarketId");
466
+ const compatible = (0, action_source_resolver_js_1.ownerWrappedHolderUtxos)(context.wrappedTokenUtxos, wallet.kcc20Owner, canonicalId);
467
+ const selected = (0, action_source_resolver_js_1.selectConsolidationBatch)(compatible, sourceOutpoints, 8);
468
+ if (selected.length < 2)
469
+ throw new Error("at least two compatible wrapped holder UTXOs are required for consolidation");
470
+ const total = selected
471
+ .reduce((sum, utxo) => sum + BigInt(String(utxo.state?.["amount"] ?? "0")), 0n)
472
+ .toString();
473
+ const summary = (0, action_source_resolver_js_1.summarizeHolderUtxos)(compatible, "0");
474
+ return (0, wallet_operation_js_1.buildKcc20WalletOperationFromPlan)(wallet, {
475
+ builderKey: "kcc20orderbook.consolidate-holders",
476
+ operation: "consolidate-orderbook-holders",
477
+ contract: "KCC20Orderbook",
478
+ action: "consolidate",
479
+ description: "Build a KCC20 DEX Orderbook V1 holder consolidation transaction request.",
480
+ params: {
481
+ canonicalCovenantId: canonicalId,
482
+ appCanonicalCovenantId: context.canonicalCovenantId.toLowerCase(),
483
+ wrappedMarketId: marketId,
484
+ activeWrapperCovenantId: context.wrapper.activeCovenantId,
485
+ tokenAmount: total,
486
+ activeWrappedHolderUtxos: selected,
487
+ },
488
+ sourceRequirements: [
489
+ {
490
+ type: "kcc20-orderbook-holder-utxo-batch",
491
+ covenantId: canonicalId,
492
+ wrappedMarketId: marketId,
493
+ activeWrapperCovenantId: context.wrapper.activeCovenantId,
494
+ owner: wallet.kcc20Owner,
495
+ selectedOutpoints: selected.map((utxo) => utxo.outpoint),
496
+ selectedAmounts: selected.map((utxo) => utxo.state?.["amount"]),
497
+ aggregateAmount: summary.aggregateAmount,
498
+ utxoCount: summary.utxoCount,
499
+ purpose: "merge wallet-owned KCC20 DEX Orderbook V1 holder outputs into one holder output",
500
+ },
501
+ {
502
+ type: "kaspa-funding-utxo",
503
+ ownerAddress: wallet.walletAddress,
504
+ purpose: "fund network fee for wrapped holder consolidation",
505
+ },
506
+ ],
507
+ warnings: [
508
+ "Consolidation merges between two and eight wallet-owned holder UTXOs into one larger holder UTXO.",
509
+ "Repeat consolidation when more compatible holder UTXOs remain.",
510
+ ],
511
+ }, options);
512
+ }
513
+ function contractCanonicalId(context) {
514
+ return requireHex32(context.wrapper.contractCanonicalTokenId ??
515
+ context.wrapper.canonicalTokenId ??
516
+ context.canonicalCovenantId, "canonicalCovenantId");
517
+ }
518
+ function requireTradableWrapper(wrapper, requestedMarketId) {
519
+ if (wrapper.enabled === false)
520
+ throw new Error("Wrapped trading is disabled for this market");
521
+ if (wrapper.marketId.toLowerCase() !== requestedMarketId.toLowerCase())
522
+ throw new Error("Requested wrapped market does not match the selected wrapper");
523
+ }
524
+ function validatedWrapperFeeTicket(wrapper, requested) {
525
+ const configured = normalizeOptionalHex32(wrapper.feeTicketId);
526
+ const normalized = normalizeOptionalHex32(requested);
527
+ if (requested && !normalized)
528
+ throw new Error("FeeTicket root id is invalid");
529
+ if (normalized && !configured)
530
+ throw new Error("FeeTicket is not enabled for this wrapped market");
531
+ if (normalized && configured !== normalized)
532
+ throw new Error("Requested FeeTicket root does not match this wrapped market");
533
+ if (wrapper.feeTicketSupported && !configured)
534
+ throw new Error("Wrapped market FeeTicket root is invalid");
535
+ return configured;
536
+ }
537
+ function validatedFillFeeTicket(wrapper, orderTicketId, requested) {
538
+ if (!orderTicketId)
539
+ throw new Error("Selected order is not bound to a FeeTicket root");
540
+ const explicit = requested
541
+ ? requireHex32(requested, "feeTicketId")
542
+ : orderTicketId;
543
+ if (explicit !== orderTicketId)
544
+ throw new Error("Selected order is not bound to the requested FeeTicket root");
545
+ const active = normalizeOptionalHex32(wrapper.feeTicketId);
546
+ if (!active || active !== explicit)
547
+ throw new Error("Selected order FeeTicket root is not the active platform root");
548
+ return explicit;
549
+ }
550
+ function displayAmount(value, decimals) {
551
+ return (0, token_amount_js_1.parseKcc20DisplayAmountToBaseUnits)(value, (0, token_amount_js_1.normalizeKcc20Decimals)(decimals), "tokenAmount");
552
+ }
553
+ function priceScaleFor(decimals) {
554
+ return (0, token_amount_js_1.kcc20DisplayScaleForDecimals)((0, token_amount_js_1.normalizeKcc20Decimals)(decimals)).toString();
555
+ }
556
+ function requireHex32(value, field) {
557
+ const normalized = String(value ?? "")
558
+ .trim()
559
+ .toLowerCase()
560
+ .replace(/^0x/, "");
561
+ if (!/^[a-f0-9]{64}$/.test(normalized))
562
+ throw new Error(`${field} must be 64 hex characters`);
563
+ return normalized;
564
+ }
565
+ function normalizeOptionalHex32(value) {
566
+ if (value === undefined || value === null || value === "")
567
+ return null;
568
+ const normalized = String(value).trim().toLowerCase().replace(/^0x/, "");
569
+ return /^[a-f0-9]{64}$/.test(normalized) && !/^0{64}$/.test(normalized)
570
+ ? normalized
571
+ : null;
572
+ }
573
+ function requireUnsigned(value, field) {
574
+ const raw = String(value ?? "").trim();
575
+ if (!/^\d+$/.test(raw))
576
+ throw new Error(`${field} must be an unsigned integer string`);
577
+ return raw;
578
+ }
579
+ function requireOrderId(value) {
580
+ const normalized = String(value ?? "")
581
+ .trim()
582
+ .toLowerCase();
583
+ if (!/^[a-f0-9]{64}:\d+$/.test(normalized))
584
+ throw new Error("targetOrderId must be txid:vout");
585
+ return normalized;
586
+ }
587
+ //# sourceMappingURL=trading-operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trading-operation.js","sourceRoot":"","sources":["../../src/trading-operation.ts"],"names":[],"mappings":"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"}