@kaspacom/kcc20-tx-builder 0.6.1 → 0.6.2
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 +13 -4
- 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 +13 -4
- 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 +24 -7
- 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.2",
|
|
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",
|
|
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
|
@@ -9418,8 +9418,25 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9418
9418
|
const holderUtxos = Array.isArray(params.activeHolderUtxos)
|
|
9419
9419
|
? params.activeHolderUtxos
|
|
9420
9420
|
: [];
|
|
9421
|
-
if (holderUtxos.length < 2
|
|
9422
|
-
throw new Error("
|
|
9421
|
+
if (holderUtxos.length < 2) {
|
|
9422
|
+
throw new Error("at least two KCC20 holder UTXOs are required");
|
|
9423
|
+
}
|
|
9424
|
+
|
|
9425
|
+
const maximumProfileInputs = Math.max(
|
|
9426
|
+
0,
|
|
9427
|
+
...tokenProfiles.profiles.map((p) => p.maxTokenInputs),
|
|
9428
|
+
);
|
|
9429
|
+
if (holderUtxos.length > maximumProfileInputs) {
|
|
9430
|
+
throw new Error(
|
|
9431
|
+
`consolidation exceeds the token profile input bound (${maximumProfileInputs})`,
|
|
9432
|
+
);
|
|
9433
|
+
}
|
|
9434
|
+
const sourceOutpoints = holderUtxos.map(
|
|
9435
|
+
(u) =>
|
|
9436
|
+
`${requireHex32(u.txidHex, "holder txid")}:${parseVout(u.vout, "holder vout")}`,
|
|
9437
|
+
);
|
|
9438
|
+
if (new Set(sourceOutpoints).size !== holderUtxos.length) {
|
|
9439
|
+
throw new Error("consolidation requires distinct holder outpoints");
|
|
9423
9440
|
}
|
|
9424
9441
|
|
|
9425
9442
|
const covenantId = requireHex32(
|
|
@@ -9477,7 +9494,9 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9477
9494
|
}
|
|
9478
9495
|
const profile = resolvedArtifacts[0].profile;
|
|
9479
9496
|
if (holderUtxos.length > profile.maxTokenInputs) {
|
|
9480
|
-
throw new Error(
|
|
9497
|
+
throw new Error(
|
|
9498
|
+
`consolidation exceeds the token profile input bound (${profile.maxTokenInputs})`,
|
|
9499
|
+
);
|
|
9481
9500
|
}
|
|
9482
9501
|
const artifact = resolvedArtifacts[0].artifact;
|
|
9483
9502
|
for (const peerState of states.slice(1)) {
|
|
@@ -9500,10 +9519,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9500
9519
|
const txid = requireHex32(utxo.txidHex, `holder ${index} txid`);
|
|
9501
9520
|
const vout = parseVout(utxo.vout, `holder ${index} vout`);
|
|
9502
9521
|
const address = requireKaspaAddress(utxo.address);
|
|
9503
|
-
|
|
9504
|
-
|
|
9505
|
-
states[index],
|
|
9506
|
-
);
|
|
9522
|
+
// Resolution already authenticated this profile's complete state layout.
|
|
9523
|
+
const script = resolvedArtifacts[index].script;
|
|
9507
9524
|
assertScriptAddress(
|
|
9508
9525
|
kw,
|
|
9509
9526
|
script,
|
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
|
},
|