@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,412 @@
1
+ export const KCC20_MIN_CONSOLIDATION_INPUTS = 2;
2
+ export const KCC20_MAX_CONSOLIDATION_INPUTS = 8;
3
+ export function kcc20IndexedUtxoOutpoint(utxo) {
4
+ return (utxo.outpoint ?? `${utxo.txidHex}:${utxo.vout}`).toLowerCase();
5
+ }
6
+ export function normalizeKcc20IndexedUtxos(values) {
7
+ const byOutpoint = new Map();
8
+ for (const value of values) {
9
+ if (!value || typeof value !== "object" || Array.isArray(value))
10
+ continue;
11
+ const row = value;
12
+ const txidHex = hex32(row["txidHex"]);
13
+ const vout = Number(row["vout"]);
14
+ const address = typeof row["address"] === "string" ? row["address"] : "";
15
+ const amountSompi = unsigned(row["amountSompi"]);
16
+ if (!txidHex ||
17
+ !Number.isInteger(vout) ||
18
+ vout < 0 ||
19
+ !address ||
20
+ amountSompi === null) {
21
+ continue;
22
+ }
23
+ const rawState = record(row["state"]);
24
+ const state = rawState ? normalizeState(rawState) : null;
25
+ const covenantId = hex32(row["covenantId"]);
26
+ const normalized = {
27
+ txidHex,
28
+ vout,
29
+ outpoint: `${txidHex}:${vout}`,
30
+ address,
31
+ amountSompi,
32
+ ...(typeof row["action"] === "string" ? { action: row["action"] } : {}),
33
+ state,
34
+ ...(covenantId ? { covenantId } : {}),
35
+ };
36
+ const key = kcc20IndexedUtxoOutpoint(normalized);
37
+ const existing = byOutpoint.get(key);
38
+ if (!existing || (!existing.state && normalized.state))
39
+ byOutpoint.set(key, normalized);
40
+ }
41
+ return [...byOutpoint.values()].sort((a, b) => kcc20IndexedUtxoOutpoint(a).localeCompare(kcc20IndexedUtxoOutpoint(b)));
42
+ }
43
+ export function selectActiveMinterUtxo(utxos, requestedAmount) {
44
+ const requested = requiredAmount(requestedAmount);
45
+ return (utxos.find((utxo) => {
46
+ const state = utxo.state;
47
+ const remaining = amount(state?.["remainingSupply"]);
48
+ return (state?.["isMintAuthority"] === true &&
49
+ remaining !== null &&
50
+ remaining >= requested);
51
+ }) ?? null);
52
+ }
53
+ export function ownerNativeHolderUtxos(utxos, owner) {
54
+ const normalizedOwner = owner.toLowerCase();
55
+ return utxos.filter((utxo) => {
56
+ const state = utxo.state;
57
+ const value = amount(state?.["amount"]);
58
+ return (value !== null &&
59
+ value > 0n &&
60
+ state?.["isMintAuthority"] !== true &&
61
+ numberValue(state?.["ownerScheme"] ?? state?.["identifierType"]) === 0 &&
62
+ stringValue(state?.["ownerIdentifier"] ?? state?.["owner"])?.toLowerCase() === normalizedOwner);
63
+ });
64
+ }
65
+ export function selectOwnerNativeHolderUtxo(utxos, owner, requestedAmount, outpoint) {
66
+ const requested = requiredAmount(requestedAmount);
67
+ const requestedOutpoint = outpoint?.toLowerCase();
68
+ return (ownerNativeHolderUtxos(utxos, owner)
69
+ .filter((utxo) => !requestedOutpoint ||
70
+ kcc20IndexedUtxoOutpoint(utxo) === requestedOutpoint)
71
+ .filter((utxo) => amount(utxo.state?.["amount"]) >= requested)
72
+ .sort(compareStateAmount)[0] ?? null);
73
+ }
74
+ export function ownerWrappedHolderUtxos(utxos, owner, canonicalTokenId) {
75
+ const normalizedOwner = owner.toLowerCase();
76
+ const canonical = canonicalTokenId.toLowerCase();
77
+ return utxos.filter((utxo) => {
78
+ const state = utxo.state;
79
+ const value = amount(state?.["amount"]);
80
+ return (value !== null &&
81
+ value > 0n &&
82
+ numberValue(state?.["mode"] ?? state?.["stateMode"]) === 0 &&
83
+ numberValue(state?.["identifierType"] ?? state?.["ownerScheme"]) === 0 &&
84
+ stringValue(state?.["ownerIdentifier"] ?? state?.["owner"])?.toLowerCase() === normalizedOwner &&
85
+ stringValue(state?.["canonicalTokenId"] ?? state?.["tokenId"])?.toLowerCase() === canonical);
86
+ });
87
+ }
88
+ export function selectOwnerWrappedHolderUtxo(utxos, owner, requestedAmount, canonicalTokenId, largest = false) {
89
+ const requested = requiredAmount(requestedAmount);
90
+ const candidates = ownerWrappedHolderUtxos(utxos, owner, canonicalTokenId)
91
+ .filter((utxo) => amount(utxo.state?.["amount"]) >= requested)
92
+ .sort(compareStateAmount);
93
+ return (largest ? candidates.at(-1) : candidates[0]) ?? null;
94
+ }
95
+ export function selectOwnerWrappedHolderUtxosForSweep(utxos, owner, requestedAmounts, canonicalTokenId) {
96
+ const candidates = ownerWrappedHolderUtxos(utxos, owner, canonicalTokenId).sort(compareStateAmount);
97
+ const selected = [];
98
+ const used = new Set();
99
+ for (const requestedText of requestedAmounts) {
100
+ const requested = amount(requestedText);
101
+ if (requested === null)
102
+ return selected;
103
+ const match = candidates.find((utxo) => !used.has(kcc20IndexedUtxoOutpoint(utxo)) &&
104
+ amount(utxo.state?.["amount"]) >= requested);
105
+ if (!match)
106
+ return selected;
107
+ used.add(kcc20IndexedUtxoOutpoint(match));
108
+ selected.push(match);
109
+ }
110
+ return selected;
111
+ }
112
+ export function selectWrappedRootUtxo(utxos, canonicalTokenId) {
113
+ const canonical = canonicalTokenId.toLowerCase();
114
+ return (utxos.find((utxo) => numberValue(utxo.state?.["mode"] ?? utxo.state?.["stateMode"]) === 1 &&
115
+ stringValue(utxo.state?.["canonicalTokenId"] ?? utxo.state?.["tokenId"])?.toLowerCase() === canonical) ?? null);
116
+ }
117
+ export function selectWrappedOrderUtxo(utxos, input) {
118
+ const canonical = input.canonicalTokenId.toLowerCase();
119
+ const requested = input.requestedAmount
120
+ ? requiredAmount(input.requestedAmount)
121
+ : null;
122
+ const owner = input.owner?.toLowerCase();
123
+ return (utxos.find((utxo) => {
124
+ const state = utxo.state;
125
+ const value = amount(state?.["amount"]);
126
+ return (kcc20IndexedUtxoOutpoint(utxo) === input.orderId.toLowerCase() &&
127
+ numberValue(state?.["mode"] ?? state?.["stateMode"]) === input.mode &&
128
+ stringValue(state?.["canonicalTokenId"] ?? state?.["tokenId"])?.toLowerCase() === canonical &&
129
+ (!input.unitPriceSompi ||
130
+ stringValue(state?.["unitPriceSompi"]) === input.unitPriceSompi) &&
131
+ (requested === null || (value !== null && value >= requested)) &&
132
+ (!owner ||
133
+ stringValue(state?.["ownerIdentifier"] ?? state?.["owner"])?.toLowerCase() === owner));
134
+ }) ?? null);
135
+ }
136
+ export function wrapperReserveUtxos(utxos, wrapperIds) {
137
+ const ids = new Set(wrapperIds
138
+ .map((id) => id?.toLowerCase())
139
+ .filter((id) => /^[a-f0-9]{64}$/.test(id)));
140
+ return utxos
141
+ .filter((utxo) => {
142
+ const state = utxo.state;
143
+ const value = amount(state?.["amount"]);
144
+ return (value !== null &&
145
+ value > 0n &&
146
+ state?.["isMintAuthority"] !== true &&
147
+ numberValue(state?.["ownerScheme"] ?? state?.["identifierType"]) ===
148
+ 4 &&
149
+ ids.has(stringValue(state?.["ownerIdentifier"] ?? state?.["owner"])?.toLowerCase() ?? ""));
150
+ })
151
+ .sort(compareStateAmount);
152
+ }
153
+ export function selectWrapperReserveUtxo(utxos, wrapperIds, requestedAmount) {
154
+ const requested = requiredAmount(requestedAmount);
155
+ return (wrapperReserveUtxos(utxos, wrapperIds).find((utxo) => amount(utxo.state?.["amount"]) >= requested) ?? null);
156
+ }
157
+ export function resolveActiveWrapperUtxo(wrapper, utxos) {
158
+ const address = wrapper.wrapperAddress?.toLowerCase();
159
+ const candidates = utxos.filter((utxo) => !address || utxo.address.toLowerCase() === address);
160
+ const activeId = wrapper.activeCovenantId?.toLowerCase();
161
+ const byNativeId = activeId
162
+ ? candidates.filter((utxo) => utxo.covenantId?.toLowerCase() === activeId)
163
+ : [];
164
+ const selectable = byNativeId.length ? byNativeId : candidates;
165
+ if (!selectable.length)
166
+ throw new Error("wrapped market has no active wrapper UTXO");
167
+ if (selectable.length > 1) {
168
+ throw new Error("wrapped market has multiple active wrapper UTXOs; refresh the indexer snapshot");
169
+ }
170
+ return {
171
+ selected: selectable[0],
172
+ candidates: selectable,
173
+ ambiguous: false,
174
+ ...(activeId || selectable[0].covenantId
175
+ ? { activeCovenantId: activeId ?? selectable[0].covenantId }
176
+ : {}),
177
+ };
178
+ }
179
+ export function kcc20WrapperBelongsToToken(wrapper, canonicalTokenId) {
180
+ const expected = canonicalTokenId.toLowerCase();
181
+ const appCanonicalIds = [
182
+ wrapper.canonicalTokenId,
183
+ wrapper.claimedCanonicalTokenId,
184
+ ]
185
+ .filter((value) => Boolean(value))
186
+ .map((value) => value.toLowerCase());
187
+ return !appCanonicalIds.length || appCanonicalIds.includes(expected);
188
+ }
189
+ export function isKcc20WrapperReadyToBuild(wrapper) {
190
+ if (!wrapper?.enabled)
191
+ return false;
192
+ if (wrapper.pendingReveal === true)
193
+ return wrapper.buildable === true && (wrapper.activeUtxos ?? 0) > 0;
194
+ return wrapper.buildable !== false && Boolean(wrapper.activeCovenantId);
195
+ }
196
+ export function kcc20WrapperNotReadyReason(wrapper) {
197
+ if (!wrapper)
198
+ return "No wrapper is ready to wrap.";
199
+ if (!wrapper.enabled)
200
+ return "Wrapped trading is disabled for this market.";
201
+ if (wrapper.buildable === false)
202
+ return wrapper.buildableReason?.trim() || "Wrapper is not buildable yet.";
203
+ return "No wrapper is ready to wrap.";
204
+ }
205
+ export function selectOwnerFeeTicketUtxos(utxos, owner, outpoints) {
206
+ const normalizedOwner = hex32(owner);
207
+ if (!normalizedOwner)
208
+ return [];
209
+ const requested = outpoints
210
+ ? new Set(outpoints.map((item) => item.toLowerCase()))
211
+ : null;
212
+ const selected = utxos
213
+ .filter((utxo) => {
214
+ const state = utxo.state;
215
+ return (numberValue(state?.["mode"] ?? state?.["stateMode"]) === 2 &&
216
+ feeTicketStateOwner(state) === normalizedOwner &&
217
+ (!requested || requested.has(kcc20IndexedUtxoOutpoint(utxo))));
218
+ })
219
+ .sort((a, b) => kcc20IndexedUtxoOutpoint(a).localeCompare(kcc20IndexedUtxoOutpoint(b)));
220
+ if (requested && selected.length !== requested.size) {
221
+ throw new Error("One or more selected FeeTicket UTXOs are not active for this wallet");
222
+ }
223
+ return selected;
224
+ }
225
+ function feeTicketStateOwner(state) {
226
+ if (!state)
227
+ return null;
228
+ for (const key of [
229
+ "ownerIdentifier",
230
+ "stateOwner",
231
+ "ticketOwner",
232
+ "owner",
233
+ "recipientOwner",
234
+ "holderOwner",
235
+ ]) {
236
+ const owner = hex32(state[key]);
237
+ if (owner)
238
+ return owner;
239
+ }
240
+ return null;
241
+ }
242
+ export function selectFeeTicketOutpoints(tickets, quantity, options = {}) {
243
+ const maxQuantity = options.maxQuantity ?? 10;
244
+ const shortageAction = options.shortageAction ?? "use";
245
+ if (!Number.isInteger(maxQuantity) ||
246
+ maxQuantity < 1 ||
247
+ !Number.isInteger(quantity) ||
248
+ quantity < 1 ||
249
+ quantity > maxQuantity) {
250
+ throw new Error(`Coupon quantity must be between 1 and ${maxQuantity}.`);
251
+ }
252
+ const normalized = tickets.map((ticket) => {
253
+ const outpoint = ticket.outpoint.trim().toLowerCase();
254
+ if (!/^[0-9a-f]{64}:\d+$/.test(outpoint) ||
255
+ unsigned(ticket.amountSompi) === null) {
256
+ throw new Error("Coupon availability is invalid. Refresh and try again.");
257
+ }
258
+ return { outpoint, collateral: BigInt(ticket.amountSompi) };
259
+ });
260
+ const unique = new Set(normalized.map((ticket) => ticket.outpoint));
261
+ if (unique.size !== normalized.length)
262
+ throw new Error("Coupon availability contains duplicate outpoints.");
263
+ if (normalized.length < quantity) {
264
+ throw new Error(`Not enough active coupons are available to ${shortageAction}.`);
265
+ }
266
+ return normalized
267
+ .sort((left, right) => left.collateral < right.collateral
268
+ ? -1
269
+ : left.collateral > right.collateral
270
+ ? 1
271
+ : left.outpoint.localeCompare(right.outpoint))
272
+ .slice(0, quantity)
273
+ .map((ticket) => ticket.outpoint);
274
+ }
275
+ export function selectConsolidationBatch(candidates, sourceOutpoints, maximum = KCC20_MAX_CONSOLIDATION_INPUTS, order = "smallest", minimum = 1) {
276
+ const sorted = [...candidates].sort((left, right) => order === "largest"
277
+ ? compareStateAmount(right, left)
278
+ : compareStateAmount(left, right));
279
+ if (!sourceOutpoints?.length)
280
+ return sorted.slice(0, maximum);
281
+ const requested = new Set(sourceOutpoints.map((value) => value.toLowerCase()));
282
+ if (sourceOutpoints.length < minimum)
283
+ throw new Error(`at least ${minimum} holder UTXOs must be selected`);
284
+ if (requested.size !== sourceOutpoints.length)
285
+ throw new Error("distinct source outpoints are required");
286
+ const byOutpoint = new Map(candidates.map((utxo) => [kcc20IndexedUtxoOutpoint(utxo), utxo]));
287
+ const selected = sourceOutpoints.flatMap((outpoint) => {
288
+ const match = byOutpoint.get(outpoint.toLowerCase());
289
+ return match ? [match] : [];
290
+ });
291
+ if (selected.length !== requested.size)
292
+ throw new Error("selected holder UTXOs are not available");
293
+ if (selected.length > maximum)
294
+ throw new Error(`at most ${maximum} holder UTXOs can be consolidated`);
295
+ return selected;
296
+ }
297
+ export function summarizeHolderUtxos(candidates, requestedAmount) {
298
+ const requested = requiredAmount(requestedAmount);
299
+ const amounts = candidates.map((utxo) => amount(utxo.state?.["amount"]) ?? 0n);
300
+ const aggregate = amounts.reduce((sum, value) => sum + value, 0n);
301
+ let max = 0n;
302
+ let maxIndex = -1;
303
+ amounts.forEach((value, index) => {
304
+ if (value > max) {
305
+ max = value;
306
+ maxIndex = index;
307
+ }
308
+ });
309
+ const fragmented = aggregate >= requested && max < requested;
310
+ return {
311
+ requestedAmount: requested.toString(),
312
+ aggregateAmount: aggregate.toString(),
313
+ maxSingleUtxoAmount: max.toString(),
314
+ utxoCount: candidates.length,
315
+ fragmented,
316
+ ...(maxIndex >= 0
317
+ ? {
318
+ maxSingleUtxoOutpoint: kcc20IndexedUtxoOutpoint(candidates[maxIndex]),
319
+ }
320
+ : {}),
321
+ ...(fragmented ? { recommendedAction: "consolidate" } : {}),
322
+ };
323
+ }
324
+ function normalizeState(state) {
325
+ const extension = record(state["extension"]);
326
+ const owner = hex32(state["owner"] ?? state["ownerIdentifier"]);
327
+ const ownerScheme = numberValue(state["ownerScheme"] ?? state["identifierType"]);
328
+ const normalized = { ...state };
329
+ if (owner) {
330
+ normalized["owner"] = owner;
331
+ normalized["ownerIdentifier"] = owner;
332
+ }
333
+ if (ownerScheme !== null) {
334
+ normalized["ownerScheme"] = ownerScheme;
335
+ normalized["identifierType"] = ownerScheme;
336
+ }
337
+ const amountValue = unsigned(state["amount"]);
338
+ if (amountValue !== null)
339
+ normalized["amount"] = amountValue;
340
+ const remaining = unsigned(state["remainingSupply"] ?? extension?.["remainingSupply"]);
341
+ if (remaining !== null)
342
+ normalized["remainingSupply"] = remaining;
343
+ const canonical = hex32(state["canonicalTokenId"] ?? state["tokenId"]);
344
+ if (canonical)
345
+ normalized["canonicalTokenId"] = canonical;
346
+ const mode = numberValue(state["mode"] ?? state["stateMode"]);
347
+ if (mode !== null)
348
+ normalized["mode"] = mode;
349
+ const unitPrice = unsigned(state["unitPriceSompi"] ?? state["marketUnitPriceSompi"]);
350
+ if (unitPrice !== null)
351
+ normalized["unitPriceSompi"] = unitPrice;
352
+ const feeTicketId = hex32(state["feeTicketId"]);
353
+ if (feeTicketId)
354
+ normalized["feeTicketId"] = feeTicketId;
355
+ const displayScale = unsigned(state["displayScale"] ??
356
+ state["priceScale"] ??
357
+ state["tokenDisplayScale"] ??
358
+ extension?.["displayScale"]);
359
+ if (displayScale !== null) {
360
+ normalized["displayScale"] = displayScale;
361
+ normalized["priceScale"] = displayScale;
362
+ normalized["tokenDisplayScale"] = displayScale;
363
+ }
364
+ return normalized;
365
+ }
366
+ function compareStateAmount(left, right) {
367
+ const a = amount(left.state?.["amount"]) ?? 0n;
368
+ const b = amount(right.state?.["amount"]) ?? 0n;
369
+ return a < b
370
+ ? -1
371
+ : a > b
372
+ ? 1
373
+ : kcc20IndexedUtxoOutpoint(left).localeCompare(kcc20IndexedUtxoOutpoint(right));
374
+ }
375
+ function amount(value) {
376
+ const normalized = unsigned(value);
377
+ return normalized === null ? null : BigInt(normalized);
378
+ }
379
+ function requiredAmount(value) {
380
+ const normalized = amount(value);
381
+ if (normalized === null)
382
+ throw new Error("indexed covenant amount is invalid");
383
+ return normalized;
384
+ }
385
+ function unsigned(value) {
386
+ if (typeof value === "bigint")
387
+ return value >= 0n ? value.toString() : null;
388
+ if (typeof value === "number")
389
+ return Number.isSafeInteger(value) && value >= 0 ? value.toString() : null;
390
+ return typeof value === "string" && /^(0|[1-9]\d*)$/.test(value)
391
+ ? value
392
+ : null;
393
+ }
394
+ function hex32(value) {
395
+ if (typeof value !== "string")
396
+ return null;
397
+ const normalized = value.trim().toLowerCase().replace(/^0x/, "");
398
+ return /^[a-f0-9]{64}$/.test(normalized) ? normalized : null;
399
+ }
400
+ function record(value) {
401
+ return value && typeof value === "object" && !Array.isArray(value)
402
+ ? value
403
+ : null;
404
+ }
405
+ function stringValue(value) {
406
+ return typeof value === "string" ? value : null;
407
+ }
408
+ function numberValue(value) {
409
+ const parsed = typeof value === "string" && /^\d+$/.test(value) ? Number(value) : value;
410
+ return typeof parsed === "number" && Number.isInteger(parsed) ? parsed : null;
411
+ }
412
+ //# sourceMappingURL=action-source-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-source-resolver.js","sourceRoot":"","sources":["../src/action-source-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ArtifactDescriptor, BuildContext } from "./models.js";
2
+ export declare const KCC20_ARTIFACT_SCRIPT_SHA256: Readonly<{
3
+ "KCC20.placeholder.json": "4633b082f26adbf14600b767d6e2146e36ce67d63d8202c0281857922c05ac41";
4
+ "KCC20FeeTicket.placeholder.json": "ed81365466ee4c44db1210b3360783af8145f74e49e847848195e09c71ad6930";
5
+ "KCC20Orderbook.placeholder.json": "ef9fe81ff7aa2dc2df118d8d7cc126aca6f2f9c181b9c2d15727a538b23c6f71";
6
+ "KCC20Wrapper.placeholder.json": "f3bdf09be9aa258708a306283a4278a93cfb64f35fc50ed7d316b9b189ef9030";
7
+ "KCC20Vesting.placeholder.json": "1b84d74aa01b6a50edbff5bf1f9e988a5a6a00ec645458dfd3912ac532b77c33";
8
+ }>;
9
+ export type Kcc20ArtifactKey = keyof typeof KCC20_ARTIFACT_SCRIPT_SHA256;
10
+ export declare function isKcc20ArtifactKey(value: string): value is Kcc20ArtifactKey;
11
+ export declare function assertKcc20ArtifactScriptHash(key: Kcc20ArtifactKey, artifact: unknown): void;
12
+ export declare function requireArtifact(context: BuildContext, key: string): ArtifactDescriptor;
13
+ export declare function assertArtifactHash(artifact: ArtifactDescriptor, expectedHash: string): void;
14
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGpE,eAAO,MAAM,4BAA4B;;;;;;EAWvC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,4BAA4B,CAAC;AAEzE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,gBAAgB,CAK3E;AAED,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,OAAO,GAChB,IAAI,CA6BN;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,GACV,kBAAkB,CAUpB;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,MAAM,GACnB,IAAI,CAQN"}
@@ -0,0 +1,44 @@
1
+ import { Kcc20BuilderError } from "./errors.js";
2
+ import { sha256 } from "@noble/hashes/sha256";
3
+ export const KCC20_ARTIFACT_SCRIPT_SHA256 = Object.freeze({
4
+ "KCC20.placeholder.json": "4633b082f26adbf14600b767d6e2146e36ce67d63d8202c0281857922c05ac41",
5
+ "KCC20FeeTicket.placeholder.json": "ed81365466ee4c44db1210b3360783af8145f74e49e847848195e09c71ad6930",
6
+ "KCC20Orderbook.placeholder.json": "ef9fe81ff7aa2dc2df118d8d7cc126aca6f2f9c181b9c2d15727a538b23c6f71",
7
+ "KCC20Wrapper.placeholder.json": "f3bdf09be9aa258708a306283a4278a93cfb64f35fc50ed7d316b9b189ef9030",
8
+ "KCC20Vesting.placeholder.json": "1b84d74aa01b6a50edbff5bf1f9e988a5a6a00ec645458dfd3912ac532b77c33",
9
+ });
10
+ export function isKcc20ArtifactKey(value) {
11
+ return Object.prototype.hasOwnProperty.call(KCC20_ARTIFACT_SCRIPT_SHA256, value);
12
+ }
13
+ export function assertKcc20ArtifactScriptHash(key, artifact) {
14
+ const script = artifact?.script;
15
+ const bytes = script instanceof Uint8Array
16
+ ? script
17
+ : Array.isArray(script) &&
18
+ script.every((byte) => Number.isInteger(byte) && byte >= 0 && byte <= 0xff)
19
+ ? Uint8Array.from(script)
20
+ : null;
21
+ if (!bytes) {
22
+ throw new Kcc20BuilderError("ARTIFACT_MISMATCH", `contract artifact script is invalid for ${key}`, { artifactKey: key });
23
+ }
24
+ const actualHash = [...sha256(bytes)]
25
+ .map((byte) => byte.toString(16).padStart(2, "0"))
26
+ .join("");
27
+ const expectedHash = KCC20_ARTIFACT_SCRIPT_SHA256[key];
28
+ if (actualHash !== expectedHash) {
29
+ throw new Kcc20BuilderError("ARTIFACT_MISMATCH", `contract artifact hash mismatch for ${key}`, { artifactKey: key, expectedHash, actualHash });
30
+ }
31
+ }
32
+ export function requireArtifact(context, key) {
33
+ const artifact = context.artifacts[key];
34
+ if (!artifact) {
35
+ throw new Kcc20BuilderError("ARTIFACT_MISMATCH", `required contract artifact is missing: ${key}`, { artifactKey: key });
36
+ }
37
+ return artifact;
38
+ }
39
+ export function assertArtifactHash(artifact, expectedHash) {
40
+ if (artifact.hash.toLowerCase() !== expectedHash.toLowerCase()) {
41
+ throw new Kcc20BuilderError("ARTIFACT_MISMATCH", `contract artifact hash mismatch for ${artifact.key}`, { artifactKey: artifact.key, expectedHash, actualHash: artifact.hash });
42
+ }
43
+ }
44
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,wBAAwB,EACtB,kEAAkE;IACpE,iCAAiC,EAC/B,kEAAkE;IACpE,iCAAiC,EAC/B,kEAAkE;IACpE,+BAA+B,EAC7B,kEAAkE;IACpE,+BAA+B,EAC7B,kEAAkE;CACrE,CAAC,CAAC;AAIH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CACzC,4BAA4B,EAC5B,KAAK,CACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,GAAqB,EACrB,QAAiB;IAEjB,MAAM,MAAM,GAAI,QAAwC,EAAE,MAAM,CAAC;IACjE,MAAM,KAAK,GACT,MAAM,YAAY,UAAU;QAC1B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACnB,MAAM,CAAC,KAAK,CACV,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAC9D;YACH,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YACzB,CAAC,CAAC,IAAI,CAAC;IACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CACzB,mBAAmB,EACnB,2CAA2C,GAAG,EAAE,EAChD,EAAE,WAAW,EAAE,GAAG,EAAE,CACrB,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;SAClC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACjD,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,YAAY,GAAG,4BAA4B,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,iBAAiB,CACzB,mBAAmB,EACnB,uCAAuC,GAAG,EAAE,EAC5C,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,CAC/C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAqB,EACrB,GAAW;IAEX,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,iBAAiB,CACzB,mBAAmB,EACnB,0CAA0C,GAAG,EAAE,EAC/C,EAAE,WAAW,EAAE,GAAG,EAAE,CACrB,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAA4B,EAC5B,YAAoB;IAEpB,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,iBAAiB,CACzB,mBAAmB,EACnB,uCAAuC,QAAQ,CAAC,GAAG,EAAE,EACrD,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CACvE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Kcc20PsktBuilderDependencies } from "./models.js";
2
+ export declare const KCC20_PSKT_BUILDER_INPUT_SCHEMA: "kcc20-in-process-pskt-builder-input/v1";
3
+ export declare function buildKcc20Pskt(dependencies: Kcc20PsktBuilderDependencies, request: Kcc20PsktBuilderInput): Promise<Record<string, unknown>>;
4
+ export interface Kcc20PsktBuilderInput {
5
+ schema: typeof KCC20_PSKT_BUILDER_INPUT_SCHEMA;
6
+ schemaVersion?: number;
7
+ builder: Record<string, unknown>;
8
+ request: Record<string, unknown>;
9
+ }
10
+ /** @deprecated Use Kcc20PsktBuilderInput. */
11
+ export type Kcc20LegacyPsktBuilderInput = Kcc20PsktBuilderInput;
12
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAEhE,eAAO,MAAM,+BAA+B,EAC1C,wCAAiD,CAAC;AAEpD,wBAAsB,cAAc,CAClC,YAAY,EAAE,4BAA4B,EAC1C,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAgBlC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,+BAA+B,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,6CAA6C;AAC7C,MAAM,MAAM,2BAA2B,GAAG,qBAAqB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Kcc20BuilderError } from "./errors.js";
2
+ import { createKcc20PsktBuilderEngine } from "./engine.js";
3
+ export const KCC20_PSKT_BUILDER_INPUT_SCHEMA = "kcc20-in-process-pskt-builder-input/v1";
4
+ export async function buildKcc20Pskt(dependencies, request) {
5
+ if (request.schema !== KCC20_PSKT_BUILDER_INPUT_SCHEMA) {
6
+ throw new Kcc20BuilderError("INVALID_INPUT", `unsupported KCC20 builder input schema: ${String(request.schema || "missing")}`);
7
+ }
8
+ const engine = createKcc20PsktBuilderEngine({
9
+ wasm: dependencies.wasm,
10
+ artifacts: dependencies.artifacts ?? {},
11
+ artifactProvider: dependencies.artifactProvider,
12
+ config: dependencies.config,
13
+ sourceProvider: dependencies.sourceProvider,
14
+ rpcClientFactory: dependencies.rpcClientFactory,
15
+ });
16
+ return engine.build(request);
17
+ }
18
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAG3D,MAAM,CAAC,MAAM,+BAA+B,GAC1C,wCAAiD,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAA0C,EAC1C,OAA8B;IAE9B,IAAI,OAAO,CAAC,MAAM,KAAK,+BAA+B,EAAE,CAAC;QACvD,MAAM,IAAI,iBAAiB,CACzB,eAAe,EACf,2CAA2C,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,EAAE,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,4BAA4B,CAAC;QAC1C,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,EAAE;QACvC,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;QAC/C,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,cAAc,EAAE,YAAY,CAAC,cAAc;QAC3C,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;KAChD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,43 @@
1
+ export declare function normalizeSilverScriptArtifact(rawArtifact: any): any;
2
+ export declare function canonicalFunctionSignature(abiEntry: any): string;
3
+ export declare function dispatchTag(abiEntry: any): Uint8Array<ArrayBuffer>;
4
+ export declare function dispatchTagFor(artifact: any, entrypointName: any): Uint8Array<ArrayBufferLike>;
5
+ export declare function templateHash(prefix: any, suffix: any): Uint8Array<ArrayBufferLike>;
6
+ export declare function templateParts(artifact: any): {
7
+ prefix: Uint8Array<ArrayBuffer>;
8
+ suffix: Uint8Array<ArrayBuffer>;
9
+ prefixLength: number;
10
+ suffixLength: number;
11
+ hash: Uint8Array<ArrayBufferLike>;
12
+ };
13
+ export declare function mintExtensionCommitment(extension: any): Uint8Array<ArrayBufferLike>;
14
+ export declare function holderExtensionCommitment(extension: any): Uint8Array<ArrayBufferLike>;
15
+ export declare function buildKcc20ScriptForState(artifact: any, state: any): Uint8Array<any>;
16
+ export declare function encodeKcc20State(state: any): Uint8Array<any>;
17
+ export declare function encodeKcc20StateRecordArrays(states: any): Uint8Array<any>[];
18
+ export declare function buildKcc20TransferSigScript(kw: any, artifact: any, { nextStates, witness }: {
19
+ nextStates: any;
20
+ witness: any;
21
+ }): any;
22
+ export declare function buildKcc20TransferDelegatorSigScript(kw: any, artifact: any, { witness }: {
23
+ witness: any;
24
+ }): any;
25
+ export declare function buildKcc20MintByOwnerSigScript(kw: any, artifact: any, args: any): any;
26
+ export declare function buildKcc20MintPublicSigScript(kw: any, artifact: any, args: any): any;
27
+ export declare function buildKcc20BurnSigScript(kw: any, artifact: any, { nextStates, burnAmount, witness }: {
28
+ nextStates: any;
29
+ burnAmount: any;
30
+ witness: any;
31
+ }): any;
32
+ export declare function buildKcc20SetPublicMintActiveSigScript(kw: any, artifact: any, { extension, authoritySignature, active, minterOutputIndex }: {
33
+ extension: any;
34
+ authoritySignature: any;
35
+ active: any;
36
+ minterOutputIndex: any;
37
+ }): any;
38
+ export declare function p2pkOwnerWitness(signature: any): Uint8Array<any>;
39
+ export declare function ownerAuthorizationWitness(witness: any): Uint8Array<any>;
40
+ export declare function signedI64Payload(value: any): Uint8Array<ArrayBuffer>;
41
+ export declare function unsignedLe64(value: any): Uint8Array<ArrayBuffer>;
42
+ export declare function pushExplicit(payload: any): Uint8Array<any>;
43
+ export declare function concatBytes(...parts: any[]): Uint8Array<any>;