@kaspacom/kcc20-tx-builder 0.2.5 → 0.5.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 (127) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +54 -8
  3. package/RELEASING.md +93 -0
  4. package/SECURITY.md +16 -0
  5. package/artifacts/KCC20SnapshotBootstrap.placeholder.json +101677 -0
  6. package/artifacts/KCC20SnapshotController.placeholder.json +46547 -0
  7. package/artifacts/kcc20-snapshot-bootstrap/KCC20SnapshotBootstrap.placeholder.json +101677 -0
  8. package/artifacts/kcc20-snapshot-controller/KCC20SnapshotController.placeholder.json +46547 -0
  9. package/artifacts/snapshot-standards.lock.json +56 -0
  10. package/dist/artifacts.d.ts +31 -0
  11. package/dist/artifacts.d.ts.map +1 -1
  12. package/dist/artifacts.js +31 -0
  13. package/dist/artifacts.js.map +1 -1
  14. package/dist/cjs/artifacts.d.ts +31 -0
  15. package/dist/cjs/artifacts.js +32 -1
  16. package/dist/cjs/artifacts.js.map +1 -1
  17. package/dist/cjs/engine.js +58 -44
  18. package/dist/cjs/engine.js.map +1 -1
  19. package/dist/cjs/index.d.ts +7 -0
  20. package/dist/cjs/index.js +8 -1
  21. package/dist/cjs/index.js.map +1 -1
  22. package/dist/cjs/operations.d.ts +1 -1
  23. package/dist/cjs/operations.js +4 -0
  24. package/dist/cjs/operations.js.map +1 -1
  25. package/dist/cjs/sale-common.d.ts +1 -1
  26. package/dist/cjs/sale-common.js +39 -4
  27. package/dist/cjs/sale-common.js.map +1 -1
  28. package/dist/cjs/snapshot-deployment.d.ts +82 -0
  29. package/dist/cjs/snapshot-deployment.js +82 -0
  30. package/dist/cjs/snapshot-deployment.js.map +1 -0
  31. package/dist/cjs/snapshot-operation.d.ts +26 -0
  32. package/dist/cjs/snapshot-operation.js +1308 -0
  33. package/dist/cjs/snapshot-operation.js.map +1 -0
  34. package/dist/cjs/snapshot-signerless-transactions.d.ts +132 -0
  35. package/dist/cjs/snapshot-signerless-transactions.js +746 -0
  36. package/dist/cjs/snapshot-signerless-transactions.js.map +1 -0
  37. package/dist/cjs/snapshot-signerless.d.ts +226 -0
  38. package/dist/cjs/snapshot-signerless.js +1022 -0
  39. package/dist/cjs/snapshot-signerless.js.map +1 -0
  40. package/dist/cjs/snapshot-verification.d.ts +57 -0
  41. package/dist/cjs/snapshot-verification.js +100 -0
  42. package/dist/cjs/snapshot-verification.js.map +1 -0
  43. package/dist/cjs/token-operation.js +3 -3
  44. package/dist/cjs/token-operation.js.map +1 -1
  45. package/dist/engine.d.ts.map +1 -1
  46. package/dist/engine.js +58 -44
  47. package/dist/engine.js.map +1 -1
  48. package/dist/index.d.ts +7 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +7 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/operations.d.ts +1 -1
  53. package/dist/operations.d.ts.map +1 -1
  54. package/dist/operations.js +4 -0
  55. package/dist/operations.js.map +1 -1
  56. package/dist/sale-common.d.ts +1 -1
  57. package/dist/sale-common.d.ts.map +1 -1
  58. package/dist/sale-common.js +39 -4
  59. package/dist/sale-common.js.map +1 -1
  60. package/dist/snapshot-deployment.d.ts +83 -0
  61. package/dist/snapshot-deployment.d.ts.map +1 -0
  62. package/dist/snapshot-deployment.js +78 -0
  63. package/dist/snapshot-deployment.js.map +1 -0
  64. package/dist/snapshot-operation.d.ts +27 -0
  65. package/dist/snapshot-operation.d.ts.map +1 -0
  66. package/dist/snapshot-operation.js +1303 -0
  67. package/dist/snapshot-operation.js.map +1 -0
  68. package/dist/snapshot-signerless-transactions.d.ts +133 -0
  69. package/dist/snapshot-signerless-transactions.d.ts.map +1 -0
  70. package/dist/snapshot-signerless-transactions.js +735 -0
  71. package/dist/snapshot-signerless-transactions.js.map +1 -0
  72. package/dist/snapshot-signerless.d.ts +227 -0
  73. package/dist/snapshot-signerless.d.ts.map +1 -0
  74. package/dist/snapshot-signerless.js +993 -0
  75. package/dist/snapshot-signerless.js.map +1 -0
  76. package/dist/snapshot-verification.d.ts +58 -0
  77. package/dist/snapshot-verification.d.ts.map +1 -0
  78. package/dist/snapshot-verification.js +96 -0
  79. package/dist/snapshot-verification.js.map +1 -0
  80. package/dist/token-operation.js +3 -3
  81. package/dist/token-operation.js.map +1 -1
  82. package/docs/API.md +67 -0
  83. package/docs/COMPATIBILITY.json +84 -0
  84. package/docs/INTEGRATION.md +215 -0
  85. package/docs/LIVE_TRANSFER.md +106 -0
  86. package/docs/RECIPES.md +175 -0
  87. package/docs/TRANSACTION_GUIDE.md +163 -0
  88. package/docs/snapshot-start.md +27 -0
  89. package/examples/README.md +81 -0
  90. package/examples/backend/cli.ts +55 -0
  91. package/examples/backend/recipe.ts +39 -0
  92. package/examples/backend/runtime.ts +13 -0
  93. package/examples/frontend/index.html +48 -0
  94. package/examples/frontend/main.ts +213 -0
  95. package/examples/frontend/runtime.ts +14 -0
  96. package/examples/package-lock.json +1287 -0
  97. package/examples/package.json +23 -0
  98. package/examples/shared/build.ts +179 -0
  99. package/examples/shared/fixture.ts +24 -0
  100. package/examples/shared/live-transfer.ts +155 -0
  101. package/examples/shared/recipe-fixtures.ts +543 -0
  102. package/examples/shared/recipes.ts +55 -0
  103. package/examples/shared/signing.ts +110 -0
  104. package/examples/shared/timeout.ts +8 -0
  105. package/examples/test/browser.ts +116 -0
  106. package/examples/test/build.test.ts +197 -0
  107. package/examples/test/recipes.test.ts +59 -0
  108. package/examples/test/sources.test.ts +73 -0
  109. package/examples/tsconfig.json +26 -0
  110. package/examples/vendor/NOTICE.md +15 -0
  111. package/examples/vendor/kaspa/LICENSE +15 -0
  112. package/examples/vendor/kaspa/kaspa.d.ts +8908 -0
  113. package/examples/vendor/kaspa/kaspa.js +15202 -0
  114. package/examples/vendor/kaspa/kaspa_bg.wasm +0 -0
  115. package/examples/vendor/kaspa/package.json +24 -0
  116. package/package.json +21 -4
  117. package/src/artifacts.ts +35 -0
  118. package/src/engine.ts +91 -97
  119. package/src/index.ts +8 -0
  120. package/src/operations.ts +4 -0
  121. package/src/sale-common.ts +44 -3
  122. package/src/snapshot-deployment.ts +108 -0
  123. package/src/snapshot-operation.ts +1920 -0
  124. package/src/snapshot-signerless-transactions.ts +1272 -0
  125. package/src/snapshot-signerless.ts +1525 -0
  126. package/src/snapshot-verification.ts +90 -0
  127. package/src/token-operation.ts +3 -3
