@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,327 @@
1
+ import { DEFAULT_KCC20_FEE_BPS, DEFAULT_KCC20_MIN_PROTOCOL_FEE_SOMPI, DEFAULT_KCC20_TOKEN_DECIMALS, KCC20_TICKER_MAX_LENGTH, KCC20_TOKEN_NAME_MAX_LENGTH, KCC20_PLATFORM_PROTOCOL_FEE_RECIPIENT, } from "./protocol.js";
2
+ import { KCC20_U64_MAX, kcc20DisplayScaleForDecimals, parseKcc20DisplayAmountToBaseUnits, } from "./token-amount.js";
3
+ import { kcc20PaidMintCapacityMeetsMinimumGross } from "./paid-mint-amount.js";
4
+ import { buildKcc20WalletOperationFromPlan } from "./wallet-operation.js";
5
+ const HEX_64_RE = /^[a-fA-F0-9]{64}$/;
6
+ const KASPA_ADDRESS_CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
7
+ const KASPA_ADDRESS_GENERATORS = [
8
+ 0x98f2bc8e61n,
9
+ 0x79b76d99e2n,
10
+ 0xf33e5fb3c4n,
11
+ 0xae2eabe2a8n,
12
+ 0x1e4f43e470n,
13
+ ];
14
+ export function buildKcc20DeployTokenOperation(walletInfo, draft, options = {}) {
15
+ const validated = validateKcc20DeployToken(walletInfo, draft, options);
16
+ return buildKcc20DeployTokenOperationFromValidated(walletInfo, draft, validated, options);
17
+ }
18
+ export function buildKcc20DeployTokenOperationFromValidated(walletInfo, draft, validated, options = {}) {
19
+ const requestId = options.requestId ?? `kcc20-deploy-token-${randomOperationId()}`;
20
+ const network = options.network ?? "testnet-10";
21
+ const builderKey = "kcc20.deploy-token";
22
+ const params = {
23
+ ticker: validated.ticker,
24
+ tokenName: validated.tokenName,
25
+ maxSupply: validated.maxSupply.toString(),
26
+ premintSupply: validated.premintSupply.toString(),
27
+ decimals: validated.decimals,
28
+ displayMaxSupply: draft.maxSupply,
29
+ displayPremintSupply: draft.premintSupply,
30
+ mintPolicy: draft.mintPolicy,
31
+ mintPolicyValue: validated.mintPolicy,
32
+ mintPricePerTokenSompi: validated.mintPricePerTokenSompi.toString(),
33
+ creator: walletInfo.kcc20Owner,
34
+ premintRecipient: validated.premintRecipient,
35
+ premintOwnerScheme: 0,
36
+ treasuryRecipient: validated.treasuryRecipient,
37
+ protocolFeeRecipient: validated.protocolFeeRecipient,
38
+ protocolFeeBps: validated.protocolFeeBps,
39
+ ...(validated.mintLaneCount == null
40
+ ? {}
41
+ : { mintLaneCount: validated.mintLaneCount }),
42
+ deployTemplate: deployTemplate(walletInfo, validated),
43
+ };
44
+ const sourceRequirements = [
45
+ {
46
+ type: "kaspa-funding-utxo",
47
+ ownerAddress: walletInfo.walletAddress,
48
+ purpose: "fund deploy outputs and network fee",
49
+ },
50
+ ];
51
+ const signerRequirements = [
52
+ {
53
+ type: "wallet-owner",
54
+ owner: walletInfo.kcc20Owner,
55
+ address: walletInfo.walletAddress,
56
+ },
57
+ ];
58
+ return buildKcc20WalletOperationFromPlan(walletInfo, {
59
+ builderKey,
60
+ operation: "deploy-token",
61
+ contract: "KCC20",
62
+ action: "deploy",
63
+ description: "Build a KCC20 deploy transaction request.",
64
+ params,
65
+ sourceRequirements,
66
+ signerRequirements,
67
+ warnings: [
68
+ "The wallet must build the standard KCC20 transaction, attach genesis covenant bindings, sign, and broadcast.",
69
+ "Live submission remains wallet-side.",
70
+ ],
71
+ }, { ...options, requestId, network });
72
+ }
73
+ export function validateKcc20DeployToken(walletInfo, draft, options = {}) {
74
+ const decimals = draft.decimals ?? DEFAULT_KCC20_TOKEN_DECIMALS;
75
+ const displayScale = kcc20DisplayScaleForDecimals(decimals);
76
+ const ticker = normalizeKcc20Ticker(draft.ticker);
77
+ const tokenName = normalizeKcc20TokenName(draft.tokenName);
78
+ const maxSupply = BigInt(parseKcc20DisplayAmountToBaseUnits(draft.maxSupply, decimals, "maxSupply"));
79
+ const premintSupply = BigInt(parseKcc20DisplayAmountToBaseUnits(draft.premintSupply, decimals, "premintSupply", {
80
+ allowZero: true,
81
+ }));
82
+ const mintPricePerTokenSompi = parseKcc20U64(draft.mintPricePerTokenSompi, "mintPricePerTokenSompi");
83
+ const mintPolicy = { fixed: 0, controlled: 1, public: 2 }[draft.mintPolicy];
84
+ if (mintPolicy === undefined) {
85
+ throw new Error("mintPolicy is invalid");
86
+ }
87
+ const mintLaneCount = draft.mintLaneCount ?? 10;
88
+ if (!Number.isInteger(mintLaneCount) ||
89
+ mintLaneCount < 1 ||
90
+ mintLaneCount > 10) {
91
+ throw new Error("mintLaneCount must be 1..10");
92
+ }
93
+ if (!HEX_64_RE.test(walletInfo.kcc20Owner)) {
94
+ throw new Error("wallet owner must be 64 hex");
95
+ }
96
+ if (maxSupply <= 0n) {
97
+ throw new Error("maxSupply must be greater than zero");
98
+ }
99
+ if (premintSupply > maxSupply) {
100
+ throw new Error("premintSupply cannot exceed maxSupply");
101
+ }
102
+ if (mintPolicy === 0 && premintSupply !== maxSupply) {
103
+ throw new Error("fixed deploys must premint the full maxSupply");
104
+ }
105
+ if (mintPolicy !== 0 && premintSupply === maxSupply) {
106
+ throw new Error("controlled/public mint deploys must leave remaining mint supply");
107
+ }
108
+ if (mintPolicy !== 2 && mintPricePerTokenSompi > 0n) {
109
+ throw new Error("mintPricePerTokenSompi is only valid for public deploys");
110
+ }
111
+ if (mintPolicy === 2 &&
112
+ mintPricePerTokenSompi > 0n &&
113
+ !kcc20PaidMintCapacityMeetsMinimumGross({
114
+ remainingTokenAmount: maxSupply - premintSupply,
115
+ unitPriceSompi: mintPricePerTokenSompi,
116
+ priceScale: displayScale,
117
+ minimumGrossSompi: DEFAULT_KCC20_MIN_PROTOCOL_FEE_SOMPI,
118
+ })) {
119
+ throw new Error("public deploys with a mint price must leave enough mintable supply to satisfy the minimum protocol fee");
120
+ }
121
+ if (mintPolicy !== 0 && maxSupply - premintSupply < BigInt(mintLaneCount)) {
122
+ throw new Error("remaining mint supply must cover every mint lane");
123
+ }
124
+ const premintRecipientInput = draft.premintRecipient?.trim();
125
+ if (premintRecipientInput && (mintPolicy === 0 || premintSupply === 0n)) {
126
+ throw new Error("premintRecipient is only valid when controlled/public mint deploys create a premint holder output");
127
+ }
128
+ const protocolFeeRecipient = normalizeOptionalOwner(options.protocolFeeRecipient, "protocolFeeRecipient") ?? KCC20_PLATFORM_PROTOCOL_FEE_RECIPIENT;
129
+ const protocolFeeBps = Number(options.protocolFeeBps ?? DEFAULT_KCC20_FEE_BPS);
130
+ if (!Number.isSafeInteger(protocolFeeBps) ||
131
+ protocolFeeBps < 0 ||
132
+ protocolFeeBps > 10_000) {
133
+ throw new Error("protocolFeeBps must be an integer between 0 and 10000");
134
+ }
135
+ return {
136
+ ticker,
137
+ tokenName,
138
+ maxSupply,
139
+ premintSupply,
140
+ decimals,
141
+ mintPolicy,
142
+ mintPricePerTokenSompi,
143
+ premintRecipient: normalizeOptionalOwner(premintRecipientInput, "premintRecipient") ??
144
+ walletInfo.kcc20Owner,
145
+ treasuryRecipient: normalizeOptionalOwner(draft.treasuryRecipient, "treasuryRecipient") ??
146
+ walletInfo.kcc20Owner,
147
+ protocolFeeRecipient,
148
+ protocolFeeBps,
149
+ mintLaneCount: mintPolicy === 0 ? 1 : mintLaneCount,
150
+ };
151
+ }
152
+ function deployTemplate(walletInfo, validated) {
153
+ return {
154
+ tmpl: "KCC20",
155
+ v: 1,
156
+ args: [
157
+ { name: "creator", type: "byte[32]", value: walletInfo.kcc20Owner },
158
+ { name: "maxSupply", type: "u64", value: validated.maxSupply.toString() },
159
+ {
160
+ name: "premintSupply",
161
+ type: "u64",
162
+ value: validated.premintSupply.toString(),
163
+ },
164
+ {
165
+ name: "premintRecipient",
166
+ type: "byte[32]",
167
+ value: validated.premintRecipient,
168
+ },
169
+ { name: "premintOwnerScheme", type: "u64", value: "0" },
170
+ { name: "mintPolicy", type: "u64", value: String(validated.mintPolicy) },
171
+ ...(validated.mintLaneCount == null
172
+ ? []
173
+ : [
174
+ {
175
+ name: "mintLaneCount",
176
+ type: "u64",
177
+ value: String(validated.mintLaneCount),
178
+ },
179
+ ]),
180
+ {
181
+ name: "displayScale",
182
+ type: "u64",
183
+ value: kcc20DisplayScaleForDecimals(validated.decimals).toString(),
184
+ },
185
+ {
186
+ name: "mintPriceSompi",
187
+ type: "u64",
188
+ value: validated.mintPricePerTokenSompi.toString(),
189
+ },
190
+ {
191
+ name: "treasury",
192
+ type: "byte[32]",
193
+ value: validated.treasuryRecipient,
194
+ },
195
+ {
196
+ name: "protocolFeeRecipient",
197
+ type: "byte[32]",
198
+ value: validated.protocolFeeRecipient,
199
+ },
200
+ {
201
+ name: "protocolFeeBps",
202
+ type: "u64",
203
+ value: String(validated.protocolFeeBps),
204
+ },
205
+ { name: "ticker", type: "string", value: validated.ticker },
206
+ { name: "name", type: "string", value: validated.tokenName },
207
+ ],
208
+ };
209
+ }
210
+ export function normalizeKcc20Ticker(value) {
211
+ const normalized = String(value ?? "")
212
+ .trim()
213
+ .toUpperCase();
214
+ if (!normalized)
215
+ return "";
216
+ if (!new RegExp(`^[A-Z0-9]{1,${KCC20_TICKER_MAX_LENGTH}}$`).test(normalized)) {
217
+ throw new Error(`ticker must be 1-${KCC20_TICKER_MAX_LENGTH} uppercase alphanumeric characters`);
218
+ }
219
+ return normalized;
220
+ }
221
+ export function normalizeKcc20TokenName(value) {
222
+ const normalized = String(value ?? "")
223
+ .trim()
224
+ .replace(/\s+/g, " ");
225
+ if (!normalized)
226
+ return "";
227
+ if (normalized.length > KCC20_TOKEN_NAME_MAX_LENGTH) {
228
+ throw new Error(`tokenName must be ${KCC20_TOKEN_NAME_MAX_LENGTH} characters or fewer`);
229
+ }
230
+ if (!/^[\x20-\x7E]+$/.test(normalized)) {
231
+ throw new Error("tokenName must be printable ASCII");
232
+ }
233
+ return normalized;
234
+ }
235
+ export function parseKcc20U64(value, field) {
236
+ if (!/^\d+$/.test(value)) {
237
+ throw new Error(`${field} must be an unsigned integer`);
238
+ }
239
+ const parsed = BigInt(value);
240
+ if (parsed > KCC20_U64_MAX) {
241
+ throw new Error(`${field} exceeds u64 max`);
242
+ }
243
+ return parsed;
244
+ }
245
+ function normalizeOptionalOwner(value, field) {
246
+ const normalized = value?.trim().toLowerCase();
247
+ if (!normalized)
248
+ return undefined;
249
+ if (HEX_64_RE.test(normalized))
250
+ return normalized;
251
+ const owner = ownerFromKaspaAddress(normalized);
252
+ if (owner)
253
+ return owner;
254
+ throw new Error(`${field} must be a 64 hex owner or Kaspa P2PK address`);
255
+ }
256
+ function ownerFromKaspaAddress(value) {
257
+ const [prefix, payload, extra] = value.split(":");
258
+ if (!prefix || !payload || extra !== undefined)
259
+ return undefined;
260
+ const data = [];
261
+ for (const char of payload) {
262
+ const index = KASPA_ADDRESS_CHARSET.indexOf(char);
263
+ if (index === -1)
264
+ return undefined;
265
+ data.push(index);
266
+ }
267
+ if (data.length <= 8 ||
268
+ kaspaAddressPolymod(kaspaAddressPrefixExpand(prefix).concat(data)) !== 1n) {
269
+ return undefined;
270
+ }
271
+ const bytes = convertBits(data.slice(0, -8), 5, 8, false);
272
+ if (!bytes || bytes.length !== 33)
273
+ return undefined;
274
+ const [version, ...ownerBytes] = bytes;
275
+ if (version !== 0 && version !== 1)
276
+ return undefined;
277
+ const owner = bytesToHex(ownerBytes);
278
+ return HEX_64_RE.test(owner) ? owner : undefined;
279
+ }
280
+ function kaspaAddressPrefixExpand(prefix) {
281
+ return [...prefix].map((char) => char.charCodeAt(0) & 0x1f).concat([0]);
282
+ }
283
+ function kaspaAddressPolymod(values) {
284
+ let checksum = 1n;
285
+ for (const value of values) {
286
+ const top = checksum >> 35n;
287
+ checksum = ((checksum & 0x07ffffffffn) << 5n) ^ BigInt(value);
288
+ for (let index = 0; index < KASPA_ADDRESS_GENERATORS.length; index += 1) {
289
+ if (((top >> BigInt(index)) & 1n) === 1n) {
290
+ checksum ^= KASPA_ADDRESS_GENERATORS[index];
291
+ }
292
+ }
293
+ }
294
+ return checksum;
295
+ }
296
+ function convertBits(data, fromBits, toBits, pad) {
297
+ let accumulator = 0;
298
+ let bits = 0;
299
+ const result = [];
300
+ const maxValue = (1 << toBits) - 1;
301
+ const maxAccumulator = (1 << (fromBits + toBits - 1)) - 1;
302
+ for (const value of data) {
303
+ if (value < 0 || value >> fromBits)
304
+ return undefined;
305
+ accumulator = ((accumulator << fromBits) | value) & maxAccumulator;
306
+ bits += fromBits;
307
+ while (bits >= toBits) {
308
+ bits -= toBits;
309
+ result.push((accumulator >> bits) & maxValue);
310
+ }
311
+ }
312
+ if (pad) {
313
+ if (bits > 0)
314
+ result.push((accumulator << (toBits - bits)) & maxValue);
315
+ }
316
+ else if (bits >= fromBits || (accumulator << (toBits - bits)) & maxValue) {
317
+ return undefined;
318
+ }
319
+ return result;
320
+ }
321
+ function bytesToHex(bytes) {
322
+ return bytes.map((byte) => byte.toString(16).padStart(2, "0")).join("");
323
+ }
324
+ function randomOperationId() {
325
+ return globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}`;
326
+ }
327
+ //# sourceMappingURL=deploy-operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-operation.js","sourceRoot":"","sources":["../src/deploy-operation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function hexToBytes(value: string, label?: string): Uint8Array;
2
+ export declare function bytesToHex(bytes: Uint8Array): string;
3
+ export declare function requireHex(value: string, byteLength: number, label: string): string;
4
+ export declare function asciiToBytes32(value: string, label?: string): Uint8Array;
5
+ export declare function concatByteArrays(...parts: Uint8Array[]): Uint8Array;
6
+ //# sourceMappingURL=encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAc,GAAG,UAAU,CAazE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAS1E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAU,GAAG,UAAU,CAWzE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAUnE"}
@@ -0,0 +1,44 @@
1
+ import { Kcc20BuilderError } from "./errors.js";
2
+ export function hexToBytes(value, label = "hex value") {
3
+ const hex = value.trim().replace(/^0x/i, "");
4
+ if (!/^(?:[0-9a-f]{2})*$/i.test(hex)) {
5
+ throw new Kcc20BuilderError("INVALID_INPUT", `${label} must be an even-length hexadecimal string`);
6
+ }
7
+ const bytes = new Uint8Array(hex.length / 2);
8
+ for (let index = 0; index < bytes.length; index += 1) {
9
+ bytes[index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);
10
+ }
11
+ return bytes;
12
+ }
13
+ export function bytesToHex(bytes) {
14
+ let result = "";
15
+ for (const byte of bytes)
16
+ result += byte.toString(16).padStart(2, "0");
17
+ return result;
18
+ }
19
+ export function requireHex(value, byteLength, label) {
20
+ const bytes = hexToBytes(value, label);
21
+ if (bytes.length !== byteLength) {
22
+ throw new Kcc20BuilderError("INVALID_INPUT", `${label} must be ${byteLength} bytes`);
23
+ }
24
+ return bytesToHex(bytes);
25
+ }
26
+ export function asciiToBytes32(value, label = "value") {
27
+ const encoded = new TextEncoder().encode(value);
28
+ if (encoded.length > 32) {
29
+ throw new Kcc20BuilderError("INVALID_INPUT", `${label} must be at most 32 UTF-8 bytes`);
30
+ }
31
+ const result = new Uint8Array(32);
32
+ result.set(encoded);
33
+ return result;
34
+ }
35
+ export function concatByteArrays(...parts) {
36
+ const result = new Uint8Array(parts.reduce((length, part) => length + part.length, 0));
37
+ let offset = 0;
38
+ for (const part of parts) {
39
+ result.set(part, offset);
40
+ offset += part.length;
41
+ }
42
+ return result;
43
+ }
44
+ //# sourceMappingURL=encoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.js","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,KAAK,GAAG,WAAW;IAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,iBAAiB,CACzB,eAAe,EACf,GAAG,KAAK,4CAA4C,CACrD,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,UAAkB,EAAE,KAAa;IACzE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,iBAAiB,CACzB,eAAe,EACf,GAAG,KAAK,YAAY,UAAU,QAAQ,CACvC,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,KAAK,GAAG,OAAO;IAC3D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,iBAAiB,CACzB,eAAe,EACf,GAAG,KAAK,iCAAiC,CAC1C,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAG,KAAmB;IACrD,MAAM,MAAM,GAAG,IAAI,UAAU,CAC3B,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CACxD,CAAC;IACF,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzB,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { KaspaWasmRuntime } from "./runtime.js";
2
+ export interface Kcc20PsktBuilderEngineOptions {
3
+ wasm: KaspaWasmRuntime;
4
+ artifacts: Record<string, unknown>;
5
+ artifactProvider?: (key: string) => Promise<unknown>;
6
+ config?: Record<string, any>;
7
+ sourceProvider?: {
8
+ getUtxosByAddresses(args: {
9
+ addresses: string[];
10
+ }): Promise<unknown>;
11
+ };
12
+ rpcClientFactory?: (config: unknown) => any;
13
+ allowBackendOnly?: boolean;
14
+ }
15
+ export interface FeeTicketBatchCreateCapability {
16
+ recognizedArtifact: boolean;
17
+ batchCreateSupported: boolean;
18
+ maxTicketBatchQuantity: number;
19
+ }
20
+ /**
21
+ * Low-level protocol helpers used by backend projections, operator adapters,
22
+ * and the package conformance suite. They live on the configured engine
23
+ * because several helpers require the host-supplied WASM runtime or artifacts.
24
+ */
25
+ export interface Kcc20PsktProtocolApi {
26
+ readonly [name: string]: any;
27
+ }
28
+ export interface Kcc20PsktBuilderEngine {
29
+ build(input: unknown): Promise<Record<string, unknown>>;
30
+ buildInProcessPskt(input: unknown): Promise<Record<string, unknown>>;
31
+ resolveFeeTicketBatchCreateCapability(input: {
32
+ rootOwner: string;
33
+ utilityTokenId: string;
34
+ utilityTokenAmount: string;
35
+ rootAddress: string;
36
+ network?: string;
37
+ }): Promise<FeeTicketBatchCreateCapability>;
38
+ protocol: Kcc20PsktProtocolApi;
39
+ }
40
+ export declare function createKcc20PsktBuilderEngine(options: Kcc20PsktBuilderEngineOptions): Kcc20PsktBuilderEngine;
41
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAmErD,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE;QACf,mBAAmB,CAAC,IAAI,EAAE;YAAE,SAAS,EAAE,MAAM,EAAE,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACtE,CAAC;IACF,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,GAAG,CAAC;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,qCAAqC,CAAC,KAAK,EAAE;QAC3C,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC5C,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,6BAA6B,GACrC,sBAAsB,CA0zZxB"}