@kaspacom/kcc20-tx-builder 0.8.0-fee.11 → 0.8.0-fee.13
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 +11 -1
- package/artifacts/KCC20WrapperFeeArgentV2.placeholder.json +29503 -0
- package/dist/artifacts.d.ts +2 -0
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +2 -0
- package/dist/artifacts.js.map +1 -1
- package/dist/cjs/artifacts.d.ts +2 -0
- package/dist/cjs/artifacts.js +2 -0
- package/dist/cjs/artifacts.js.map +1 -1
- package/dist/cjs/engine.js +70 -26
- package/dist/cjs/engine.js.map +1 -1
- package/dist/cjs/escrow-market-artifacts.d.ts +1 -1
- package/dist/cjs/escrow-market-artifacts.js +1 -1
- package/dist/cjs/escrow-market-setup.d.ts +7 -0
- package/dist/cjs/escrow-market-setup.js +19 -0
- package/dist/cjs/escrow-market-setup.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +71 -27
- package/dist/engine.js.map +1 -1
- package/dist/escrow-market-artifacts.d.ts +1 -1
- package/dist/escrow-market-artifacts.js +1 -1
- package/dist/escrow-market-setup.d.ts +7 -0
- package/dist/escrow-market-setup.d.ts.map +1 -1
- package/dist/escrow-market-setup.js +18 -0
- package/dist/escrow-market-setup.js.map +1 -1
- package/docs/COMPATIBILITY.json +10 -2
- package/docs/evidence/argent-fee-runtime-span.md +7 -0
- package/docs/fee-imported-wallet.md +9 -0
- package/package.json +1 -1
- package/src/artifacts.ts +3 -0
- package/src/engine.ts +73 -27
- package/src/escrow-market-artifacts.ts +1 -1
- package/src/escrow-market-setup.ts +20 -0
|
@@ -7,7 +7,7 @@ declare const PINS: {
|
|
|
7
7
|
readonly bid: readonly ["KCC20OrderbookFeeBidV1.placeholder.json", "KCC20OrderbookFeeBidV1", "98d7c97319bbe1ca954c7f4f6a02467e90a7f3e84c14c91db650f8ef5887ee0e"];
|
|
8
8
|
readonly ticket: readonly ["KCC20FeeTicket.placeholder.json", "KCC20FeeTicket", "289f3f74914deb383d2cccc11128187a77e4bcea90e61c83e05d86c5c9d63bc5"];
|
|
9
9
|
readonly wrapper: readonly ["KCC20WrapperFeeV1.placeholder.json", "KCC20WrapperFeeV1", "84c3844493efd4bdf6b2e3435e1ac511f5b5a7f58b5b6c093c91e2edcae1a2e0"];
|
|
10
|
-
readonly argentWrapper: readonly ["
|
|
10
|
+
readonly argentWrapper: readonly ["KCC20WrapperFeeArgentV2.placeholder.json", "KCC20WrapperFeeArgentV2", "8a3b33e4c4b340fb88069e86536106b446014fe68cd533117fe4ec1499325c23"];
|
|
11
11
|
};
|
|
12
12
|
export type Kcc20FeeArtifactRole = keyof typeof PINS;
|
|
13
13
|
export type Kcc20FeeArtifactSet = {
|
|
@@ -15,7 +15,7 @@ const PINS = {
|
|
|
15
15
|
bid: ["KCC20OrderbookFeeBidV1.placeholder.json", "KCC20OrderbookFeeBidV1", "98d7c97319bbe1ca954c7f4f6a02467e90a7f3e84c14c91db650f8ef5887ee0e"],
|
|
16
16
|
ticket: ["KCC20FeeTicket.placeholder.json", "KCC20FeeTicket", "289f3f74914deb383d2cccc11128187a77e4bcea90e61c83e05d86c5c9d63bc5"],
|
|
17
17
|
wrapper: ["KCC20WrapperFeeV1.placeholder.json", "KCC20WrapperFeeV1", "84c3844493efd4bdf6b2e3435e1ac511f5b5a7f58b5b6c093c91e2edcae1a2e0"],
|
|
18
|
-
argentWrapper: ["
|
|
18
|
+
argentWrapper: ["KCC20WrapperFeeArgentV2.placeholder.json", "KCC20WrapperFeeArgentV2", "8a3b33e4c4b340fb88069e86536106b446014fe68cd533117fe4ec1499325c23"],
|
|
19
19
|
};
|
|
20
20
|
const POLICY_ROLES = ["receipt", "root", "holder", "ask", "bid", "ticket"];
|
|
21
21
|
function hex(bytes) {
|
|
@@ -427,3 +427,10 @@ export declare function prepareKcc20FeeMarketBid(input: Kcc20FeeMarketGenesisInp
|
|
|
427
427
|
};
|
|
428
428
|
};
|
|
429
429
|
};
|
|
430
|
+
/** Resolve an existing role's bound wrapper against both pinned profiles.
|
|
431
|
+
* The caller must still authenticate the complete role script against its live UTXO.
|
|
432
|
+
*/
|
|
433
|
+
export declare function resolveKcc20FeeMarketWrapperProfile(input: Omit<Kcc20FeeMarketGenesisInput, "wrapperProfile"> & {
|
|
434
|
+
marketId: string;
|
|
435
|
+
wrapperScriptHash: string;
|
|
436
|
+
}): "native" | "argent";
|
|
@@ -5,6 +5,7 @@ exports.prepareKcc20FeeMarketBinding = prepareKcc20FeeMarketBinding;
|
|
|
5
5
|
exports.prepareKcc20FeeMarketWrappedHolder = prepareKcc20FeeMarketWrappedHolder;
|
|
6
6
|
exports.prepareKcc20FeeMarketAsk = prepareKcc20FeeMarketAsk;
|
|
7
7
|
exports.prepareKcc20FeeMarketBid = prepareKcc20FeeMarketBid;
|
|
8
|
+
exports.resolveKcc20FeeMarketWrapperProfile = resolveKcc20FeeMarketWrapperProfile;
|
|
8
9
|
const escrow_policy_js_1 = require("./escrow-policy.js");
|
|
9
10
|
const escrow_market_artifacts_js_1 = require("./escrow-market-artifacts.js");
|
|
10
11
|
const ZERO = "00".repeat(32);
|
|
@@ -137,4 +138,22 @@ function prepareKcc20FeeMarketBid(input) {
|
|
|
137
138
|
role: "bid", state: bidState });
|
|
138
139
|
return { binding, bidState, bid };
|
|
139
140
|
}
|
|
141
|
+
/** Resolve an existing role's bound wrapper against both pinned profiles.
|
|
142
|
+
* The caller must still authenticate the complete role script against its live UTXO.
|
|
143
|
+
*/
|
|
144
|
+
function resolveKcc20FeeMarketWrapperProfile(input) {
|
|
145
|
+
const expected = hex32(input.wrapperScriptHash, "bound wrapper script hash");
|
|
146
|
+
const marketId = hex32(input.marketId, "market ID");
|
|
147
|
+
for (const wrapperProfile of ["native", "argent"]) {
|
|
148
|
+
if (wrapperProfile === "argent" && input.policy.creatorFeeBps !== 0)
|
|
149
|
+
continue;
|
|
150
|
+
const genesis = prepareKcc20FeeMarketGenesis({ ...input, wrapperProfile });
|
|
151
|
+
const role = wrapperProfile === "native" ? "wrapper" : "argentWrapper";
|
|
152
|
+
const wrapper = (0, escrow_market_artifacts_js_1.buildKcc20FeeMarketRoleScript)({ artifact: input.artifacts[role], role,
|
|
153
|
+
state: { ...genesis.state, enabled: true, authenticatedMarketId: marketId } });
|
|
154
|
+
if (wrapper.scriptHash === expected)
|
|
155
|
+
return wrapperProfile;
|
|
156
|
+
}
|
|
157
|
+
throw new Error("bound wrapper does not match a supported fee-market profile");
|
|
158
|
+
}
|
|
140
159
|
//# sourceMappingURL=escrow-market-setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escrow-market-setup.js","sourceRoot":"","sources":["../../src/escrow-market-setup.ts"],"names":[],"mappings":";;AA4BA,oEAuBC;AAGD,oEAwBC;AAGD,gFAwCC;AAGD,4DA4BC;AAGD,4DA0BC;
|
|
1
|
+
{"version":3,"file":"escrow-market-setup.js","sourceRoot":"","sources":["../../src/escrow-market-setup.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAkFrD,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE;QACf,mBAAmB,CAAC,IAAI,EAAE;YAAE,SAAS,EAAE,MAAM,EAAE,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACtE,CAAC;IACF,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,GAAG,CAAC;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yBAAyB,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IACjE,gFAAgF;IAChF,oBAAoB,CAAC,EAAE;QAAE,QAAQ,EAAE,oBAAoB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AAED,MAAM,WAAW,8BAA8B;IAC7C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,qCAAqC,CAAC,KAAK,EAAE;QAC3C,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC5C,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,6BAA6B,GACrC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAkFrD,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE;QACf,mBAAmB,CAAC,IAAI,EAAE;YAAE,SAAS,EAAE,MAAM,EAAE,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACtE,CAAC;IACF,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,GAAG,CAAC;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yBAAyB,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IACjE,gFAAgF;IAChF,oBAAoB,CAAC,EAAE;QAAE,QAAQ,EAAE,oBAAoB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AAED,MAAM,WAAW,8BAA8B;IAC7C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,qCAAqC,CAAC,KAAK,EAAE;QAC3C,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC5C,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,6BAA6B,GACrC,sBAAsB,CAsphBxB"}
|
package/dist/engine.js
CHANGED
|
@@ -10,7 +10,7 @@ import { DEFAULT_COMPUTE_BUDGET, DEFAULT_KCC20_FEE_BPS, DEFAULT_KCC20_MIN_PROTOC
|
|
|
10
10
|
import { buildKcc20BurnSigScript, buildKcc20MintByOwnerSigScript, buildKcc20MintPublicSigScript, buildKcc20ScriptForState, buildKcc20SetPublicMintActiveSigScript, buildKcc20TransferSigScript, dispatchTagFor, templateHash, encodeKcc20StateRecordArrays, holderExtensionCommitment, mintExtensionCommitment, normalizeSilverScriptArtifact, ownerAuthorizationWitness, } from "./abi.js";
|
|
11
11
|
import { KCC20_BUILDER_KEYS } from "./operations.js";
|
|
12
12
|
import { buildKcc20InitialFeeAccount, planKcc20FeeAccountBinding } from "./escrow-account-setup.js";
|
|
13
|
-
import { prepareKcc20FeeMarketGenesis, prepareKcc20FeeMarketBinding, prepareKcc20FeeMarketWrappedHolder, prepareKcc20FeeMarketAsk, prepareKcc20FeeMarketBid } from "./escrow-market-setup.js";
|
|
13
|
+
import { resolveKcc20FeeMarketWrapperProfile, prepareKcc20FeeMarketGenesis, prepareKcc20FeeMarketBinding, prepareKcc20FeeMarketWrappedHolder, prepareKcc20FeeMarketAsk, prepareKcc20FeeMarketBid } from "./escrow-market-setup.js";
|
|
14
14
|
import { buildKcc20FeeMarketRoleScript } from "./escrow-market-artifacts.js";
|
|
15
15
|
import { calculateKcc20EscrowFees } from "./escrow-fee.js";
|
|
16
16
|
import { kcc20CreatorFeeConsent, decodeKcc20EscrowPolicy } from "./escrow-policy.js";
|
|
@@ -1972,7 +1972,7 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
1972
1972
|
receipt: "KCC20FeeEscrowV1", root: "KCC20OrderbookFeeRootV1",
|
|
1973
1973
|
holder: "KCC20OrderbookFeeHolderV1", ask: "KCC20OrderbookFeeAskV1",
|
|
1974
1974
|
bid: "KCC20OrderbookFeeBidV1", ticket: "KCC20FeeTicket",
|
|
1975
|
-
wrapper: "KCC20WrapperFeeV1", argentWrapper: "
|
|
1975
|
+
wrapper: "KCC20WrapperFeeV1", argentWrapper: "KCC20WrapperFeeArgentV2",
|
|
1976
1976
|
};
|
|
1977
1977
|
const entries = await Promise.all(Object.entries(names).map(async ([role, name]) => {
|
|
1978
1978
|
const key = `${name}.placeholder.json`;
|
|
@@ -2397,8 +2397,9 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
2397
2397
|
throw new Error("wrapped amount exceeds token input");
|
|
2398
2398
|
const tokenProfile = await resolveKcc20ArtifactForState(tokenState, requireKaspaAddress(source.address), network);
|
|
2399
2399
|
requireTokenCapability(tokenProfile.profile, "wrap");
|
|
2400
|
-
|
|
2401
|
-
|
|
2400
|
+
const wrapperProfile = tokenProfile.profile.id === "argent-reference-kcc20-v1" ? "argent" : "native";
|
|
2401
|
+
if (wrapperProfile === "native" && tokenProfile.profile.id !== "kaspacom-kcc20-last-call-v1") {
|
|
2402
|
+
throw new Error("unsupported fee-market token profile");
|
|
2402
2403
|
}
|
|
2403
2404
|
const creatorConsent = verifyReusableCreatorConsent(params, tokenId, marketId, feeTicketId, priceScale, false);
|
|
2404
2405
|
let creatorHolderExtension = new Uint8Array(0);
|
|
@@ -2426,12 +2427,12 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
2426
2427
|
const artifacts = await readFeeMarketArtifacts();
|
|
2427
2428
|
const plan = prepareKcc20FeeMarketWrappedHolder({
|
|
2428
2429
|
tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
2429
|
-
wrapperProfile
|
|
2430
|
+
wrapperProfile, artifacts, marketId, recipientOwner,
|
|
2430
2431
|
recipientOwnerScheme: 0, recipientPayoutScriptHash: payoutHash,
|
|
2431
2432
|
tokenAmount,
|
|
2432
2433
|
});
|
|
2433
2434
|
if (prepareKcc20FeeMarketGenesis({ tokenId, feeTicketId, priceScale,
|
|
2434
|
-
policy: params.feePolicy, wrapperProfile
|
|
2435
|
+
policy: params.feePolicy, wrapperProfile, artifacts }).policyId !==
|
|
2435
2436
|
requireHex32(params.policyId, "policy ID")) {
|
|
2436
2437
|
throw new Error("fee-market wrap policy ID mismatch");
|
|
2437
2438
|
}
|
|
@@ -2527,12 +2528,12 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
2527
2528
|
const holderParts = templateParts(normalizeSilverScriptArtifact(artifacts.holder));
|
|
2528
2529
|
wrapperPrefix.addData(holderParts.prefix);
|
|
2529
2530
|
wrapperPrefix.addData(holderParts.suffix);
|
|
2530
|
-
|
|
2531
|
+
addFeeMarketNativeState(wrapperPrefix, lockedState, tokenProfile);
|
|
2531
2532
|
addFeeMarketRoleState(wrapperPrefix, plan.holderState);
|
|
2532
2533
|
wrapperPrefix.addData(creatorHolderExtension);
|
|
2533
2534
|
wrapperPrefix.addData(creatorConsent
|
|
2534
2535
|
? hexToBytes(creatorConsent.signature) : new Uint8Array(64));
|
|
2535
|
-
wrapperPrefix.addData(dispatchTagFor(artifacts
|
|
2536
|
+
wrapperPrefix.addData(dispatchTagFor(artifacts[wrapperProfile === "argent" ? "argentWrapper" : "wrapper"], "wrap"));
|
|
2536
2537
|
transaction.inputs[1].signatureScript = encodeCovenantP2shSignatureScript(wrapperPrefix.drain(), plan.wrapper.redeemScript);
|
|
2537
2538
|
const scripts = [{ inputIndex: 0, scriptHex: bytesToHex(tokenScript),
|
|
2538
2539
|
signType: 1, signatureScript: { mode: "ordered-args",
|
|
@@ -2609,8 +2610,9 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
2609
2610
|
}
|
|
2610
2611
|
const tokenProfile = await resolveKcc20ArtifactForState(reserveState, requireKaspaAddress(reserveUtxo.address), network);
|
|
2611
2612
|
requireTokenCapability(tokenProfile.profile, "unwrap");
|
|
2612
|
-
|
|
2613
|
-
|
|
2613
|
+
const wrapperProfile = tokenProfile.profile.id === "argent-reference-kcc20-v1" ? "argent" : "native";
|
|
2614
|
+
if (wrapperProfile === "native" && tokenProfile.profile.id !== "kaspacom-kcc20-last-call-v1") {
|
|
2615
|
+
throw new Error("unsupported fee-market token profile");
|
|
2614
2616
|
}
|
|
2615
2617
|
const kw = kaspaWasm;
|
|
2616
2618
|
const payoutSpk = p2pkScriptPubKey(kw, recipientOwner);
|
|
@@ -2626,7 +2628,7 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
2626
2628
|
}
|
|
2627
2629
|
const artifacts = await readFeeMarketArtifacts();
|
|
2628
2630
|
const planInput = { tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
2629
|
-
wrapperProfile
|
|
2631
|
+
wrapperProfile, artifacts, marketId, recipientOwner,
|
|
2630
2632
|
recipientOwnerScheme: 0, recipientPayoutScriptHash: payoutHash };
|
|
2631
2633
|
const plan = prepareKcc20FeeMarketWrappedHolder({ ...planInput,
|
|
2632
2634
|
tokenAmount: wrappedAmount });
|
|
@@ -2754,10 +2756,10 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
2754
2756
|
wrapperPrefix.addData(hexToBytes(recipientOwner));
|
|
2755
2757
|
addExplicitByte(wrapperPrefix, 0);
|
|
2756
2758
|
wrapperPrefix.addI64(tokenAmount);
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
+
addFeeMarketNativeState(wrapperPrefix, recipientState, tokenProfile);
|
|
2760
|
+
addFeeMarketNativeState(wrapperPrefix, reserveChangeState, tokenProfile);
|
|
2759
2761
|
addFeeMarketRoleState(wrapperPrefix, wrappedChangeState);
|
|
2760
|
-
wrapperPrefix.addData(dispatchTagFor(artifacts
|
|
2762
|
+
wrapperPrefix.addData(dispatchTagFor(artifacts[wrapperProfile === "argent" ? "argentWrapper" : "wrapper"], "unwrap"));
|
|
2761
2763
|
transaction.inputs[2].signatureScript = encodeCovenantP2shSignatureScript(wrapperPrefix.drain(), plan.wrapper.redeemScript);
|
|
2762
2764
|
const reservePrefix = buildKcc20TransferSigScript(kw, tokenProfile.artifact, {
|
|
2763
2765
|
nextStates: reserveRemaining > 0n
|
|
@@ -2832,8 +2834,11 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
2832
2834
|
payoutBytes.set(payoutScript, 11);
|
|
2833
2835
|
const payoutHash = bytesToHex(blake3(payoutBytes));
|
|
2834
2836
|
const artifacts = await readFeeMarketArtifacts();
|
|
2837
|
+
const wrapperProfile = resolveKcc20FeeMarketWrapperProfile({ tokenId, marketId,
|
|
2838
|
+
feeTicketId, priceScale, policy: params.feePolicy, artifacts,
|
|
2839
|
+
wrapperScriptHash: sources[0]?.state?.wrapper_spk_hash });
|
|
2835
2840
|
const planInput = { tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
2836
|
-
wrapperProfile
|
|
2841
|
+
wrapperProfile, artifacts, marketId,
|
|
2837
2842
|
recipientOwner: owner, recipientOwnerScheme: 0,
|
|
2838
2843
|
recipientPayoutScriptHash: payoutHash };
|
|
2839
2844
|
if (prepareKcc20FeeMarketGenesis(planInput).policyId !==
|
|
@@ -3004,8 +3009,11 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
3004
3009
|
payoutBytes.set(payoutScript, 11);
|
|
3005
3010
|
const payoutHash = bytesToHex(blake3(payoutBytes));
|
|
3006
3011
|
const artifacts = await readFeeMarketArtifacts();
|
|
3012
|
+
const wrapperProfile = resolveKcc20FeeMarketWrapperProfile({ tokenId, marketId,
|
|
3013
|
+
feeTicketId, priceScale, policy: params.feePolicy, artifacts,
|
|
3014
|
+
wrapperScriptHash: source?.state?.wrapper_spk_hash });
|
|
3007
3015
|
const planInput = { tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
3008
|
-
wrapperProfile
|
|
3016
|
+
wrapperProfile, artifacts, marketId, owner, ownerScheme: 0,
|
|
3009
3017
|
payoutScriptHash: payoutHash, holderAmount, askAmount, askUnitPrice };
|
|
3010
3018
|
const plan = prepareKcc20FeeMarketAsk(planInput);
|
|
3011
3019
|
if (prepareKcc20FeeMarketGenesis(planInput).policyId !==
|
|
@@ -3146,8 +3154,11 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
3146
3154
|
throw new Error("ask payout differs from signing wallet");
|
|
3147
3155
|
}
|
|
3148
3156
|
const artifacts = await readFeeMarketArtifacts();
|
|
3157
|
+
const wrapperProfile = resolveKcc20FeeMarketWrapperProfile({ tokenId, marketId,
|
|
3158
|
+
feeTicketId, priceScale, policy: params.feePolicy, artifacts,
|
|
3159
|
+
wrapperScriptHash: source?.state?.wrapper_spk_hash });
|
|
3149
3160
|
const planInput = { tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
3150
|
-
wrapperProfile
|
|
3161
|
+
wrapperProfile, artifacts, marketId, owner, ownerScheme: 0,
|
|
3151
3162
|
payoutScriptHash: payoutHash, holderAmount: askAmount, askAmount, askUnitPrice };
|
|
3152
3163
|
const plan = prepareKcc20FeeMarketAsk(planInput);
|
|
3153
3164
|
if (prepareKcc20FeeMarketGenesis(planInput).policyId !==
|
|
@@ -3278,8 +3289,11 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
3278
3289
|
payoutBytes.set(payoutScript, 11);
|
|
3279
3290
|
const payoutHash = bytesToHex(blake3(payoutBytes));
|
|
3280
3291
|
const artifacts = await readFeeMarketArtifacts();
|
|
3292
|
+
const wrapperProfile = resolveKcc20FeeMarketWrapperProfile({ tokenId, marketId,
|
|
3293
|
+
feeTicketId, priceScale, policy: params.feePolicy, artifacts,
|
|
3294
|
+
wrapperScriptHash: rootUtxo?.state?.wrapper_spk_hash });
|
|
3281
3295
|
const planInput = { tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
3282
|
-
wrapperProfile
|
|
3296
|
+
wrapperProfile, artifacts, marketId,
|
|
3283
3297
|
rootOwner: requireHex32(rootUtxo.state.owner, "root owner"),
|
|
3284
3298
|
rootOwnerScheme: Number(rootUtxo.state.owner_scheme),
|
|
3285
3299
|
rootPayoutScriptHash: requireHex32(rootUtxo.state.payout_script_hash, "root payout hash"),
|
|
@@ -3417,8 +3431,11 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
3417
3431
|
throw new Error("bid payout differs from signing wallet");
|
|
3418
3432
|
}
|
|
3419
3433
|
const artifacts = await readFeeMarketArtifacts();
|
|
3434
|
+
const wrapperProfile = resolveKcc20FeeMarketWrapperProfile({ tokenId, marketId,
|
|
3435
|
+
feeTicketId, priceScale, policy: params.feePolicy, artifacts,
|
|
3436
|
+
wrapperScriptHash: source?.state?.wrapper_spk_hash });
|
|
3420
3437
|
const planInput = { tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
3421
|
-
wrapperProfile
|
|
3438
|
+
wrapperProfile, artifacts, marketId,
|
|
3422
3439
|
rootOwner: owner, rootOwnerScheme: 0, rootPayoutScriptHash: payoutHash,
|
|
3423
3440
|
buyer: owner, buyerScheme: 0, buyerPayoutScriptHash: payoutHash,
|
|
3424
3441
|
bidAmount, bidUnitPrice };
|
|
@@ -3601,8 +3618,11 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
3601
3618
|
throw new Error("ask seller payout does not match authenticated owner");
|
|
3602
3619
|
}
|
|
3603
3620
|
const artifacts = await readFeeMarketArtifacts();
|
|
3621
|
+
const wrapperProfile = resolveKcc20FeeMarketWrapperProfile({ tokenId, marketId,
|
|
3622
|
+
feeTicketId, priceScale, policy: params.feePolicy, artifacts,
|
|
3623
|
+
wrapperScriptHash: askUtxo?.state?.wrapper_spk_hash });
|
|
3604
3624
|
const planInput = { tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
3605
|
-
wrapperProfile
|
|
3625
|
+
wrapperProfile, artifacts, marketId,
|
|
3606
3626
|
recipientOwner: buyer, recipientOwnerScheme: 0,
|
|
3607
3627
|
recipientPayoutScriptHash: buyerPayout.hash, tokenAmount: fillAmount };
|
|
3608
3628
|
const buyerPlan = prepareKcc20FeeMarketWrappedHolder(planInput);
|
|
@@ -3618,7 +3638,7 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
3618
3638
|
throw new Error("fee-market ask differs from fixed market policy");
|
|
3619
3639
|
}
|
|
3620
3640
|
const sellerPlan = prepareKcc20FeeMarketAsk({ tokenId, feeTicketId,
|
|
3621
|
-
priceScale, policy: params.feePolicy, wrapperProfile
|
|
3641
|
+
priceScale, policy: params.feePolicy, wrapperProfile, artifacts,
|
|
3622
3642
|
marketId, owner: seller, ownerScheme: sellerScheme,
|
|
3623
3643
|
payoutScriptHash: sellerPayout.hash, holderAmount: askAmount,
|
|
3624
3644
|
askAmount, askUnitPrice });
|
|
@@ -3814,8 +3834,11 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
3814
3834
|
payoutBytes.set(payoutScript, 11);
|
|
3815
3835
|
const buyerPayoutHash = bytesToHex(blake3(payoutBytes));
|
|
3816
3836
|
const artifacts = await readFeeMarketArtifacts();
|
|
3837
|
+
const wrapperProfile = resolveKcc20FeeMarketWrapperProfile({ tokenId, marketId,
|
|
3838
|
+
feeTicketId, priceScale, policy: params.feePolicy, artifacts,
|
|
3839
|
+
wrapperScriptHash: asks[0]?.state?.wrapper_spk_hash });
|
|
3817
3840
|
const base = { tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
3818
|
-
wrapperProfile
|
|
3841
|
+
wrapperProfile, artifacts, marketId };
|
|
3819
3842
|
const policyId = prepareKcc20FeeMarketGenesis(base).policyId;
|
|
3820
3843
|
if (policyId !== requireHex32(params.policyId, "policy ID")) {
|
|
3821
3844
|
throw new Error("fee-market buyer group policy ID mismatch");
|
|
@@ -4072,6 +4095,9 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
4072
4095
|
sellerPayoutBytes.set(sellerScript, 11);
|
|
4073
4096
|
const sellerPayoutHash = bytesToHex(blake3(sellerPayoutBytes));
|
|
4074
4097
|
const artifacts = await readFeeMarketArtifacts();
|
|
4098
|
+
const wrapperProfile = resolveKcc20FeeMarketWrapperProfile({ tokenId, marketId,
|
|
4099
|
+
feeTicketId, priceScale, policy: params.feePolicy, artifacts,
|
|
4100
|
+
wrapperScriptHash: source?.state?.wrapper_spk_hash });
|
|
4075
4101
|
let ticket = null;
|
|
4076
4102
|
if (ticketRequest) {
|
|
4077
4103
|
const ticketState = kcc20FeeTicketStateFromUtxo(ticketRequest, request.owner);
|
|
@@ -4095,7 +4121,7 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
4095
4121
|
amountSompiExact: String(ticketRequest.amountSompiExact) };
|
|
4096
4122
|
}
|
|
4097
4123
|
const base = { tokenId, feeTicketId, priceScale, policy: params.feePolicy,
|
|
4098
|
-
wrapperProfile
|
|
4124
|
+
wrapperProfile, artifacts, marketId };
|
|
4099
4125
|
const policyId = prepareKcc20FeeMarketGenesis(base).policyId;
|
|
4100
4126
|
if (policyId !== requireHex32(params.policyId, "policy ID")) {
|
|
4101
4127
|
throw new Error("fee-market seller group policy ID mismatch");
|
|
@@ -4146,15 +4172,18 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
4146
4172
|
String(utxo.state.wrapper_spk_hash).toLowerCase() !== holderPlan.wrapper.scriptHash) {
|
|
4147
4173
|
throw new Error(`bid ${slot} differs from fixed market policy`);
|
|
4148
4174
|
}
|
|
4149
|
-
// The indexer adds policy
|
|
4175
|
+
// The indexer adds policy summaries and an ownerScheme alias. They are not
|
|
4150
4176
|
// part of the on-chain bid state and must not enter script reconstruction.
|
|
4151
|
-
const { creatorFeeBps: indexedCreatorFeeBps, feePolicyVersion: indexedFeePolicyVersion, ...bidState } = utxo.state;
|
|
4177
|
+
const { creatorFeeBps: indexedCreatorFeeBps, feePolicyVersion: indexedFeePolicyVersion, ownerScheme: indexedOwnerScheme, ...bidState } = utxo.state;
|
|
4152
4178
|
if ((indexedCreatorFeeBps !== undefined &&
|
|
4153
4179
|
Number(indexedCreatorFeeBps) !== params.feePolicy.creatorFeeBps) ||
|
|
4154
4180
|
(indexedFeePolicyVersion !== undefined &&
|
|
4155
4181
|
Number(indexedFeePolicyVersion) !== params.feePolicy.version)) {
|
|
4156
4182
|
throw new Error(`bid ${slot} indexed policy summary differs from fixed policy`);
|
|
4157
4183
|
}
|
|
4184
|
+
if (indexedOwnerScheme !== undefined && indexedOwnerScheme !== scheme) {
|
|
4185
|
+
throw new Error(`bid ${slot} indexed owner scheme differs from contract state`);
|
|
4186
|
+
}
|
|
4158
4187
|
const bidScript = buildKcc20FeeMarketRoleScript({ artifact: artifacts.bid,
|
|
4159
4188
|
role: "bid", state: bidState });
|
|
4160
4189
|
const buyerPlan = prepareKcc20FeeMarketWrappedHolder({ ...base,
|
|
@@ -8151,8 +8180,11 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
8151
8180
|
const priceScale = parsePositiveU64(ask.state.priceScale, "price scale");
|
|
8152
8181
|
const policy = decodeKcc20EscrowPolicy(hexToBytes(ask.state.feePolicy));
|
|
8153
8182
|
const artifacts = await readFeeMarketArtifacts();
|
|
8183
|
+
const wrapperProfile = resolveKcc20FeeMarketWrapperProfile({ tokenId, marketId,
|
|
8184
|
+
feeTicketId, priceScale, policy: policy, artifacts,
|
|
8185
|
+
wrapperScriptHash: ask?.state?.wrapper_spk_hash });
|
|
8154
8186
|
const genesis = prepareKcc20FeeMarketGenesis({ tokenId, feeTicketId,
|
|
8155
|
-
priceScale, policy, wrapperProfile
|
|
8187
|
+
priceScale, policy, wrapperProfile, artifacts });
|
|
8156
8188
|
const policyId = genesis.policyId;
|
|
8157
8189
|
for (const order of [ask, bid]) {
|
|
8158
8190
|
for (const field of ["canonicalTokenId", "feeTicketId", "feePolicy", "priceScale", "wrapper_spk_hash"]) {
|
|
@@ -8210,7 +8242,7 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
8210
8242
|
const fees = calculateKcc20EscrowFees({ grossSompi: gross, creatorFeeBps: policy.creatorFeeBps, protocolWaived: false });
|
|
8211
8243
|
const askRemaining = askAmount - fill, bidRemaining = bidAmount - fill;
|
|
8212
8244
|
const buyerPlan = prepareKcc20FeeMarketWrappedHolder({ tokenId, marketId,
|
|
8213
|
-
feeTicketId, priceScale, policy, wrapperProfile
|
|
8245
|
+
feeTicketId, priceScale, policy, wrapperProfile, artifacts,
|
|
8214
8246
|
recipientOwner: bid.state.owner, recipientOwnerScheme: Number(bid.state.owner_scheme),
|
|
8215
8247
|
recipientPayoutScriptHash: bid.state.payout_script_hash, tokenAmount: fill });
|
|
8216
8248
|
if (buyerPlan.holderState.feePolicy !== String(ask.state.feePolicy).toLowerCase() ||
|
|
@@ -11412,6 +11444,18 @@ export function createKcc20PsktBuilderEngine(options) {
|
|
|
11412
11444
|
builder.addData(dispatchTagFor(args.feeTicketArtifact, "createBatchFromUtilityBurn"));
|
|
11413
11445
|
return builder.drain();
|
|
11414
11446
|
}
|
|
11447
|
+
function addFeeMarketNativeState(builder, state, tokenProfile) {
|
|
11448
|
+
if (tokenProfile.profile.id === "argent-reference-kcc20-v1") {
|
|
11449
|
+
// The pinned Argent artifact stores its generated template marker before
|
|
11450
|
+
// the six mutable KCC-2 fields. The wrapper ABI includes that marker.
|
|
11451
|
+
const artifact = normalizeSilverScriptArtifact(tokenProfile.artifact);
|
|
11452
|
+
if (artifact.state_layout.start !== 34 || artifact.script[1] !== 32) {
|
|
11453
|
+
throw new Error("Argent token template marker layout mismatch");
|
|
11454
|
+
}
|
|
11455
|
+
builder.addData(Uint8Array.from(artifact.script.slice(2, 34)));
|
|
11456
|
+
}
|
|
11457
|
+
addKcc20State(builder, state);
|
|
11458
|
+
}
|
|
11415
11459
|
function addKcc20State(builder, state) {
|
|
11416
11460
|
builder.addI64(BigInt(state.amount));
|
|
11417
11461
|
builder.addData(state.ownerIdentifier ?? state.owner);
|