@@ -0,0 +1,56 @@
1
+ {
2
+ "schema": "kaspacom-contract-standards-lock/v1",
3
+ "reviewedAt": "2026-09-10",
4
+ "kccs": {
5
+ "repository": "https://github.com/kaspanet/kccs",
6
+ "commit": "54f4f9c2730f77ec5b1ee8bc746d7f94d83b8ee6",
7
+ "documents": [
8
+ "kcc-0001.md",
9
+ "kcc-0002.md",
10
+ "kcc-0020.md",
11
+ "kcc-0020/borrowed-receive-authorization.md"
12
+ ]
13
+ },
14
+ "kip20": {
15
+ "repository": "https://github.com/kaspanet/kips",
16
+ "document": "kip-0020.md"
17
+ },
18
+ "silverscript": {
19
+ "repository": "https://github.com/kaspanet/silverscript",
20
+ "baseCommit": "140bf184fd03dc0f5c29155f89e9e5d733a1152f",
21
+ "requiredPullRequests": [164, 217],
22
+ "requiredCommits": [
23
+ "97e5d7930aa7760bf9323f6f7011dce338ac38a7",
24
+ "7cf57773a2818675022a65374c602dcc141ea491"
25
+ ],
26
+ "requiredPatches": [
27
+ {
28
+ "path": "compiler-patches/0001-fix-debugger-preserve-explicit-covenant-witnesses.patch.gz",
29
+ "sha256": "6090d20a7f12333f1850d5a93c53ffcfc52dedfb6d193527287ec0efe7b04867"
30
+ },
31
+ {
32
+ "path": "compiler-patches/0002-test-compiler-cover-KCC1-dispatch-with-ECDSA.patch.gz",
33
+ "sha256": "29b2a7f476387e73242966bf31c87c769d1d1daba5ba376da9c6eaa239b6f485"
34
+ }
35
+ ],
36
+ "integrationTree": "d59eaab16114957c16de7c7198b7080e6db0126b"
37
+ },
38
+ "silverscriptKcc20": {
39
+ "repository": "https://github.com/kaspanet/silverscript",
40
+ "tag": "v1.0.0",
41
+ "commit": "3ed973335b59269293564805cc2c58a14595ec03",
42
+ "tree": "2a30f522768d9b4cae6fe30014326c689a25bd41",
43
+ "releaseAsset": "silverc-linux-x86_64.tar.gz",
44
+ "releaseAssetSha256": "058ffa17a390526f27280752f864b1bd680217cded14dfc5b7fd168d7e943fb5",
45
+ "releaseAssets": {
46
+ "linux-x64": {
47
+ "name": "silverc-linux-x86_64.tar.gz",
48
+ "sha256": "058ffa17a390526f27280752f864b1bd680217cded14dfc5b7fd168d7e943fb5"
49
+ },
50
+ "win32-x64": {
51
+ "name": "silverc-windows-x86_64.zip",
52
+ "sha256": "3e0d660c15a9e7ac90f3960da24d348b076b1891481bfe758db18accc8a102e1"
53
+ }
54
+ }
55
+ }
56
+ }
@@ -2,12 +2,43 @@ import type { ArtifactDescriptor, BuildContext } from "./models.js";
2
2
  /** The only native KCC20 artifact used to build new transactions. */
3
3
  export declare const KCC20_CURRENT_NATIVE_ARTIFACT_KEY: "KCC20.placeholder.json";
4
4
  export declare const KCC20_ARTIFACT_SCRIPT_SHA256: Readonly<{
5
+ "KCC20SnapshotBootstrap.placeholder.json": "85edea7401eb415c447e6a0d0a45e1667802a269dde9fbe33d5881c4a4de51e2";
6
+ "KCC20SnapshotController.placeholder.json": "8f90525afcc1c23240f1d18eed30b3b377a72a323e8b48925dfac53bd5aab0ae";
5
7
  "KCC20.placeholder.json": "4633b082f26adbf14600b767d6e2146e36ce67d63d8202c0281857922c05ac41";
6
8
  "KCC20FeeTicket.placeholder.json": "ed81365466ee4c44db1210b3360783af8145f74e49e847848195e09c71ad6930";
7
9
  "KCC20Orderbook.placeholder.json": "ef9fe81ff7aa2dc2df118d8d7cc126aca6f2f9c181b9c2d15727a538b23c6f71";
8
10
  "KCC20Wrapper.placeholder.json": "f3bdf09be9aa258708a306283a4278a93cfb64f35fc50ed7d316b9b189ef9030";
9
11
  "KCC20Vesting.placeholder.json": "1b84d74aa01b6a50edbff5bf1f9e988a5a6a00ec645458dfd3912ac532b77c33";
10
12
  }>;
