@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,103 @@
1
+ export interface Kcc20DeployTokenDraft {
2
+ ticker?: string;
3
+ tokenName?: string;
4
+ maxSupply: string;
5
+ premintSupply: string;
6
+ decimals?: number;
7
+ premintRecipient?: string;
8
+ mintPolicy: "fixed" | "controlled" | "public";
9
+ mintLaneCount?: number;
10
+ mintPricePerTokenSompi: string;
11
+ treasuryRecipient?: string;
12
+ }
13
+ export interface Kcc20DeployWalletInfo {
14
+ walletAddress: string;
15
+ kcc20Owner: string;
16
+ }
17
+ export interface Kcc20DeployOperationOptions {
18
+ network?: string;
19
+ protocolFeeRecipient?: string;
20
+ protocolFeeBps?: number | string | bigint;
21
+ createdAt?: string;
22
+ requestId?: string;
23
+ }
24
+ export interface Kcc20ValidatedDeployToken {
25
+ ticker: string;
26
+ tokenName: string;
27
+ maxSupply: bigint;
28
+ premintSupply: bigint;
29
+ decimals: number;
30
+ premintRecipient: string;
31
+ mintPricePerTokenSompi: bigint;
32
+ mintPolicy: number;
33
+ treasuryRecipient: string;
34
+ protocolFeeRecipient: string;
35
+ protocolFeeBps: number;
36
+ mintLaneCount?: number;
37
+ }
38
+ export declare function buildKcc20DeployTokenOperation(walletInfo: Kcc20DeployWalletInfo, draft: Kcc20DeployTokenDraft, options?: Kcc20DeployOperationOptions): {
39
+ requestId: string;
40
+ description: string;
41
+ payload: {
42
+ params: Record<string, unknown>;
43
+ signing: {
44
+ standard: string;
45
+ walletAction: string;
46
+ status: string;
47
+ builderKey: string;
48
+ builderStatus: string;
49
+ submitTransactionSupported: boolean;
50
+ missingDependencies: string[];
51
+ missingSources: never[];
52
+ };
53
+ sourceRequirements: Record<string, unknown>[];
54
+ signerRequirements: Record<string, unknown>[];
55
+ warnings: string[];
56
+ tokenIdentity?: Record<string, unknown> | undefined;
57
+ schema: string;
58
+ status: string;
59
+ requestId: string;
60
+ chain: string;
61
+ network: string;
62
+ createdAt: string;
63
+ owner: import("./wallet-operation.js").Kcc20WalletOperationOwner;
64
+ operation: string;
65
+ contract: string;
66
+ action: string;
67
+ };
68
+ };
69
+ export declare function buildKcc20DeployTokenOperationFromValidated(walletInfo: Kcc20DeployWalletInfo, draft: Kcc20DeployTokenDraft, validated: Kcc20ValidatedDeployToken, options?: Kcc20DeployOperationOptions): {
70
+ requestId: string;
71
+ description: string;
72
+ payload: {
73
+ params: Record<string, unknown>;
74
+ signing: {
75
+ standard: string;
76
+ walletAction: string;
77
+ status: string;
78
+ builderKey: string;
79
+ builderStatus: string;
80
+ submitTransactionSupported: boolean;
81
+ missingDependencies: string[];
82
+ missingSources: never[];
83
+ };
84
+ sourceRequirements: Record<string, unknown>[];
85
+ signerRequirements: Record<string, unknown>[];
86
+ warnings: string[];
87
+ tokenIdentity?: Record<string, unknown> | undefined;
88
+ schema: string;
89
+ status: string;
90
+ requestId: string;
91
+ chain: string;
92
+ network: string;
93
+ createdAt: string;
94
+ owner: import("./wallet-operation.js").Kcc20WalletOperationOwner;
95
+ operation: string;
96
+ contract: string;
97
+ action: string;
98
+ };
99
+ };
100
+ export declare function validateKcc20DeployToken(walletInfo: Kcc20DeployWalletInfo, draft: Kcc20DeployTokenDraft, options?: Kcc20DeployOperationOptions): Kcc20ValidatedDeployToken;
101
+ export declare function normalizeKcc20Ticker(value: string | undefined): string;
102
+ export declare function normalizeKcc20TokenName(value: string | undefined): string;
103
+ export declare function parseKcc20U64(value: string, field: string): bigint;
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildKcc20DeployTokenOperation = buildKcc20DeployTokenOperation;
4
+ exports.buildKcc20DeployTokenOperationFromValidated = buildKcc20DeployTokenOperationFromValidated;
5
+ exports.validateKcc20DeployToken = validateKcc20DeployToken;
6
+ exports.normalizeKcc20Ticker = normalizeKcc20Ticker;
7
+ exports.normalizeKcc20TokenName = normalizeKcc20TokenName;
8
+ exports.parseKcc20U64 = parseKcc20U64;
9
+ const protocol_js_1 = require("./protocol.js");
10
+ const token_amount_js_1 = require("./token-amount.js");
11
+ const paid_mint_amount_js_1 = require("./paid-mint-amount.js");
12
+ const wallet_operation_js_1 = require("./wallet-operation.js");
13
+ const HEX_64_RE = /^[a-fA-F0-9]{64}$/;
14
+ const KASPA_ADDRESS_CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
15
+ const KASPA_ADDRESS_GENERATORS = [
16
+ 0x98f2bc8e61n,
17
+ 0x79b76d99e2n,
18
+ 0xf33e5fb3c4n,
19
+ 0xae2eabe2a8n,
20
+ 0x1e4f43e470n,
21
+ ];
22
+ function buildKcc20DeployTokenOperation(walletInfo, draft, options = {}) {
23
+ const validated = validateKcc20DeployToken(walletInfo, draft, options);
24
+ return buildKcc20DeployTokenOperationFromValidated(walletInfo, draft, validated, options);
25
+ }
26
+ function buildKcc20DeployTokenOperationFromValidated(walletInfo, draft, validated, options = {}) {
27
+ const requestId = options.requestId ?? `kcc20-deploy-token-${randomOperationId()}`;
28
+ const network = options.network ?? "testnet-10";
29
+ const builderKey = "kcc20.deploy-token";
30
+ const params = {
31
+ ticker: validated.ticker,
32
+ tokenName: validated.tokenName,
33
+ maxSupply: validated.maxSupply.toString(),
34
+ premintSupply: validated.premintSupply.toString(),
35
+ decimals: validated.decimals,
36
+ displayMaxSupply: draft.maxSupply,
37
+ displayPremintSupply: draft.premintSupply,
38
+ mintPolicy: draft.mintPolicy,
39
+ mintPolicyValue: validated.mintPolicy,
40
+ mintPricePerTokenSompi: validated.mintPricePerTokenSompi.toString(),
41
+ creator: walletInfo.kcc20Owner,
42
+ premintRecipient: validated.premintRecipient,
43
+ premintOwnerScheme: 0,
44
+ treasuryRecipient: validated.treasuryRecipient,
45
+ protocolFeeRecipient: validated.protocolFeeRecipient,
46
+ protocolFeeBps: validated.protocolFeeBps,
47
+ ...(validated.mintLaneCount == null
48
+ ? {}
49
+ : { mintLaneCount: validated.mintLaneCount }),
50
+ deployTemplate: deployTemplate(walletInfo, validated),
51
+ };
52
+ const sourceRequirements = [
53
+ {
54
+ type: "kaspa-funding-utxo",
55
+ ownerAddress: walletInfo.walletAddress,
56
+ purpose: "fund deploy outputs and network fee",
57
+ },
58
+ ];
59
+ const signerRequirements = [
60
+ {
61
+ type: "wallet-owner",
62
+ owner: walletInfo.kcc20Owner,
63
+ address: walletInfo.walletAddress,
64
+ },
65
+ ];
66
+ return (0, wallet_operation_js_1.buildKcc20WalletOperationFromPlan)(walletInfo, {
67
+ builderKey,
68
+ operation: "deploy-token",
69
+ contract: "KCC20",
70
+ action: "deploy",
71
+ description: "Build a KCC20 deploy transaction request.",
72
+ params,
73
+ sourceRequirements,
74
+ signerRequirements,
75
+ warnings: [
76
+ "The wallet must build the standard KCC20 transaction, attach genesis covenant bindings, sign, and broadcast.",
77
+ "Live submission remains wallet-side.",
78
+ ],
79
+ }, { ...options, requestId, network });
80
+ }
81
+ function validateKcc20DeployToken(walletInfo, draft, options = {}) {
82
+ const decimals = draft.decimals ?? protocol_js_1.DEFAULT_KCC20_TOKEN_DECIMALS;
83
+ const displayScale = (0, token_amount_js_1.kcc20DisplayScaleForDecimals)(decimals);
84
+ const ticker = normalizeKcc20Ticker(draft.ticker);
85
+ const tokenName = normalizeKcc20TokenName(draft.tokenName);
86
+ const maxSupply = BigInt((0, token_amount_js_1.parseKcc20DisplayAmountToBaseUnits)(draft.maxSupply, decimals, "maxSupply"));
87
+ const premintSupply = BigInt((0, token_amount_js_1.parseKcc20DisplayAmountToBaseUnits)(draft.premintSupply, decimals, "premintSupply", {
88
+ allowZero: true,
89
+ }));
90
+ const mintPricePerTokenSompi = parseKcc20U64(draft.mintPricePerTokenSompi, "mintPricePerTokenSompi");
91
+ const mintPolicy = { fixed: 0, controlled: 1, public: 2 }[draft.mintPolicy];
92
+ if (mintPolicy === undefined) {
93
+ throw new Error("mintPolicy is invalid");
94
+ }
95
+ const mintLaneCount = draft.mintLaneCount ?? 10;
96
+ if (!Number.isInteger(mintLaneCount) ||
97
+ mintLaneCount < 1 ||
98
+ mintLaneCount > 10) {
99
+ throw new Error("mintLaneCount must be 1..10");
100
+ }
101
+ if (!HEX_64_RE.test(walletInfo.kcc20Owner)) {
102
+ throw new Error("wallet owner must be 64 hex");
103
+ }
104
+ if (maxSupply <= 0n) {
105
+ throw new Error("maxSupply must be greater than zero");
106
+ }
107
+ if (premintSupply > maxSupply) {
108
+ throw new Error("premintSupply cannot exceed maxSupply");
109
+ }
110
+ if (mintPolicy === 0 && premintSupply !== maxSupply) {
111
+ throw new Error("fixed deploys must premint the full maxSupply");
112
+ }
113
+ if (mintPolicy !== 0 && premintSupply === maxSupply) {
114
+ throw new Error("controlled/public mint deploys must leave remaining mint supply");
115
+ }
116
+ if (mintPolicy !== 2 && mintPricePerTokenSompi > 0n) {
117
+ throw new Error("mintPricePerTokenSompi is only valid for public deploys");
118
+ }
119
+ if (mintPolicy === 2 &&
120
+ mintPricePerTokenSompi > 0n &&
121
+ !(0, paid_mint_amount_js_1.kcc20PaidMintCapacityMeetsMinimumGross)({
122
+ remainingTokenAmount: maxSupply - premintSupply,
123
+ unitPriceSompi: mintPricePerTokenSompi,
124
+ priceScale: displayScale,
125
+ minimumGrossSompi: protocol_js_1.DEFAULT_KCC20_MIN_PROTOCOL_FEE_SOMPI,
126
+ })) {
127
+ throw new Error("public deploys with a mint price must leave enough mintable supply to satisfy the minimum protocol fee");
128
+ }
129
+ if (mintPolicy !== 0 && maxSupply - premintSupply < BigInt(mintLaneCount)) {
130
+ throw new Error("remaining mint supply must cover every mint lane");
131
+ }
132
+ const premintRecipientInput = draft.premintRecipient?.trim();
133
+ if (premintRecipientInput && (mintPolicy === 0 || premintSupply === 0n)) {
134
+ throw new Error("premintRecipient is only valid when controlled/public mint deploys create a premint holder output");
135
+ }
136
+ const protocolFeeRecipient = normalizeOptionalOwner(options.protocolFeeRecipient, "protocolFeeRecipient") ?? protocol_js_1.KCC20_PLATFORM_PROTOCOL_FEE_RECIPIENT;
137
+ const protocolFeeBps = Number(options.protocolFeeBps ?? protocol_js_1.DEFAULT_KCC20_FEE_BPS);
138
+ if (!Number.isSafeInteger(protocolFeeBps) ||
139
+ protocolFeeBps < 0 ||
140
+ protocolFeeBps > 10_000) {
141
+ throw new Error("protocolFeeBps must be an integer between 0 and 10000");
142
+ }
143
+ return {
144
+ ticker,
145
+ tokenName,
146
+ maxSupply,
147
+ premintSupply,
148
+ decimals,
149
+ mintPolicy,
150
+ mintPricePerTokenSompi,
151
+ premintRecipient: normalizeOptionalOwner(premintRecipientInput, "premintRecipient") ??
152
+ walletInfo.kcc20Owner,
153
+ treasuryRecipient: normalizeOptionalOwner(draft.treasuryRecipient, "treasuryRecipient") ??
154
+ walletInfo.kcc20Owner,
155
+ protocolFeeRecipient,
156
+ protocolFeeBps,
157
+ mintLaneCount: mintPolicy === 0 ? 1 : mintLaneCount,
158
+ };
159
+ }
160
+ function deployTemplate(walletInfo, validated) {
161
+ return {
162
+ tmpl: "KCC20",
163
+ v: 1,
164
+ args: [
165
+ { name: "creator", type: "byte[32]", value: walletInfo.kcc20Owner },
166
+ { name: "maxSupply", type: "u64", value: validated.maxSupply.toString() },
167
+ {
168
+ name: "premintSupply",
169
+ type: "u64",
170
+ value: validated.premintSupply.toString(),
171
+ },
172
+ {
173
+ name: "premintRecipient",
174
+ type: "byte[32]",
175
+ value: validated.premintRecipient,
176
+ },
177
+ { name: "premintOwnerScheme", type: "u64", value: "0" },
178
+ { name: "mintPolicy", type: "u64", value: String(validated.mintPolicy) },
179
+ ...(validated.mintLaneCount == null
180
+ ? []
181
+ : [
182
+ {
183
+ name: "mintLaneCount",
184
+ type: "u64",
185
+ value: String(validated.mintLaneCount),
186
+ },
187
+ ]),
188
+ {
189
+ name: "displayScale",
190
+ type: "u64",
191
+ value: (0, token_amount_js_1.kcc20DisplayScaleForDecimals)(validated.decimals).toString(),
192
+ },
193
+ {
194
+ name: "mintPriceSompi",
195
+ type: "u64",
196
+ value: validated.mintPricePerTokenSompi.toString(),
197
+ },
198
+ {
199
+ name: "treasury",
200
+ type: "byte[32]",
201
+ value: validated.treasuryRecipient,
202
+ },
203
+ {
204
+ name: "protocolFeeRecipient",
205
+ type: "byte[32]",
206
+ value: validated.protocolFeeRecipient,
207
+ },
208
+ {
209
+ name: "protocolFeeBps",
210
+ type: "u64",
211
+ value: String(validated.protocolFeeBps),
212
+ },
213
+ { name: "ticker", type: "string", value: validated.ticker },
214
+ { name: "name", type: "string", value: validated.tokenName },
215
+ ],
216
+ };
217
+ }
218
+ function normalizeKcc20Ticker(value) {
219
+ const normalized = String(value ?? "")
220
+ .trim()
221
+ .toUpperCase();
222
+ if (!normalized)
223
+ return "";
224
+ if (!new RegExp(`^[A-Z0-9]{1,${protocol_js_1.KCC20_TICKER_MAX_LENGTH}}$`).test(normalized)) {
225
+ throw new Error(`ticker must be 1-${protocol_js_1.KCC20_TICKER_MAX_LENGTH} uppercase alphanumeric characters`);
226
+ }
227
+ return normalized;
228
+ }
229
+ function normalizeKcc20TokenName(value) {
230
+ const normalized = String(value ?? "")
231
+ .trim()
232
+ .replace(/\s+/g, " ");
233
+ if (!normalized)
234
+ return "";
235
+ if (normalized.length > protocol_js_1.KCC20_TOKEN_NAME_MAX_LENGTH) {
236
+ throw new Error(`tokenName must be ${protocol_js_1.KCC20_TOKEN_NAME_MAX_LENGTH} characters or fewer`);
237
+ }
238
+ if (!/^[\x20-\x7E]+$/.test(normalized)) {
239
+ throw new Error("tokenName must be printable ASCII");
240
+ }
241
+ return normalized;
242
+ }
243
+ function parseKcc20U64(value, field) {
244
+ if (!/^\d+$/.test(value)) {
245
+ throw new Error(`${field} must be an unsigned integer`);
246
+ }
247
+ const parsed = BigInt(value);
248
+ if (parsed > token_amount_js_1.KCC20_U64_MAX) {
249
+ throw new Error(`${field} exceeds u64 max`);
250
+ }
251
+ return parsed;
252
+ }
253
+ function normalizeOptionalOwner(value, field) {
254
+ const normalized = value?.trim().toLowerCase();
255
+ if (!normalized)
256
+ return undefined;
257
+ if (HEX_64_RE.test(normalized))
258
+ return normalized;
259
+ const owner = ownerFromKaspaAddress(normalized);
260
+ if (owner)
261
+ return owner;
262
+ throw new Error(`${field} must be a 64 hex owner or Kaspa P2PK address`);
263
+ }
264
+ function ownerFromKaspaAddress(value) {
265
+ const [prefix, payload, extra] = value.split(":");
266
+ if (!prefix || !payload || extra !== undefined)
267
+ return undefined;
268
+ const data = [];
269
+ for (const char of payload) {
270
+ const index = KASPA_ADDRESS_CHARSET.indexOf(char);
271
+ if (index === -1)
272
+ return undefined;
273
+ data.push(index);
274
+ }
275
+ if (data.length <= 8 ||
276
+ kaspaAddressPolymod(kaspaAddressPrefixExpand(prefix).concat(data)) !== 1n) {
277
+ return undefined;
278
+ }
279
+ const bytes = convertBits(data.slice(0, -8), 5, 8, false);
280
+ if (!bytes || bytes.length !== 33)
281
+ return undefined;
282
+ const [version, ...ownerBytes] = bytes;
283
+ if (version !== 0 && version !== 1)
284
+ return undefined;
285
+ const owner = bytesToHex(ownerBytes);
286
+ return HEX_64_RE.test(owner) ? owner : undefined;
287
+ }
288
+ function kaspaAddressPrefixExpand(prefix) {
289
+ return [...prefix].map((char) => char.charCodeAt(0) & 0x1f).concat([0]);
290
+ }
291
+ function kaspaAddressPolymod(values) {
292
+ let checksum = 1n;
293
+ for (const value of values) {
294
+ const top = checksum >> 35n;
295
+ checksum = ((checksum & 0x07ffffffffn) << 5n) ^ BigInt(value);
296
+ for (let index = 0; index < KASPA_ADDRESS_GENERATORS.length; index += 1) {
297
+ if (((top >> BigInt(index)) & 1n) === 1n) {
298
+ checksum ^= KASPA_ADDRESS_GENERATORS[index];
299
+ }
300
+ }
301
+ }
302
+ return checksum;
303
+ }
304
+ function convertBits(data, fromBits, toBits, pad) {
305
+ let accumulator = 0;
306
+ let bits = 0;
307
+ const result = [];
308
+ const maxValue = (1 << toBits) - 1;
309
+ const maxAccumulator = (1 << (fromBits + toBits - 1)) - 1;
310
+ for (const value of data) {
311
+ if (value < 0 || value >> fromBits)
312
+ return undefined;
313
+ accumulator = ((accumulator << fromBits) | value) & maxAccumulator;
314
+ bits += fromBits;
315
+ while (bits >= toBits) {
316
+ bits -= toBits;
317
+ result.push((accumulator >> bits) & maxValue);
318
+ }
319
+ }
320
+ if (pad) {
321
+ if (bits > 0)
322
+ result.push((accumulator << (toBits - bits)) & maxValue);
323
+ }
324
+ else if (bits >= fromBits || (accumulator << (toBits - bits)) & maxValue) {
325
+ return undefined;
326
+ }
327
+ return result;
328
+ }
329
+ function bytesToHex(bytes) {
330
+ return bytes.map((byte) => byte.toString(16).padStart(2, "0")).join("");
331
+ }
332
+ function randomOperationId() {
333
+ return globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}`;
334
+ }
335
+ //# 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,5 @@
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;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hexToBytes = hexToBytes;
4
+ exports.bytesToHex = bytesToHex;
5
+ exports.requireHex = requireHex;
6
+ exports.asciiToBytes32 = asciiToBytes32;
7
+ exports.concatByteArrays = concatByteArrays;
8
+ const errors_js_1 = require("./errors.js");
9
+ function hexToBytes(value, label = "hex value") {
10
+ const hex = value.trim().replace(/^0x/i, "");
11
+ if (!/^(?:[0-9a-f]{2})*$/i.test(hex)) {
12
+ throw new errors_js_1.Kcc20BuilderError("INVALID_INPUT", `${label} must be an even-length hexadecimal string`);
13
+ }
14
+ const bytes = new Uint8Array(hex.length / 2);
15
+ for (let index = 0; index < bytes.length; index += 1) {
16
+ bytes[index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);
17
+ }
18
+ return bytes;
19
+ }
20
+ function bytesToHex(bytes) {
21
+ let result = "";
22
+ for (const byte of bytes)
23
+ result += byte.toString(16).padStart(2, "0");
24
+ return result;
25
+ }
26
+ function requireHex(value, byteLength, label) {
27
+ const bytes = hexToBytes(value, label);
28
+ if (bytes.length !== byteLength) {
29
+ throw new errors_js_1.Kcc20BuilderError("INVALID_INPUT", `${label} must be ${byteLength} bytes`);
30
+ }
31
+ return bytesToHex(bytes);
32
+ }
33
+ function asciiToBytes32(value, label = "value") {
34
+ const encoded = new TextEncoder().encode(value);
35
+ if (encoded.length > 32) {
36
+ throw new errors_js_1.Kcc20BuilderError("INVALID_INPUT", `${label} must be at most 32 UTF-8 bytes`);
37
+ }
38
+ const result = new Uint8Array(32);
39
+ result.set(encoded);
40
+ return result;
41
+ }
42
+ function concatByteArrays(...parts) {
43
+ const result = new Uint8Array(parts.reduce((length, part) => length + part.length, 0));
44
+ let offset = 0;
45
+ for (const part of parts) {
46
+ result.set(part, offset);
47
+ offset += part.length;
48
+ }
49
+ return result;
50
+ }
51
+ //# sourceMappingURL=encoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/encoding.ts"],"names":[],"mappings":";;AAEA,gCAaC;AAED,gCAIC;AAED,gCASC;AAED,wCAWC;AAED,4CAUC;AAzDD,2CAAgD;AAEhD,SAAgB,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,6BAAiB,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,SAAgB,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,SAAgB,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,6BAAiB,CACzB,eAAe,EACf,GAAG,KAAK,YAAY,UAAU,QAAQ,CACvC,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,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,6BAAiB,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,SAAgB,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,40 @@
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;