@kaspacom/kcc20-tx-builder 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +104 -0
- package/artifacts/KCC20.placeholder.json +77479 -0
- package/artifacts/KCC20FeeTicket.placeholder.json +16846 -0
- package/artifacts/KCC20Orderbook.placeholder.json +78001 -0
- package/artifacts/KCC20Vesting.placeholder.json +4298 -0
- package/artifacts/KCC20Wrapper.placeholder.json +12246 -0
- package/dist/abi.d.ts +44 -0
- package/dist/abi.d.ts.map +1 -0
- package/dist/abi.js +336 -0
- package/dist/abi.js.map +1 -0
- package/dist/action-source-resolver.d.ts +80 -0
- package/dist/action-source-resolver.d.ts.map +1 -0
- package/dist/action-source-resolver.js +412 -0
- package/dist/action-source-resolver.js.map +1 -0
- package/dist/artifacts.d.ts +14 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +44 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/builder.d.ts +12 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +18 -0
- package/dist/builder.js.map +1 -0
- package/dist/cjs/abi.d.ts +43 -0
- package/dist/cjs/abi.js +361 -0
- package/dist/cjs/abi.js.map +1 -0
- package/dist/cjs/action-source-resolver.d.ts +79 -0
- package/dist/cjs/action-source-resolver.js +435 -0
- package/dist/cjs/action-source-resolver.js.map +1 -0
- package/dist/cjs/artifacts.d.ts +13 -0
- package/dist/cjs/artifacts.js +51 -0
- package/dist/cjs/artifacts.js.map +1 -0
- package/dist/cjs/builder.d.ts +11 -0
- package/dist/cjs/builder.js +22 -0
- package/dist/cjs/builder.js.map +1 -0
- package/dist/cjs/deploy-operation.d.ts +103 -0
- package/dist/cjs/deploy-operation.js +335 -0
- package/dist/cjs/deploy-operation.js.map +1 -0
- package/dist/cjs/encoding.d.ts +5 -0
- package/dist/cjs/encoding.js +51 -0
- package/dist/cjs/encoding.js.map +1 -0
- package/dist/cjs/engine.d.ts +40 -0
- package/dist/cjs/engine.js +8972 -0
- package/dist/cjs/engine.js.map +1 -0
- package/dist/cjs/errors.d.ts +7 -0
- package/dist/cjs/errors.js +23 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/fee-ticket-operation.d.ts +204 -0
- package/dist/cjs/fee-ticket-operation.js +327 -0
- package/dist/cjs/fee-ticket-operation.js.map +1 -0
- package/dist/cjs/index.d.ts +27 -0
- package/dist/cjs/index.js +45 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/ladder-limit-orders.d.ts +41 -0
- package/dist/cjs/ladder-limit-orders.js +129 -0
- package/dist/cjs/ladder-limit-orders.js.map +1 -0
- package/dist/cjs/mint-availability-operation.d.ts +56 -0
- package/dist/cjs/mint-availability-operation.js +95 -0
- package/dist/cjs/mint-availability-operation.js.map +1 -0
- package/dist/cjs/models.d.ts +90 -0
- package/dist/cjs/models.js +6 -0
- package/dist/cjs/models.js.map +1 -0
- package/dist/cjs/operations.d.ts +6 -0
- package/dist/cjs/operations.js +41 -0
- package/dist/cjs/operations.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/paid-mint-amount.d.ts +69 -0
- package/dist/cjs/paid-mint-amount.js +281 -0
- package/dist/cjs/paid-mint-amount.js.map +1 -0
- package/dist/cjs/protocol.d.ts +21 -0
- package/dist/cjs/protocol.js +25 -0
- package/dist/cjs/protocol.js.map +1 -0
- package/dist/cjs/runtime.d.ts +27 -0
- package/dist/cjs/runtime.js +3 -0
- package/dist/cjs/runtime.js.map +1 -0
- package/dist/cjs/sale-common.d.ts +287 -0
- package/dist/cjs/sale-common.js +928 -0
- package/dist/cjs/sale-common.js.map +1 -0
- package/dist/cjs/source-provider.d.ts +11 -0
- package/dist/cjs/source-provider.js +3 -0
- package/dist/cjs/source-provider.js.map +1 -0
- package/dist/cjs/source-validation.d.ts +9 -0
- package/dist/cjs/source-validation.js +33 -0
- package/dist/cjs/source-validation.js.map +1 -0
- package/dist/cjs/token-amount.d.ts +31 -0
- package/dist/cjs/token-amount.js +252 -0
- package/dist/cjs/token-amount.js.map +1 -0
- package/dist/cjs/token-operation.d.ts +135 -0
- package/dist/cjs/token-operation.js +236 -0
- package/dist/cjs/token-operation.js.map +1 -0
- package/dist/cjs/trade-fee.d.ts +60 -0
- package/dist/cjs/trade-fee.js +185 -0
- package/dist/cjs/trade-fee.js.map +1 -0
- package/dist/cjs/trading-operation.d.ts +212 -0
- package/dist/cjs/trading-operation.js +587 -0
- package/dist/cjs/trading-operation.js.map +1 -0
- package/dist/cjs/verify-operation.d.ts +79 -0
- package/dist/cjs/verify-operation.js +246 -0
- package/dist/cjs/verify-operation.js.map +1 -0
- package/dist/cjs/wallet-operation.d.ts +52 -0
- package/dist/cjs/wallet-operation.js +58 -0
- package/dist/cjs/wallet-operation.js.map +1 -0
- package/dist/cjs/wasm-provider.d.ts +15 -0
- package/dist/cjs/wasm-provider.js +20 -0
- package/dist/cjs/wasm-provider.js.map +1 -0
- package/dist/cjs/wrapper-operation.d.ts +196 -0
- package/dist/cjs/wrapper-operation.js +317 -0
- package/dist/cjs/wrapper-operation.js.map +1 -0
- package/dist/deploy-operation.d.ts +104 -0
- package/dist/deploy-operation.d.ts.map +1 -0
- package/dist/deploy-operation.js +327 -0
- package/dist/deploy-operation.js.map +1 -0
- package/dist/encoding.d.ts +6 -0
- package/dist/encoding.d.ts.map +1 -0
- package/dist/encoding.js +44 -0
- package/dist/encoding.js.map +1 -0
- package/dist/engine.d.ts +41 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +8969 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts +8 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +18 -0
- package/dist/errors.js.map +1 -0
- package/dist/fee-ticket-operation.d.ts +205 -0
- package/dist/fee-ticket-operation.d.ts.map +1 -0
- package/dist/fee-ticket-operation.js +320 -0
- package/dist/fee-ticket-operation.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/ladder-limit-orders.d.ts +42 -0
- package/dist/ladder-limit-orders.d.ts.map +1 -0
- package/dist/ladder-limit-orders.js +121 -0
- package/dist/ladder-limit-orders.js.map +1 -0
- package/dist/mint-availability-operation.d.ts +57 -0
- package/dist/mint-availability-operation.d.ts.map +1 -0
- package/dist/mint-availability-operation.js +91 -0
- package/dist/mint-availability-operation.js.map +1 -0
- package/dist/models.d.ts +91 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +3 -0
- package/dist/models.js.map +1 -0
- package/dist/operations.d.ts +7 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +36 -0
- package/dist/operations.js.map +1 -0
- package/dist/paid-mint-amount.d.ts +70 -0
- package/dist/paid-mint-amount.d.ts.map +1 -0
- package/dist/paid-mint-amount.js +268 -0
- package/dist/paid-mint-amount.js.map +1 -0
- package/dist/protocol.d.ts +22 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +22 -0
- package/dist/protocol.js.map +1 -0
- package/dist/runtime.d.ts +28 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +2 -0
- package/dist/runtime.js.map +1 -0
- package/dist/sale-common.d.ts +288 -0
- package/dist/sale-common.d.ts.map +1 -0
- package/dist/sale-common.js +844 -0
- package/dist/sale-common.js.map +1 -0
- package/dist/source-provider.d.ts +12 -0
- package/dist/source-provider.d.ts.map +1 -0
- package/dist/source-provider.js +2 -0
- package/dist/source-provider.js.map +1 -0
- package/dist/source-validation.d.ts +10 -0
- package/dist/source-validation.d.ts.map +1 -0
- package/dist/source-validation.js +28 -0
- package/dist/source-validation.js.map +1 -0
- package/dist/token-amount.d.ts +32 -0
- package/dist/token-amount.d.ts.map +1 -0
- package/dist/token-amount.js +237 -0
- package/dist/token-amount.js.map +1 -0
- package/dist/token-operation.d.ts +136 -0
- package/dist/token-operation.d.ts.map +1 -0
- package/dist/token-operation.js +231 -0
- package/dist/token-operation.js.map +1 -0
- package/dist/trade-fee.d.ts +61 -0
- package/dist/trade-fee.d.ts.map +1 -0
- package/dist/trade-fee.js +173 -0
- package/dist/trade-fee.js.map +1 -0
- package/dist/trading-operation.d.ts +213 -0
- package/dist/trading-operation.d.ts.map +1 -0
- package/dist/trading-operation.js +580 -0
- package/dist/trading-operation.js.map +1 -0
- package/dist/verify-operation.d.ts +80 -0
- package/dist/verify-operation.d.ts.map +1 -0
- package/dist/verify-operation.js +243 -0
- package/dist/verify-operation.js.map +1 -0
- package/dist/wallet-operation.d.ts +53 -0
- package/dist/wallet-operation.d.ts.map +1 -0
- package/dist/wallet-operation.js +55 -0
- package/dist/wallet-operation.js.map +1 -0
- package/dist/wasm-provider.d.ts +16 -0
- package/dist/wasm-provider.d.ts.map +1 -0
- package/dist/wasm-provider.js +17 -0
- package/dist/wasm-provider.js.map +1 -0
- package/dist/wrapper-operation.d.ts +197 -0
- package/dist/wrapper-operation.d.ts.map +1 -0
- package/dist/wrapper-operation.js +311 -0
- package/dist/wrapper-operation.js.map +1 -0
- package/index.d.ts +1 -0
- package/package.json +84 -0
- package/src/abi.ts +493 -0
- package/src/action-source-resolver.ts +660 -0
- package/src/artifacts.ts +87 -0
- package/src/builder.ts +37 -0
- package/src/deploy-operation.ts +458 -0
- package/src/encoding.ts +58 -0
- package/src/engine.ts +13226 -0
- package/src/errors.ts +35 -0
- package/src/fee-ticket-operation.ts +518 -0
- package/src/index.ts +27 -0
- package/src/ladder-limit-orders.ts +184 -0
- package/src/mint-availability-operation.ts +146 -0
- package/src/models.ts +103 -0
- package/src/operations.ts +46 -0
- package/src/paid-mint-amount.ts +402 -0
- package/src/protocol.ts +28 -0
- package/src/runtime.ts +29 -0
- package/src/sale-common.ts +1238 -0
- package/src/source-provider.ts +12 -0
- package/src/source-validation.ts +47 -0
- package/src/token-amount.ts +302 -0
- package/src/token-operation.ts +384 -0
- package/src/trade-fee.ts +264 -0
- package/src/trading-operation.ts +842 -0
- package/src/verify-operation.ts +400 -0
- package/src/wallet-operation.ts +86 -0
- package/src/wasm-provider.ts +32 -0
- package/src/wrapper-operation.ts +531 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export interface Kcc20VerifyWalletInfo {
|
|
2
|
+
walletAddress: string;
|
|
3
|
+
kcc20Owner: string;
|
|
4
|
+
}
|
|
5
|
+
export interface Kcc20VerifyDeployReceipt {
|
|
6
|
+
amountSompi?: string | null;
|
|
7
|
+
stateAmount?: string | null;
|
|
8
|
+
tokenAmount?: string | null;
|
|
9
|
+
owner?: string | null;
|
|
10
|
+
ownerScheme?: number | null;
|
|
11
|
+
borrowScheme?: number | null;
|
|
12
|
+
borrowGuard?: string | null;
|
|
13
|
+
extensionCommitment?: string | null;
|
|
14
|
+
isMintAuthority?: boolean | null;
|
|
15
|
+
decimals?: string | number | null;
|
|
16
|
+
mintPolicy?: number | null;
|
|
17
|
+
extension?: Record<string, unknown> | null;
|
|
18
|
+
}
|
|
19
|
+
export interface Kcc20VerifyActiveTokenUtxo {
|
|
20
|
+
txidHex: string;
|
|
21
|
+
vout: number;
|
|
22
|
+
address: string;
|
|
23
|
+
amountSompi?: string | null;
|
|
24
|
+
action?: string | null;
|
|
25
|
+
state?: Record<string, unknown> | null;
|
|
26
|
+
}
|
|
27
|
+
export interface Kcc20BuildVerifyOperationInput {
|
|
28
|
+
covenantId: string;
|
|
29
|
+
activeTokenUtxo: Kcc20VerifyActiveTokenUtxo;
|
|
30
|
+
deployReceipt?: Kcc20VerifyDeployReceipt | null;
|
|
31
|
+
ticker?: string | null;
|
|
32
|
+
tokenName?: string | null;
|
|
33
|
+
decimals?: string | number | null;
|
|
34
|
+
mintPolicy?: Record<string, unknown> | null;
|
|
35
|
+
tokenIdentity?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface Kcc20VerifyOperationOptions {
|
|
38
|
+
network?: string;
|
|
39
|
+
createdAt?: string;
|
|
40
|
+
requestId?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Builds the complete verify/reveal wallet operation from an indexed source
|
|
44
|
+
* and the deploy receipt produced by the shared deploy PSKT builder.
|
|
45
|
+
*
|
|
46
|
+
* The host remains responsible for checking that the outpoint is live. All
|
|
47
|
+
* protocol calculations and operation planning stay in this package.
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildKcc20VerifyTokenOperation(walletInfo: Kcc20VerifyWalletInfo, input: Kcc20BuildVerifyOperationInput, options?: Kcc20VerifyOperationOptions): {
|
|
50
|
+
requestId: string;
|
|
51
|
+
description: string;
|
|
52
|
+
payload: {
|
|
53
|
+
params: Record<string, unknown>;
|
|
54
|
+
signing: {
|
|
55
|
+
standard: string;
|
|
56
|
+
walletAction: string;
|
|
57
|
+
status: string;
|
|
58
|
+
builderKey: string;
|
|
59
|
+
builderStatus: string;
|
|
60
|
+
submitTransactionSupported: boolean;
|
|
61
|
+
missingDependencies: string[];
|
|
62
|
+
missingSources: never[];
|
|
63
|
+
};
|
|
64
|
+
sourceRequirements: Record<string, unknown>[];
|
|
65
|
+
signerRequirements: Record<string, unknown>[];
|
|
66
|
+
warnings: string[];
|
|
67
|
+
tokenIdentity?: Record<string, unknown> | undefined;
|
|
68
|
+
schema: string;
|
|
69
|
+
status: string;
|
|
70
|
+
requestId: string;
|
|
71
|
+
chain: string;
|
|
72
|
+
network: string;
|
|
73
|
+
createdAt: string;
|
|
74
|
+
owner: import("./wallet-operation.js").Kcc20WalletOperationOwner;
|
|
75
|
+
operation: string;
|
|
76
|
+
contract: string;
|
|
77
|
+
action: string;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildKcc20VerifyTokenOperation = buildKcc20VerifyTokenOperation;
|
|
4
|
+
const paid_mint_amount_js_1 = require("./paid-mint-amount.js");
|
|
5
|
+
const wallet_operation_js_1 = require("./wallet-operation.js");
|
|
6
|
+
const HEX_64_RE = /^[a-f0-9]{64}$/;
|
|
7
|
+
/**
|
|
8
|
+
* Builds the complete verify/reveal wallet operation from an indexed source
|
|
9
|
+
* and the deploy receipt produced by the shared deploy PSKT builder.
|
|
10
|
+
*
|
|
11
|
+
* The host remains responsible for checking that the outpoint is live. All
|
|
12
|
+
* protocol calculations and operation planning stay in this package.
|
|
13
|
+
*/
|
|
14
|
+
function buildKcc20VerifyTokenOperation(walletInfo, input, options = {}) {
|
|
15
|
+
const covenantId = requireHex64(input.covenantId, "covenantId");
|
|
16
|
+
const owner = requireHex64(walletInfo.kcc20Owner, "kcc20Owner");
|
|
17
|
+
const source = normalizeVerifySource(input.activeTokenUtxo);
|
|
18
|
+
const receipt = input.deployReceipt ?? undefined;
|
|
19
|
+
const indexedState = input.activeTokenUtxo.state ?? {};
|
|
20
|
+
const stateOwner = requireHex64(firstDefined(indexedState["owner"], indexedState["ownerIdentifier"], receipt?.owner), "active token owner");
|
|
21
|
+
const stateAmount = requireUnsignedInteger(firstDefined(indexedState["amount"], indexedState["stateAmount"], indexedState["tokenAmount"], receipt?.stateAmount, receipt?.tokenAmount), "active token amount");
|
|
22
|
+
const extensionCommitment = requireHex64(firstDefined(indexedState["extensionCommitment"], receipt?.extensionCommitment), "extensionCommitment");
|
|
23
|
+
const extension = recordValue(indexedState["extension"]) ?? receipt?.extension ?? undefined;
|
|
24
|
+
const isMintAuthority = booleanValue(indexedState["isMintAuthority"]) ??
|
|
25
|
+
booleanValue(indexedState["isMinter"]) ??
|
|
26
|
+
booleanValue(receipt?.isMintAuthority) ??
|
|
27
|
+
stateAmount === "0";
|
|
28
|
+
const revealMode = isMintAuthority ? "mint" : "self-transfer";
|
|
29
|
+
const decimals = resolveDecimals(firstDefined(input.decimals, receipt?.decimals, indexedState["decimals"]), firstDefined(indexedState["tokenDisplayScale"], indexedState["priceScale"], indexedState["displayScale"], extension?.["displayScale"]));
|
|
30
|
+
const tokenDisplayScale = (10n ** BigInt(decimals)).toString();
|
|
31
|
+
const mintPolicyValue = integerValue(firstDefined(receipt?.mintPolicy, indexedState["mintPolicy"], extension?.["mintPolicy"], input.mintPolicy?.["policyValue"]));
|
|
32
|
+
const mintPriceSompi = requireUnsignedInteger(firstDefined(extension?.["mintPriceSompi"], indexedState["mintPriceSompi"], indexedState["mintPricePerTokenSompi"], input.mintPolicy?.["mintPricePerTokenSompi"], "0"), "mint price");
|
|
33
|
+
const protocolFeeBps = optionalBps(firstDefined(extension?.["protocolFeeBps"], indexedState["protocolFeeBps"], indexedState["feeBps"], input.mintPolicy?.["protocolFeeBps"]));
|
|
34
|
+
const remainingSupply = optionalUnsignedInteger(firstDefined(extension?.["remainingSupply"], indexedState["remainingSupply"], input.mintPolicy?.["remainingSupply"]), "remaining supply");
|
|
35
|
+
const tokenAmount = isMintAuthority
|
|
36
|
+
? revealMintAmount({
|
|
37
|
+
mintPriceSompi,
|
|
38
|
+
priceScale: tokenDisplayScale,
|
|
39
|
+
protocolFeeBps,
|
|
40
|
+
remainingSupply,
|
|
41
|
+
})
|
|
42
|
+
: undefined;
|
|
43
|
+
const activeTokenUtxo = {
|
|
44
|
+
...source,
|
|
45
|
+
state: {
|
|
46
|
+
...indexedState,
|
|
47
|
+
owner: stateOwner,
|
|
48
|
+
ownerIdentifier: stateOwner,
|
|
49
|
+
ownerScheme: integerValue(firstDefined(indexedState["ownerScheme"], receipt?.ownerScheme)) ?? 0,
|
|
50
|
+
stateOwnerType: integerValue(firstDefined(indexedState["stateOwnerType"], receipt?.ownerScheme)) ?? 0,
|
|
51
|
+
borrowScheme: integerValue(firstDefined(indexedState["borrowScheme"], receipt?.borrowScheme)) ?? 0,
|
|
52
|
+
borrowGuard: optionalHex64(firstDefined(indexedState["borrowGuard"], receipt?.borrowGuard)) ?? "0".repeat(64),
|
|
53
|
+
extensionCommitment,
|
|
54
|
+
stateAmount,
|
|
55
|
+
tokenAmount: stateAmount,
|
|
56
|
+
amount: stateAmount,
|
|
57
|
+
balance: stateAmount,
|
|
58
|
+
isMintAuthority,
|
|
59
|
+
isMinter: isMintAuthority,
|
|
60
|
+
...(extension ? { extension } : {}),
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
const mintPolicy = input.mintPolicy ??
|
|
64
|
+
(extension || mintPolicyValue !== undefined
|
|
65
|
+
? {
|
|
66
|
+
policy: mintPolicyValue === 2
|
|
67
|
+
? "public"
|
|
68
|
+
: mintPolicyValue === 1
|
|
69
|
+
? "controlled"
|
|
70
|
+
: "fixed",
|
|
71
|
+
policyValue: mintPolicyValue,
|
|
72
|
+
remainingSupply,
|
|
73
|
+
mintPricePerTokenSompi: mintPriceSompi,
|
|
74
|
+
protocolFeeBps,
|
|
75
|
+
publicMintActive: firstDefined(extension?.["publicMintActive"], indexedState["publicMintActive"]),
|
|
76
|
+
...(extension ? { extension } : {}),
|
|
77
|
+
}
|
|
78
|
+
: null);
|
|
79
|
+
return (0, wallet_operation_js_1.buildKcc20WalletOperationFromPlan)(walletInfo, {
|
|
80
|
+
builderKey: "kcc20.reveal-token",
|
|
81
|
+
operation: "verify-token",
|
|
82
|
+
contract: "KCC20",
|
|
83
|
+
action: "reveal",
|
|
84
|
+
description: "Build a KCC20 verify/reveal transaction request.",
|
|
85
|
+
params: {
|
|
86
|
+
covenantId,
|
|
87
|
+
revealMode,
|
|
88
|
+
tokenAmount,
|
|
89
|
+
recipientOwner: owner,
|
|
90
|
+
recipientOwnerScheme: 0,
|
|
91
|
+
mintPath: isMintAuthority ? "owner" : undefined,
|
|
92
|
+
...(isMintAuthority
|
|
93
|
+
? {
|
|
94
|
+
priceScale: tokenDisplayScale,
|
|
95
|
+
tokenDisplayScale,
|
|
96
|
+
}
|
|
97
|
+
: {}),
|
|
98
|
+
ticker: input.ticker?.trim() || null,
|
|
99
|
+
tokenName: input.tokenName?.trim() || null,
|
|
100
|
+
mintPolicy,
|
|
101
|
+
activeTokenUtxo,
|
|
102
|
+
},
|
|
103
|
+
sourceRequirements: [
|
|
104
|
+
{
|
|
105
|
+
type: "active-kcc20-claimed-token-utxo",
|
|
106
|
+
covenantId,
|
|
107
|
+
outpoint: `${source.txidHex}:${source.vout}`,
|
|
108
|
+
revealMode,
|
|
109
|
+
purpose: isMintAuthority
|
|
110
|
+
? "spend the claimed mint-authority output so TN10 can verify the KCC20 artifact and state"
|
|
111
|
+
: "spend the claimed holder output through a full self-transfer so TN10 can verify the KCC20 artifact and state",
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: "kaspa-funding-utxo",
|
|
115
|
+
ownerAddress: walletInfo.walletAddress,
|
|
116
|
+
purpose: "fund output dust and network fee",
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
warnings: [
|
|
120
|
+
isMintAuthority
|
|
121
|
+
? "Reveal mints the default zero-price verification amount locally."
|
|
122
|
+
: "Fixed-supply reveal recreates the full holder balance to the same owner.",
|
|
123
|
+
"The canonical KCC20 covenantId remains the token identity; wrapper market creation is a separate step after verification.",
|
|
124
|
+
],
|
|
125
|
+
tokenIdentity: input.tokenIdentity ?? {
|
|
126
|
+
canonicalCovenantId: covenantId,
|
|
127
|
+
deployCandidateId: covenantId,
|
|
128
|
+
},
|
|
129
|
+
}, options);
|
|
130
|
+
}
|
|
131
|
+
function normalizeVerifySource(source) {
|
|
132
|
+
const txidHex = requireHex64(source.txidHex, "active token txid");
|
|
133
|
+
if (!Number.isInteger(source.vout) || source.vout < 0) {
|
|
134
|
+
throw new Error("active token vout must be a non-negative integer");
|
|
135
|
+
}
|
|
136
|
+
if (!source.address?.trim()) {
|
|
137
|
+
throw new Error("active token address is required");
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
txidHex,
|
|
141
|
+
vout: source.vout,
|
|
142
|
+
outpoint: `${txidHex}:${source.vout}`,
|
|
143
|
+
address: source.address.trim(),
|
|
144
|
+
amountSompi: optionalUnsignedInteger(source.amountSompi, "amountSompi"),
|
|
145
|
+
action: source.action ?? "deploy",
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function revealMintAmount(input) {
|
|
149
|
+
const unitPriceSompi = BigInt(input.mintPriceSompi);
|
|
150
|
+
const priceScale = BigInt(input.priceScale);
|
|
151
|
+
const minimum = unitPriceSompi > 0n
|
|
152
|
+
? (0, paid_mint_amount_js_1.kcc20MinimumPaidMintAmount)({
|
|
153
|
+
unitPriceSompi,
|
|
154
|
+
priceScale,
|
|
155
|
+
minGrossSompi: paid_mint_amount_js_1.KCC20_VERIFY_PAID_MINT_MIN_GROSS_SOMPI,
|
|
156
|
+
protocolFeeBps: input.protocolFeeBps,
|
|
157
|
+
})
|
|
158
|
+
: priceScale;
|
|
159
|
+
const amount = minimum > priceScale ? minimum : priceScale;
|
|
160
|
+
if (input.remainingSupply && amount > BigInt(input.remainingSupply)) {
|
|
161
|
+
throw new Error("claimed KCC20 token remaining supply is too small to satisfy the verify mint minimum");
|
|
162
|
+
}
|
|
163
|
+
return amount.toString();
|
|
164
|
+
}
|
|
165
|
+
function resolveDecimals(value, scale) {
|
|
166
|
+
const parsed = integerValue(value);
|
|
167
|
+
if (parsed !== undefined && parsed >= 0 && parsed <= 18)
|
|
168
|
+
return parsed;
|
|
169
|
+
const normalizedScale = optionalUnsignedInteger(scale, "display scale");
|
|
170
|
+
if (normalizedScale) {
|
|
171
|
+
let current = BigInt(normalizedScale);
|
|
172
|
+
let decimals = 0;
|
|
173
|
+
while (current > 1n && current % 10n === 0n) {
|
|
174
|
+
current /= 10n;
|
|
175
|
+
decimals += 1;
|
|
176
|
+
}
|
|
177
|
+
if (current === 1n && decimals <= 18)
|
|
178
|
+
return decimals;
|
|
179
|
+
}
|
|
180
|
+
return 8;
|
|
181
|
+
}
|
|
182
|
+
function requireHex64(value, field) {
|
|
183
|
+
const normalized = optionalHex64(value);
|
|
184
|
+
if (!normalized)
|
|
185
|
+
throw new Error(`${field} must be 64 hex characters`);
|
|
186
|
+
return normalized;
|
|
187
|
+
}
|
|
188
|
+
function optionalHex64(value) {
|
|
189
|
+
if (typeof value !== "string")
|
|
190
|
+
return undefined;
|
|
191
|
+
const normalized = value.trim().toLowerCase().replace(/^0x/, "");
|
|
192
|
+
return HEX_64_RE.test(normalized) ? normalized : undefined;
|
|
193
|
+
}
|
|
194
|
+
function requireUnsignedInteger(value, field) {
|
|
195
|
+
const normalized = optionalUnsignedInteger(value, field);
|
|
196
|
+
if (normalized === undefined) {
|
|
197
|
+
throw new Error(`${field} must be an unsigned integer`);
|
|
198
|
+
}
|
|
199
|
+
return normalized;
|
|
200
|
+
}
|
|
201
|
+
function optionalUnsignedInteger(value, field) {
|
|
202
|
+
if (value === null || value === undefined || value === "")
|
|
203
|
+
return undefined;
|
|
204
|
+
const normalized = typeof value === "bigint"
|
|
205
|
+
? value.toString()
|
|
206
|
+
: typeof value === "number" && Number.isSafeInteger(value)
|
|
207
|
+
? String(value)
|
|
208
|
+
: typeof value === "string"
|
|
209
|
+
? value.trim()
|
|
210
|
+
: "";
|
|
211
|
+
if (!/^\d+$/.test(normalized)) {
|
|
212
|
+
throw new Error(`${field} must be an unsigned integer`);
|
|
213
|
+
}
|
|
214
|
+
return normalized;
|
|
215
|
+
}
|
|
216
|
+
function integerValue(value) {
|
|
217
|
+
const parsed = typeof value === "number"
|
|
218
|
+
? value
|
|
219
|
+
: typeof value === "bigint"
|
|
220
|
+
? Number(value)
|
|
221
|
+
: typeof value === "string" && /^\d+$/.test(value.trim())
|
|
222
|
+
? Number(value)
|
|
223
|
+
: Number.NaN;
|
|
224
|
+
return Number.isSafeInteger(parsed) ? parsed : undefined;
|
|
225
|
+
}
|
|
226
|
+
function optionalBps(value) {
|
|
227
|
+
const parsed = integerValue(value);
|
|
228
|
+
if (parsed === undefined)
|
|
229
|
+
return undefined;
|
|
230
|
+
if (parsed < 0 || parsed > 10_000) {
|
|
231
|
+
throw new Error("protocolFeeBps must be 0..10000");
|
|
232
|
+
}
|
|
233
|
+
return parsed;
|
|
234
|
+
}
|
|
235
|
+
function booleanValue(value) {
|
|
236
|
+
return typeof value === "boolean" ? value : undefined;
|
|
237
|
+
}
|
|
238
|
+
function recordValue(value) {
|
|
239
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
240
|
+
? value
|
|
241
|
+
: undefined;
|
|
242
|
+
}
|
|
243
|
+
function firstDefined(...values) {
|
|
244
|
+
return values.find((value) => value !== undefined && value !== null);
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=verify-operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-operation.js","sourceRoot":"","sources":["../../src/verify-operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface Kcc20WalletOperationOwner {
|
|
2
|
+
walletAddress: string;
|
|
3
|
+
kcc20Owner: string;
|
|
4
|
+
}
|
|
5
|
+
export interface Kcc20WalletOperationPlan {
|
|
6
|
+
builderKey: string;
|
|
7
|
+
operation: string;
|
|
8
|
+
contract: string;
|
|
9
|
+
action: string;
|
|
10
|
+
description: string;
|
|
11
|
+
params: Record<string, unknown>;
|
|
12
|
+
sourceRequirements?: Record<string, unknown>[];
|
|
13
|
+
signerRequirements?: Record<string, unknown>[];
|
|
14
|
+
warnings?: string[];
|
|
15
|
+
tokenIdentity?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface Kcc20WalletOperationBuildOptions {
|
|
18
|
+
network?: string;
|
|
19
|
+
createdAt?: string;
|
|
20
|
+
requestId?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function buildKcc20WalletOperationFromPlan(owner: Kcc20WalletOperationOwner, plan: Kcc20WalletOperationPlan, options?: Kcc20WalletOperationBuildOptions): {
|
|
23
|
+
requestId: string;
|
|
24
|
+
description: string;
|
|
25
|
+
payload: {
|
|
26
|
+
params: Record<string, unknown>;
|
|
27
|
+
signing: {
|
|
28
|
+
standard: string;
|
|
29
|
+
walletAction: string;
|
|
30
|
+
status: string;
|
|
31
|
+
builderKey: string;
|
|
32
|
+
builderStatus: string;
|
|
33
|
+
submitTransactionSupported: boolean;
|
|
34
|
+
missingDependencies: string[];
|
|
35
|
+
missingSources: never[];
|
|
36
|
+
};
|
|
37
|
+
sourceRequirements: Record<string, unknown>[];
|
|
38
|
+
signerRequirements: Record<string, unknown>[];
|
|
39
|
+
warnings: string[];
|
|
40
|
+
tokenIdentity?: Record<string, unknown> | undefined;
|
|
41
|
+
schema: string;
|
|
42
|
+
status: string;
|
|
43
|
+
requestId: string;
|
|
44
|
+
chain: string;
|
|
45
|
+
network: string;
|
|
46
|
+
createdAt: string;
|
|
47
|
+
owner: Kcc20WalletOperationOwner;
|
|
48
|
+
operation: string;
|
|
49
|
+
contract: string;
|
|
50
|
+
action: string;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildKcc20WalletOperationFromPlan = buildKcc20WalletOperationFromPlan;
|
|
4
|
+
const KCC20_WALLET_OPERATION_SCHEMA = "kcc20-wallet-operation-request/v1";
|
|
5
|
+
function buildKcc20WalletOperationFromPlan(owner, plan, options = {}) {
|
|
6
|
+
const requestId = options.requestId ?? `kcc20-${plan.operation}-${randomOperationId()}`;
|
|
7
|
+
return {
|
|
8
|
+
requestId,
|
|
9
|
+
description: plan.description,
|
|
10
|
+
payload: {
|
|
11
|
+
schema: KCC20_WALLET_OPERATION_SCHEMA,
|
|
12
|
+
status: "wallet-operation-ready",
|
|
13
|
+
requestId,
|
|
14
|
+
chain: "kaspa",
|
|
15
|
+
network: options.network ?? "testnet-10",
|
|
16
|
+
createdAt: options.createdAt ?? new Date().toISOString(),
|
|
17
|
+
owner,
|
|
18
|
+
operation: plan.operation,
|
|
19
|
+
contract: plan.contract,
|
|
20
|
+
action: plan.action,
|
|
21
|
+
...(plan.tokenIdentity ? { tokenIdentity: plan.tokenIdentity } : {}),
|
|
22
|
+
params: plan.params,
|
|
23
|
+
signing: {
|
|
24
|
+
standard: "pskt",
|
|
25
|
+
walletAction: "sign-pskt-transaction",
|
|
26
|
+
status: "missing-funded-pskt",
|
|
27
|
+
builderKey: plan.builderKey,
|
|
28
|
+
builderStatus: "ready-to-build",
|
|
29
|
+
submitTransactionSupported: false,
|
|
30
|
+
missingDependencies: [`backend-funded-pskt-builder:${plan.builderKey}`],
|
|
31
|
+
missingSources: [],
|
|
32
|
+
},
|
|
33
|
+
sourceRequirements: plan.sourceRequirements ?? [],
|
|
34
|
+
signerRequirements: plan.signerRequirements ?? [
|
|
35
|
+
{
|
|
36
|
+
type: "wallet-owner",
|
|
37
|
+
owner: owner.kcc20Owner,
|
|
38
|
+
address: owner.walletAddress,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
warnings: plan.warnings ?? [],
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function randomOperationId() {
|
|
46
|
+
return globalThis.crypto?.randomUUID?.() ?? fallbackRandomId();
|
|
47
|
+
}
|
|
48
|
+
function fallbackRandomId() {
|
|
49
|
+
const bytes = new Uint8Array(16);
|
|
50
|
+
globalThis.crypto?.getRandomValues?.(bytes);
|
|
51
|
+
if (bytes.some((byte) => byte !== 0)) {
|
|
52
|
+
return [...bytes]
|
|
53
|
+
.map((byte) => byte.toString(16).padStart(2, "0"))
|
|
54
|
+
.join("");
|
|
55
|
+
}
|
|
56
|
+
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=wallet-operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-operation.js","sourceRoot":"","sources":["../../src/wallet-operation.ts"],"names":[],"mappings":";;AA0BA,8EA4CC;AAtED,MAAM,6BAA6B,GAAG,mCAAmC,CAAC;AA0B1E,SAAgB,iCAAiC,CAC/C,KAAgC,EAChC,IAA8B,EAC9B,UAA4C,EAAE;IAE9C,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,IAAI,SAAS,IAAI,CAAC,SAAS,IAAI,iBAAiB,EAAE,EAAE,CAAC;IACxE,OAAO;QACL,SAAS;QACT,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE;YACP,MAAM,EAAE,6BAA6B;YACrC,MAAM,EAAE,wBAAwB;YAChC,SAAS;YACT,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,YAAY;YACxC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxD,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE;gBACP,QAAQ,EAAE,MAAM;gBAChB,YAAY,EAAE,uBAAuB;gBACrC,MAAM,EAAE,qBAAqB;gBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,aAAa,EAAE,gBAAgB;gBAC/B,0BAA0B,EAAE,KAAK;gBACjC,mBAAmB,EAAE,CAAC,+BAA+B,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvE,cAAc,EAAE,EAAE;aACnB;YACD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,EAAE;YACjD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI;gBAC7C;oBACE,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,KAAK,CAAC,UAAU;oBACvB,OAAO,EAAE,KAAK,CAAC,aAAa;iBAC7B;aACF;YACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;SAC9B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,gBAAgB,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACjC,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,KAAK,CAAC;aACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACjD,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { KaspaWasmProvider, KaspaWasmRuntime } from "./runtime.js";
|
|
2
|
+
export interface WasmModuleLoader<TModule> {
|
|
3
|
+
load(): Promise<TModule>;
|
|
4
|
+
}
|
|
5
|
+
export interface WasmModuleInitializer<TModule> {
|
|
6
|
+
initialize(module: TModule): Promise<KaspaWasmRuntime> | KaspaWasmRuntime;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Creates a cached provider for either the browser or Node WASM module.
|
|
10
|
+
*
|
|
11
|
+
* The loader and initializer are deliberately supplied by the host. This
|
|
12
|
+
* keeps URL resolution, initSync, initWASM32Bindings, and binary loading
|
|
13
|
+
* outside the shared package.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createKaspaWasmProvider<TModule>(loader: WasmModuleLoader<TModule>, initializer: WasmModuleInitializer<TModule>): KaspaWasmProvider;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createKaspaWasmProvider = createKaspaWasmProvider;
|
|
4
|
+
/**
|
|
5
|
+
* Creates a cached provider for either the browser or Node WASM module.
|
|
6
|
+
*
|
|
7
|
+
* The loader and initializer are deliberately supplied by the host. This
|
|
8
|
+
* keeps URL resolution, initSync, initWASM32Bindings, and binary loading
|
|
9
|
+
* outside the shared package.
|
|
10
|
+
*/
|
|
11
|
+
function createKaspaWasmProvider(loader, initializer) {
|
|
12
|
+
let runtimePromise;
|
|
13
|
+
return {
|
|
14
|
+
getRuntime() {
|
|
15
|
+
runtimePromise ??= Promise.resolve(loader.load()).then((module) => initializer.initialize(module));
|
|
16
|
+
return runtimePromise;
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=wasm-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-provider.js","sourceRoot":"","sources":["../../src/wasm-provider.ts"],"names":[],"mappings":";;AAiBA,0DAcC;AArBD;;;;;;GAMG;AACH,SAAgB,uBAAuB,CACrC,MAAiC,EACjC,WAA2C;IAE3C,IAAI,cAAqD,CAAC;IAE1D,OAAO;QACL,UAAU;YACR,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAChE,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAC/B,CAAC;YACF,OAAO,cAAc,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
|