13
+ /**
14
+ * Canonical raw artifact pins and structural metadata for signerless snapshot
15
+ * migrations. Consumers must use these values instead of maintaining their
16
+ * own copies; the raw SHA-256 pins cover the exact packaged JSON bytes.
17
+ */
18
+ export declare const KCC20_SNAPSHOT_ARTIFACT_PINS: Readonly<{
19
+ bootstrap: Readonly<{
20
+ key: "KCC20SnapshotBootstrap.placeholder.json";
21
+ contractName: "KCC20SnapshotBootstrap";
22
+ artifactSha256: "bc566a964b5feb1c2055d5130af25951142d695472287b888c5537e9a56ee3d2";
23
+ scriptLength: 33718;
24
+ stateStart: 1;
25
+ stateLength: 405;
26
+ }>;
27
+ controller: Readonly<{
28
+ key: "KCC20SnapshotController.placeholder.json";
29
+ contractName: "KCC20SnapshotController";
30
+ artifactSha256: "f0d7b082e0680a90736948cd6658ccbc8600e097d9b4d5568013acdaafb39bf5";
31
+ scriptLength: 15297;
32
+ stateStart: 1;
33
+ stateLength: 432;
34
+ }>;
35
+ }>;
36
+ /** Canonical KCC20 template committed by both snapshot contracts. */
37
+ export declare const KCC20_SNAPSHOT_TOKEN_TEMPLATE_PIN: Readonly<{
38
+ hash: "911f0638ccb7368bf36d117f1725073ae7ee487ce8b58ca3e8375051c2d40f6c";
39
+ prefixLength: 1;
40
+ suffixLength: 25439;
41
+ }>;
11
42
  export type Kcc20ArtifactKey = keyof typeof KCC20_ARTIFACT_SCRIPT_SHA256;
12
43
  export declare function isKcc20ArtifactKey(value: string): value is Kcc20ArtifactKey;
13
44
  export declare function assertKcc20ArtifactScriptHash(key: Kcc20ArtifactKey, artifact: unknown): void;
@@ -1 +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,qEAAqE;AACrE,eAAO,MAAM,iCAAiC,EAC5C,wBAAiC,CAAC;AAEpC,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"}
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,qEAAqE;AACrE,eAAO,MAAM,iCAAiC,EAC5C,wBAAiC,CAAC;AAEpC,eAAO,MAAM,4BAA4B;;;;;;;;EAavC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;EAmBvC,CAAC;AAEH,qEAAqE;AACrE,eAAO,MAAM,iCAAiC;;;;EAI5C,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"}
package/dist/artifacts.js CHANGED
@@ -3,12 +3,43 @@ import { sha256 } from "@noble/hashes/sha256";
3
3
  /** The only native KCC20 artifact used to build new transactions. */
4
4
  export const KCC20_CURRENT_NATIVE_ARTIFACT_KEY = "KCC20.placeholder.json";
5
5
  export const KCC20_ARTIFACT_SCRIPT_SHA256 = Object.freeze({
6
+ "KCC20SnapshotBootstrap.placeholder.json": "85edea7401eb415c447e6a0d0a45e1667802a269dde9fbe33d5881c4a4de51e2",
7
+ "KCC20SnapshotController.placeholder.json": "8f90525afcc1c23240f1d18eed30b3b377a72a323e8b48925dfac53bd5aab0ae",
6
8
  [KCC20_CURRENT_NATIVE_ARTIFACT_KEY]: "4633b082f26adbf14600b767d6e2146e36ce67d63d8202c0281857922c05ac41",
7
9
  "KCC20FeeTicket.placeholder.json": "ed81365466ee4c44db1210b3360783af8145f74e49e847848195e09c71ad6930",
8
10
  "KCC20Orderbook.placeholder.json": "ef9fe81ff7aa2dc2df118d8d7cc126aca6f2f9c181b9c2d15727a538b23c6f71",
9
11
  "KCC20Wrapper.placeholder.json": "f3bdf09be9aa258708a306283a4278a93cfb64f35fc50ed7d316b9b189ef9030",
10
12
  "KCC20Vesting.placeholder.json": "1b84d74aa01b6a50edbff5bf1f9e988a5a6a00ec645458dfd3912ac532b77c33",
11
13
  });
14
+ /**
15
+ * Canonical raw artifact pins and structural metadata for signerless snapshot
16
+ * migrations. Consumers must use these values instead of maintaining their
17
+ * own copies; the raw SHA-256 pins cover the exact packaged JSON bytes.
18
+ */
19
+ export const KCC20_SNAPSHOT_ARTIFACT_PINS = Object.freeze({
20
+ bootstrap: Object.freeze({
21
+ key: "KCC20SnapshotBootstrap.placeholder.json",
22
+ contractName: "KCC20SnapshotBootstrap",
23
+ artifactSha256: "bc566a964b5feb1c2055d5130af25951142d695472287b888c5537e9a56ee3d2",
24
+ scriptLength: 33718,
25
+ stateStart: 1,
26
+ stateLength: 405,
27
+ }),
28
+ controller: Object.freeze({
29
+ key: "KCC20SnapshotController.placeholder.json",
30
+ contractName: "KCC20SnapshotController",
31
+ artifactSha256: "f0d7b082e0680a90736948cd6658ccbc8600e097d9b4d5568013acdaafb39bf5",
32
+ scriptLength: 15297,
33
+ stateStart: 1,
34
+ stateLength: 432,
35
+ }),
36
+ });
37
+ /** Canonical KCC20 template committed by both snapshot contracts. */
38
+ export const KCC20_SNAPSHOT_TOKEN_TEMPLATE_PIN = Object.freeze({
39
+ hash: "911f0638ccb7368bf36d117f1725073ae7ee487ce8b58ca3e8375051c2d40f6c",
40
+ prefixLength: 1,
41
+ suffixLength: 25439,
42
+ });
12
43
  export function isKcc20ArtifactKey(value) {
13
44
  return Object.prototype.hasOwnProperty.call(KCC20_ARTIFACT_SCRIPT_SHA256, value);
14
45
  }
@@ -1 +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,qEAAqE;AACrE,MAAM,CAAC,MAAM,iCAAiC,GAC5C,wBAAiC,CAAC;AAEpC,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,CAAC,iCAAiC,CAAC,EACjC,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"}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,43 @@ import type { ArtifactDescriptor, BuildContext } from "./models.js";
2
2
  /** The only native KCC20 artifact used to build new transactions. */
3
3
  export declare const KCC20_CURRENT_NATIVE_ARTIFACT_KEY: "KCC20.placeholder.json";
