@bananapus/nana-sdk-core 1.2.0 → 1.3.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/dist/cjs/utils/hook.d.ts +15 -0
- package/dist/cjs/utils/hook.d.ts.map +1 -1
- package/dist/cjs/utils/hook.js +20 -0
- package/dist/cjs/utils/hook.js.map +1 -1
- package/dist/cjs/v6/cashOut.d.ts +23 -0
- package/dist/cjs/v6/cashOut.d.ts.map +1 -1
- package/dist/cjs/v6/cashOut.js +35 -0
- package/dist/cjs/v6/cashOut.js.map +1 -1
- package/dist/cjs/v6/cashOut.test.js +20 -0
- package/dist/cjs/v6/cashOut.test.js.map +1 -1
- package/dist/cjs/v6/index.d.ts +1 -0
- package/dist/cjs/v6/index.d.ts.map +1 -1
- package/dist/cjs/v6/index.js +1 -0
- package/dist/cjs/v6/index.js.map +1 -1
- package/dist/cjs/v6/nft.d.ts +98 -0
- package/dist/cjs/v6/nft.d.ts.map +1 -0
- package/dist/cjs/v6/nft.js +166 -0
- package/dist/cjs/v6/nft.js.map +1 -0
- package/dist/cjs/v6/nft.test.d.ts +2 -0
- package/dist/cjs/v6/nft.test.d.ts.map +1 -0
- package/dist/cjs/v6/nft.test.js +206 -0
- package/dist/cjs/v6/nft.test.js.map +1 -0
- package/dist/cjs/v6/pay.d.ts +13 -5
- package/dist/cjs/v6/pay.d.ts.map +1 -1
- package/dist/cjs/v6/pay.js +15 -18
- package/dist/cjs/v6/pay.js.map +1 -1
- package/dist/cjs/v6/pay.test.js +7 -0
- package/dist/cjs/v6/pay.test.js.map +1 -1
- package/dist/esm/utils/hook.d.ts +15 -0
- package/dist/esm/utils/hook.d.ts.map +1 -1
- package/dist/esm/utils/hook.js +20 -1
- package/dist/esm/utils/hook.js.map +1 -1
- package/dist/esm/v6/cashOut.d.ts +23 -0
- package/dist/esm/v6/cashOut.d.ts.map +1 -1
- package/dist/esm/v6/cashOut.js +34 -0
- package/dist/esm/v6/cashOut.js.map +1 -1
- package/dist/esm/v6/cashOut.test.js +22 -2
- package/dist/esm/v6/cashOut.test.js.map +1 -1
- package/dist/esm/v6/index.d.ts +1 -0
- package/dist/esm/v6/index.d.ts.map +1 -1
- package/dist/esm/v6/index.js +1 -0
- package/dist/esm/v6/index.js.map +1 -1
- package/dist/esm/v6/nft.d.ts +98 -0
- package/dist/esm/v6/nft.d.ts.map +1 -0
- package/dist/esm/v6/nft.js +160 -0
- package/dist/esm/v6/nft.js.map +1 -0
- package/dist/esm/v6/nft.test.d.ts +2 -0
- package/dist/esm/v6/nft.test.d.ts.map +1 -0
- package/dist/esm/v6/nft.test.js +204 -0
- package/dist/esm/v6/nft.test.js.map +1 -0
- package/dist/esm/v6/pay.d.ts +13 -5
- package/dist/esm/v6/pay.d.ts.map +1 -1
- package/dist/esm/v6/pay.js +17 -20
- package/dist/esm/v6/pay.js.map +1 -1
- package/dist/esm/v6/pay.test.js +7 -0
- package/dist/esm/v6/pay.test.js.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const viem_1 = require("viem");
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const contracts_js_1 = require("../contracts.js");
|
|
6
|
+
const juicebox_js_1 = require("../generated/juicebox.js");
|
|
7
|
+
const nft_js_1 = require("./nft.js");
|
|
8
|
+
const chainId = 11155111;
|
|
9
|
+
const hook = "0x1111111111111111111111111111111111111111";
|
|
10
|
+
const impl = "0x2222222222222222222222222222222222222222";
|
|
11
|
+
const store = "0x3333333333333333333333333333333333333333";
|
|
12
|
+
(0, vitest_1.describe)("effectiveTierPrice", () => {
|
|
13
|
+
(0, vitest_1.test)("floors like on-chain mulDiv(price, discountPercent, 200)", () => {
|
|
14
|
+
// 100 - floor(100 * 25 / 200) = 100 - 12 = 88.
|
|
15
|
+
(0, vitest_1.expect)((0, nft_js_1.effectiveTierPrice)(100n, 25)).toEqual(88n);
|
|
16
|
+
});
|
|
17
|
+
(0, vitest_1.test)("no discount returns the full price", () => {
|
|
18
|
+
(0, vitest_1.expect)((0, nft_js_1.effectiveTierPrice)(1000n, 0)).toEqual(1000n);
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.test)("full discount (denominator) is free", () => {
|
|
21
|
+
(0, vitest_1.expect)((0, nft_js_1.effectiveTierPrice)(1000n, Number(nft_js_1.DISCOUNT_DENOMINATOR))).toEqual(0n);
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.test)("clamps discounts above the denominator to free", () => {
|
|
24
|
+
(0, vitest_1.expect)((0, nft_js_1.effectiveTierPrice)(1000n, 500)).toEqual(0n);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.describe)("get721MetadataIdTarget", () => {
|
|
28
|
+
(0, vitest_1.test)("returns METADATA_ID_TARGET (the implementation, not the clone)", async () => {
|
|
29
|
+
const client = {
|
|
30
|
+
readContract: async () => impl,
|
|
31
|
+
};
|
|
32
|
+
(0, vitest_1.expect)(await (0, nft_js_1.get721MetadataIdTarget)(client, { chainId, hook })).toEqual(impl);
|
|
33
|
+
});
|
|
34
|
+
(0, vitest_1.test)("falls back to the hook address if the getter reverts", async () => {
|
|
35
|
+
const client = {
|
|
36
|
+
readContract: async () => {
|
|
37
|
+
throw new Error("no such function");
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
(0, vitest_1.expect)(await (0, nft_js_1.get721MetadataIdTarget)(client, { chainId, hook })).toEqual(hook);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.describe)("getProject721Shop", () => {
|
|
44
|
+
(0, vitest_1.test)("returns null when a revnet has no 721 hook", async () => {
|
|
45
|
+
const client = {
|
|
46
|
+
// getRevnetTiered721Hook -> zero address.
|
|
47
|
+
readContract: async () => viem_1.zeroAddress,
|
|
48
|
+
};
|
|
49
|
+
(0, vitest_1.expect)(await (0, nft_js_1.getProject721Shop)(client, {
|
|
50
|
+
chainId,
|
|
51
|
+
projectId: 1n,
|
|
52
|
+
isRevnet: true,
|
|
53
|
+
})).toBeNull();
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.test)("resolves a revnet shop: hook, store, target, pricing, tiers", async () => {
|
|
56
|
+
const client = {
|
|
57
|
+
readContract: async ({ address, functionName, }) => {
|
|
58
|
+
if (functionName === "tiered721HookOf")
|
|
59
|
+
return hook; // REVOwner
|
|
60
|
+
if (address === hook && functionName === "STORE")
|
|
61
|
+
return store;
|
|
62
|
+
if (functionName === "METADATA_ID_TARGET")
|
|
63
|
+
return impl;
|
|
64
|
+
if (functionName === "pricingContext")
|
|
65
|
+
return [61166n, 18n];
|
|
66
|
+
if (functionName === "tiersOf") {
|
|
67
|
+
return [
|
|
68
|
+
{
|
|
69
|
+
id: 1,
|
|
70
|
+
price: 1000n,
|
|
71
|
+
remainingSupply: 5,
|
|
72
|
+
initialSupply: 10,
|
|
73
|
+
votingUnits: 0n,
|
|
74
|
+
reserveFrequency: 0,
|
|
75
|
+
reserveBeneficiary: viem_1.zeroAddress,
|
|
76
|
+
encodedIpfsUri: `0x${"11".repeat(32)}`,
|
|
77
|
+
category: 0,
|
|
78
|
+
discountPercent: 0,
|
|
79
|
+
flags: {},
|
|
80
|
+
splitPercent: 0,
|
|
81
|
+
resolvedUri: "",
|
|
82
|
+
},
|
|
83
|
+
// Filtered out: initialSupply 0.
|
|
84
|
+
{
|
|
85
|
+
id: 2,
|
|
86
|
+
price: 0n,
|
|
87
|
+
remainingSupply: 0,
|
|
88
|
+
initialSupply: 0,
|
|
89
|
+
votingUnits: 0n,
|
|
90
|
+
reserveFrequency: 0,
|
|
91
|
+
reserveBeneficiary: viem_1.zeroAddress,
|
|
92
|
+
encodedIpfsUri: `0x${"00".repeat(32)}`,
|
|
93
|
+
category: 0,
|
|
94
|
+
discountPercent: 0,
|
|
95
|
+
flags: {},
|
|
96
|
+
splitPercent: 0,
|
|
97
|
+
resolvedUri: "",
|
|
98
|
+
},
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
throw new Error(`unexpected read ${functionName}`);
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
const shop = await (0, nft_js_1.getProject721Shop)(client, {
|
|
105
|
+
chainId,
|
|
106
|
+
projectId: 1n,
|
|
107
|
+
isRevnet: true,
|
|
108
|
+
});
|
|
109
|
+
(0, vitest_1.expect)(shop).not.toBeNull();
|
|
110
|
+
(0, vitest_1.expect)(shop.hook).toEqual(hook);
|
|
111
|
+
(0, vitest_1.expect)(shop.store).toEqual(store);
|
|
112
|
+
(0, vitest_1.expect)(shop.metadataIdTarget).toEqual(impl);
|
|
113
|
+
(0, vitest_1.expect)(shop.pricing).toEqual({ currency: 61166, decimals: 18 });
|
|
114
|
+
(0, vitest_1.expect)(shop.tiers).toHaveLength(1);
|
|
115
|
+
(0, vitest_1.expect)(shop.tiers[0]).toMatchObject({ id: 1, price: 1000n });
|
|
116
|
+
});
|
|
117
|
+
const tiersOfOne = () => [
|
|
118
|
+
{
|
|
119
|
+
id: 1,
|
|
120
|
+
price: 1000n,
|
|
121
|
+
remainingSupply: 5,
|
|
122
|
+
initialSupply: 10,
|
|
123
|
+
votingUnits: 0n,
|
|
124
|
+
reserveFrequency: 0,
|
|
125
|
+
reserveBeneficiary: viem_1.zeroAddress,
|
|
126
|
+
encodedIpfsUri: `0x${"11".repeat(32)}`,
|
|
127
|
+
category: 0,
|
|
128
|
+
discountPercent: 0,
|
|
129
|
+
flags: {},
|
|
130
|
+
splitPercent: 0,
|
|
131
|
+
resolvedUri: "",
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
// The custom-project omnichain deployer address on chain 11155111, read from
|
|
135
|
+
// the SDK's own address book so the branch matches real wiring.
|
|
136
|
+
const omniDeployer = juicebox_js_1.jbContractAddress["6"][contracts_js_1.JBOmnichainDeployerContracts.JBOmnichainDeployer]["11155111"];
|
|
137
|
+
(0, vitest_1.test)("custom project: resolves the real hook via the omnichain deployer", async () => {
|
|
138
|
+
const client = {
|
|
139
|
+
readContract: async ({ address, functionName, }) => {
|
|
140
|
+
// currentRulesetOf -> [ruleset, metadata] with the deployer as data hook.
|
|
141
|
+
if (functionName === "currentRulesetOf") {
|
|
142
|
+
return [
|
|
143
|
+
{ id: 7 },
|
|
144
|
+
{ useDataHookForPay: true, dataHook: omniDeployer },
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
// The deployer maps to the real clone hook.
|
|
148
|
+
if (address.toLowerCase() === omniDeployer.toLowerCase() &&
|
|
149
|
+
functionName === "tiered721HookOf") {
|
|
150
|
+
return [hook, false];
|
|
151
|
+
}
|
|
152
|
+
if (address === hook && functionName === "STORE")
|
|
153
|
+
return store;
|
|
154
|
+
if (functionName === "METADATA_ID_TARGET")
|
|
155
|
+
return impl;
|
|
156
|
+
if (functionName === "pricingContext")
|
|
157
|
+
return [1n, 18n];
|
|
158
|
+
if (functionName === "tiersOf")
|
|
159
|
+
return tiersOfOne();
|
|
160
|
+
throw new Error(`unexpected read ${functionName} @ ${address}`);
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
const shop = await (0, nft_js_1.getProject721Shop)(client, {
|
|
164
|
+
chainId: 11155111,
|
|
165
|
+
projectId: 9n,
|
|
166
|
+
isRevnet: false,
|
|
167
|
+
});
|
|
168
|
+
(0, vitest_1.expect)(shop.hook).toEqual(hook);
|
|
169
|
+
(0, vitest_1.expect)(shop.metadataIdTarget).toEqual(impl);
|
|
170
|
+
});
|
|
171
|
+
(0, vitest_1.test)("custom project: data hook that is not a 721 hook is no shop", async () => {
|
|
172
|
+
const notAHook = "0x4444444444444444444444444444444444444444";
|
|
173
|
+
const client = {
|
|
174
|
+
readContract: async ({ functionName }) => {
|
|
175
|
+
if (functionName === "currentRulesetOf") {
|
|
176
|
+
return [{ id: 7 }, { useDataHookForPay: true, dataHook: notAHook }];
|
|
177
|
+
}
|
|
178
|
+
// Non-authoritative candidate: STORE() reverts => not a 721 hook.
|
|
179
|
+
if (functionName === "STORE")
|
|
180
|
+
throw new Error("no STORE");
|
|
181
|
+
throw new Error(`unexpected read ${functionName}`);
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
(0, vitest_1.expect)(await (0, nft_js_1.getProject721Shop)(client, {
|
|
185
|
+
chainId: 11155111,
|
|
186
|
+
projectId: 9n,
|
|
187
|
+
isRevnet: false,
|
|
188
|
+
})).toBeNull();
|
|
189
|
+
});
|
|
190
|
+
(0, vitest_1.test)("custom project: no pay data hook is no shop", async () => {
|
|
191
|
+
const client = {
|
|
192
|
+
readContract: async ({ functionName }) => {
|
|
193
|
+
if (functionName === "currentRulesetOf") {
|
|
194
|
+
return [{ id: 7 }, { useDataHookForPay: false, dataHook: viem_1.zeroAddress }];
|
|
195
|
+
}
|
|
196
|
+
throw new Error(`unexpected read ${functionName}`);
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
(0, vitest_1.expect)(await (0, nft_js_1.getProject721Shop)(client, {
|
|
200
|
+
chainId: 11155111,
|
|
201
|
+
projectId: 9n,
|
|
202
|
+
isRevnet: false,
|
|
203
|
+
})).toBeNull();
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
//# sourceMappingURL=nft.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nft.test.js","sourceRoot":"","sources":["../../../src/v6/nft.test.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/v6/pay.d.ts
CHANGED
|
@@ -92,18 +92,26 @@ export declare function previewPay(client: PublicClient, { terminal, projectId,
|
|
|
92
92
|
* Build pay metadata instructing a project's JB721 tiers hook to mint specific tiers.
|
|
93
93
|
*
|
|
94
94
|
* The tier payload is `abi.encode(bool allowOverspending, uint16[] tierIdsToMint)`,
|
|
95
|
-
* keyed by the hook's metadata id (`bytes4(bytes20(
|
|
95
|
+
* keyed by the hook's metadata id (`bytes4(bytes20(metadataIdTarget) ^
|
|
96
96
|
* bytes20(keccak256("pay")))`) and packed into the JBMetadataResolver
|
|
97
97
|
* word-offset-table format.
|
|
98
98
|
*
|
|
99
|
-
* @param args.
|
|
99
|
+
* @param args.metadataIdTarget The hook's `METADATA_ID_TARGET` — the shared
|
|
100
|
+
* *implementation* address, NOT the project's clone hook address (see
|
|
101
|
+
* {@link get721MetadataIdTarget}). Passing the clone address makes the hook ignore
|
|
102
|
+
* the tiers and the payment mints ZERO NFTs (it succeeds, minting only tokens).
|
|
103
|
+
* @param args.hookAddress Deprecated alias for `metadataIdTarget`. Only correct
|
|
104
|
+
* when it already holds `METADATA_ID_TARGET`; prefer `metadataIdTarget`.
|
|
100
105
|
* @param args.tierIdsToMint The tier ids to mint, one entry per NFT.
|
|
101
106
|
* @param args.allowOverspending Whether payment beyond the tiers' total price is
|
|
102
|
-
* allowed (excess mints no NFT). Defaults to true.
|
|
107
|
+
* allowed (excess mints no NFT). Defaults to true. Note the hook still gates this
|
|
108
|
+
* on its store's `preventOverspending` flag.
|
|
103
109
|
* @returns The metadata to pass as `pay`'s `metadata` argument.
|
|
104
110
|
*/
|
|
105
|
-
export declare function build721PayMetadata({ hookAddress, tierIdsToMint, allowOverspending, }: {
|
|
106
|
-
|
|
111
|
+
export declare function build721PayMetadata({ metadataIdTarget, hookAddress, tierIdsToMint, allowOverspending, }: {
|
|
112
|
+
metadataIdTarget?: Address;
|
|
113
|
+
/** @deprecated Use `metadataIdTarget`. */
|
|
114
|
+
hookAddress?: Address;
|
|
107
115
|
tierIdsToMint: bigint[];
|
|
108
116
|
allowOverspending?: boolean;
|
|
109
117
|
}): Hex;
|
package/dist/cjs/v6/pay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["../../../src/v6/pay.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,GAAG,EACH,YAAY,
|
|
1
|
+
{"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["../../../src/v6/pay.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,GAAG,EACH,YAAY,EAEb,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,kBAAkB,CAAC;IAC/B,YAAY,EAAE,KAAK,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACvE,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,QAAQ,EACR,SAAS,EACT,KAAK,EACL,MAAM,EACN,WAAW,EACX,iBAAsB,EACtB,IAAS,EACT,QAAe,GAChB,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,GAAG,cAAc,CAmBjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,EACE,QAAQ,EACR,SAAS,EACT,KAAK,EACL,MAAM,EACN,WAAW,EACX,QAAe,GAChB,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,GACA,OAAO,CAAC,UAAU,CAAC,CAUrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,iBAA8C,GAC/C,EAAE;IACD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,GAAG,CAeN"}
|
package/dist/cjs/v6/pay.js
CHANGED
|
@@ -77,35 +77,32 @@ async function previewPay(client, { terminal, projectId, token, amount, benefici
|
|
|
77
77
|
});
|
|
78
78
|
return { beneficiaryTokenCount, reservedTokenCount };
|
|
79
79
|
}
|
|
80
|
-
/**
|
|
81
|
-
* The metadata id a JB721 hook looks up in pay metadata:
|
|
82
|
-
* `bytes4(bytes20(target) ^ bytes20(keccak256("pay")))`, where the target is the hook's
|
|
83
|
-
* own address (`JB721Hook.METADATA_ID_TARGET` is `address(this)`).
|
|
84
|
-
*
|
|
85
|
-
* @link https://github.com/Bananapus/nana-core-v6/blob/main/src/libraries/JBMetadataResolver.sol (`getId`)
|
|
86
|
-
*/
|
|
87
|
-
function pay721MetadataId(hookAddress) {
|
|
88
|
-
const targetBytes = (0, viem_1.toBytes)(hookAddress).slice(0, 20);
|
|
89
|
-
const purposeBytes = (0, viem_1.toBytes)((0, viem_1.keccak256)((0, viem_1.toBytes)("pay"))).slice(0, 20);
|
|
90
|
-
const xorResult = targetBytes.map((byte, i) => byte ^ purposeBytes[i]);
|
|
91
|
-
return (0, viem_1.bytesToHex)(xorResult.slice(0, 4));
|
|
92
|
-
}
|
|
93
80
|
/**
|
|
94
81
|
* Build pay metadata instructing a project's JB721 tiers hook to mint specific tiers.
|
|
95
82
|
*
|
|
96
83
|
* The tier payload is `abi.encode(bool allowOverspending, uint16[] tierIdsToMint)`,
|
|
97
|
-
* keyed by the hook's metadata id (`bytes4(bytes20(
|
|
84
|
+
* keyed by the hook's metadata id (`bytes4(bytes20(metadataIdTarget) ^
|
|
98
85
|
* bytes20(keccak256("pay")))`) and packed into the JBMetadataResolver
|
|
99
86
|
* word-offset-table format.
|
|
100
87
|
*
|
|
101
|
-
* @param args.
|
|
88
|
+
* @param args.metadataIdTarget The hook's `METADATA_ID_TARGET` — the shared
|
|
89
|
+
* *implementation* address, NOT the project's clone hook address (see
|
|
90
|
+
* {@link get721MetadataIdTarget}). Passing the clone address makes the hook ignore
|
|
91
|
+
* the tiers and the payment mints ZERO NFTs (it succeeds, minting only tokens).
|
|
92
|
+
* @param args.hookAddress Deprecated alias for `metadataIdTarget`. Only correct
|
|
93
|
+
* when it already holds `METADATA_ID_TARGET`; prefer `metadataIdTarget`.
|
|
102
94
|
* @param args.tierIdsToMint The tier ids to mint, one entry per NFT.
|
|
103
95
|
* @param args.allowOverspending Whether payment beyond the tiers' total price is
|
|
104
|
-
* allowed (excess mints no NFT). Defaults to true.
|
|
96
|
+
* allowed (excess mints no NFT). Defaults to true. Note the hook still gates this
|
|
97
|
+
* on its store's `preventOverspending` flag.
|
|
105
98
|
* @returns The metadata to pass as `pay`'s `metadata` argument.
|
|
106
99
|
*/
|
|
107
|
-
function build721PayMetadata({ hookAddress, tierIdsToMint, allowOverspending = constants_js_1.DEFAULT_ALLOW_OVERSPENDING, }) {
|
|
100
|
+
function build721PayMetadata({ metadataIdTarget, hookAddress, tierIdsToMint, allowOverspending = constants_js_1.DEFAULT_ALLOW_OVERSPENDING, }) {
|
|
101
|
+
const target = metadataIdTarget ?? hookAddress;
|
|
102
|
+
if (!target) {
|
|
103
|
+
throw new Error("build721PayMetadata requires metadataIdTarget");
|
|
104
|
+
}
|
|
108
105
|
const tierPayload = (0, viem_1.encodeAbiParameters)([{ type: "bool" }, { type: "uint16[]" }], [allowOverspending, tierIdsToMint.map(Number)]);
|
|
109
|
-
return (0, hook_js_1.createHookMetadata)([
|
|
106
|
+
return (0, hook_js_1.createHookMetadata)([(0, hook_js_1.hookMetadataId)(target, "pay")], [tierPayload]);
|
|
110
107
|
}
|
|
111
108
|
//# sourceMappingURL=pay.js.map
|
package/dist/cjs/v6/pay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../../src/v6/pay.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../../src/v6/pay.ts"],"names":[],"mappings":";;AA8CA,gCAuCC;AAoCD,gCA4BC;AAsBD,kDA0BC;AArMD,+BAKc;AACd,kDAA2E;AAC3E,0DAA8D;AAE9D,8CAAsE;AAetE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,UAAU,CAAC,EACzB,OAAO,EACP,QAAQ,EACR,SAAS,EACT,KAAK,EACL,MAAM,EACN,WAAW,EACX,iBAAiB,GAAG,EAAE,EACtB,IAAI,GAAG,EAAE,EACT,QAAQ,GAAG,IAAI,GAWhB;IACC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,2BAAY,CAAC,WAAW,EAAE,CAAC;IAEpE,OAAO;QACL,OAAO;QACP,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,gCAAkB;QACvB,YAAY,EAAE,KAAK;QACnB,IAAI,EAAE;YACJ,SAAS;YACT,KAAK;YACL,MAAM;YACN,WAAW;YACX,iBAAiB;YACjB,IAAI;YACJ,QAAQ;SACT;QACD,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;KAC9B,CAAC;AACJ,CAAC;AAgBD;;;;;;;;;;;;;;;;;;;GAmBG;AACI,KAAK,UAAU,UAAU,CAC9B,MAAoB,EACpB,EACE,QAAQ,EACR,SAAS,EACT,KAAK,EACL,MAAM,EACN,WAAW,EACX,QAAQ,GAAG,IAAI,GAShB;IAED,MAAM,CAAC,EAAE,qBAAqB,EAAE,kBAAkB,CAAC,GACjD,MAAM,MAAM,CAAC,YAAY,CAAC;QACxB,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,gCAAkB;QACvB,YAAY,EAAE,eAAe;QAC7B,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;KACxD,CAAC,CAAC;IAEL,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,mBAAmB,CAAC,EAClC,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,iBAAiB,GAAG,yCAA0B,GAO/C;IACC,MAAM,MAAM,GAAG,gBAAgB,IAAI,WAAW,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,0BAAmB,EACrC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EACxC,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAC/C,CAAC;IAEF,OAAO,IAAA,4BAAkB,EACvB,CAAC,IAAA,wBAAc,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAC/B,CAAC,WAAW,CAAC,CACP,CAAC;AACX,CAAC"}
|
package/dist/cjs/v6/pay.test.js
CHANGED
|
@@ -126,5 +126,12 @@ const usdc = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
|
|
|
126
126
|
// 0xadc75680 (first 4 bytes of keccak256("pay")) XOR 0x11111111.
|
|
127
127
|
(0, vitest_1.expect)((0, viem_1.sliceHex)(metadata, 32, 36)).toEqual("0xbcd64791");
|
|
128
128
|
});
|
|
129
|
+
(0, vitest_1.test)("build721PayMetadata metadataIdTarget matches the hookAddress alias", () => {
|
|
130
|
+
const target = "0x1111111111111111111111111111111111111111";
|
|
131
|
+
(0, vitest_1.expect)((0, pay_js_1.build721PayMetadata)({ metadataIdTarget: target, tierIdsToMint: [1n] })).toEqual((0, pay_js_1.build721PayMetadata)({ hookAddress: target, tierIdsToMint: [1n] }));
|
|
132
|
+
});
|
|
133
|
+
(0, vitest_1.test)("build721PayMetadata throws when no target is given", () => {
|
|
134
|
+
(0, vitest_1.expect)(() => (0, pay_js_1.build721PayMetadata)({ tierIdsToMint: [1n] })).toThrow(/metadataIdTarget/);
|
|
135
|
+
});
|
|
129
136
|
});
|
|
130
137
|
//# sourceMappingURL=pay.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pay.test.js","sourceRoot":"","sources":["../../../src/v6/pay.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pay.test.js","sourceRoot":"","sources":["../../../src/v6/pay.test.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/utils/hook.d.ts
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
import { Address, Hex } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* The metadata lookup id a JB hook resolves via `JBMetadataResolver.getId`:
|
|
4
|
+
* `bytes4(bytes20(target) ^ bytes20(keccak256(purpose)))`.
|
|
5
|
+
*
|
|
6
|
+
* For JB721 hooks, `target` MUST be the hook's `METADATA_ID_TARGET` — which is
|
|
7
|
+
* `address(this)` in the *implementation's* constructor, so every delegatecall
|
|
8
|
+
* clone reports the shared implementation address, NOT its own clone address.
|
|
9
|
+
* Passing the clone address yields an id the hook never matches, so the pay or
|
|
10
|
+
* cash out silently ignores the tier/token payload. Resolve the target with
|
|
11
|
+
* `get721MetadataIdTarget` rather than passing a hook address directly.
|
|
12
|
+
*
|
|
13
|
+
* @link https://github.com/Bananapus/nana-core-v6/blob/main/src/libraries/JBMetadataResolver.sol (`getId`)
|
|
14
|
+
*/
|
|
15
|
+
export declare function hookMetadataId(target: Address, purpose: string): Hex;
|
|
1
16
|
/**
|
|
2
17
|
*
|
|
3
18
|
* Create metadata for pay or redeem hooks.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/utils/hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/utils/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,GAAG,EAMJ,MAAM,MAAM,CAAC;AAEd;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,CAKpE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,iBA8CpE"}
|
package/dist/esm/utils/hook.js
CHANGED
|
@@ -1,4 +1,23 @@
|
|
|
1
|
-
import { encodePacked, zeroHash } from "viem";
|
|
1
|
+
import { bytesToHex, encodePacked, keccak256, toBytes, zeroHash, } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* The metadata lookup id a JB hook resolves via `JBMetadataResolver.getId`:
|
|
4
|
+
* `bytes4(bytes20(target) ^ bytes20(keccak256(purpose)))`.
|
|
5
|
+
*
|
|
6
|
+
* For JB721 hooks, `target` MUST be the hook's `METADATA_ID_TARGET` — which is
|
|
7
|
+
* `address(this)` in the *implementation's* constructor, so every delegatecall
|
|
8
|
+
* clone reports the shared implementation address, NOT its own clone address.
|
|
9
|
+
* Passing the clone address yields an id the hook never matches, so the pay or
|
|
10
|
+
* cash out silently ignores the tier/token payload. Resolve the target with
|
|
11
|
+
* `get721MetadataIdTarget` rather than passing a hook address directly.
|
|
12
|
+
*
|
|
13
|
+
* @link https://github.com/Bananapus/nana-core-v6/blob/main/src/libraries/JBMetadataResolver.sol (`getId`)
|
|
14
|
+
*/
|
|
15
|
+
export function hookMetadataId(target, purpose) {
|
|
16
|
+
const targetBytes = toBytes(target).slice(0, 20);
|
|
17
|
+
const purposeBytes = toBytes(keccak256(toBytes(purpose))).slice(0, 20);
|
|
18
|
+
const xored = targetBytes.map((byte, i) => byte ^ purposeBytes[i]);
|
|
19
|
+
return bytesToHex(xored.slice(0, 4));
|
|
20
|
+
}
|
|
2
21
|
/**
|
|
3
22
|
*
|
|
4
23
|
* Create metadata for pay or redeem hooks.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/utils/hook.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/utils/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EACV,YAAY,EACZ,SAAS,EACT,OAAO,EACP,QAAQ,GACT,MAAM,MAAM,CAAC;AAEd;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,MAAe,EAAE,OAAe;IAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAa,EAAE,SAAmB;IACnE,gBAAgB;IAChB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAExE,oEAAoE;IACpE,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAErD,oEAAoE;IACpE,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,sFAAsF;IACtF,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEjC,kHAAkH;IAClH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,8BAA8B;QAC9B,QAAQ,IAAI,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhE,QAAQ,IAAI,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,kFAAkF;QAClF,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;QAEnC,wBAAwB;QACxB,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC;IAED,qCAAqC;IACrC,IAAI,YAAY,GACd,QAAQ,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,MAAM;QACjB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAE/C,yBAAyB;IACzB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,GAAG,CAAS,CAAC;IAE1D,0DAA0D;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,2BAA2B;QAC3B,QAAQ,IAAI,YAAY,CACtB,CAAC,OAAO,CAAC,EACT,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAS,CAAC,CACjD,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;IAED,2BAA2B;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/esm/v6/cashOut.d.ts
CHANGED
|
@@ -40,6 +40,29 @@ export declare function buildCashOutTx({ chainId, terminal, holder, projectId, c
|
|
|
40
40
|
beneficiary: Address;
|
|
41
41
|
metadata?: Hex;
|
|
42
42
|
}): V6CashOutTxRequest;
|
|
43
|
+
/**
|
|
44
|
+
* Build cash-out metadata instructing a project's JB721 tiers hook to burn
|
|
45
|
+
* specific NFTs and reclaim their share of surplus.
|
|
46
|
+
*
|
|
47
|
+
* The payload is `abi.encode(uint256[] tokenIds)`, keyed by the hook's cash-out
|
|
48
|
+
* metadata id (`bytes4(bytes20(metadataIdTarget) ^ bytes20(keccak256("cashOut")))`)
|
|
49
|
+
* and packed into the JBMetadataResolver word-offset-table format. This is the
|
|
50
|
+
* cash-out mirror of {@link build721PayMetadata}. The NFTs are burned by the hook
|
|
51
|
+
* itself, so no ERC-721 approval is needed; pass `cashOutCount: 0` to
|
|
52
|
+
* `cashOutTokensOf` (fungible tokens cannot co-redeem in the same call).
|
|
53
|
+
*
|
|
54
|
+
* @param args.metadataIdTarget The hook's `METADATA_ID_TARGET` — the shared
|
|
55
|
+
* *implementation* address, NOT the project's clone hook address (see
|
|
56
|
+
* {@link get721MetadataIdTarget}). Passing the clone address makes the hook ignore
|
|
57
|
+
* the token ids and no NFTs are burned.
|
|
58
|
+
* @param args.tokenIds The token ids of the NFTs to redeem. Must be non-empty,
|
|
59
|
+
* unique, and non-zero (a real NFT token id is never 0).
|
|
60
|
+
* @returns The metadata to pass as `cashOutTokensOf`'s `metadata` argument.
|
|
61
|
+
*/
|
|
62
|
+
export declare function build721CashOutMetadata({ metadataIdTarget, tokenIds, }: {
|
|
63
|
+
metadataIdTarget: Address;
|
|
64
|
+
tokenIds: bigint[];
|
|
65
|
+
}): Hex;
|
|
43
66
|
/**
|
|
44
67
|
* A cash out quote.
|
|
45
68
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cashOut.d.ts","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"cashOut.d.ts","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAuB,MAAM,MAAM,CAAC;AACvE,OAAO,EACL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAMxC;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,kBAAkB,CAAC;IAC/B,YAAY,EAAE,iBAAiB,CAAC;IAChC,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;CACzE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,kBAAuB,EACvB,WAAW,EACX,QAAe,GAChB,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,GAAG,kBAAkB,CAgBrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,gBAAgB,EAChB,QAAQ,GACT,EAAE;IACD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,GAAG,GAAG,CAiBN;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,EACE,OAAO,EACP,SAAS,EACT,YAAY,EACZ,QAAc,EACd,QAA2C,GAC5C,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,YAAY,CAAC,CAYvB"}
|
package/dist/esm/v6/cashOut.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { encodeAbiParameters } from "viem";
|
|
1
2
|
import { jbMultiTerminalAbi, jbTerminalStoreAbi, } from "../generated/juicebox.js";
|
|
2
3
|
import { applyJbDaoCashOutFee } from "../utils/fee.js";
|
|
4
|
+
import { createHookMetadata, hookMetadataId } from "../utils/hook.js";
|
|
3
5
|
import { NATIVE_TOKEN_CURRENCY_ID } from "./currency.js";
|
|
4
6
|
import { v6Address } from "./types.js";
|
|
5
7
|
/**
|
|
@@ -36,6 +38,38 @@ export function buildCashOutTx({ chainId, terminal, holder, projectId, cashOutCo
|
|
|
36
38
|
],
|
|
37
39
|
};
|
|
38
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Build cash-out metadata instructing a project's JB721 tiers hook to burn
|
|
43
|
+
* specific NFTs and reclaim their share of surplus.
|
|
44
|
+
*
|
|
45
|
+
* The payload is `abi.encode(uint256[] tokenIds)`, keyed by the hook's cash-out
|
|
46
|
+
* metadata id (`bytes4(bytes20(metadataIdTarget) ^ bytes20(keccak256("cashOut")))`)
|
|
47
|
+
* and packed into the JBMetadataResolver word-offset-table format. This is the
|
|
48
|
+
* cash-out mirror of {@link build721PayMetadata}. The NFTs are burned by the hook
|
|
49
|
+
* itself, so no ERC-721 approval is needed; pass `cashOutCount: 0` to
|
|
50
|
+
* `cashOutTokensOf` (fungible tokens cannot co-redeem in the same call).
|
|
51
|
+
*
|
|
52
|
+
* @param args.metadataIdTarget The hook's `METADATA_ID_TARGET` — the shared
|
|
53
|
+
* *implementation* address, NOT the project's clone hook address (see
|
|
54
|
+
* {@link get721MetadataIdTarget}). Passing the clone address makes the hook ignore
|
|
55
|
+
* the token ids and no NFTs are burned.
|
|
56
|
+
* @param args.tokenIds The token ids of the NFTs to redeem. Must be non-empty,
|
|
57
|
+
* unique, and non-zero (a real NFT token id is never 0).
|
|
58
|
+
* @returns The metadata to pass as `cashOutTokensOf`'s `metadata` argument.
|
|
59
|
+
*/
|
|
60
|
+
export function build721CashOutMetadata({ metadataIdTarget, tokenIds, }) {
|
|
61
|
+
if (tokenIds.length === 0) {
|
|
62
|
+
throw new Error("build721CashOutMetadata requires at least one token id");
|
|
63
|
+
}
|
|
64
|
+
if (new Set(tokenIds.map(String)).size !== tokenIds.length) {
|
|
65
|
+
throw new Error("build721CashOutMetadata token ids must be unique");
|
|
66
|
+
}
|
|
67
|
+
if (tokenIds.some((tokenId) => tokenId <= 0n)) {
|
|
68
|
+
throw new Error("build721CashOutMetadata token ids must be positive");
|
|
69
|
+
}
|
|
70
|
+
const payload = encodeAbiParameters([{ type: "uint256[]" }], [tokenIds]);
|
|
71
|
+
return createHookMetadata([hookMetadataId(metadataIdTarget, "cashOut")], [payload]);
|
|
72
|
+
}
|
|
39
73
|
/**
|
|
40
74
|
* Quote the surplus reclaimed by cashing out `cashOutCount` project tokens, via
|
|
41
75
|
* `JBTerminalStore.currentReclaimableSurplusOf(projectId, cashOutCount, [], [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cashOut.js","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cashOut.js","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,mBAAmB,EAAE,MAAM,MAAM,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAcvC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,kBAAkB,GAAG,EAAE,EACvB,WAAW,EACX,QAAQ,GAAG,IAAI,GAWhB;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,kBAAkB;QACvB,YAAY,EAAE,iBAAiB;QAC/B,IAAI,EAAE;YACJ,MAAM;YACN,SAAS;YACT,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,WAAW;YACX,QAAQ;SACT;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,uBAAuB,CAAC,EACtC,gBAAgB,EAChB,QAAQ,GAIT;IACC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzE,OAAO,kBAAkB,CACvB,CAAC,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAC7C,CAAC,OAAO,CAAC,CACH,CAAC;AACX,CAAC;AAmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,EACE,OAAO,EACP,SAAS,EACT,YAAY,EACZ,QAAQ,GAAG,GAAG,EACd,QAAQ,GAAG,MAAM,CAAC,wBAAwB,CAAC,GAO5C;IAED,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;QAC9C,OAAO,EAAE,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC;QAC9C,GAAG,EAAE,kBAAkB;QACvB,YAAY,EAAE,6BAA6B;QAC3C,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC5D,CAAC,CAAC;IAEH,OAAO;QACL,aAAa;QACb,qBAAqB,EAAE,oBAAoB,CAAC,aAAa,CAAC;KAC3D,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { encodeFunctionData } from "viem";
|
|
1
|
+
import { decodeAbiParameters, encodeFunctionData, sliceHex, } from "viem";
|
|
2
2
|
import { describe, expect, test } from "vitest";
|
|
3
3
|
import { NATIVE_TOKEN, ONE_ETHER } from "../constants.js";
|
|
4
4
|
import { jbTerminalStoreAbi } from "../generated/juicebox.js";
|
|
5
|
-
import { buildCashOutTx, getCashOutQuote } from "./cashOut.js";
|
|
5
|
+
import { build721CashOutMetadata, buildCashOutTx, getCashOutQuote, } from "./cashOut.js";
|
|
6
6
|
import { v6Address } from "./types.js";
|
|
7
7
|
const chainId = 11155111;
|
|
8
8
|
const terminal = "0x1111111111111111111111111111111111111111";
|
|
@@ -96,5 +96,25 @@ describe("cashOut", () => {
|
|
|
96
96
|
0x3606eb48n,
|
|
97
97
|
]);
|
|
98
98
|
});
|
|
99
|
+
test("build721CashOutMetadata packs the cashOut id and token ids", () => {
|
|
100
|
+
// With a target whose first 4 bytes are zero, the id is the first 4 bytes
|
|
101
|
+
// of keccak256("cashOut").
|
|
102
|
+
const metadata = build721CashOutMetadata({
|
|
103
|
+
metadataIdTarget: "0x00000000000000000000000000000000DeaDBeef",
|
|
104
|
+
tokenIds: [1000000001n, 1000000002n],
|
|
105
|
+
});
|
|
106
|
+
expect(sliceHex(metadata, 0, 32)).toEqual(`0x${"00".repeat(32)}`);
|
|
107
|
+
// keccak256("cashOut") first 4 bytes, then the payload word offset (2).
|
|
108
|
+
expect(sliceHex(metadata, 32, 36)).toEqual("0x86b14ff4");
|
|
109
|
+
expect(sliceHex(metadata, 36, 37)).toEqual("0x02");
|
|
110
|
+
const [tokenIds] = decodeAbiParameters([{ type: "uint256[]" }], sliceHex(metadata, 64));
|
|
111
|
+
expect(tokenIds).toEqual([1000000001n, 1000000002n]);
|
|
112
|
+
});
|
|
113
|
+
test("build721CashOutMetadata rejects empty, duplicate, and zero token ids", () => {
|
|
114
|
+
const target = "0x00000000000000000000000000000000DeaDBeef";
|
|
115
|
+
expect(() => build721CashOutMetadata({ metadataIdTarget: target, tokenIds: [] })).toThrow(/at least one/);
|
|
116
|
+
expect(() => build721CashOutMetadata({ metadataIdTarget: target, tokenIds: [1n, 1n] })).toThrow(/unique/);
|
|
117
|
+
expect(() => build721CashOutMetadata({ metadataIdTarget: target, tokenIds: [0n] })).toThrow(/positive/);
|
|
118
|
+
});
|
|
99
119
|
});
|
|
100
120
|
//# sourceMappingURL=cashOut.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cashOut.test.js","sourceRoot":"","sources":["../../../src/v6/cashOut.test.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cashOut.test.js","sourceRoot":"","sources":["../../../src/v6/cashOut.test.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/v6/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
package/dist/esm/v6/index.js
CHANGED
package/dist/esm/v6/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|