@bananapus/nana-sdk-core 1.0.0 → 1.1.1
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/actions/JBSuckerAbi.js +4 -1
- package/dist/cjs/actions/JBSuckerAbi.js.map +1 -1
- package/dist/cjs/actions/dataHook.js +26 -22
- package/dist/cjs/actions/dataHook.js.map +1 -1
- package/dist/cjs/actions/projectMetadata.js +12 -8
- package/dist/cjs/actions/projectMetadata.js.map +1 -1
- package/dist/cjs/actions/suckerPairs.js +21 -17
- package/dist/cjs/actions/suckerPairs.js.map +1 -1
- package/dist/cjs/constants.js +89 -85
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/contracts.js +22 -19
- package/dist/cjs/contracts.js.map +1 -1
- package/dist/cjs/generated/juicebox.js +94 -90
- package/dist/cjs/generated/juicebox.js.map +1 -1
- package/dist/cjs/index.js +24 -8
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/types.js +15 -4
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/contracts.js +19 -14
- package/dist/cjs/utils/contracts.js.map +1 -1
- package/dist/cjs/utils/data.js +23 -13
- package/dist/cjs/utils/data.js.map +1 -1
- package/dist/cjs/utils/data.test.js +19 -17
- package/dist/cjs/utils/data.test.js.map +1 -1
- package/dist/cjs/utils/debug.js +4 -1
- package/dist/cjs/utils/debug.js.map +1 -1
- package/dist/cjs/utils/deploy.js +17 -13
- package/dist/cjs/utils/deploy.js.map +1 -1
- package/dist/cjs/utils/deploy.test.js +15 -13
- package/dist/cjs/utils/deploy.test.js.map +1 -1
- package/dist/cjs/utils/fee.js +6 -3
- package/dist/cjs/utils/fee.js.map +1 -1
- package/dist/cjs/utils/fee.test.js +8 -6
- package/dist/cjs/utils/fee.test.js.map +1 -1
- package/dist/cjs/utils/format.js +11 -6
- package/dist/cjs/utils/format.js.map +1 -1
- package/dist/cjs/utils/format.test.js +11 -9
- package/dist/cjs/utils/format.test.js.map +1 -1
- package/dist/cjs/utils/hook.js +9 -6
- package/dist/cjs/utils/hook.js.map +1 -1
- package/dist/cjs/utils/index.js +28 -12
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/ipfs.js +14 -6
- package/dist/cjs/utils/ipfs.js.map +1 -1
- package/dist/cjs/utils/ipfs.test.js +23 -18
- package/dist/cjs/utils/ipfs.test.js.map +1 -1
- package/dist/cjs/utils/revnet.js +9 -5
- package/dist/cjs/utils/revnet.js.map +1 -1
- package/dist/cjs/utils/revnet.test.js +9 -7
- package/dist/cjs/utils/revnet.test.js.map +1 -1
- package/dist/cjs/utils/ruleset.js +11 -7
- package/dist/cjs/utils/ruleset.js.map +1 -1
- package/dist/cjs/utils/ruleset.test.js +9 -7
- package/dist/cjs/utils/ruleset.test.js.map +1 -1
- package/dist/cjs/utils/token.js +26 -19
- package/dist/cjs/utils/token.js.map +1 -1
- package/dist/cjs/utils/token.test.js +25 -23
- package/dist/cjs/utils/token.test.js.map +1 -1
- package/dist/cjs/utils/tx.js +6 -3
- package/dist/cjs/utils/tx.js.map +1 -1
- package/dist/cjs/utils/urn.js +9 -5
- package/dist/cjs/utils/urn.js.map +1 -1
- package/dist/cjs/utils/urn.test.js +71 -69
- package/dist/cjs/utils/urn.test.js.map +1 -1
- package/dist/cjs/v6/cashOut.d.ts +88 -0
- package/dist/cjs/v6/cashOut.d.ts.map +1 -0
- package/dist/cjs/v6/cashOut.js +77 -0
- package/dist/cjs/v6/cashOut.js.map +1 -0
- package/dist/cjs/v6/cashOut.test.d.ts +2 -0
- package/dist/cjs/v6/cashOut.test.d.ts.map +1 -0
- package/dist/cjs/v6/cashOut.test.js +102 -0
- package/dist/cjs/v6/cashOut.test.js.map +1 -0
- package/dist/cjs/v6/currency.d.ts +43 -0
- package/dist/cjs/v6/currency.d.ts.map +1 -0
- package/dist/cjs/v6/currency.js +48 -0
- package/dist/cjs/v6/currency.js.map +1 -0
- package/dist/cjs/v6/currency.test.d.ts +2 -0
- package/dist/cjs/v6/currency.test.d.ts.map +1 -0
- package/dist/cjs/v6/currency.test.js +26 -0
- package/dist/cjs/v6/currency.test.js.map +1 -0
- package/dist/cjs/v6/fees.d.ts +43 -0
- package/dist/cjs/v6/fees.d.ts.map +1 -0
- package/dist/cjs/v6/fees.js +56 -0
- package/dist/cjs/v6/fees.js.map +1 -0
- package/dist/cjs/v6/fees.test.d.ts +2 -0
- package/dist/cjs/v6/fees.test.d.ts.map +1 -0
- package/dist/cjs/v6/fees.test.js +40 -0
- package/dist/cjs/v6/fees.test.js.map +1 -0
- package/dist/cjs/v6/index.d.ts +16 -0
- package/dist/cjs/v6/index.d.ts.map +1 -0
- package/dist/cjs/v6/index.js +32 -0
- package/dist/cjs/v6/index.js.map +1 -0
- package/dist/cjs/v6/launch.d.ts +2754 -0
- package/dist/cjs/v6/launch.d.ts.map +1 -0
- package/dist/cjs/v6/launch.js +184 -0
- package/dist/cjs/v6/launch.js.map +1 -0
- package/dist/cjs/v6/launch.test.d.ts +2 -0
- package/dist/cjs/v6/launch.test.d.ts.map +1 -0
- package/dist/cjs/v6/launch.test.js +137 -0
- package/dist/cjs/v6/launch.test.js.map +1 -0
- package/dist/cjs/v6/loans.d.ts +176 -0
- package/dist/cjs/v6/loans.d.ts.map +1 -0
- package/dist/cjs/v6/loans.js +177 -0
- package/dist/cjs/v6/loans.js.map +1 -0
- package/dist/cjs/v6/loans.test.d.ts +2 -0
- package/dist/cjs/v6/loans.test.d.ts.map +1 -0
- package/dist/cjs/v6/loans.test.js +129 -0
- package/dist/cjs/v6/loans.test.js.map +1 -0
- package/dist/cjs/v6/omnichain.d.ts +10997 -0
- package/dist/cjs/v6/omnichain.d.ts.map +1 -0
- package/dist/cjs/v6/omnichain.js +120 -0
- package/dist/cjs/v6/omnichain.js.map +1 -0
- package/dist/cjs/v6/omnichain.test.d.ts +2 -0
- package/dist/cjs/v6/omnichain.test.d.ts.map +1 -0
- package/dist/cjs/v6/omnichain.test.js +145 -0
- package/dist/cjs/v6/omnichain.test.js.map +1 -0
- package/dist/cjs/v6/pay.d.ts +110 -0
- package/dist/cjs/v6/pay.d.ts.map +1 -0
- package/dist/cjs/v6/pay.js +111 -0
- package/dist/cjs/v6/pay.js.map +1 -0
- package/dist/cjs/v6/pay.test.d.ts +2 -0
- package/dist/cjs/v6/pay.test.d.ts.map +1 -0
- package/dist/cjs/v6/pay.test.js +130 -0
- package/dist/cjs/v6/pay.test.js.map +1 -0
- package/dist/cjs/v6/permissions.d.ts +128 -0
- package/dist/cjs/v6/permissions.d.ts.map +1 -0
- package/dist/cjs/v6/permissions.js +125 -0
- package/dist/cjs/v6/permissions.js.map +1 -0
- package/dist/cjs/v6/permissions.test.d.ts +2 -0
- package/dist/cjs/v6/permissions.test.d.ts.map +1 -0
- package/dist/cjs/v6/permissions.test.js +117 -0
- package/dist/cjs/v6/permissions.test.js.map +1 -0
- package/dist/cjs/v6/revnets.d.ts +4459 -0
- package/dist/cjs/v6/revnets.d.ts.map +1 -0
- package/dist/cjs/v6/revnets.js +178 -0
- package/dist/cjs/v6/revnets.js.map +1 -0
- package/dist/cjs/v6/revnets.test.d.ts +2 -0
- package/dist/cjs/v6/revnets.test.d.ts.map +1 -0
- package/dist/cjs/v6/revnets.test.js +233 -0
- package/dist/cjs/v6/revnets.test.js.map +1 -0
- package/dist/cjs/v6/rulesets.d.ts +2700 -0
- package/dist/cjs/v6/rulesets.d.ts.map +1 -0
- package/dist/cjs/v6/rulesets.js +76 -0
- package/dist/cjs/v6/rulesets.js.map +1 -0
- package/dist/cjs/v6/rulesets.test.d.ts +2 -0
- package/dist/cjs/v6/rulesets.test.d.ts.map +1 -0
- package/dist/cjs/v6/rulesets.test.js +106 -0
- package/dist/cjs/v6/rulesets.test.js.map +1 -0
- package/dist/cjs/v6/splits.d.ts +2671 -0
- package/dist/cjs/v6/splits.d.ts.map +1 -0
- package/dist/cjs/v6/splits.js +116 -0
- package/dist/cjs/v6/splits.js.map +1 -0
- package/dist/cjs/v6/splits.test.d.ts +2 -0
- package/dist/cjs/v6/splits.test.d.ts.map +1 -0
- package/dist/cjs/v6/splits.test.js +135 -0
- package/dist/cjs/v6/splits.test.js.map +1 -0
- package/dist/cjs/v6/suckers.d.ts +247 -0
- package/dist/cjs/v6/suckers.d.ts.map +1 -0
- package/dist/cjs/v6/suckers.js +163 -0
- package/dist/cjs/v6/suckers.js.map +1 -0
- package/dist/cjs/v6/suckers.test.d.ts +2 -0
- package/dist/cjs/v6/suckers.test.d.ts.map +1 -0
- package/dist/cjs/v6/suckers.test.js +134 -0
- package/dist/cjs/v6/suckers.test.js.map +1 -0
- package/dist/cjs/v6/terminals.d.ts +67 -0
- package/dist/cjs/v6/terminals.d.ts.map +1 -0
- package/dist/cjs/v6/terminals.js +54 -0
- package/dist/cjs/v6/terminals.js.map +1 -0
- package/dist/cjs/v6/terminals.test.d.ts +2 -0
- package/dist/cjs/v6/terminals.test.d.ts.map +1 -0
- package/dist/cjs/v6/terminals.test.js +59 -0
- package/dist/cjs/v6/terminals.test.js.map +1 -0
- package/dist/cjs/v6/tokens.d.ts +194 -0
- package/dist/cjs/v6/tokens.d.ts.map +1 -0
- package/dist/cjs/v6/tokens.js +170 -0
- package/dist/cjs/v6/tokens.js.map +1 -0
- package/dist/cjs/v6/tokens.test.d.ts +2 -0
- package/dist/cjs/v6/tokens.test.d.ts.map +1 -0
- package/dist/cjs/v6/tokens.test.js +141 -0
- package/dist/cjs/v6/tokens.test.js.map +1 -0
- package/dist/cjs/v6/types.d.ts +12 -0
- package/dist/cjs/v6/types.d.ts.map +1 -0
- package/dist/cjs/v6/types.js +15 -0
- package/dist/cjs/v6/types.js.map +1 -0
- package/dist/esm/v6/cashOut.d.ts +88 -0
- package/dist/esm/v6/cashOut.d.ts.map +1 -0
- package/dist/esm/v6/cashOut.js +73 -0
- package/dist/esm/v6/cashOut.js.map +1 -0
- package/dist/esm/v6/cashOut.test.d.ts +2 -0
- package/dist/esm/v6/cashOut.test.d.ts.map +1 -0
- package/dist/esm/v6/cashOut.test.js +100 -0
- package/dist/esm/v6/cashOut.test.js.map +1 -0
- package/dist/esm/v6/currency.d.ts +43 -0
- package/dist/esm/v6/currency.d.ts.map +1 -0
- package/dist/esm/v6/currency.js +44 -0
- package/dist/esm/v6/currency.js.map +1 -0
- package/dist/esm/v6/currency.test.d.ts +2 -0
- package/dist/esm/v6/currency.test.d.ts.map +1 -0
- package/dist/esm/v6/currency.test.js +24 -0
- package/dist/esm/v6/currency.test.js.map +1 -0
- package/dist/esm/v6/fees.d.ts +43 -0
- package/dist/esm/v6/fees.d.ts.map +1 -0
- package/dist/esm/v6/fees.js +51 -0
- package/dist/esm/v6/fees.js.map +1 -0
- package/dist/esm/v6/fees.test.d.ts +2 -0
- package/dist/esm/v6/fees.test.d.ts.map +1 -0
- package/dist/esm/v6/fees.test.js +38 -0
- package/dist/esm/v6/fees.test.js.map +1 -0
- package/dist/esm/v6/index.d.ts +16 -0
- package/dist/esm/v6/index.d.ts.map +1 -0
- package/dist/esm/v6/index.js +16 -0
- package/dist/esm/v6/index.js.map +1 -0
- package/dist/esm/v6/launch.d.ts +2754 -0
- package/dist/esm/v6/launch.d.ts.map +1 -0
- package/dist/esm/v6/launch.js +176 -0
- package/dist/esm/v6/launch.js.map +1 -0
- package/dist/esm/v6/launch.test.d.ts +2 -0
- package/dist/esm/v6/launch.test.d.ts.map +1 -0
- package/dist/esm/v6/launch.test.js +135 -0
- package/dist/esm/v6/launch.test.js.map +1 -0
- package/dist/esm/v6/loans.d.ts +176 -0
- package/dist/esm/v6/loans.d.ts.map +1 -0
- package/dist/esm/v6/loans.js +170 -0
- package/dist/esm/v6/loans.js.map +1 -0
- package/dist/esm/v6/loans.test.d.ts +2 -0
- package/dist/esm/v6/loans.test.d.ts.map +1 -0
- package/dist/esm/v6/loans.test.js +127 -0
- package/dist/esm/v6/loans.test.js.map +1 -0
- package/dist/esm/v6/omnichain.d.ts +10997 -0
- package/dist/esm/v6/omnichain.d.ts.map +1 -0
- package/dist/esm/v6/omnichain.js +116 -0
- package/dist/esm/v6/omnichain.js.map +1 -0
- package/dist/esm/v6/omnichain.test.d.ts +2 -0
- package/dist/esm/v6/omnichain.test.d.ts.map +1 -0
- package/dist/esm/v6/omnichain.test.js +143 -0
- package/dist/esm/v6/omnichain.test.js.map +1 -0
- package/dist/esm/v6/pay.d.ts +110 -0
- package/dist/esm/v6/pay.d.ts.map +1 -0
- package/dist/esm/v6/pay.js +106 -0
- package/dist/esm/v6/pay.js.map +1 -0
- package/dist/esm/v6/pay.test.d.ts +2 -0
- package/dist/esm/v6/pay.test.d.ts.map +1 -0
- package/dist/esm/v6/pay.test.js +128 -0
- package/dist/esm/v6/pay.test.js.map +1 -0
- package/dist/esm/v6/permissions.d.ts +128 -0
- package/dist/esm/v6/permissions.d.ts.map +1 -0
- package/dist/esm/v6/permissions.js +120 -0
- package/dist/esm/v6/permissions.js.map +1 -0
- package/dist/esm/v6/permissions.test.d.ts +2 -0
- package/dist/esm/v6/permissions.test.d.ts.map +1 -0
- package/dist/esm/v6/permissions.test.js +115 -0
- package/dist/esm/v6/permissions.test.js.map +1 -0
- package/dist/esm/v6/revnets.d.ts +4459 -0
- package/dist/esm/v6/revnets.d.ts.map +1 -0
- package/dist/esm/v6/revnets.js +169 -0
- package/dist/esm/v6/revnets.js.map +1 -0
- package/dist/esm/v6/revnets.test.d.ts +2 -0
- package/dist/esm/v6/revnets.test.d.ts.map +1 -0
- package/dist/esm/v6/revnets.test.js +231 -0
- package/dist/esm/v6/revnets.test.js.map +1 -0
- package/dist/esm/v6/rulesets.d.ts +2700 -0
- package/dist/esm/v6/rulesets.d.ts.map +1 -0
- package/dist/esm/v6/rulesets.js +70 -0
- package/dist/esm/v6/rulesets.js.map +1 -0
- package/dist/esm/v6/rulesets.test.d.ts +2 -0
- package/dist/esm/v6/rulesets.test.d.ts.map +1 -0
- package/dist/esm/v6/rulesets.test.js +104 -0
- package/dist/esm/v6/rulesets.test.js.map +1 -0
- package/dist/esm/v6/splits.d.ts +2671 -0
- package/dist/esm/v6/splits.d.ts.map +1 -0
- package/dist/esm/v6/splits.js +109 -0
- package/dist/esm/v6/splits.js.map +1 -0
- package/dist/esm/v6/splits.test.d.ts +2 -0
- package/dist/esm/v6/splits.test.d.ts.map +1 -0
- package/dist/esm/v6/splits.test.js +133 -0
- package/dist/esm/v6/splits.test.js.map +1 -0
- package/dist/esm/v6/suckers.d.ts +247 -0
- package/dist/esm/v6/suckers.d.ts.map +1 -0
- package/dist/esm/v6/suckers.js +156 -0
- package/dist/esm/v6/suckers.js.map +1 -0
- package/dist/esm/v6/suckers.test.d.ts +2 -0
- package/dist/esm/v6/suckers.test.d.ts.map +1 -0
- package/dist/esm/v6/suckers.test.js +132 -0
- package/dist/esm/v6/suckers.test.js.map +1 -0
- package/dist/esm/v6/terminals.d.ts +67 -0
- package/dist/esm/v6/terminals.d.ts.map +1 -0
- package/dist/esm/v6/terminals.js +50 -0
- package/dist/esm/v6/terminals.js.map +1 -0
- package/dist/esm/v6/terminals.test.d.ts +2 -0
- package/dist/esm/v6/terminals.test.d.ts.map +1 -0
- package/dist/esm/v6/terminals.test.js +57 -0
- package/dist/esm/v6/terminals.test.js.map +1 -0
- package/dist/esm/v6/tokens.d.ts +194 -0
- package/dist/esm/v6/tokens.d.ts.map +1 -0
- package/dist/esm/v6/tokens.js +161 -0
- package/dist/esm/v6/tokens.js.map +1 -0
- package/dist/esm/v6/tokens.test.d.ts +2 -0
- package/dist/esm/v6/tokens.test.d.ts.map +1 -0
- package/dist/esm/v6/tokens.test.js +139 -0
- package/dist/esm/v6/tokens.test.js.map +1 -0
- package/dist/esm/v6/types.d.ts +12 -0
- package/dist/esm/v6/types.d.ts.map +1 -0
- package/dist/esm/v6/types.js +12 -0
- package/dist/esm/v6/types.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -2
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const viem_1 = require("viem");
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const constants_js_1 = require("../constants.js");
|
|
6
|
+
const juicebox_js_1 = require("../generated/juicebox.js");
|
|
7
|
+
const pay_js_1 = require("./pay.js");
|
|
8
|
+
const chainId = 11155111;
|
|
9
|
+
const terminal = "0x1111111111111111111111111111111111111111";
|
|
10
|
+
const projectId = 3n;
|
|
11
|
+
const beneficiary = "0x2222222222222222222222222222222222222222";
|
|
12
|
+
const usdc = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
|
|
13
|
+
(0, vitest_1.describe)("pay", () => {
|
|
14
|
+
(0, vitest_1.test)("buildPayTx sets value for native token payments", () => {
|
|
15
|
+
const tx = (0, pay_js_1.buildPayTx)({
|
|
16
|
+
chainId,
|
|
17
|
+
terminal,
|
|
18
|
+
projectId,
|
|
19
|
+
token: constants_js_1.NATIVE_TOKEN,
|
|
20
|
+
amount: 1000n,
|
|
21
|
+
beneficiary,
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.expect)(tx.chainId).toEqual(chainId);
|
|
24
|
+
(0, vitest_1.expect)(tx.address).toEqual(terminal);
|
|
25
|
+
(0, vitest_1.expect)(tx.functionName).toEqual("pay");
|
|
26
|
+
(0, vitest_1.expect)(tx.value).toEqual(1000n);
|
|
27
|
+
(0, vitest_1.expect)(tx.args).toEqual([
|
|
28
|
+
projectId,
|
|
29
|
+
constants_js_1.NATIVE_TOKEN,
|
|
30
|
+
1000n,
|
|
31
|
+
beneficiary,
|
|
32
|
+
0n,
|
|
33
|
+
"",
|
|
34
|
+
"0x",
|
|
35
|
+
]);
|
|
36
|
+
(0, vitest_1.expect)(() => (0, viem_1.encodeFunctionData)(tx)).not.toThrow();
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.test)("buildPayTx sets no value for ERC-20 payments", () => {
|
|
39
|
+
const tx = (0, pay_js_1.buildPayTx)({
|
|
40
|
+
chainId,
|
|
41
|
+
terminal,
|
|
42
|
+
projectId,
|
|
43
|
+
token: usdc,
|
|
44
|
+
amount: 1000n,
|
|
45
|
+
beneficiary,
|
|
46
|
+
minReturnedTokens: 7n,
|
|
47
|
+
memo: "gm",
|
|
48
|
+
metadata: "0x1234",
|
|
49
|
+
});
|
|
50
|
+
(0, vitest_1.expect)(tx.value).toEqual(0n);
|
|
51
|
+
(0, vitest_1.expect)(tx.args).toEqual([
|
|
52
|
+
projectId,
|
|
53
|
+
usdc,
|
|
54
|
+
1000n,
|
|
55
|
+
beneficiary,
|
|
56
|
+
7n,
|
|
57
|
+
"gm",
|
|
58
|
+
"0x1234",
|
|
59
|
+
]);
|
|
60
|
+
(0, vitest_1.expect)(() => (0, viem_1.encodeFunctionData)(tx)).not.toThrow();
|
|
61
|
+
});
|
|
62
|
+
(0, vitest_1.test)("previewPay calls the terminal's previewPayFor", async () => {
|
|
63
|
+
const calls = [];
|
|
64
|
+
const client = {
|
|
65
|
+
async readContract(params) {
|
|
66
|
+
calls.push(params);
|
|
67
|
+
return [{}, 100n, 25n, []];
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
const preview = await (0, pay_js_1.previewPay)(client, {
|
|
71
|
+
chainId,
|
|
72
|
+
terminal,
|
|
73
|
+
projectId,
|
|
74
|
+
token: constants_js_1.NATIVE_TOKEN,
|
|
75
|
+
amount: 1000n,
|
|
76
|
+
beneficiary,
|
|
77
|
+
});
|
|
78
|
+
(0, vitest_1.expect)(preview).toEqual({
|
|
79
|
+
beneficiaryTokenCount: 100n,
|
|
80
|
+
reservedTokenCount: 25n,
|
|
81
|
+
});
|
|
82
|
+
(0, vitest_1.expect)(calls[0].address).toEqual(terminal);
|
|
83
|
+
(0, vitest_1.expect)(calls[0].abi).toBe(juicebox_js_1.jbMultiTerminalAbi);
|
|
84
|
+
(0, vitest_1.expect)(calls[0].functionName).toEqual("previewPayFor");
|
|
85
|
+
(0, vitest_1.expect)(calls[0].args).toEqual([
|
|
86
|
+
projectId,
|
|
87
|
+
constants_js_1.NATIVE_TOKEN,
|
|
88
|
+
1000n,
|
|
89
|
+
beneficiary,
|
|
90
|
+
"0x",
|
|
91
|
+
]);
|
|
92
|
+
});
|
|
93
|
+
(0, vitest_1.test)("build721PayMetadata packs the hook's metadata id and tier payload", () => {
|
|
94
|
+
// With a hook address whose first 4 bytes are zero, the metadata id is the first
|
|
95
|
+
// 4 bytes of keccak256("pay").
|
|
96
|
+
const metadata = (0, pay_js_1.build721PayMetadata)({
|
|
97
|
+
hookAddress: "0x00000000000000000000000000000000DeaDBeef",
|
|
98
|
+
tierIdsToMint: [1n, 2n],
|
|
99
|
+
});
|
|
100
|
+
// Word 0 is the protocol's reserved word.
|
|
101
|
+
(0, vitest_1.expect)((0, viem_1.sliceHex)(metadata, 0, 32)).toEqual(`0x${"00".repeat(32)}`);
|
|
102
|
+
// The lookup table: the hook's metadata id, then the payload's word offset (2).
|
|
103
|
+
(0, vitest_1.expect)((0, viem_1.sliceHex)(metadata, 32, 36)).toEqual("0xadc75680");
|
|
104
|
+
(0, vitest_1.expect)((0, viem_1.sliceHex)(metadata, 36, 37)).toEqual("0x02");
|
|
105
|
+
// The payload starts at word 2 and decodes to (allowOverspending, tierIdsToMint).
|
|
106
|
+
const payload = (0, viem_1.sliceHex)(metadata, 64);
|
|
107
|
+
const [allowOverspending, tierIds] = (0, viem_1.decodeAbiParameters)([{ type: "bool" }, { type: "uint16[]" }], payload);
|
|
108
|
+
(0, vitest_1.expect)(allowOverspending).toEqual(true);
|
|
109
|
+
(0, vitest_1.expect)(tierIds).toEqual([1, 2]);
|
|
110
|
+
});
|
|
111
|
+
(0, vitest_1.test)("build721PayMetadata respects allowOverspending false", () => {
|
|
112
|
+
const metadata = (0, pay_js_1.build721PayMetadata)({
|
|
113
|
+
hookAddress: "0x00000000000000000000000000000000DeaDBeef",
|
|
114
|
+
tierIdsToMint: [5n],
|
|
115
|
+
allowOverspending: false,
|
|
116
|
+
});
|
|
117
|
+
const [allowOverspending, tierIds] = (0, viem_1.decodeAbiParameters)([{ type: "bool" }, { type: "uint16[]" }], (0, viem_1.sliceHex)(metadata, 64));
|
|
118
|
+
(0, vitest_1.expect)(allowOverspending).toEqual(false);
|
|
119
|
+
(0, vitest_1.expect)(tierIds).toEqual([5]);
|
|
120
|
+
});
|
|
121
|
+
(0, vitest_1.test)("build721PayMetadata id XORs the hook address with keccak256('pay')", () => {
|
|
122
|
+
const metadata = (0, pay_js_1.build721PayMetadata)({
|
|
123
|
+
hookAddress: "0x1111111111111111111111111111111111111111",
|
|
124
|
+
tierIdsToMint: [1n],
|
|
125
|
+
});
|
|
126
|
+
// 0xadc75680 (first 4 bytes of keccak256("pay")) XOR 0x11111111.
|
|
127
|
+
(0, vitest_1.expect)((0, viem_1.sliceHex)(metadata, 32, 36)).toEqual("0xbcd64791");
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=pay.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pay.test.js","sourceRoot":"","sources":["../../../src/v6/pay.test.ts"],"names":[],"mappings":";;AAAA,+BAKc;AACd,mCAAgD;AAChD,kDAA+C;AAC/C,0DAA8D;AAC9D,qCAAuE;AAEvE,MAAM,OAAO,GAAG,QAAQ,CAAC;AACzB,MAAM,QAAQ,GAAG,4CAAqD,CAAC;AACvE,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,WAAW,GAAG,4CAAqD,CAAC;AAC1E,MAAM,IAAI,GAAG,4CAAqD,CAAC;AAEnE,IAAA,iBAAQ,EAAC,KAAK,EAAE,GAAG,EAAE;IACnB,IAAA,aAAI,EAAC,iDAAiD,EAAE,GAAG,EAAE;QAC3D,MAAM,EAAE,GAAG,IAAA,mBAAU,EAAC;YACpB,OAAO;YACP,QAAQ;YACR,SAAS;YACT,KAAK,EAAE,2BAAY;YACnB,MAAM,EAAE,KAAK;YACb,WAAW;SACZ,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,IAAA,eAAM,EAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAA,eAAM,EAAC,EAAE,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,IAAA,eAAM,EAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,IAAA,eAAM,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACtB,SAAS;YACT,2BAAY;YACZ,KAAK;YACL,WAAW;YACX,EAAE;YACF,EAAE;YACF,IAAI;SACL,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,GAAG,EAAE,CAAC,IAAA,yBAAkB,EAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACxD,MAAM,EAAE,GAAG,IAAA,mBAAU,EAAC;YACpB,OAAO;YACP,QAAQ;YACR,SAAS;YACT,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,KAAK;YACb,WAAW;YACX,iBAAiB,EAAE,EAAE;YACrB,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAA,eAAM,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACtB,SAAS;YACT,IAAI;YACJ,KAAK;YACL,WAAW;YACX,EAAE;YACF,IAAI;YACJ,QAAQ;SACT,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,GAAG,EAAE,CAAC,IAAA,yBAAkB,EAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,KAAK,GAAU,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG;YACb,KAAK,CAAC,YAAY,CAAC,MAAe;gBAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnB,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7B,CAAC;SACyB,CAAC;QAE7B,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAU,EAAC,MAAM,EAAE;YACvC,OAAO;YACP,QAAQ;YACR,SAAS;YACT,KAAK,EAAE,2BAAY;YACnB,MAAM,EAAE,KAAK;YACb,WAAW;SACZ,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YACtB,qBAAqB,EAAE,IAAI;YAC3B,kBAAkB,EAAE,GAAG;SACxB,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gCAAkB,CAAC,CAAC;QAC9C,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACvD,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAC5B,SAAS;YACT,2BAAY;YACZ,KAAK;YACL,WAAW;YACX,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,mEAAmE,EAAE,GAAG,EAAE;QAC7E,iFAAiF;QACjF,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,IAAA,4BAAmB,EAAC;YACnC,WAAW,EAAE,4CAA4C;YACzD,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;SACxB,CAAC,CAAC;QAEH,0CAA0C;QAC1C,IAAA,eAAM,EAAC,IAAA,eAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,gFAAgF;QAChF,IAAA,eAAM,EAAC,IAAA,eAAQ,EAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACzD,IAAA,eAAM,EAAC,IAAA,eAAQ,EAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,kFAAkF;QAClF,MAAM,OAAO,GAAG,IAAA,eAAQ,EAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,IAAA,0BAAmB,EACtD,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EACxC,OAAO,CACR,CAAC;QACF,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,sDAAsD,EAAE,GAAG,EAAE;QAChE,MAAM,QAAQ,GAAG,IAAA,4BAAmB,EAAC;YACnC,WAAW,EAAE,4CAA4C;YACzD,aAAa,EAAE,CAAC,EAAE,CAAC;YACnB,iBAAiB,EAAE,KAAK;SACzB,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,IAAA,0BAAmB,EACtD,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EACxC,IAAA,eAAQ,EAAC,QAAQ,EAAE,EAAE,CAAC,CACvB,CAAC;QACF,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,oEAAoE,EAAE,GAAG,EAAE;QAC9E,MAAM,QAAQ,GAAG,IAAA,4BAAmB,EAAC;YACnC,WAAW,EAAE,4CAA4C;YACzD,aAAa,EAAE,CAAC,EAAE,CAAC;SACpB,CAAC,CAAC;QAEH,iEAAiE;QACjE,IAAA,eAAM,EAAC,IAAA,eAAQ,EAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Address, PublicClient } from "viem";
|
|
2
|
+
import { jbPermissionsAbi } from "../generated/juicebox.js";
|
|
3
|
+
import { JBChainId } from "../types.js";
|
|
4
|
+
/**
|
|
5
|
+
* The v6 permission ids, transcribed from JBPermissionIds.sol.
|
|
6
|
+
*
|
|
7
|
+
* Projects can grant permissions to other addresses (called "operators") through
|
|
8
|
+
* `JBPermissions`. Each id authorizes the operator to call specific functions on
|
|
9
|
+
* behalf of the project owner or token holder.
|
|
10
|
+
*
|
|
11
|
+
* @link https://github.com/Bananapus/nana-permission-ids-v6/blob/main/src/JBPermissionIds.sol
|
|
12
|
+
*/
|
|
13
|
+
export declare const JBPermissionIdsV6: {
|
|
14
|
+
/**
|
|
15
|
+
* Grants all permissions across every Juicebox contract. Use with extreme caution.
|
|
16
|
+
*/
|
|
17
|
+
readonly ROOT: 1;
|
|
18
|
+
readonly QUEUE_RULESETS: 2;
|
|
19
|
+
readonly LAUNCH_RULESETS: 3;
|
|
20
|
+
readonly CASH_OUT_TOKENS: 4;
|
|
21
|
+
readonly SEND_PAYOUTS: 5;
|
|
22
|
+
readonly MIGRATE_TERMINAL: 6;
|
|
23
|
+
readonly SET_PROJECT_URI: 7;
|
|
24
|
+
readonly DEPLOY_ERC20: 8;
|
|
25
|
+
readonly SET_TOKEN: 9;
|
|
26
|
+
readonly MINT_TOKENS: 10;
|
|
27
|
+
readonly BURN_TOKENS: 11;
|
|
28
|
+
readonly CLAIM_TOKENS: 12;
|
|
29
|
+
readonly TRANSFER_CREDITS: 13;
|
|
30
|
+
readonly SET_CONTROLLER: 14;
|
|
31
|
+
readonly SET_TERMINALS: 15;
|
|
32
|
+
readonly ADD_TERMINALS: 16;
|
|
33
|
+
readonly SET_PRIMARY_TERMINAL: 17;
|
|
34
|
+
readonly USE_ALLOWANCE: 18;
|
|
35
|
+
readonly SET_SPLIT_GROUPS: 19;
|
|
36
|
+
readonly ADD_PRICE_FEED: 20;
|
|
37
|
+
readonly ADD_ACCOUNTING_CONTEXTS: 21;
|
|
38
|
+
readonly SET_TOKEN_METADATA: 22;
|
|
39
|
+
readonly SIGN_FOR_ERC20: 23;
|
|
40
|
+
readonly ADJUST_721_TIERS: 24;
|
|
41
|
+
readonly SET_721_METADATA: 25;
|
|
42
|
+
readonly MINT_721: 26;
|
|
43
|
+
readonly SET_721_DISCOUNT_PERCENT: 27;
|
|
44
|
+
readonly SET_BUYBACK_TWAP: 28;
|
|
45
|
+
readonly SET_BUYBACK_POOL: 29;
|
|
46
|
+
readonly SET_BUYBACK_HOOK: 30;
|
|
47
|
+
readonly SET_ROUTER_TERMINAL: 31;
|
|
48
|
+
readonly MAP_SUCKER_TOKEN: 32;
|
|
49
|
+
readonly DEPLOY_SUCKERS: 33;
|
|
50
|
+
readonly SET_SUCKER_PEER: 34;
|
|
51
|
+
readonly SUCKER_SAFETY: 35;
|
|
52
|
+
readonly SET_SUCKER_DEPRECATION: 36;
|
|
53
|
+
readonly OPEN_LOAN: 37;
|
|
54
|
+
readonly REALLOCATE_LOAN: 38;
|
|
55
|
+
readonly REPAY_LOAN: 39;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* A v6 permission id.
|
|
59
|
+
*/
|
|
60
|
+
export type JBPermissionIdV6 = (typeof JBPermissionIdsV6)[keyof typeof JBPermissionIdsV6];
|
|
61
|
+
/**
|
|
62
|
+
* A prepared `setPermissionsFor` transaction request.
|
|
63
|
+
*/
|
|
64
|
+
export interface V6SetPermissionsTxRequest {
|
|
65
|
+
chainId: JBChainId;
|
|
66
|
+
address: Address;
|
|
67
|
+
abi: typeof jbPermissionsAbi;
|
|
68
|
+
functionName: "setPermissionsFor";
|
|
69
|
+
args: readonly [
|
|
70
|
+
Address,
|
|
71
|
+
{
|
|
72
|
+
operator: Address;
|
|
73
|
+
projectId: bigint;
|
|
74
|
+
permissionIds: number[];
|
|
75
|
+
}
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build a `JBPermissions.setPermissionsFor(account, { operator, projectId,
|
|
80
|
+
* permissionIds })` transaction request.
|
|
81
|
+
*
|
|
82
|
+
* Replaces ALL of the operator's permissions for the account and project with the
|
|
83
|
+
* given ids — pass an empty array to revoke everything. Must be sent by `account` (or
|
|
84
|
+
* an operator with the ROOT permission for it).
|
|
85
|
+
*
|
|
86
|
+
* @param args.chainId The chain to set permissions on.
|
|
87
|
+
* @param args.account The account granting the permissions.
|
|
88
|
+
* @param args.operator The operator receiving the permissions.
|
|
89
|
+
* @param args.projectId The project the permissions are scoped to, or 0 for all of the
|
|
90
|
+
* account's projects (the wildcard project id).
|
|
91
|
+
* @param args.permissionIds The permission ids to grant (see
|
|
92
|
+
* {@link JBPermissionIdsV6}).
|
|
93
|
+
* @returns The transaction request.
|
|
94
|
+
*/
|
|
95
|
+
export declare function buildSetPermissionsTx({ chainId, account, operator, projectId, permissionIds, }: {
|
|
96
|
+
chainId: JBChainId;
|
|
97
|
+
account: Address;
|
|
98
|
+
operator: Address;
|
|
99
|
+
projectId: bigint;
|
|
100
|
+
permissionIds: number[];
|
|
101
|
+
}): V6SetPermissionsTxRequest;
|
|
102
|
+
/**
|
|
103
|
+
* Check whether an operator holds ALL of the given permissions for an account and
|
|
104
|
+
* project, via `JBPermissions.hasPermissions`.
|
|
105
|
+
*
|
|
106
|
+
* @param client A viem public client on the given chain.
|
|
107
|
+
* @param args.chainId The chain to check on.
|
|
108
|
+
* @param args.operator The operator being checked.
|
|
109
|
+
* @param args.account The account the permissions would be granted by.
|
|
110
|
+
* @param args.projectId The project the permissions are scoped to.
|
|
111
|
+
* @param args.permissionIds The permission ids to check (see
|
|
112
|
+
* {@link JBPermissionIdsV6}).
|
|
113
|
+
* @param args.includeRoot Whether holding the ROOT permission should satisfy the
|
|
114
|
+
* check. Defaults to true.
|
|
115
|
+
* @param args.includeWildcardProjectId Whether permissions granted for the wildcard
|
|
116
|
+
* project id (0) should satisfy the check. Defaults to true.
|
|
117
|
+
* @returns True when the operator holds every given permission.
|
|
118
|
+
*/
|
|
119
|
+
export declare function hasPermissions(client: PublicClient, { chainId, operator, account, projectId, permissionIds, includeRoot, includeWildcardProjectId, }: {
|
|
120
|
+
chainId: JBChainId;
|
|
121
|
+
operator: Address;
|
|
122
|
+
account: Address;
|
|
123
|
+
projectId: bigint;
|
|
124
|
+
permissionIds: number[];
|
|
125
|
+
includeRoot?: boolean;
|
|
126
|
+
includeWildcardProjectId?: boolean;
|
|
127
|
+
}): Promise<boolean>;
|
|
128
|
+
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/v6/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDK,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,gBAAgB,CAAC;IAC7B,YAAY,EAAE,mBAAmB,CAAC;IAClC,IAAI,EAAE,SAAS;QACb,OAAO;QACP;YAAE,QAAQ,EAAE,OAAO,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,EAAE,CAAA;SAAE;KAClE,CAAC;CACH;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,EACT,aAAa,GACd,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,GAAG,yBAAyB,CAQ5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,EACE,OAAO,EACP,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAkB,EAClB,wBAA+B,GAChC,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GACA,OAAO,CAAC,OAAO,CAAC,CAclB"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JBPermissionIdsV6 = void 0;
|
|
4
|
+
exports.buildSetPermissionsTx = buildSetPermissionsTx;
|
|
5
|
+
exports.hasPermissions = hasPermissions;
|
|
6
|
+
const juicebox_js_1 = require("../generated/juicebox.js");
|
|
7
|
+
const types_js_1 = require("./types.js");
|
|
8
|
+
/**
|
|
9
|
+
* The v6 permission ids, transcribed from JBPermissionIds.sol.
|
|
10
|
+
*
|
|
11
|
+
* Projects can grant permissions to other addresses (called "operators") through
|
|
12
|
+
* `JBPermissions`. Each id authorizes the operator to call specific functions on
|
|
13
|
+
* behalf of the project owner or token holder.
|
|
14
|
+
*
|
|
15
|
+
* @link https://github.com/Bananapus/nana-permission-ids-v6/blob/main/src/JBPermissionIds.sol
|
|
16
|
+
*/
|
|
17
|
+
exports.JBPermissionIdsV6 = {
|
|
18
|
+
/**
|
|
19
|
+
* Grants all permissions across every Juicebox contract. Use with extreme caution.
|
|
20
|
+
*/
|
|
21
|
+
ROOT: 1,
|
|
22
|
+
// nana-core-v6
|
|
23
|
+
QUEUE_RULESETS: 2,
|
|
24
|
+
LAUNCH_RULESETS: 3,
|
|
25
|
+
CASH_OUT_TOKENS: 4,
|
|
26
|
+
SEND_PAYOUTS: 5,
|
|
27
|
+
MIGRATE_TERMINAL: 6,
|
|
28
|
+
SET_PROJECT_URI: 7,
|
|
29
|
+
DEPLOY_ERC20: 8,
|
|
30
|
+
SET_TOKEN: 9,
|
|
31
|
+
MINT_TOKENS: 10,
|
|
32
|
+
BURN_TOKENS: 11,
|
|
33
|
+
CLAIM_TOKENS: 12,
|
|
34
|
+
TRANSFER_CREDITS: 13,
|
|
35
|
+
SET_CONTROLLER: 14,
|
|
36
|
+
SET_TERMINALS: 15,
|
|
37
|
+
ADD_TERMINALS: 16,
|
|
38
|
+
SET_PRIMARY_TERMINAL: 17,
|
|
39
|
+
USE_ALLOWANCE: 18,
|
|
40
|
+
SET_SPLIT_GROUPS: 19,
|
|
41
|
+
ADD_PRICE_FEED: 20,
|
|
42
|
+
ADD_ACCOUNTING_CONTEXTS: 21,
|
|
43
|
+
SET_TOKEN_METADATA: 22,
|
|
44
|
+
SIGN_FOR_ERC20: 23,
|
|
45
|
+
// nana-721-hook-v6
|
|
46
|
+
ADJUST_721_TIERS: 24,
|
|
47
|
+
SET_721_METADATA: 25,
|
|
48
|
+
MINT_721: 26,
|
|
49
|
+
SET_721_DISCOUNT_PERCENT: 27,
|
|
50
|
+
// nana-buyback-hook-v6
|
|
51
|
+
SET_BUYBACK_TWAP: 28,
|
|
52
|
+
SET_BUYBACK_POOL: 29,
|
|
53
|
+
SET_BUYBACK_HOOK: 30,
|
|
54
|
+
// nana-router-terminal-v6
|
|
55
|
+
SET_ROUTER_TERMINAL: 31,
|
|
56
|
+
// nana-suckers-v6
|
|
57
|
+
MAP_SUCKER_TOKEN: 32,
|
|
58
|
+
DEPLOY_SUCKERS: 33,
|
|
59
|
+
SET_SUCKER_PEER: 34,
|
|
60
|
+
SUCKER_SAFETY: 35,
|
|
61
|
+
SET_SUCKER_DEPRECATION: 36,
|
|
62
|
+
// revnet-core-v6
|
|
63
|
+
OPEN_LOAN: 37,
|
|
64
|
+
REALLOCATE_LOAN: 38,
|
|
65
|
+
REPAY_LOAN: 39,
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Build a `JBPermissions.setPermissionsFor(account, { operator, projectId,
|
|
69
|
+
* permissionIds })` transaction request.
|
|
70
|
+
*
|
|
71
|
+
* Replaces ALL of the operator's permissions for the account and project with the
|
|
72
|
+
* given ids — pass an empty array to revoke everything. Must be sent by `account` (or
|
|
73
|
+
* an operator with the ROOT permission for it).
|
|
74
|
+
*
|
|
75
|
+
* @param args.chainId The chain to set permissions on.
|
|
76
|
+
* @param args.account The account granting the permissions.
|
|
77
|
+
* @param args.operator The operator receiving the permissions.
|
|
78
|
+
* @param args.projectId The project the permissions are scoped to, or 0 for all of the
|
|
79
|
+
* account's projects (the wildcard project id).
|
|
80
|
+
* @param args.permissionIds The permission ids to grant (see
|
|
81
|
+
* {@link JBPermissionIdsV6}).
|
|
82
|
+
* @returns The transaction request.
|
|
83
|
+
*/
|
|
84
|
+
function buildSetPermissionsTx({ chainId, account, operator, projectId, permissionIds, }) {
|
|
85
|
+
return {
|
|
86
|
+
chainId,
|
|
87
|
+
address: (0, types_js_1.v6Address)("JBPermissions", chainId),
|
|
88
|
+
abi: juicebox_js_1.jbPermissionsAbi,
|
|
89
|
+
functionName: "setPermissionsFor",
|
|
90
|
+
args: [account, { operator, projectId, permissionIds }],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check whether an operator holds ALL of the given permissions for an account and
|
|
95
|
+
* project, via `JBPermissions.hasPermissions`.
|
|
96
|
+
*
|
|
97
|
+
* @param client A viem public client on the given chain.
|
|
98
|
+
* @param args.chainId The chain to check on.
|
|
99
|
+
* @param args.operator The operator being checked.
|
|
100
|
+
* @param args.account The account the permissions would be granted by.
|
|
101
|
+
* @param args.projectId The project the permissions are scoped to.
|
|
102
|
+
* @param args.permissionIds The permission ids to check (see
|
|
103
|
+
* {@link JBPermissionIdsV6}).
|
|
104
|
+
* @param args.includeRoot Whether holding the ROOT permission should satisfy the
|
|
105
|
+
* check. Defaults to true.
|
|
106
|
+
* @param args.includeWildcardProjectId Whether permissions granted for the wildcard
|
|
107
|
+
* project id (0) should satisfy the check. Defaults to true.
|
|
108
|
+
* @returns True when the operator holds every given permission.
|
|
109
|
+
*/
|
|
110
|
+
async function hasPermissions(client, { chainId, operator, account, projectId, permissionIds, includeRoot = true, includeWildcardProjectId = true, }) {
|
|
111
|
+
return client.readContract({
|
|
112
|
+
address: (0, types_js_1.v6Address)("JBPermissions", chainId),
|
|
113
|
+
abi: juicebox_js_1.jbPermissionsAbi,
|
|
114
|
+
functionName: "hasPermissions",
|
|
115
|
+
args: [
|
|
116
|
+
operator,
|
|
117
|
+
account,
|
|
118
|
+
projectId,
|
|
119
|
+
permissionIds.map(BigInt),
|
|
120
|
+
includeRoot,
|
|
121
|
+
includeWildcardProjectId,
|
|
122
|
+
],
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/v6/permissions.ts"],"names":[],"mappings":";;;AA4GA,sDAoBC;AAmBD,wCAiCC;AAnLD,0DAA4D;AAE5D,yCAAuC;AAEvC;;;;;;;;GAQG;AACU,QAAA,iBAAiB,GAAG;IAC/B;;OAEG;IACH,IAAI,EAAE,CAAC;IAEP,eAAe;IACf,cAAc,EAAE,CAAC;IACjB,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE,CAAC;IACf,gBAAgB,EAAE,CAAC;IACnB,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE,CAAC;IACf,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;IACf,YAAY,EAAE,EAAE;IAChB,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;IACjB,oBAAoB,EAAE,EAAE;IACxB,aAAa,EAAE,EAAE;IACjB,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;IAClB,uBAAuB,EAAE,EAAE;IAC3B,kBAAkB,EAAE,EAAE;IACtB,cAAc,EAAE,EAAE;IAElB,mBAAmB;IACnB,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,EAAE;IACpB,QAAQ,EAAE,EAAE;IACZ,wBAAwB,EAAE,EAAE;IAE5B,uBAAuB;IACvB,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,EAAE;IAEpB,0BAA0B;IAC1B,mBAAmB,EAAE,EAAE;IAEvB,kBAAkB;IAClB,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;IACnB,aAAa,EAAE,EAAE;IACjB,sBAAsB,EAAE,EAAE;IAE1B,iBAAiB;IACjB,SAAS,EAAE,EAAE;IACb,eAAe,EAAE,EAAE;IACnB,UAAU,EAAE,EAAE;CACN,CAAC;AAsBX;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,EACT,aAAa,GAOd;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,IAAA,oBAAS,EAAC,eAAe,EAAE,OAAO,CAAC;QAC5C,GAAG,EAAE,8BAAgB;QACrB,YAAY,EAAE,mBAAmB;QACjC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,UAAU,cAAc,CAClC,MAAoB,EACpB,EACE,OAAO,EACP,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,GAAG,IAAI,EAClB,wBAAwB,GAAG,IAAI,GAShC;IAED,OAAO,MAAM,CAAC,YAAY,CAAC;QACzB,OAAO,EAAE,IAAA,oBAAS,EAAC,eAAe,EAAE,OAAO,CAAC;QAC5C,GAAG,EAAE,8BAAgB;QACrB,YAAY,EAAE,gBAAgB;QAC9B,IAAI,EAAE;YACJ,QAAQ;YACR,OAAO;YACP,SAAS;YACT,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YACzB,WAAW;YACX,wBAAwB;SACzB;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.test.d.ts","sourceRoot":"","sources":["../../../src/v6/permissions.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const viem_1 = require("viem");
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const juicebox_js_1 = require("../generated/juicebox.js");
|
|
6
|
+
const permissions_js_1 = require("./permissions.js");
|
|
7
|
+
const types_js_1 = require("./types.js");
|
|
8
|
+
const chainId = 11155111;
|
|
9
|
+
const account = "0x1111111111111111111111111111111111111111";
|
|
10
|
+
const operator = "0x2222222222222222222222222222222222222222";
|
|
11
|
+
const projectId = 3n;
|
|
12
|
+
(0, vitest_1.describe)("permissions", () => {
|
|
13
|
+
(0, vitest_1.test)("JBPermissionIdsV6 transcribes all 39 ids contiguously", () => {
|
|
14
|
+
const ids = Object.values(permissions_js_1.JBPermissionIdsV6);
|
|
15
|
+
(0, vitest_1.expect)(ids.length).toEqual(39);
|
|
16
|
+
(0, vitest_1.expect)(new Set(ids).size).toEqual(39);
|
|
17
|
+
(0, vitest_1.expect)([...ids].sort((a, b) => a - b)).toEqual(Array.from({ length: 39 }, (_, i) => i + 1));
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.test)("JBPermissionIdsV6 spot checks against JBPermissionIds.sol", () => {
|
|
20
|
+
(0, vitest_1.expect)(permissions_js_1.JBPermissionIdsV6.ROOT).toEqual(1);
|
|
21
|
+
(0, vitest_1.expect)(permissions_js_1.JBPermissionIdsV6.QUEUE_RULESETS).toEqual(2);
|
|
22
|
+
(0, vitest_1.expect)(permissions_js_1.JBPermissionIdsV6.CASH_OUT_TOKENS).toEqual(4);
|
|
23
|
+
(0, vitest_1.expect)(permissions_js_1.JBPermissionIdsV6.SIGN_FOR_ERC20).toEqual(23);
|
|
24
|
+
(0, vitest_1.expect)(permissions_js_1.JBPermissionIdsV6.ADJUST_721_TIERS).toEqual(24);
|
|
25
|
+
(0, vitest_1.expect)(permissions_js_1.JBPermissionIdsV6.SET_BUYBACK_HOOK).toEqual(30);
|
|
26
|
+
(0, vitest_1.expect)(permissions_js_1.JBPermissionIdsV6.SET_ROUTER_TERMINAL).toEqual(31);
|
|
27
|
+
(0, vitest_1.expect)(permissions_js_1.JBPermissionIdsV6.SET_SUCKER_DEPRECATION).toEqual(36);
|
|
28
|
+
(0, vitest_1.expect)(permissions_js_1.JBPermissionIdsV6.REPAY_LOAN).toEqual(39);
|
|
29
|
+
});
|
|
30
|
+
(0, vitest_1.test)("buildSetPermissionsTx encodes setPermissionsFor", () => {
|
|
31
|
+
const tx = (0, permissions_js_1.buildSetPermissionsTx)({
|
|
32
|
+
chainId,
|
|
33
|
+
account,
|
|
34
|
+
operator,
|
|
35
|
+
projectId,
|
|
36
|
+
permissionIds: [
|
|
37
|
+
permissions_js_1.JBPermissionIdsV6.QUEUE_RULESETS,
|
|
38
|
+
permissions_js_1.JBPermissionIdsV6.SET_SPLIT_GROUPS,
|
|
39
|
+
],
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.expect)(tx.chainId).toEqual(chainId);
|
|
42
|
+
(0, vitest_1.expect)(tx.address).toEqual((0, types_js_1.v6Address)("JBPermissions", chainId));
|
|
43
|
+
(0, vitest_1.expect)(tx.functionName).toEqual("setPermissionsFor");
|
|
44
|
+
(0, vitest_1.expect)(tx.args).toEqual([
|
|
45
|
+
account,
|
|
46
|
+
{ operator, projectId, permissionIds: [2, 19] },
|
|
47
|
+
]);
|
|
48
|
+
(0, vitest_1.expect)(() => (0, viem_1.encodeFunctionData)(tx)).not.toThrow();
|
|
49
|
+
});
|
|
50
|
+
(0, vitest_1.test)("buildSetPermissionsTx with an empty array revokes everything", () => {
|
|
51
|
+
const tx = (0, permissions_js_1.buildSetPermissionsTx)({
|
|
52
|
+
chainId,
|
|
53
|
+
account,
|
|
54
|
+
operator,
|
|
55
|
+
projectId,
|
|
56
|
+
permissionIds: [],
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.expect)(tx.args[1].permissionIds).toEqual([]);
|
|
59
|
+
(0, vitest_1.expect)(() => (0, viem_1.encodeFunctionData)(tx)).not.toThrow();
|
|
60
|
+
});
|
|
61
|
+
(0, vitest_1.test)("hasPermissions reads JBPermissions.hasPermissions", async () => {
|
|
62
|
+
const calls = [];
|
|
63
|
+
const client = {
|
|
64
|
+
async readContract(params) {
|
|
65
|
+
calls.push(params);
|
|
66
|
+
return true;
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
const result = await (0, permissions_js_1.hasPermissions)(client, {
|
|
70
|
+
chainId,
|
|
71
|
+
operator,
|
|
72
|
+
account,
|
|
73
|
+
projectId,
|
|
74
|
+
permissionIds: [permissions_js_1.JBPermissionIdsV6.MINT_TOKENS],
|
|
75
|
+
});
|
|
76
|
+
(0, vitest_1.expect)(result).toEqual(true);
|
|
77
|
+
(0, vitest_1.expect)(calls[0].address).toEqual((0, types_js_1.v6Address)("JBPermissions", chainId));
|
|
78
|
+
(0, vitest_1.expect)(calls[0].abi).toBe(juicebox_js_1.jbPermissionsAbi);
|
|
79
|
+
(0, vitest_1.expect)(calls[0].functionName).toEqual("hasPermissions");
|
|
80
|
+
// Ids are widened to uint256; root and wildcard-project grants count by default.
|
|
81
|
+
(0, vitest_1.expect)(calls[0].args).toEqual([
|
|
82
|
+
operator,
|
|
83
|
+
account,
|
|
84
|
+
projectId,
|
|
85
|
+
[10n],
|
|
86
|
+
true,
|
|
87
|
+
true,
|
|
88
|
+
]);
|
|
89
|
+
});
|
|
90
|
+
(0, vitest_1.test)("hasPermissions can exclude root and wildcard grants", async () => {
|
|
91
|
+
const calls = [];
|
|
92
|
+
const client = {
|
|
93
|
+
async readContract(params) {
|
|
94
|
+
calls.push(params);
|
|
95
|
+
return false;
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
await (0, permissions_js_1.hasPermissions)(client, {
|
|
99
|
+
chainId,
|
|
100
|
+
operator,
|
|
101
|
+
account,
|
|
102
|
+
projectId,
|
|
103
|
+
permissionIds: [1, 2],
|
|
104
|
+
includeRoot: false,
|
|
105
|
+
includeWildcardProjectId: false,
|
|
106
|
+
});
|
|
107
|
+
(0, vitest_1.expect)(calls[0].args).toEqual([
|
|
108
|
+
operator,
|
|
109
|
+
account,
|
|
110
|
+
projectId,
|
|
111
|
+
[1n, 2n],
|
|
112
|
+
false,
|
|
113
|
+
false,
|
|
114
|
+
]);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=permissions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.test.js","sourceRoot":"","sources":["../../../src/v6/permissions.test.ts"],"names":[],"mappings":"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"}
|