4
4
  export declare const KCC20_ARTIFACT_SCRIPT_SHA256: Readonly<{
5
+ "KCC20SnapshotBootstrap.placeholder.json": "85edea7401eb415c447e6a0d0a45e1667802a269dde9fbe33d5881c4a4de51e2";
6
+ "KCC20SnapshotController.placeholder.json": "8f90525afcc1c23240f1d18eed30b3b377a72a323e8b48925dfac53bd5aab0ae";
5
7
  "KCC20.placeholder.json": "4633b082f26adbf14600b767d6e2146e36ce67d63d8202c0281857922c05ac41";
6
8
  "KCC20FeeTicket.placeholder.json": "ed81365466ee4c44db1210b3360783af8145f74e49e847848195e09c71ad6930";
7
9
  "KCC20Orderbook.placeholder.json": "ef9fe81ff7aa2dc2df118d8d7cc126aca6f2f9c181b9c2d15727a538b23c6f71";
8
10
  "KCC20Wrapper.placeholder.json": "f3bdf09be9aa258708a306283a4278a93cfb64f35fc50ed7d316b9b189ef9030";
9
11
  "KCC20Vesting.placeholder.json": "1b84d74aa01b6a50edbff5bf1f9e988a5a6a00ec645458dfd3912ac532b77c33";
10
12
  }>;
13
+ /**
14
+ * Canonical raw artifact pins and structural metadata for signerless snapshot
15
+ * migrations. Consumers must use these values instead of maintaining their
16
+ * own copies; the raw SHA-256 pins cover the exact packaged JSON bytes.
17
+ */
18
+ export declare const KCC20_SNAPSHOT_ARTIFACT_PINS: Readonly<{
19
+ bootstrap: Readonly<{
20
+ key: "KCC20SnapshotBootstrap.placeholder.json";
21
+ contractName: "KCC20SnapshotBootstrap";
22
+ artifactSha256: "bc566a964b5feb1c2055d5130af25951142d695472287b888c5537e9a56ee3d2";
23
+ scriptLength: 33718;
24
+ stateStart: 1;
25
+ stateLength: 405;
26
+ }>;
27
+ controller: Readonly<{
28
+ key: "KCC20SnapshotController.placeholder.json";
29
+ contractName: "KCC20SnapshotController";
30
+ artifactSha256: "f0d7b082e0680a90736948cd6658ccbc8600e097d9b4d5568013acdaafb39bf5";
31
+ scriptLength: 15297;
32
+ stateStart: 1;
33
+ stateLength: 432;
34
+ }>;
35
+ }>;
36
+ /** Canonical KCC20 template committed by both snapshot contracts. */
37
+ export declare const KCC20_SNAPSHOT_TOKEN_TEMPLATE_PIN: Readonly<{
38
+ hash: "911f0638ccb7368bf36d117f1725073ae7ee487ce8b58ca3e8375051c2d40f6c";
39
+ prefixLength: 1;
40
+ suffixLength: 25439;
41
+ }>;
11
42
  export type Kcc20ArtifactKey = keyof typeof KCC20_ARTIFACT_SCRIPT_SHA256;
12
43
  export declare function isKcc20ArtifactKey(value: string): value is Kcc20ArtifactKey;
13
44
  export declare function assertKcc20ArtifactScriptHash(key: Kcc20ArtifactKey, artifact: unknown): void;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KCC20_ARTIFACT_SCRIPT_SHA256 = exports.KCC20_CURRENT_NATIVE_ARTIFACT_KEY = void 0;
3
+ exports.KCC20_SNAPSHOT_TOKEN_TEMPLATE_PIN = exports.KCC20_SNAPSHOT_ARTIFACT_PINS = exports.KCC20_ARTIFACT_SCRIPT_SHA256 = exports.KCC20_CURRENT_NATIVE_ARTIFACT_KEY = void 0;
4
4
  exports.isKcc20ArtifactKey = isKcc20ArtifactKey;
5
5
  exports.assertKcc20ArtifactScriptHash = assertKcc20ArtifactScriptHash;
6
6
  exports.requireArtifact = requireArtifact;
@@ -10,12 +10,43 @@ const sha256_1 = require("@noble/hashes/sha256");
10
10
  /** The only native KCC20 artifact used to build new transactions. */
11
11
  exports.KCC20_CURRENT_NATIVE_ARTIFACT_KEY = "KCC20.placeholder.json";
12
12
  exports.KCC20_ARTIFACT_SCRIPT_SHA256 = Object.freeze({
13
+ "KCC20SnapshotBootstrap.placeholder.json": "85edea7401eb415c447e6a0d0a45e1667802a269dde9fbe33d5881c4a4de51e2",
14
+ "KCC20SnapshotController.placeholder.json": "8f90525afcc1c23240f1d18eed30b3b377a72a323e8b48925dfac53bd5aab0ae",
13
15
  [exports.KCC20_CURRENT_NATIVE_ARTIFACT_KEY]: "4633b082f26adbf14600b767d6e2146e36ce67d63d8202c0281857922c05ac41",
14
16
  "KCC20FeeTicket.placeholder.json": "ed81365466ee4c44db1210b3360783af8145f74e49e847848195e09c71ad6930",
15
17
  "KCC20Orderbook.placeholder.json": "ef9fe81ff7aa2dc2df118d8d7cc126aca6f2f9c181b9c2d15727a538b23c6f71",
16
18
  "KCC20Wrapper.placeholder.json": "f3bdf09be9aa258708a306283a4278a93cfb64f35fc50ed7d316b9b189ef9030",
17
19
  "KCC20Vesting.placeholder.json": "1b84d74aa01b6a50edbff5bf1f9e988a5a6a00ec645458dfd3912ac532b77c33",
18
20
  });
