@kaspacom/kcc20-tx-builder 0.6.0 → 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 +18 -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 +18 -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 +31 -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",
|
|
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
|
@@ -9048,6 +9048,13 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9048
9048
|
if (requestedMinterUtxos.length === 0) {
|
|
9049
9049
|
throw new Error("active KCC20 mint-authority UTXO is required");
|
|
9050
9050
|
}
|
|
9051
|
+
// The caller submits larger updates as sequential batches. Never truncate
|
|
9052
|
+
// this array: every supplied authority must be represented in the result.
|
|
9053
|
+
if (requestedMinterUtxos.length > 5) {
|
|
9054
|
+
throw new Error(
|
|
9055
|
+
"Public mint availability updates support at most 5 authorities per transaction",
|
|
9056
|
+
);
|
|
9057
|
+
}
|
|
9051
9058
|
if (typeof params.active !== "boolean") {
|
|
9052
9059
|
throw new Error("active must be a boolean");
|
|
9053
9060
|
}
|
|
@@ -9411,8 +9418,25 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9411
9418
|
const holderUtxos = Array.isArray(params.activeHolderUtxos)
|
|
9412
9419
|
? params.activeHolderUtxos
|
|
9413
9420
|
: [];
|
|
9414
|
-
if (holderUtxos.length < 2
|
|
9415
|
-
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");
|
|
9416
9440
|
}
|
|
9417
9441
|
|
|
9418
9442
|
const covenantId = requireHex32(
|
|
@@ -9470,7 +9494,9 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9470
9494
|
}
|
|
9471
9495
|
const profile = resolvedArtifacts[0].profile;
|
|
9472
9496
|
if (holderUtxos.length > profile.maxTokenInputs) {
|
|
9473
|
-
throw new Error(
|
|
9497
|
+
throw new Error(
|
|
9498
|
+
`consolidation exceeds the token profile input bound (${profile.maxTokenInputs})`,
|
|
9499
|
+
);
|
|
9474
9500
|
}
|
|
9475
9501
|
const artifact = resolvedArtifacts[0].artifact;
|
|
9476
9502
|
for (const peerState of states.slice(1)) {
|
|
@@ -9493,10 +9519,8 @@ export function createKcc20PsktBuilderEngine(
|
|
|
9493
9519
|
const txid = requireHex32(utxo.txidHex, `holder ${index} txid`);
|
|
9494
9520
|
const vout = parseVout(utxo.vout, `holder ${index} vout`);
|
|
9495
9521
|
const address = requireKaspaAddress(utxo.address);
|
|
9496
|
-
|
|
9497
|
-
|
|
9498
|
-
states[index],
|
|
9499
|
-
);
|
|
9522
|
+
// Resolution already authenticated this profile's complete state layout.
|
|
9523
|
+
const script = resolvedArtifacts[index].script;
|
|
9500
9524
|
assertScriptAddress(
|
|
9501
9525
|
kw,
|
|
9502
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
|
},
|