@kaspacom/kcc20-tx-builder 0.6.1 → 0.6.3
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.
- package/CHANGELOG.md +7 -0
- package/dist/cjs/engine.js +35 -26
- package/dist/cjs/engine.js.map +1 -1
- package/dist/cjs/token-operation.d.ts +2 -0
- package/dist/cjs/token-operation.js +7 -2
- package/dist/cjs/token-operation.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +35 -26
- package/dist/engine.js.map +1 -1
- package/dist/token-operation.d.ts +2 -0
- package/dist/token-operation.d.ts.map +1 -1
- package/dist/token-operation.js +7 -2
- package/dist/token-operation.js.map +1 -1
- package/docs/RECIPES.md +3 -1
- package/examples/shared/recipe-fixtures.ts +1 -0
- package/package.json +4 -3
- package/src/engine.ts +66 -9
- package/src/token-operation.ts +15 -2
|
@@ -100,6 +100,8 @@ export declare function buildKcc20TransferTokenOperation(wallet: Kcc20ActionWall
|
|
|
100
100
|
};
|
|
101
101
|
export declare function buildKcc20NativeConsolidationOperation(wallet: Kcc20ActionWalletInfo, input: {
|
|
102
102
|
token: Kcc20ActionTokenInfo;
|
|
103
|
+
/** From authenticated token readiness; construction rechecks every source script. */
|
|
104
|
+
tokenProfileId: string;
|
|
103
105
|
activeUtxos: readonly Kcc20IndexedCovenantUtxo[];
|
|
104
106
|
sourceOutpoints?: readonly string[];
|
|
105
107
|
}, options?: Kcc20TokenOperationOptions): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-operation.d.ts","sourceRoot":"","sources":["../src/token-operation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token-operation.d.ts","sourceRoot":"","sources":["../src/token-operation.ts"],"names":[],"mappings":"AAKA,OAAO,EAML,KAAK,wBAAwB,EAC9B,MAAM,6BAA6B,CAAC;AAcrC,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE;QACX,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAClC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;CACH;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE;IACL,KAAK,EAAE,oBAAoB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACjD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,EACD,OAAO,GAAE,0BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsIzC;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE;IACL,KAAK,EAAE,oBAAoB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,EACD,OAAO,GAAE,0BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsFzC;AAED,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE;IACL,KAAK,EAAE,oBAAoB,CAAC;IAC5B,qFAAqF;IACrF,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACjD,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,EACD,OAAO,GAAE,0BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiFzC"}
|
package/dist/token-operation.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { resolveAuthenticatedTokenProfile } from "./token-profiles.js";
|
|
2
|
+
import { BUNDLED_TOKEN_PROFILES, BUNDLED_TOKEN_PROFILE_DIGEST, } from "./token-profiles.generated.js";
|
|
1
3
|
import { ownerNativeHolderUtxos, selectActiveMinterUtxo, selectConsolidationBatch, selectOwnerNativeHolderUtxo, summarizeHolderUtxos, } from "./action-source-resolver.js";
|
|
2
4
|
import { kcc20DisplayScaleForDecimals, normalizeKcc20Decimals, normalizeKcc20OwnerIdentifier, parseKcc20DisplayAmountToBaseUnits, } from "./token-amount.js";
|
|
3
5
|
import { kcc20ValidatePaidMintAmount } from "./paid-mint-amount.js";
|
|
@@ -168,8 +170,11 @@ export function buildKcc20TransferTokenOperation(wallet, input, options = {}) {
|
|
|
168
170
|
export function buildKcc20NativeConsolidationOperation(wallet, input, options = {}) {
|
|
169
171
|
const covenantId = requireHex32(input.token.covenantId, "covenantId");
|
|
170
172
|
const owner = normalizeKcc20OwnerIdentifier(wallet.kcc20Owner, "wallet owner");
|
|
173
|
+
const profile = resolveAuthenticatedTokenProfile({ manifest: BUNDLED_TOKEN_PROFILES, sha256: BUNDLED_TOKEN_PROFILE_DIGEST }, input.tokenProfileId);
|
|
174
|
+
if (profile.maxTokenInputs < 2 || !profile.operations.includes("transfer"))
|
|
175
|
+
throw new Error("token profile does not support consolidation");
|
|
171
176
|
const compatible = ownerNativeHolderUtxos(input.activeUtxos, owner);
|
|
172
|
-
const selected = selectConsolidationBatch(compatible, input.sourceOutpoints,
|
|
177
|
+
const selected = selectConsolidationBatch(compatible, input.sourceOutpoints, profile.maxTokenInputs);
|
|
173
178
|
if (selected.length < 2)
|
|
174
179
|
throw new Error("at least two compatible KCC20 holder UTXOs are required for consolidation");
|
|
175
180
|
const nativeIds = new Set(selected.map((utxo) => utxo.covenantId ?? covenantId));
|
|
@@ -214,7 +219,7 @@ export function buildKcc20NativeConsolidationOperation(wallet, input, options =
|
|
|
214
219
|
},
|
|
215
220
|
],
|
|
216
221
|
warnings: [
|
|
217
|
-
|
|
222
|
+
`Consolidation merges between two and ${profile.maxTokenInputs} wallet-owned holder UTXOs into one larger holder UTXO.`,
|
|
218
223
|
"Repeat consolidation when more compatible holder UTXOs remain.",
|
|
219
224
|
],
|
|
220
225
|
}, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-operation.js","sourceRoot":"","sources":["../src/token-operation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"token-operation.js","sourceRoot":"","sources":["../src/token-operation.ts"],"names":[],"mappings":"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"}
|
package/docs/RECIPES.md
CHANGED
|
@@ -79,7 +79,7 @@ them with current decoded state and RPC entries for live use; see the
|
|
|
79
79
|
| `transfer` | `buildKcc20TransferTokenOperation` | Token identity/decimals, display amount, recipient owner, current holder UTXOs. |
|
|
80
80
|
| `mint` | `buildKcc20MintTokenOperation` | Token mint policy, amount, active authority UTXOs, optional recipient. |
|
|
81
81
|
| `mintAvailability` | `buildKcc20MintAvailabilityOperation` | Token, active mint-authority state, requested enabled state. |
|
|
82
|
-
| `consolidate` | `buildKcc20NativeConsolidationOperation` | Token, owner holder UTXOs, optional
|
|
82
|
+
| `consolidate` | `buildKcc20NativeConsolidationOperation` | Token, authenticated `tokenProfileId`, owner holder UTXOs, optional source outpoints. |
|
|
83
83
|
| `reveal` | `buildKcc20VerifyTokenOperation` | Token identity and a spendable holder/authority snapshot. |
|
|
84
84
|
|
|
85
85
|
```ts
|
|
@@ -173,3 +173,5 @@ operator configuration. Never enable it in the frontend, expose operator
|
|
|
173
173
|
credentials through a client configuration object, or forward all of `process.env`
|
|
174
174
|
to the engine. Public minting, transfer, and user order actions do not require
|
|
175
175
|
this matcher or KaspaCom's backend.
|
|
176
|
+
|
|
177
|
+
Native consolidation uses the bundled profile's `maxTokenInputs`; no universal three-input cap applies. Supply `tokenProfileId` from the backend consolidation status. Unknown profiles fail closed. The transaction engine independently matches source scripts to authenticated artifacts, rejects mixed templates and oversized batches, and keeps the network mass checks.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kaspacom/kcc20-tx-builder",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"description": "Runtime-independent KCC20 covenant transaction and PSKT construction primitives.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "KaspaCom",
|
|
@@ -86,11 +86,12 @@
|
|
|
86
86
|
"scripts": {
|
|
87
87
|
"build": "tsc -p tsconfig.json && tsc -p tsconfig.cjs.json && node scripts/write-cjs-package.mjs",
|
|
88
88
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
89
|
-
"test": "npm run typecheck && npm run build && node test/smoke.mjs && node test/cjs-smoke.cjs && node test/snapshot-plan.mjs && node test/token-profiles.mjs && node test/profile-transfer.mjs && node --test test/mint-availability-limit.mjs",
|
|
89
|
+
"test": "npm run typecheck && npm run build && node test/smoke.mjs && node test/cjs-smoke.cjs && node test/snapshot-plan.mjs && node test/token-profiles.mjs && node test/profile-transfer.mjs && node --test test/mint-availability-limit.mjs test/consolidation-profile.mjs test/consolidation-transaction.mjs && node test/pinned-funding.mjs",
|
|
90
90
|
"prepack": "npm test",
|
|
91
91
|
"test:examples": "npm run verify:compatibility && node scripts/test-examples.mjs --browser",
|
|
92
92
|
"verify:compatibility": "node scripts/verify-compatibility.mjs",
|
|
93
|
-
"test:snapshot:transactions": "npm run build && node test/snapshot-transactions.mjs && node test/snapshot-claims.mjs"
|
|
93
|
+
"test:snapshot:transactions": "npm run build && node test/snapshot-transactions.mjs && node test/snapshot-claims.mjs",
|
|
94
|
+
"test:consolidation:consensus": "npm run build && node scripts/test-consolidation-consensus.mjs"
|
|
94
95
|
},
|
|
95
96
|
"devDependencies": {
|
|
96
97
|
"typescript": "^5.9.3"
|
package/src/engine.ts
CHANGED
|
@@ -703,6 +703,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
703
703
|
const fundingEntry = selectFundingEntry(
|
|
704
704
|
walletUtxos.entries,
|
|
705
705
|
priorityFee + 10_000n,
|
|
706
|
+
[],
|
|
707
|
+
request.params?.fundingOutpoint,
|
|
706
708
|
);
|
|
707
709
|
const fundingInputIndex = 1;
|
|
708
710
|
const fundingChangeOutputIndex = 1;
|
|
@@ -1026,6 +1028,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
1026
1028
|
const fundingEntry = selectFundingEntry(
|
|
1027
1029
|
walletUtxos.entries,
|
|
1028
1030
|
requiredFunding,
|
|
1031
|
+
[],
|
|
1032
|
+
request.params?.fundingOutpoint,
|
|
1029
1033
|
);
|
|
1030
1034
|
const fundingInputIndex = 2;
|
|
1031
1035
|
const change =
|
|
@@ -1284,6 +1288,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
1284
1288
|
const fundingEntry = selectFundingEntry(
|
|
1285
1289
|
walletUtxos.entries,
|
|
1286
1290
|
priorityFee + 10_000n,
|
|
1291
|
+
[],
|
|
1292
|
+
request.params?.fundingOutpoint,
|
|
1287
1293
|
);
|
|
1288
1294
|
const fundingInputIndex = entries.length;
|
|
1289
1295
|
const fundingChangeOutputIndex = outputs.length;
|
|
@@ -1529,6 +1535,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
1529
1535
|
const fundingEntry = selectFundingEntry(
|
|
1530
1536
|
walletUtxos.entries,
|
|
1531
1537
|
priorityFee + 10_000n,
|
|
1538
|
+
[],
|
|
1539
|
+
request.params?.fundingOutpoint,
|
|
1532
1540
|
);
|
|
1533
1541
|
const fundingInputIndex = entries.length;
|
|
1534
1542
|
const fundingChangeOutputIndex = outputs.length;
|
|
@@ -2772,6 +2780,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
2772
2780
|
const fundingEntry = selectFundingEntry(
|
|
2773
2781
|
utxos.entries,
|
|
2774
2782
|
deploySompi * 2n + priorityFee + 10_000_000n,
|
|
2783
|
+
[],
|
|
2784
|
+
request.params?.fundingOutpoint,
|
|
2775
2785
|
);
|
|
2776
2786
|
const fundingChangeOutputIndex = 2;
|
|
2777
2787
|
const change =
|
|
@@ -3256,6 +3266,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
3256
3266
|
const fundingEntry = selectFundingEntry(
|
|
3257
3267
|
walletUtxos.entries,
|
|
3258
3268
|
requiredFunding,
|
|
3269
|
+
[],
|
|
3270
|
+
request.params?.fundingOutpoint,
|
|
3259
3271
|
);
|
|
3260
3272
|
const fundingInputIndex = 2;
|
|
3261
3273
|
const change =
|
|
@@ -3707,6 +3719,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
3707
3719
|
const fundingEntry = selectFundingEntry(
|
|
3708
3720
|
walletUtxos.entries,
|
|
3709
3721
|
requiredFunding,
|
|
3722
|
+
[],
|
|
3723
|
+
request.params?.fundingOutpoint,
|
|
3710
3724
|
);
|
|
3711
3725
|
const fundingInputIndex = 3;
|
|
3712
3726
|
const change =
|
|
@@ -4099,6 +4113,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
4099
4113
|
const fundingEntry = selectFundingEntry(
|
|
4100
4114
|
walletUtxos.entries,
|
|
4101
4115
|
requiredFunding,
|
|
4116
|
+
[],
|
|
4117
|
+
request.params?.fundingOutpoint,
|
|
4102
4118
|
);
|
|
4103
4119
|
const fundingInputIndex = 1;
|
|
4104
4120
|
const change =
|
|
@@ -4513,6 +4529,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
4513
4529
|
const fundingEntry = selectFundingEntry(
|
|
4514
4530
|
walletUtxos.entries,
|
|
4515
4531
|
requiredFunding,
|
|
4532
|
+
[],
|
|
4533
|
+
request.params?.fundingOutpoint,
|
|
4516
4534
|
);
|
|
4517
4535
|
const ticketInputIndex = ticketEntry ? 1 : -1;
|
|
4518
4536
|
const fundingInputIndex = ticketEntry ? 2 : 1;
|
|
@@ -5055,6 +5073,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
5055
5073
|
const fundingEntry = selectFundingEntry(
|
|
5056
5074
|
walletUtxos.entries,
|
|
5057
5075
|
requiredFunding,
|
|
5076
|
+
[],
|
|
5077
|
+
request.params?.fundingOutpoint,
|
|
5058
5078
|
);
|
|
5059
5079
|
const ticketInputIndex = ticketEntry ? 2 : -1;
|
|
5060
5080
|
const fundingInputIndex = ticketEntry ? 3 : 2;
|
|
@@ -5601,6 +5621,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
5601
5621
|
const fundingEntry = selectFundingEntry(
|
|
5602
5622
|
walletUtxos.entries,
|
|
5603
5623
|
requiredFunding,
|
|
5624
|
+
[],
|
|
5625
|
+
request.params?.fundingOutpoint,
|
|
5604
5626
|
);
|
|
5605
5627
|
const fundingInputIndex =
|
|
5606
5628
|
resolvedLegs.length + (sharedTicketEntry ? 1 : 0);
|
|
@@ -6301,7 +6323,7 @@ export function createKcc20PsktBuilderEngine(
|
|
|
6301
6323
|
: priorityFee + 10_000n;
|
|
6302
6324
|
let fundingEntry;
|
|
6303
6325
|
try {
|
|
6304
|
-
fundingEntry = selectFundingEntry(walletUtxos.entries, requiredFunding);
|
|
6326
|
+
fundingEntry = selectFundingEntry(walletUtxos.entries, requiredFunding, [], request.params?.fundingOutpoint);
|
|
6305
6327
|
} catch (error) {
|
|
6306
6328
|
if (totalSellerFundedHolderTopUpSompi > 0n) {
|
|
6307
6329
|
throw kcc20PsktBuilderError(
|
|
@@ -7046,7 +7068,7 @@ export function createKcc20PsktBuilderEngine(
|
|
|
7046
7068
|
: priorityFee + 10_000n;
|
|
7047
7069
|
let fundingEntry;
|
|
7048
7070
|
try {
|
|
7049
|
-
fundingEntry = selectFundingEntry(walletUtxos.entries, requiredFunding);
|
|
7071
|
+
fundingEntry = selectFundingEntry(walletUtxos.entries, requiredFunding, [], request.params?.fundingOutpoint);
|
|
7050
7072
|
} catch (error) {
|
|
7051
7073
|
if (totalSellerFundedHolderTopUpSompi > 0n) {
|
|
7052
7074
|
throw kcc20PsktBuilderError(
|
|
@@ -7495,6 +7517,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
7495
7517
|
const fundingEntry = selectFundingEntry(
|
|
7496
7518
|
walletUtxos.entries,
|
|
7497
7519
|
requiredFunding,
|
|
7520
|
+
[],
|
|
7521
|
+
request.params?.fundingOutpoint,
|
|
7498
7522
|
);
|
|
7499
7523
|
const fundingInputIndex = entries.length;
|
|
7500
7524
|
const change = utxoAmountSompi(fundingEntry) - priorityFee;
|
|
@@ -8050,6 +8074,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
8050
8074
|
const fundingEntry = selectFundingEntry(
|
|
8051
8075
|
walletUtxos.entries,
|
|
8052
8076
|
requiredFunding,
|
|
8077
|
+
[],
|
|
8078
|
+
request.params?.fundingOutpoint,
|
|
8053
8079
|
);
|
|
8054
8080
|
const ticketInputIndex = ticketEntry ? 2 : -1;
|
|
8055
8081
|
const fundingInputIndex = ticketEntry ? 3 : 2;
|
|
@@ -8463,6 +8489,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
8463
8489
|
const fundingEntry = selectFundingEntry(
|
|
8464
8490
|
walletUtxos.entries,
|
|
8465
8491
|
requiredFunding,
|
|
8492
|
+
[],
|
|
8493
|
+
request.params?.fundingOutpoint,
|
|
8466
8494
|
);
|
|
8467
8495
|
const fundingInputIndex = 1;
|
|
8468
8496
|
const change =
|
|
@@ -8855,6 +8883,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
8855
8883
|
const fundingEntry = selectFundingEntry(
|
|
8856
8884
|
walletUtxos.entries,
|
|
8857
8885
|
requiredFunding,
|
|
8886
|
+
[],
|
|
8887
|
+
request.params?.fundingOutpoint,
|
|
8858
8888
|
);
|
|
8859
8889
|
const fundingInputIndex = 1;
|
|
8860
8890
|
const change =
|
|
@@ -9227,6 +9257,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9227
9257
|
const fundingEntry = selectFundingEntry(
|
|
9228
9258
|
walletUtxos.entries,
|
|
9229
9259
|
priorityFee + 10_000n,
|
|
9260
|
+
[],
|
|
9261
|
+
request.params?.fundingOutpoint,
|
|
9230
9262
|
);
|
|
9231
9263
|
const fundingInputIndex = resolvedLanes.length;
|
|
9232
9264
|
const fundingChange = BigInt(fundingEntry.amount) - priorityFee;
|
|
@@ -9418,8 +9450,25 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9418
9450
|
const holderUtxos = Array.isArray(params.activeHolderUtxos)
|
|
9419
9451
|
? params.activeHolderUtxos
|
|
9420
9452
|
: [];
|
|
9421
|
-
if (holderUtxos.length < 2
|
|
9422
|
-
throw new Error("
|
|
9453
|
+
if (holderUtxos.length < 2) {
|
|
9454
|
+
throw new Error("at least two KCC20 holder UTXOs are required");
|
|
9455
|
+
}
|
|
9456
|
+
|
|
9457
|
+
const maximumProfileInputs = Math.max(
|
|
9458
|
+
0,
|
|
9459
|
+
...tokenProfiles.profiles.map((p) => p.maxTokenInputs),
|
|
9460
|
+
);
|
|
9461
|
+
if (holderUtxos.length > maximumProfileInputs) {
|
|
9462
|
+
throw new Error(
|
|
9463
|
+
`consolidation exceeds the token profile input bound (${maximumProfileInputs})`,
|
|
9464
|
+
);
|
|
9465
|
+
}
|
|
9466
|
+
const sourceOutpoints = holderUtxos.map(
|
|
9467
|
+
(u) =>
|
|
9468
|
+
`${requireHex32(u.txidHex, "holder txid")}:${parseVout(u.vout, "holder vout")}`,
|
|
9469
|
+
);
|
|
9470
|
+
if (new Set(sourceOutpoints).size !== holderUtxos.length) {
|
|
9471
|
+
throw new Error("consolidation requires distinct holder outpoints");
|
|
9423
9472
|
}
|
|
9424
9473
|
|
|
9425
9474
|
const covenantId = requireHex32(
|
|
@@ -9477,7 +9526,9 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9477
9526
|
}
|
|
9478
9527
|
const profile = resolvedArtifacts[0].profile;
|
|
9479
9528
|
if (holderUtxos.length > profile.maxTokenInputs) {
|
|
9480
|
-
throw new Error(
|
|
9529
|
+
throw new Error(
|
|
9530
|
+
`consolidation exceeds the token profile input bound (${profile.maxTokenInputs})`,
|
|
9531
|
+
);
|
|
9481
9532
|
}
|
|
9482
9533
|
const artifact = resolvedArtifacts[0].artifact;
|
|
9483
9534
|
for (const peerState of states.slice(1)) {
|
|
@@ -9500,10 +9551,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9500
9551
|
const txid = requireHex32(utxo.txidHex, `holder ${index} txid`);
|
|
9501
9552
|
const vout = parseVout(utxo.vout, `holder ${index} vout`);
|
|
9502
9553
|
const address = requireKaspaAddress(utxo.address);
|
|
9503
|
-
|
|
9504
|
-
|
|
9505
|
-
states[index],
|
|
9506
|
-
);
|
|
9554
|
+
// Resolution already authenticated this profile's complete state layout.
|
|
9555
|
+
const script = resolvedArtifacts[index].script;
|
|
9507
9556
|
assertScriptAddress(
|
|
9508
9557
|
kw,
|
|
9509
9558
|
script,
|
|
@@ -9581,6 +9630,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9581
9630
|
const fundingEntry = selectFundingEntry(
|
|
9582
9631
|
walletUtxos.entries,
|
|
9583
9632
|
requiredFunding,
|
|
9633
|
+
[],
|
|
9634
|
+
request.params?.fundingOutpoint,
|
|
9584
9635
|
);
|
|
9585
9636
|
const fundingInputIndex = entries.length;
|
|
9586
9637
|
const change = utxoAmountSompi(fundingEntry) - priorityFee;
|
|
@@ -9785,6 +9836,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9785
9836
|
const fundingEntry = selectFundingEntry(
|
|
9786
9837
|
walletUtxos.entries,
|
|
9787
9838
|
requiredFunding,
|
|
9839
|
+
[],
|
|
9840
|
+
request.params?.fundingOutpoint,
|
|
9788
9841
|
);
|
|
9789
9842
|
const fundingInputIndex = 1;
|
|
9790
9843
|
const change = utxoAmountSompi(fundingEntry) - priorityFee;
|
|
@@ -10068,6 +10121,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
10068
10121
|
const fundingEntry = selectFundingEntry(
|
|
10069
10122
|
walletUtxos.entries,
|
|
10070
10123
|
requiredFunding,
|
|
10124
|
+
[],
|
|
10125
|
+
request.params?.fundingOutpoint,
|
|
10071
10126
|
);
|
|
10072
10127
|
const fundingInputIndex = 1;
|
|
10073
10128
|
const change =
|
|
@@ -10625,6 +10680,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
10625
10680
|
const fundingEntry = selectFundingEntry(
|
|
10626
10681
|
utxos.entries,
|
|
10627
10682
|
deploySompi + priorityFee + 10_000_000n,
|
|
10683
|
+
[],
|
|
10684
|
+
request.params?.fundingOutpoint,
|
|
10628
10685
|
);
|
|
10629
10686
|
const created = await createTransactions({
|
|
10630
10687
|
entries: [fundingEntry],
|
package/src/token-operation.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import { resolveAuthenticatedTokenProfile } from "./token-profiles.js";
|
|
2
|
+
import {
|
|
3
|
+
BUNDLED_TOKEN_PROFILES,
|
|
4
|
+
BUNDLED_TOKEN_PROFILE_DIGEST,
|
|
5
|
+
} from "./token-profiles.generated.js";
|
|
1
6
|
import {
|
|
2
7
|
ownerNativeHolderUtxos,
|
|
3
8
|
selectActiveMinterUtxo,
|
|
@@ -293,6 +298,8 @@ export function buildKcc20NativeConsolidationOperation(
|
|
|
293
298
|
wallet: Kcc20ActionWalletInfo,
|
|
294
299
|
input: {
|
|
295
300
|
token: Kcc20ActionTokenInfo;
|
|
301
|
+
/** From authenticated token readiness; construction rechecks every source script. */
|
|
302
|
+
tokenProfileId: string;
|
|
296
303
|
activeUtxos: readonly Kcc20IndexedCovenantUtxo[];
|
|
297
304
|
sourceOutpoints?: readonly string[];
|
|
298
305
|
},
|
|
@@ -303,11 +310,17 @@ export function buildKcc20NativeConsolidationOperation(
|
|
|
303
310
|
wallet.kcc20Owner,
|
|
304
311
|
"wallet owner",
|
|
305
312
|
);
|
|
313
|
+
const profile = resolveAuthenticatedTokenProfile(
|
|
314
|
+
{ manifest: BUNDLED_TOKEN_PROFILES, sha256: BUNDLED_TOKEN_PROFILE_DIGEST },
|
|
315
|
+
input.tokenProfileId,
|
|
316
|
+
);
|
|
317
|
+
if (profile.maxTokenInputs < 2 || !profile.operations.includes("transfer"))
|
|
318
|
+
throw new Error("token profile does not support consolidation");
|
|
306
319
|
const compatible = ownerNativeHolderUtxos(input.activeUtxos, owner);
|
|
307
320
|
const selected = selectConsolidationBatch(
|
|
308
321
|
compatible,
|
|
309
322
|
input.sourceOutpoints,
|
|
310
|
-
|
|
323
|
+
profile.maxTokenInputs,
|
|
311
324
|
);
|
|
312
325
|
if (selected.length < 2)
|
|
313
326
|
throw new Error(
|
|
@@ -365,7 +378,7 @@ export function buildKcc20NativeConsolidationOperation(
|
|
|
365
378
|
},
|
|
366
379
|
],
|
|
367
380
|
warnings: [
|
|
368
|
-
|
|
381
|
+
`Consolidation merges between two and ${profile.maxTokenInputs} wallet-owned holder UTXOs into one larger holder UTXO.`,
|
|
369
382
|
"Repeat consolidation when more compatible holder UTXOs remain.",
|
|
370
383
|
],
|
|
371
384
|
},
|