21
+ /**
22
+ * Canonical raw artifact pins and structural metadata for signerless snapshot
23
+ * migrations. Consumers must use these values instead of maintaining their
24
+ * own copies; the raw SHA-256 pins cover the exact packaged JSON bytes.
25
+ */
26
+ exports.KCC20_SNAPSHOT_ARTIFACT_PINS = Object.freeze({
27
+ bootstrap: Object.freeze({
28
+ key: "KCC20SnapshotBootstrap.placeholder.json",
29
+ contractName: "KCC20SnapshotBootstrap",
30
+ artifactSha256: "bc566a964b5feb1c2055d5130af25951142d695472287b888c5537e9a56ee3d2",
31
+ scriptLength: 33718,
32
+ stateStart: 1,
33
+ stateLength: 405,
34
+ }),
35
+ controller: Object.freeze({
36
+ key: "KCC20SnapshotController.placeholder.json",
37
+ contractName: "KCC20SnapshotController",
38
+ artifactSha256: "f0d7b082e0680a90736948cd6658ccbc8600e097d9b4d5568013acdaafb39bf5",
39
+ scriptLength: 15297,
40
+ stateStart: 1,
41
+ stateLength: 432,
42
+ }),
43
+ });
44
+ /** Canonical KCC20 template committed by both snapshot contracts. */
45
+ exports.KCC20_SNAPSHOT_TOKEN_TEMPLATE_PIN = Object.freeze({
46
+ hash: "911f0638ccb7368bf36d117f1725073ae7ee487ce8b58ca3e8375051c2d40f6c",
47
+ prefixLength: 1,
48
+ suffixLength: 25439,
49
+ });
19
50
  function isKcc20ArtifactKey(value) {
20
51
  return Object.prototype.hasOwnProperty.call(exports.KCC20_ARTIFACT_SCRIPT_SHA256, value);
21
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/artifacts.ts"],"names":[],"mappings":";;;AAuBA,gDAKC;AAED,sEAgCC;AAED,0CAaC;AAED,gDAWC;AA1FD,2CAAgD;AAEhD,iDAA8C;AAE9C,qEAAqE;AACxD,QAAA,iCAAiC,GAC5C,wBAAiC,CAAC;AAEvB,QAAA,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,CAAC,yCAAiC,CAAC,EACjC,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,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CACzC,oCAA4B,EAC5B,KAAK,CACN,CAAC;AACJ,CAAC;AAED,SAAgB,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,6BAAiB,CACzB,mBAAmB,EACnB,2CAA2C,GAAG,EAAE,EAChD,EAAE,WAAW,EAAE,GAAG,EAAE,CACrB,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAA,eAAM,EAAC,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,oCAA4B,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,6BAAiB,CACzB,mBAAmB,EACnB,uCAAuC,GAAG,EAAE,EAC5C,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,CAC/C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,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,6BAAiB,CACzB,mBAAmB,EACnB,0CAA0C,GAAG,EAAE,EAC/C,EAAE,WAAW,EAAE,GAAG,EAAE,CACrB,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,kBAAkB,CAChC,QAA4B,EAC5B,YAAoB;IAEpB,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,6BAAiB,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"}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/artifacts.ts"],"names":[],"mappings":";;;AA0DA,gDAKC;AAED,sEAgCC;AAED,0CAaC;AAED,gDAWC;AA7HD,2CAAgD;AAEhD,iDAA8C;AAE9C,qEAAqE;AACxD,QAAA,iCAAiC,GAC5C,wBAAiC,CAAC;AAEvB,QAAA,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,yCAAyC,EAAE,kEAAkE;IAC7G,0CAA0C,EAAE,kEAAkE;IAC9G,CAAC,yCAAiC,CAAC,EACjC,kEAAkE;IACpE,iCAAiC,EAC/B,kEAAkE;IACpE,iCAAiC,EAC/B,kEAAkE;IACpE,+BAA+B,EAC7B,kEAAkE;IACpE,+BAA+B,EAC7B,kEAAkE;CACrE,CAAC,CAAC;AAEH;;;;GAIG;AACU,QAAA,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,GAAG,EAAE,yCAAyC;QAC9C,YAAY,EAAE,wBAAwB;QACtC,cAAc,EACZ,kEAAkE;QACpE,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,GAAG;KACjB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;QACxB,GAAG,EAAE,0CAA0C;QAC/C,YAAY,EAAE,yBAAyB;QACvC,cAAc,EACZ,kEAAkE;QACpE,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,GAAG;KACjB,CAAC;CACH,CAAC,CAAC;AAEH,qEAAqE;AACxD,QAAA,iCAAiC,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7D,IAAI,EAAE,kEAAkE;IACxE,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,KAAK;CACpB,CAAC,CAAC;AAIH,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CACzC,oCAA4B,EAC5B,KAAK,CACN,CAAC;AACJ,CAAC;AAED,SAAgB,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,6BAAiB,CACzB,mBAAmB,EACnB,2CAA2C,GAAG,EAAE,EAChD,EAAE,WAAW,EAAE,GAAG,EAAE,CACrB,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAA,eAAM,EAAC,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,oCAA4B,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,6BAAiB,CACzB,mBAAmB,EACnB,uCAAuC,GAAG,EAAE,EAC5C,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,CAC/C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,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,6BAAiB,CACzB,mBAAmB,EACnB,0CAA0C,GAAG,EAAE,EAC/C,EAAE,WAAW,EAAE,GAAG,EAAE,CACrB,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,kBAAkB,CAChC,QAA4B,EAC5B,YAAoB;IAEpB,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,6BAAiB,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"}
@@ -6,6 +6,7 @@ const sha256_1 = require("@noble/hashes/sha256");
6
6
  const sale_common_js_1 = require("./sale-common.js");
7
7
  const abi_js_1 = require("./abi.js");
8
8
  const operations_js_1 = require("./operations.js");
9
+ const snapshot_operation_js_1 = require("./snapshot-operation.js");
9
10
  const protocol_js_1 = require("./protocol.js");
10
11
  const deploy_receipt_js_1 = require("./deploy-receipt.js");
11
12
  const artifacts_js_1 = require("./artifacts.js");
@@ -40,20 +41,16 @@ function createKcc20PsktBuilderEngine(options) {
40
41
  throw new Error("No source provider or RPC client was supplied to the KCC20 builder");
41
42
  }
42
43
  }
43
- const kaspaWasm = new Proxy(options.wasm, {
44
- get(target, property, receiver) {
45
- if (property === "RpcClient")
46
- return InjectedRpcClient;
47
- return Reflect.get(target, property, receiver);
48
- },
49
- });
44
+ // Bundlers can freeze module namespace exports. A Proxy cannot replace a
45
+ // non-configurable RpcClient property; copy the host exports before adapting it.
46
+ const kaspaWasm = { ...options.wasm, RpcClient: InjectedRpcClient };
50
47
  const INPUT_SCHEMA = "kcc20-in-process-pskt-builder-input/v1";
51
48
  const OUTPUT_SCHEMA = "kcc20-in-process-pskt-builder-output/v1";
52
49
  const DEFAULT_DEPLOY_TKAS = 1;
53
50
  const DEFAULT_PRIORITY_FEE = 10000n;
54
51
  const DEFAULT_MATCHER_PRIORITY_FEE = 30000000n;
55
52
  const DEFAULT_WRAPPER_DEPLOY_PRIORITY_FEE = 10000000n;
56
- const DEFAULT_WRPC_URL = "ws://65.108.107.30:17210";
53
+ const DEFAULT_WRPC_URL = "wss://tn10-node.kaspa.com/testnet-10";
57
54
  const MIN_FILL_GROSS_SOMPI = 50000000n;
58
55
  const MIN_RELAY_FEE_PER_MASS_SOMPI = 100n;
59
56
  const TOCCATA_COMPUTE_BUDGET_MASS_PER_UNIT = 100n;
@@ -116,7 +113,10 @@ function createKcc20PsktBuilderEngine(options) {
116
113
  .then((artifact) => {
117
114
  if (!artifact)
118
115
  throw new Error(`Missing supplied KCC20 artifact: ${path}`);
119
- const normalized = (0, abi_js_1.normalizeSilverScriptArtifact)(artifact);
116
+ const artifactValue = artifact && typeof artifact === "object" && !Array.isArray(artifact)
117
+ ? (artifact.artifact ?? artifact)
118
+ : artifact;
119
+ const normalized = (0, abi_js_1.normalizeSilverScriptArtifact)(artifactValue);
120
120
  (0, artifacts_js_1.assertKcc20ArtifactScriptHash)(path, normalized);
121
121
  return normalized;
122
122
  })
@@ -294,6 +294,15 @@ function createKcc20PsktBuilderEngine(options) {
294
294
  function covenantScriptBuilder(kw) {
295
295
  return new kw.ScriptBuilder({ flags: { covenantsEnabled: true } });
296
296
  }
297
+ const buildSnapshotMigrationPskt = (0, snapshot_operation_js_1.createKcc20SnapshotPsktBuilder)({
298
+ wasm: options.wasm,
299
+ artifacts: options.artifacts,
300
+ artifactProvider: options.artifactProvider,
301
+ config: options.config,
302
+ sourceProvider: options.sourceProvider,
303
+ rpcClientFactory: options.rpcClientFactory,
304
+ transactionWithCalculatedFeeChange,
305
+ });
297
306
  const psktBuilderByKey = Object.freeze({
298
307
  "kcc20.deploy-token": buildKcc20DeployPskt,
299
308
  "kcc20.mint": buildKcc20MintPskt,
@@ -319,6 +328,10 @@ function createKcc20PsktBuilderEngine(options) {
319
328
  "kcc20orderbook.cancel-ask": buildWrappedCancelPskt,
320
329
  "kcc20orderbook.cancel-bid": buildWrappedCancelPskt,
321
330
  "kcc20orderbook.matcher-settle-crossed": buildWrappedCrossMatchPskt,
331
+ "kcc20-snapshot.deploy-bootstrap": buildSnapshotMigrationPskt,
332
+ "kcc20-snapshot.deploy-controller": buildSnapshotMigrationPskt,
333
+ "kcc20-snapshot.start": buildSnapshotMigrationPskt,
334
+ "kcc20-snapshot.claim": buildSnapshotMigrationPskt,
322
335
  });
323
336
  const missingBuilderKeys = operations_js_1.KCC20_BUILDER_KEYS.filter((builderKey) => !psktBuilderByKey[builderKey]);
324
337
  if (missingBuilderKeys.length) {
@@ -1851,8 +1864,7 @@ function createKcc20PsktBuilderEngine(options) {
1851
1864
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
1852
1865
  const tokenOutputSompi = parseU64(env.KCC20_WRAP_TOKEN_OUTPUT_SOMPI ||
1853
1866
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi");
1854
- const priorityFee = parseU64(env.KCC20_WRAP_PRIORITY_FEE_SOMPI ||
1855
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
1867
+ const priorityFee = parseU64(env.KCC20_WRAP_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
1856
1868
  const computeBudget = parsePositiveNumber(env.KCC20_WRAP_COMPUTE_BUDGET || 700, "computeBudget");
1857
1869
  const [wrapperArtifacts, wrappedArtifacts] = await Promise.all([
1858
1870
  readWrapperArtifacts(),
@@ -2122,8 +2134,7 @@ function createKcc20PsktBuilderEngine(options) {
2122
2134
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
2123
2135
  const tokenOutputSompi = parseU64(env.KCC20_UNWRAP_TOKEN_OUTPUT_SOMPI ||
2124
2136
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi");
2125
- const priorityFee = parseU64(env.KCC20_UNWRAP_PRIORITY_FEE_SOMPI ||
2126
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
2137
+ const priorityFee = parseU64(env.KCC20_UNWRAP_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
2127
2138
  const computeBudget = parsePositiveNumber(env.KCC20_UNWRAP_COMPUTE_BUDGET || 700, "computeBudget");
2128
2139
  const [wrapperArtifacts, wrappedArtifacts] = await Promise.all([
2129
2140
  readWrapperArtifacts(),
@@ -2451,8 +2462,7 @@ function createKcc20PsktBuilderEngine(options) {
2451
2462
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
2452
2463
  const tokenOutputSompi = parseU64(env.KCC20_ORDER_TOKEN_OUTPUT_SOMPI ||
2453
2464
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi");
2454
- const priorityFee = parseU64(env.KCC20_ORDER_PRIORITY_FEE_SOMPI ||
2455
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
2465
+ const priorityFee = parseU64(env.KCC20_ORDER_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
2456
2466
  const computeBudget = parsePositiveNumber(env.KCC20_ORDER_COMPUTE_BUDGET || 700, "computeBudget");
2457
2467
  const wrappedArtifacts = await readWrappedArtifacts();
2458
2468
  const activeUtxo = isBid ? rootUtxo : holderUtxo;
@@ -2698,8 +2708,7 @@ function createKcc20PsktBuilderEngine(options) {
2698
2708
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
2699
2709
  const tokenOutputSompi = parseU64(env.KCC20_FILL_TOKEN_OUTPUT_SOMPI ||
2700
2710
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi");
2701
- const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI ||
2702
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
2711
+ const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
2703
2712
  const computeBudget = parsePositiveNumber(env.KCC20_FILL_COMPUTE_BUDGET || 800, "computeBudget");
2704
2713
  const wrappedArtifacts = await readWrappedArtifacts();
2705
2714
  const ticketArtifacts = ticketUtxo ? await readFeeTicketArtifacts() : null;
@@ -2983,8 +2992,7 @@ function createKcc20PsktBuilderEngine(options) {
2983
2992
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
2984
2993
  const tokenOutputSompi = parseU64(env.KCC20_FILL_TOKEN_OUTPUT_SOMPI ||
2985
2994
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi");
2986
- const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI ||
2987
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
2995
+ const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
2988
2996
  const computeBudget = parsePositiveNumber(env.KCC20_FILL_COMPUTE_BUDGET || 800, "computeBudget");
2989
2997
  const wrappedArtifacts = await readWrappedArtifacts();
2990
2998
  const ticketArtifacts = ticketUtxo ? await readFeeTicketArtifacts() : null;
@@ -3389,8 +3397,7 @@ function createKcc20PsktBuilderEngine(options) {
3389
3397
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
3390
3398
  const tokenOutputSompi = parseU64(env.KCC20_FILL_TOKEN_OUTPUT_SOMPI ||
3391
3399
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi");
3392
- const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI ||
3393
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
3400
+ const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
3394
3401
  const wrappedArtifacts = await readWrappedArtifacts();
3395
3402
  const ticketArtifacts = params.feeTicketId
3396
3403
  ? await readFeeTicketArtifacts()
@@ -3752,8 +3759,7 @@ function createKcc20PsktBuilderEngine(options) {
3752
3759
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
3753
3760
  const tokenOutputSompi = parseU64(env.KCC20_FILL_TOKEN_OUTPUT_SOMPI ||
3754
3761
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi");
3755
- const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI ||
3756
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
3762
+ const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
3757
3763
  const wrappedArtifacts = await readWrappedArtifacts();
3758
3764
  const wrappedArtifact = wrappedArtifacts[0].artifact;
3759
3765
  const ticketArtifacts = params.feeTicketId
@@ -4249,8 +4255,7 @@ function createKcc20PsktBuilderEngine(options) {
4249
4255
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
4250
4256
  const configuredTokenOutputSompi = parseU64(env.KCC20_FILL_TOKEN_OUTPUT_SOMPI ||
4251
4257
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi");
4252
- const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI ||
4253
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
4258
+ const priorityFee = parseU64(env.KCC20_FILL_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
4254
4259
  const wrappedArtifacts = await readWrappedArtifacts();
4255
4260
  const ticketArtifacts = params.feeTicketId
4256
4261
  ? await readFeeTicketArtifacts()
@@ -4984,9 +4989,7 @@ function createKcc20PsktBuilderEngine(options) {
4984
4989
  DEFAULT_MATCHER_PRIORITY_FEE.toString(), "priorityFee");
4985
4990
  const networkFeeReserve = parseU64(env.KCC20_MATCHER_NETWORK_FEE_RESERVE_SOMPI || "5000000", "networkFeeReserve");
4986
4991
  const transactionFeeReserve = priorityFee + networkFeeReserve;
4987
- const computeBudget = parsePositiveNumber(env.KCC20_MATCHER_COMPUTE_BUDGET ||
4988
- env.KCC20_FILL_COMPUTE_BUDGET ||
4989
- 800, "computeBudget");
4992
+ const computeBudget = parsePositiveNumber(env.KCC20_MATCHER_COMPUTE_BUDGET || env.KCC20_FILL_COMPUTE_BUDGET || 800, "computeBudget");
4990
4993
  const privateKeyHex = String(env.KCC20_WRAPPER_OPERATOR_PRIVATE_KEY || "")
4991
4994
  .trim()
4992
4995
  .replace(/^0x/i, "");
@@ -5436,8 +5439,7 @@ function createKcc20PsktBuilderEngine(options) {
5436
5439
  const network = request.network || env.KASPA_NETWORK || "testnet-10";
5437
5440
  const walletAddress = requireKaspaAddress(request.owner?.walletAddress);
5438
5441
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
5439
- const priorityFee = parseU64(env.KCC20_CANCEL_PRIORITY_FEE_SOMPI ||
5440
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
5442
+ const priorityFee = parseU64(env.KCC20_CANCEL_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
5441
5443
  const computeBudget = parsePositiveNumber(env.KCC20_CANCEL_COMPUTE_BUDGET || 800, "computeBudget");
5442
5444
  const wrappedArtifacts = await readWrappedArtifacts();
5443
5445
  const orderState = kcc20V3WrappedStateFromUtxo(orderUtxo, canonicalTokenId, request.owner);
@@ -5655,8 +5657,7 @@ function createKcc20PsktBuilderEngine(options) {
5655
5657
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
5656
5658
  const tokenOutputSompi = assertKcc20TokenOutputSompi(parseU64(env.KCC20_MINT_TOKEN_OUTPUT_SOMPI ||
5657
5659
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi"), "mint");
5658
- const priorityFee = parseU64(env.KCC20_MINT_PRIORITY_FEE_SOMPI ||
5659
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
5660
+ const priorityFee = parseU64(env.KCC20_MINT_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
5660
5661
  const computeBudget = parsePositiveNumber(env.KCC20_MINT_COMPUTE_BUDGET || sale_common_js_1.DEFAULT_COMPUTE_BUDGET, "computeBudget");
5661
5662
  const inputState = {
5662
5663
  amount: 0n,
@@ -5986,8 +5987,7 @@ function createKcc20PsktBuilderEngine(options) {
5986
5987
  }
5987
5988
  const priorityFee = parseU64(env.KCC20_MINT_AVAILABILITY_PRIORITY_FEE_SOMPI ||
5988
5989
  DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
5989
- const computeBudget = parsePositiveNumber(env.KCC20_MINT_AVAILABILITY_COMPUTE_BUDGET ||
5990
- sale_common_js_1.DEFAULT_COMPUTE_BUDGET, "computeBudget");
5990
+ const computeBudget = parsePositiveNumber(env.KCC20_MINT_AVAILABILITY_COMPUTE_BUDGET || sale_common_js_1.DEFAULT_COMPUTE_BUDGET, "computeBudget");
5991
5991
  const rpc = new kaspaWasm.RpcClient({
5992
5992
  url: env.KASPA_WRPC_URL || DEFAULT_WRPC_URL,
5993
5993
  encoding: kaspaWasm.Encoding.Borsh,
@@ -6336,8 +6336,7 @@ function createKcc20PsktBuilderEngine(options) {
6336
6336
  const network = request.network || env.KASPA_NETWORK || "testnet-10";
6337
6337
  const walletAddress = requireKaspaAddress(request.owner?.walletAddress);
6338
6338
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
6339
- const priorityFee = parseU64(env.KCC20_REVEAL_PRIORITY_FEE_SOMPI ||
6340
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
6339
+ const priorityFee = parseU64(env.KCC20_REVEAL_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
6341
6340
  const computeBudget = parsePositiveNumber(env.KCC20_REVEAL_COMPUTE_BUDGET || sale_common_js_1.DEFAULT_COMPUTE_BUDGET, "computeBudget");
6342
6341
  const inputState = kcc20StateFromUtxo(activeTokenUtxo, request.owner);
6343
6342
  if (inputState.isMintAuthority) {
@@ -6478,8 +6477,7 @@ function createKcc20PsktBuilderEngine(options) {
6478
6477
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
6479
6478
  const tokenOutputSompi = assertKcc20TokenOutputSompi(parseU64(env.KCC20_TRANSFER_TOKEN_OUTPUT_SOMPI ||
6480
6479
  sale_common_js_1.DEFAULT_TOKEN_OUTPUT_SOMPI.toString(), "tokenOutputSompi"), "transfer");
6481
- const priorityFee = parseU64(env.KCC20_TRANSFER_PRIORITY_FEE_SOMPI ||
6482
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
6480
+ const priorityFee = parseU64(env.KCC20_TRANSFER_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
6483
6481
  const computeBudget = parsePositiveNumber(env.KCC20_TRANSFER_COMPUTE_BUDGET || sale_common_js_1.DEFAULT_COMPUTE_BUDGET, "computeBudget");
6484
6482
  const inputState = kcc20StateFromUtxo(activeHolderUtxo, request.owner);
6485
6483
  if (inputState.isMintAuthority || inputState.amount <= 0n) {
@@ -6529,7 +6527,18 @@ function createKcc20PsktBuilderEngine(options) {
6529
6527
  if (!tokenEntry) {
6530
6528
  throw new Error(`active holder UTXO ${tokenTxid}:${tokenVout} not found`);
6531
6529
  }
6532
- const spendCovenantId = covenantIdFromUtxoEntry(tokenEntry) ?? covenantId;
6530
+ const rpcScript = tokenEntry.scriptPublicKey ??
6531
+ tokenEntry.entry?.scriptPublicKey ?? tokenEntry.utxoEntry?.scriptPublicKey;
6532
+ if (!rpcScript || kw.addressFromScriptPublicKey(rpcScript, network)?.toString() !== tokenAddress) {
6533
+ throw new Error("active holder RPC script does not match rebuilt covenant state");
6534
+ }
6535
+ if (activeHolderUtxo.amountSompi != null &&
6536
+ BigInt(activeHolderUtxo.amountSompi) !== (0, sale_common_js_1.utxoAmountSompi)(tokenEntry)) {
6537
+ throw new Error("active holder KAS amount does not match RPC");
6538
+ }
6539
+ const spendCovenantId = params.activeHolderNativeCovenantId
6540
+ ? requireMatchingCovenantId(tokenEntry, covenantId, "active holder")
6541
+ : covenantIdFromUtxoEntry(tokenEntry) ?? covenantId;
6533
6542
  let outputSompi = 0n;
6534
6543
  const recipientOutputIndex = 0;
6535
6544
  const outputs = [
@@ -6656,9 +6665,13 @@ function createKcc20PsktBuilderEngine(options) {
6656
6665
  const network = request.network || env.KASPA_NETWORK || "testnet-10";
6657
6666
  const walletAddress = requireKaspaAddress(request.owner?.walletAddress);
6658
6667
  const rpcUrl = env.KASPA_WRPC_URL || DEFAULT_WRPC_URL;
6659
- const amountTkas = parseAmountTkas(env.KCC20_DEPLOY_OUTPUT_TKAS || DEFAULT_DEPLOY_TKAS);
6660
- const priorityFee = parseU64(env.KCC20_DEPLOY_PRIORITY_FEE_SOMPI ||
6661
- DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
6668
+ const requestedOutputSompi = params.outputSompi === undefined || params.outputSompi === null
6669
+ ? undefined
6670
+ : assertKcc20TokenOutputSompi(parseU64(params.outputSompi, "outputSompi"), "deploy");
6671
+ const amountTkas = requestedOutputSompi === undefined
6672
+ ? parseAmountTkas(env.KCC20_DEPLOY_OUTPUT_TKAS || DEFAULT_DEPLOY_TKAS)
6673
+ : undefined;
6674
+ const priorityFee = parseU64(env.KCC20_DEPLOY_PRIORITY_FEE_SOMPI || DEFAULT_PRIORITY_FEE.toString(), "priorityFee");
6662
6675
  const metadata = {
6663
6676
  ticker: normalizeTicker(params.ticker || ""),
6664
6677
  name: normalizeTokenName(params.tokenName || ""),
@@ -6757,7 +6770,8 @@ function createKcc20PsktBuilderEngine(options) {
6757
6770
  });
6758
6771
  const contractAddress = covenantOutputs[0].address;
6759
6772
  const canonicalCovenantId = (0, sale_common_js_1.p2shScriptHashHex)(kw, covenantOutputs[0].script);
6760
- const deploySompi = BigInt(Math.round(amountTkas * Number(sale_common_js_1.SOMPI_PER_TKAS)));
6773
+ const deploySompi = requestedOutputSompi ??
6774
+ BigInt(Math.round(amountTkas * Number(sale_common_js_1.SOMPI_PER_TKAS)));
6761
6775
  const premintOutputIndex = premintState ? covenantOutputs.length - 1 : null;
6762
6776
  const rpc = new RpcClient({
6763
6777
  url: rpcUrl,
@@ -6768,7 +6782,7 @@ function createKcc20PsktBuilderEngine(options) {
6768
6782
  try {
6769
6783
  const utxos = await getUtxosByAddresses(rpc, [walletAddress]);
6770
6784
  const outputSompi = deploySompi * BigInt(covenantOutputs.length);
6771
- const fundingEntry = (0, sale_common_js_1.selectFundingEntry)(utxos.entries, outputSompi + priorityFee + 10000000n);
6785
+ const fundingEntry = (0, sale_common_js_1.selectFundingEntry)(utxos.entries, outputSompi + priorityFee + 10000000n, [], params.fundingOutpoint);
6772
6786
  const fundingChangeOutputIndex = covenantOutputs.length;
6773
6787
  const change = (0, sale_common_js_1.utxoAmountSompi)(fundingEntry) - outputSompi - priorityFee;
6774
6788
  if (change <= 10000n) {