@bananapus/nana-sdk-core 1.1.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 +5 -0
- package/dist/cjs/v6/cashOut.d.ts.map +1 -1
- package/dist/cjs/v6/cashOut.js +19 -10
- package/dist/cjs/v6/cashOut.js.map +1 -1
- package/dist/cjs/v6/cashOut.test.js +42 -40
- package/dist/cjs/v6/cashOut.test.js.map +1 -1
- package/dist/cjs/v6/currency.js +8 -4
- package/dist/cjs/v6/currency.js.map +1 -1
- package/dist/cjs/v6/currency.test.js +18 -16
- package/dist/cjs/v6/currency.test.js.map +1 -1
- package/dist/cjs/v6/fees.js +11 -6
- package/dist/cjs/v6/fees.js.map +1 -1
- package/dist/cjs/v6/fees.test.js +29 -27
- package/dist/cjs/v6/fees.test.js.map +1 -1
- package/dist/cjs/v6/index.js +31 -15
- package/dist/cjs/v6/index.js.map +1 -1
- package/dist/cjs/v6/launch.js +31 -23
- package/dist/cjs/v6/launch.js.map +1 -1
- package/dist/cjs/v6/launch.test.js +85 -83
- package/dist/cjs/v6/launch.test.js.map +1 -1
- package/dist/cjs/v6/loans.js +26 -19
- package/dist/cjs/v6/loans.js.map +1 -1
- package/dist/cjs/v6/loans.test.js +52 -50
- package/dist/cjs/v6/loans.test.js.map +1 -1
- package/dist/cjs/v6/omnichain.js +16 -12
- package/dist/cjs/v6/omnichain.js.map +1 -1
- package/dist/cjs/v6/omnichain.test.js +63 -61
- package/dist/cjs/v6/omnichain.test.js.map +1 -1
- package/dist/cjs/v6/pay.js +20 -15
- package/dist/cjs/v6/pay.js.map +1 -1
- package/dist/cjs/v6/pay.test.js +49 -47
- package/dist/cjs/v6/pay.test.js.map +1 -1
- package/dist/cjs/v6/permissions.js +14 -9
- package/dist/cjs/v6/permissions.js.map +1 -1
- package/dist/cjs/v6/permissions.test.js +47 -45
- package/dist/cjs/v6/permissions.test.js.map +1 -1
- package/dist/cjs/v6/revnets.d.ts +5 -3
- package/dist/cjs/v6/revnets.d.ts.map +1 -1
- package/dist/cjs/v6/revnets.js +43 -26
- package/dist/cjs/v6/revnets.js.map +1 -1
- package/dist/cjs/v6/revnets.test.js +80 -78
- package/dist/cjs/v6/revnets.test.js.map +1 -1
- package/dist/cjs/v6/rulesets.js +20 -14
- package/dist/cjs/v6/rulesets.js.map +1 -1
- package/dist/cjs/v6/rulesets.test.js +50 -48
- package/dist/cjs/v6/rulesets.test.js.map +1 -1
- package/dist/cjs/v6/splits.d.ts +3 -2
- package/dist/cjs/v6/splits.d.ts.map +1 -1
- package/dist/cjs/v6/splits.js +29 -18
- package/dist/cjs/v6/splits.js.map +1 -1
- package/dist/cjs/v6/splits.test.js +84 -80
- package/dist/cjs/v6/splits.test.js.map +1 -1
- package/dist/cjs/v6/suckers.js +22 -15
- package/dist/cjs/v6/suckers.js.map +1 -1
- package/dist/cjs/v6/suckers.test.js +57 -55
- package/dist/cjs/v6/suckers.test.js.map +1 -1
- package/dist/cjs/v6/terminals.js +15 -11
- package/dist/cjs/v6/terminals.js.map +1 -1
- package/dist/cjs/v6/terminals.test.js +30 -28
- package/dist/cjs/v6/terminals.test.js.map +1 -1
- package/dist/cjs/v6/tokens.js +34 -25
- package/dist/cjs/v6/tokens.js.map +1 -1
- package/dist/cjs/v6/tokens.test.js +66 -64
- package/dist/cjs/v6/tokens.test.js.map +1 -1
- package/dist/cjs/v6/types.js +6 -3
- package/dist/cjs/v6/types.js.map +1 -1
- package/dist/esm/v6/cashOut.d.ts +5 -0
- package/dist/esm/v6/cashOut.d.ts.map +1 -1
- package/dist/esm/v6/cashOut.js +5 -0
- package/dist/esm/v6/cashOut.js.map +1 -1
- package/dist/esm/v6/revnets.d.ts +5 -3
- package/dist/esm/v6/revnets.d.ts.map +1 -1
- package/dist/esm/v6/revnets.js +12 -4
- package/dist/esm/v6/revnets.js.map +1 -1
- package/dist/esm/v6/splits.d.ts +3 -2
- package/dist/esm/v6/splits.d.ts.map +1 -1
- package/dist/esm/v6/splits.js +9 -5
- package/dist/esm/v6/splits.js.map +1 -1
- package/dist/esm/v6/splits.test.js +8 -6
- package/dist/esm/v6/splits.test.js.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
package/dist/cjs/v6/fees.js
CHANGED
|
@@ -1,25 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TERMINAL_FEE_PER_BILLION = exports.MAX_FEE = exports.STANDARD_FEE = exports.PROTOCOL_FEE_PERCENT = void 0;
|
|
4
|
+
exports.feeForAmount = feeForAmount;
|
|
5
|
+
exports.amountAfterFee = amountAfterFee;
|
|
1
6
|
/**
|
|
2
7
|
* The Juicebox protocol fee, as a decimal fraction: 2.5%.
|
|
3
8
|
*
|
|
4
9
|
* Applies to payouts sent outside the protocol and to cash outs from rulesets with a
|
|
5
10
|
* non-zero cash out tax rate.
|
|
6
11
|
*/
|
|
7
|
-
|
|
12
|
+
exports.PROTOCOL_FEE_PERCENT = 0.025;
|
|
8
13
|
/**
|
|
9
14
|
* The standard protocol fee expressed out of {@link MAX_FEE}: 25 / 1000 = 2.5%.
|
|
10
15
|
*
|
|
11
16
|
* @link JBMultiTerminal.sol `FEE`
|
|
12
17
|
*/
|
|
13
|
-
|
|
18
|
+
exports.STANDARD_FEE = 25n;
|
|
14
19
|
/**
|
|
15
20
|
* The denominator for {@link STANDARD_FEE}-style fee percents.
|
|
16
21
|
*/
|
|
17
|
-
|
|
22
|
+
exports.MAX_FEE = 1000n;
|
|
18
23
|
/**
|
|
19
24
|
* The standard 2.5% protocol fee expressed per billion (out of 1e9), for legacy-style
|
|
20
25
|
* fixed-point math: 25_000_000 / 1_000_000_000 = 2.5%.
|
|
21
26
|
*/
|
|
22
|
-
|
|
27
|
+
exports.TERMINAL_FEE_PER_BILLION = 25000000n;
|
|
23
28
|
/**
|
|
24
29
|
* The per-billion fee denominator (1e9).
|
|
25
30
|
*/
|
|
@@ -32,7 +37,7 @@ const PER_BILLION = 1000000000n;
|
|
|
32
37
|
* fee ({@link TERMINAL_FEE_PER_BILLION}).
|
|
33
38
|
* @returns The fee, in the same fixed-point representation as `amount`.
|
|
34
39
|
*/
|
|
35
|
-
|
|
40
|
+
function feeForAmount(amount, feePerBillion = exports.TERMINAL_FEE_PER_BILLION) {
|
|
36
41
|
return (amount * feePerBillion) / PER_BILLION;
|
|
37
42
|
}
|
|
38
43
|
/**
|
|
@@ -45,7 +50,7 @@ export function feeForAmount(amount, feePerBillion = TERMINAL_FEE_PER_BILLION) {
|
|
|
45
50
|
* fee ({@link TERMINAL_FEE_PER_BILLION}).
|
|
46
51
|
* @returns The net amount after the fee.
|
|
47
52
|
*/
|
|
48
|
-
|
|
53
|
+
function amountAfterFee(amount, feePerBillion = exports.TERMINAL_FEE_PER_BILLION) {
|
|
49
54
|
return amount - feeForAmount(amount, feePerBillion);
|
|
50
55
|
}
|
|
51
56
|
//# sourceMappingURL=fees.js.map
|
package/dist/cjs/v6/fees.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fees.js","sourceRoot":"","sources":["../../../src/v6/fees.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fees.js","sourceRoot":"","sources":["../../../src/v6/fees.ts"],"names":[],"mappings":";;;AAuCA,oCAKC;AAYD,wCAKC;AA7DD;;;;;GAKG;AACU,QAAA,oBAAoB,GAAG,KAAK,CAAC;AAE1C;;;;GAIG;AACU,QAAA,YAAY,GAAG,GAAG,CAAC;AAEhC;;GAEG;AACU,QAAA,OAAO,GAAG,KAAK,CAAC;AAE7B;;;GAGG;AACU,QAAA,wBAAwB,GAAG,SAAW,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,GAAG,WAAc,CAAC;AAEnC;;;;;;;GAOG;AACH,SAAgB,YAAY,CAC1B,MAAc,EACd,gBAAwB,gCAAwB;IAEhD,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,WAAW,CAAC;AAChD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,cAAc,CAC5B,MAAc,EACd,gBAAwB,gCAAwB;IAEhD,OAAO,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/cjs/v6/fees.test.js
CHANGED
|
@@ -1,38 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
expect(
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const constants_js_1 = require("../constants.js");
|
|
5
|
+
const fee_js_1 = require("../utils/fee.js");
|
|
6
|
+
const fees_js_1 = require("./fees.js");
|
|
7
|
+
(0, vitest_1.describe)("fees", () => {
|
|
8
|
+
(0, vitest_1.test)("constants agree on 2.5%", () => {
|
|
9
|
+
(0, vitest_1.expect)(fees_js_1.STANDARD_FEE).toEqual(25n);
|
|
10
|
+
(0, vitest_1.expect)(fees_js_1.MAX_FEE).toEqual(1000n);
|
|
11
|
+
(0, vitest_1.expect)((fees_js_1.STANDARD_FEE * 1000000000n) / fees_js_1.MAX_FEE).toEqual(fees_js_1.TERMINAL_FEE_PER_BILLION);
|
|
10
12
|
});
|
|
11
|
-
test("feeForAmount takes 2.5% by default", () => {
|
|
12
|
-
expect(feeForAmount(ONE_ETHER)).toEqual(25000000000000000n);
|
|
13
|
-
expect(feeForAmount(1000000000n)).toEqual(25000000n);
|
|
13
|
+
(0, vitest_1.test)("feeForAmount takes 2.5% by default", () => {
|
|
14
|
+
(0, vitest_1.expect)((0, fees_js_1.feeForAmount)(constants_js_1.ONE_ETHER)).toEqual(25000000000000000n);
|
|
15
|
+
(0, vitest_1.expect)((0, fees_js_1.feeForAmount)(1000000000n)).toEqual(25000000n);
|
|
14
16
|
});
|
|
15
|
-
test("amountAfterFee leaves 97.5% by default", () => {
|
|
16
|
-
expect(amountAfterFee(ONE_ETHER)).toEqual(975000000000000000n);
|
|
17
|
-
expect(amountAfterFee(ONE_ETHER)).toEqual(applyJbDaoCashOutFee(ONE_ETHER));
|
|
17
|
+
(0, vitest_1.test)("amountAfterFee leaves 97.5% by default", () => {
|
|
18
|
+
(0, vitest_1.expect)((0, fees_js_1.amountAfterFee)(constants_js_1.ONE_ETHER)).toEqual(975000000000000000n);
|
|
19
|
+
(0, vitest_1.expect)((0, fees_js_1.amountAfterFee)(constants_js_1.ONE_ETHER)).toEqual((0, fee_js_1.applyJbDaoCashOutFee)(constants_js_1.ONE_ETHER));
|
|
18
20
|
});
|
|
19
|
-
test("fee + net always equals the gross amount", () => {
|
|
20
|
-
for (const amount of [0n, 1n, 39n, 40n, 41n, ONE_ETHER, ONE_ETHER + 1n]) {
|
|
21
|
-
expect(feeForAmount(amount) + amountAfterFee(amount)).toEqual(amount);
|
|
21
|
+
(0, vitest_1.test)("fee + net always equals the gross amount", () => {
|
|
22
|
+
for (const amount of [0n, 1n, 39n, 40n, 41n, constants_js_1.ONE_ETHER, constants_js_1.ONE_ETHER + 1n]) {
|
|
23
|
+
(0, vitest_1.expect)((0, fees_js_1.feeForAmount)(amount) + (0, fees_js_1.amountAfterFee)(amount)).toEqual(amount);
|
|
22
24
|
}
|
|
23
25
|
});
|
|
24
|
-
test("fee rounds down; tiny amounts pay no fee", () => {
|
|
25
|
-
expect(feeForAmount(39n)).toEqual(0n);
|
|
26
|
-
expect(amountAfterFee(39n)).toEqual(39n);
|
|
27
|
-
expect(feeForAmount(40n)).toEqual(1n);
|
|
26
|
+
(0, vitest_1.test)("fee rounds down; tiny amounts pay no fee", () => {
|
|
27
|
+
(0, vitest_1.expect)((0, fees_js_1.feeForAmount)(39n)).toEqual(0n);
|
|
28
|
+
(0, vitest_1.expect)((0, fees_js_1.amountAfterFee)(39n)).toEqual(39n);
|
|
29
|
+
(0, vitest_1.expect)((0, fees_js_1.feeForAmount)(40n)).toEqual(1n);
|
|
28
30
|
});
|
|
29
|
-
test("custom fee rates", () => {
|
|
31
|
+
(0, vitest_1.test)("custom fee rates", () => {
|
|
30
32
|
// 10% per billion.
|
|
31
|
-
expect(feeForAmount(ONE_ETHER, 100000000n)).toEqual(100000000000000000n);
|
|
32
|
-
expect(amountAfterFee(ONE_ETHER, 100000000n)).toEqual(900000000000000000n);
|
|
33
|
+
(0, vitest_1.expect)((0, fees_js_1.feeForAmount)(constants_js_1.ONE_ETHER, 100000000n)).toEqual(100000000000000000n);
|
|
34
|
+
(0, vitest_1.expect)((0, fees_js_1.amountAfterFee)(constants_js_1.ONE_ETHER, 100000000n)).toEqual(900000000000000000n);
|
|
33
35
|
// Zero fee.
|
|
34
|
-
expect(feeForAmount(ONE_ETHER, 0n)).toEqual(0n);
|
|
35
|
-
expect(amountAfterFee(ONE_ETHER, 0n)).toEqual(ONE_ETHER);
|
|
36
|
+
(0, vitest_1.expect)((0, fees_js_1.feeForAmount)(constants_js_1.ONE_ETHER, 0n)).toEqual(0n);
|
|
37
|
+
(0, vitest_1.expect)((0, fees_js_1.amountAfterFee)(constants_js_1.ONE_ETHER, 0n)).toEqual(constants_js_1.ONE_ETHER);
|
|
36
38
|
});
|
|
37
39
|
});
|
|
38
40
|
//# sourceMappingURL=fees.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fees.test.js","sourceRoot":"","sources":["../../../src/v6/fees.test.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"fees.test.js","sourceRoot":"","sources":["../../../src/v6/fees.test.ts"],"names":[],"mappings":";;AAAA,mCAAgD;AAChD,kDAA4C;AAC5C,4CAAuD;AACvD,uCAMmB;AAEnB,IAAA,iBAAQ,EAAC,MAAM,EAAE,GAAG,EAAE;IACpB,IAAA,aAAI,EAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,IAAA,eAAM,EAAC,sBAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAA,eAAM,EAAC,iBAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAA,eAAM,EAAC,CAAC,sBAAY,GAAG,WAAc,CAAC,GAAG,iBAAO,CAAC,CAAC,OAAO,CACvD,kCAAwB,CACzB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,IAAA,eAAM,EAAC,IAAA,sBAAY,EAAC,wBAAS,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC5D,IAAA,eAAM,EAAC,IAAA,sBAAY,EAAC,WAAc,CAAC,CAAC,CAAC,OAAO,CAAC,SAAW,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,IAAA,eAAM,EAAC,IAAA,wBAAc,EAAC,wBAAS,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/D,IAAA,eAAM,EAAC,IAAA,wBAAc,EAAC,wBAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAA,6BAAoB,EAAC,wBAAS,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,KAAK,MAAM,MAAM,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,wBAAS,EAAE,wBAAS,GAAG,EAAE,CAAC,EAAE,CAAC;YACxE,IAAA,eAAM,EAAC,IAAA,sBAAY,EAAC,MAAM,CAAC,GAAG,IAAA,wBAAc,EAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,IAAA,eAAM,EAAC,IAAA,sBAAY,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,IAAA,eAAM,EAAC,IAAA,wBAAc,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,IAAA,eAAM,EAAC,IAAA,sBAAY,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,kBAAkB,EAAE,GAAG,EAAE;QAC5B,mBAAmB;QACnB,IAAA,eAAM,EAAC,IAAA,sBAAY,EAAC,wBAAS,EAAE,UAAY,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC3E,IAAA,eAAM,EAAC,IAAA,wBAAc,EAAC,wBAAS,EAAE,UAAY,CAAC,CAAC,CAAC,OAAO,CACrD,mBAAmB,CACpB,CAAC;QACF,YAAY;QACZ,IAAA,eAAM,EAAC,IAAA,sBAAY,EAAC,wBAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,IAAA,wBAAc,EAAC,wBAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAS,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/cjs/v6/index.js
CHANGED
|
@@ -1,16 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types.js"), exports);
|
|
18
|
+
__exportStar(require("./currency.js"), exports);
|
|
19
|
+
__exportStar(require("./fees.js"), exports);
|
|
20
|
+
__exportStar(require("./launch.js"), exports);
|
|
21
|
+
__exportStar(require("./omnichain.js"), exports);
|
|
22
|
+
__exportStar(require("./rulesets.js"), exports);
|
|
23
|
+
__exportStar(require("./splits.js"), exports);
|
|
24
|
+
__exportStar(require("./revnets.js"), exports);
|
|
25
|
+
__exportStar(require("./terminals.js"), exports);
|
|
26
|
+
__exportStar(require("./pay.js"), exports);
|
|
27
|
+
__exportStar(require("./cashOut.js"), exports);
|
|
28
|
+
__exportStar(require("./tokens.js"), exports);
|
|
29
|
+
__exportStar(require("./permissions.js"), exports);
|
|
30
|
+
__exportStar(require("./suckers.js"), exports);
|
|
31
|
+
__exportStar(require("./loans.js"), exports);
|
|
16
32
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/v6/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,gDAA8B;AAC9B,4CAA0B;AAC1B,8CAA4B;AAC5B,iDAA+B;AAC/B,gDAA8B;AAC9B,8CAA4B;AAC5B,+CAA6B;AAC7B,iDAA+B;AAC/B,2CAAyB;AACzB,+CAA6B;AAC7B,8CAA4B;AAC5B,mDAAiC;AACjC,+CAA6B;AAC7B,6CAA2B"}
|
package/dist/cjs/v6/launch.js
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getProjectCreationFee = getProjectCreationFee;
|
|
4
|
+
exports.buildAccountingContext = buildAccountingContext;
|
|
5
|
+
exports.buildTerminalConfigurations = buildTerminalConfigurations;
|
|
6
|
+
exports.buildRulesetMetadata = buildRulesetMetadata;
|
|
7
|
+
exports.buildRulesetConfiguration = buildRulesetConfiguration;
|
|
8
|
+
exports.buildLaunchProjectTx = buildLaunchProjectTx;
|
|
9
|
+
const viem_1 = require("viem");
|
|
10
|
+
const constants_js_1 = require("../constants.js");
|
|
11
|
+
const juicebox_js_1 = require("../generated/juicebox.js");
|
|
12
|
+
const currency_js_1 = require("./currency.js");
|
|
13
|
+
const types_js_1 = require("./types.js");
|
|
6
14
|
/**
|
|
7
15
|
* Read the fee (in wei) that `JBProjects` charges to create a new project.
|
|
8
16
|
*
|
|
@@ -10,10 +18,10 @@ import { v6Address } from "./types.js";
|
|
|
10
18
|
* revert. The fee is dynamic — read it per chain right before launching, and
|
|
11
19
|
* never reuse a value across chains.
|
|
12
20
|
*/
|
|
13
|
-
|
|
21
|
+
async function getProjectCreationFee(client, chainId) {
|
|
14
22
|
return client.readContract({
|
|
15
|
-
address: v6Address("JBProjects", chainId),
|
|
16
|
-
abi: jbProjectsAbi,
|
|
23
|
+
address: (0, types_js_1.v6Address)("JBProjects", chainId),
|
|
24
|
+
abi: juicebox_js_1.jbProjectsAbi,
|
|
17
25
|
functionName: "creationFee",
|
|
18
26
|
});
|
|
19
27
|
}
|
|
@@ -30,15 +38,15 @@ export async function getProjectCreationFee(client, chainId) {
|
|
|
30
38
|
* @param decimals The token's decimals. Defaults to 18 for the native token;
|
|
31
39
|
* REQUIRED for any other token (there is no safe default).
|
|
32
40
|
*/
|
|
33
|
-
|
|
34
|
-
const isNative = token.toLowerCase() === NATIVE_TOKEN.toLowerCase();
|
|
41
|
+
function buildAccountingContext(token = constants_js_1.NATIVE_TOKEN, decimals) {
|
|
42
|
+
const isNative = token.toLowerCase() === constants_js_1.NATIVE_TOKEN.toLowerCase();
|
|
35
43
|
if (decimals === undefined && !isNative) {
|
|
36
44
|
throw new Error(`decimals is required for non-native token ${token} (there is no safe default)`);
|
|
37
45
|
}
|
|
38
46
|
return {
|
|
39
47
|
token,
|
|
40
|
-
decimals: decimals ?? NATIVE_TOKEN_DECIMALS,
|
|
41
|
-
currency: tokenCurrencyId(token),
|
|
48
|
+
decimals: decimals ?? constants_js_1.NATIVE_TOKEN_DECIMALS,
|
|
49
|
+
currency: (0, currency_js_1.tokenCurrencyId)(token),
|
|
42
50
|
};
|
|
43
51
|
}
|
|
44
52
|
/**
|
|
@@ -53,10 +61,10 @@ export function buildAccountingContext(token = NATIVE_TOKEN, decimals) {
|
|
|
53
61
|
* @param args.accountingContexts The contexts the multi terminal accepts.
|
|
54
62
|
* Defaults to just the native token context.
|
|
55
63
|
*/
|
|
56
|
-
|
|
64
|
+
function buildTerminalConfigurations(args) {
|
|
57
65
|
const configurations = [
|
|
58
66
|
{
|
|
59
|
-
terminal: v6Address("JBMultiTerminal", args.chainId),
|
|
67
|
+
terminal: (0, types_js_1.v6Address)("JBMultiTerminal", args.chainId),
|
|
60
68
|
accountingContextsToAccept: args.accountingContexts ?? [
|
|
61
69
|
buildAccountingContext(),
|
|
62
70
|
],
|
|
@@ -64,7 +72,7 @@ export function buildTerminalConfigurations(args) {
|
|
|
64
72
|
];
|
|
65
73
|
try {
|
|
66
74
|
configurations.push({
|
|
67
|
-
terminal: v6Address("JBRouterTerminalRegistry", args.chainId),
|
|
75
|
+
terminal: (0, types_js_1.v6Address)("JBRouterTerminalRegistry", args.chainId),
|
|
68
76
|
accountingContextsToAccept: [],
|
|
69
77
|
});
|
|
70
78
|
}
|
|
@@ -84,11 +92,11 @@ export function buildTerminalConfigurations(args) {
|
|
|
84
92
|
*
|
|
85
93
|
* @param overrides Any metadata fields to override.
|
|
86
94
|
*/
|
|
87
|
-
|
|
95
|
+
function buildRulesetMetadata(overrides) {
|
|
88
96
|
return {
|
|
89
97
|
reservedPercent: 0,
|
|
90
98
|
cashOutTaxRate: 0,
|
|
91
|
-
baseCurrency: BASE_CURRENCY_ETH,
|
|
99
|
+
baseCurrency: currency_js_1.BASE_CURRENCY_ETH,
|
|
92
100
|
pausePay: false,
|
|
93
101
|
pauseCreditTransfers: false,
|
|
94
102
|
allowOwnerMinting: false,
|
|
@@ -103,7 +111,7 @@ export function buildRulesetMetadata(overrides) {
|
|
|
103
111
|
scopeCashOutsToLocalBalances: false,
|
|
104
112
|
useDataHookForPay: false,
|
|
105
113
|
useDataHookForCashOut: false,
|
|
106
|
-
dataHook: zeroAddress,
|
|
114
|
+
dataHook: viem_1.zeroAddress,
|
|
107
115
|
metadata: 0,
|
|
108
116
|
...overrides,
|
|
109
117
|
};
|
|
@@ -127,13 +135,13 @@ export function buildRulesetMetadata(overrides) {
|
|
|
127
135
|
* @param args.splitGroups Split groups to set alongside the ruleset.
|
|
128
136
|
* @param args.fundAccessLimitGroups Payout limits / surplus allowances.
|
|
129
137
|
*/
|
|
130
|
-
|
|
138
|
+
function buildRulesetConfiguration(args) {
|
|
131
139
|
return {
|
|
132
140
|
mustStartAtOrAfter: args?.mustStartAtOrAfter ?? 0,
|
|
133
141
|
duration: args?.duration ?? 0,
|
|
134
142
|
weight: args?.weight ?? 0n,
|
|
135
143
|
weightCutPercent: args?.weightCutPercent ?? 0,
|
|
136
|
-
approvalHook: args?.approvalHook ?? zeroAddress,
|
|
144
|
+
approvalHook: args?.approvalHook ?? viem_1.zeroAddress,
|
|
137
145
|
metadata: args?.metadata ?? buildRulesetMetadata(),
|
|
138
146
|
splitGroups: args?.splitGroups ?? [],
|
|
139
147
|
fundAccessLimitGroups: args?.fundAccessLimitGroups ?? [],
|
|
@@ -157,11 +165,11 @@ export function buildRulesetConfiguration(args) {
|
|
|
157
165
|
* @param args.memo An optional memo emitted with the launch event.
|
|
158
166
|
* @param args.creationFee The exact fee read from `JBProjects.creationFee()`.
|
|
159
167
|
*/
|
|
160
|
-
|
|
168
|
+
function buildLaunchProjectTx(args) {
|
|
161
169
|
return {
|
|
162
170
|
chainId: args.chainId,
|
|
163
|
-
address: v6Address("JBController", args.chainId),
|
|
164
|
-
abi: jbControllerAbi,
|
|
171
|
+
address: (0, types_js_1.v6Address)("JBController", args.chainId),
|
|
172
|
+
abi: juicebox_js_1.jbControllerAbi,
|
|
165
173
|
functionName: "launchProjectFor",
|
|
166
174
|
args: [
|
|
167
175
|
args.owner,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/v6/launch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/v6/launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const viem_1 = require("viem");
|
|
4
|
+
const chains_1 = require("viem/chains");
|
|
5
|
+
const vitest_1 = require("vitest");
|
|
6
|
+
const constants_js_1 = require("../constants.js");
|
|
7
|
+
const juicebox_js_1 = require("../generated/juicebox.js");
|
|
8
|
+
const launch_js_1 = require("./launch.js");
|
|
9
|
+
const types_js_1 = require("./types.js");
|
|
8
10
|
const OWNER = "0x000000000000000000000000000000000000dEaD";
|
|
9
11
|
/** A stub PublicClient that records readContract calls. */
|
|
10
12
|
function stubClient(returnValue, calls = []) {
|
|
@@ -16,118 +18,118 @@ function stubClient(returnValue, calls = []) {
|
|
|
16
18
|
};
|
|
17
19
|
return { client, calls };
|
|
18
20
|
}
|
|
19
|
-
describe("buildAccountingContext", () => {
|
|
20
|
-
test("defaults to the native token (61166 currency, 18 decimals)", () => {
|
|
21
|
-
expect(buildAccountingContext()).toEqual({
|
|
22
|
-
token: NATIVE_TOKEN,
|
|
21
|
+
(0, vitest_1.describe)("buildAccountingContext", () => {
|
|
22
|
+
(0, vitest_1.test)("defaults to the native token (61166 currency, 18 decimals)", () => {
|
|
23
|
+
(0, vitest_1.expect)((0, launch_js_1.buildAccountingContext)()).toEqual({
|
|
24
|
+
token: constants_js_1.NATIVE_TOKEN,
|
|
23
25
|
decimals: 18,
|
|
24
26
|
currency: 61166,
|
|
25
27
|
});
|
|
26
28
|
});
|
|
27
|
-
test("keys the currency off the token address", () => {
|
|
28
|
-
const usdc = USDC_ADDRESSES[sepolia.id];
|
|
29
|
-
const context = buildAccountingContext(usdc, 6);
|
|
30
|
-
expect(context.token).toBe(usdc);
|
|
31
|
-
expect(context.decimals).toBe(6);
|
|
32
|
-
expect(context.currency).toBe(Number(BigInt(usdc) & 0xffffffffn));
|
|
29
|
+
(0, vitest_1.test)("keys the currency off the token address", () => {
|
|
30
|
+
const usdc = constants_js_1.USDC_ADDRESSES[chains_1.sepolia.id];
|
|
31
|
+
const context = (0, launch_js_1.buildAccountingContext)(usdc, 6);
|
|
32
|
+
(0, vitest_1.expect)(context.token).toBe(usdc);
|
|
33
|
+
(0, vitest_1.expect)(context.decimals).toBe(6);
|
|
34
|
+
(0, vitest_1.expect)(context.currency).toBe(Number(BigInt(usdc) & 0xffffffffn));
|
|
33
35
|
});
|
|
34
|
-
test("requires decimals for non-native tokens", () => {
|
|
35
|
-
expect(() => buildAccountingContext(USDC_ADDRESSES[sepolia.id])).toThrow(/decimals is required/);
|
|
36
|
+
(0, vitest_1.test)("requires decimals for non-native tokens", () => {
|
|
37
|
+
(0, vitest_1.expect)(() => (0, launch_js_1.buildAccountingContext)(constants_js_1.USDC_ADDRESSES[chains_1.sepolia.id])).toThrow(/decimals is required/);
|
|
36
38
|
});
|
|
37
39
|
});
|
|
38
|
-
describe("buildTerminalConfigurations", () => {
|
|
39
|
-
test("pairs the multi terminal with the router registry (empty contexts)", () => {
|
|
40
|
-
const configurations = buildTerminalConfigurations({
|
|
41
|
-
chainId: sepolia.id,
|
|
40
|
+
(0, vitest_1.describe)("buildTerminalConfigurations", () => {
|
|
41
|
+
(0, vitest_1.test)("pairs the multi terminal with the router registry (empty contexts)", () => {
|
|
42
|
+
const configurations = (0, launch_js_1.buildTerminalConfigurations)({
|
|
43
|
+
chainId: chains_1.sepolia.id,
|
|
42
44
|
});
|
|
43
|
-
expect(configurations).toHaveLength(2);
|
|
44
|
-
expect(configurations[0].terminal).toBe(v6Address("JBMultiTerminal", sepolia.id));
|
|
45
|
-
expect(configurations[0].accountingContextsToAccept).toEqual([
|
|
46
|
-
buildAccountingContext(),
|
|
45
|
+
(0, vitest_1.expect)(configurations).toHaveLength(2);
|
|
46
|
+
(0, vitest_1.expect)(configurations[0].terminal).toBe((0, types_js_1.v6Address)("JBMultiTerminal", chains_1.sepolia.id));
|
|
47
|
+
(0, vitest_1.expect)(configurations[0].accountingContextsToAccept).toEqual([
|
|
48
|
+
(0, launch_js_1.buildAccountingContext)(),
|
|
47
49
|
]);
|
|
48
|
-
expect(configurations[1].terminal).toBe(v6Address("JBRouterTerminalRegistry", sepolia.id));
|
|
49
|
-
expect(configurations[1].accountingContextsToAccept).toEqual([]);
|
|
50
|
+
(0, vitest_1.expect)(configurations[1].terminal).toBe((0, types_js_1.v6Address)("JBRouterTerminalRegistry", chains_1.sepolia.id));
|
|
51
|
+
(0, vitest_1.expect)(configurations[1].accountingContextsToAccept).toEqual([]);
|
|
50
52
|
});
|
|
51
|
-
test("accepts explicit accounting contexts", () => {
|
|
52
|
-
const usdcContext = buildAccountingContext(USDC_ADDRESSES[sepolia.id], 6);
|
|
53
|
-
const configurations = buildTerminalConfigurations({
|
|
54
|
-
chainId: sepolia.id,
|
|
53
|
+
(0, vitest_1.test)("accepts explicit accounting contexts", () => {
|
|
54
|
+
const usdcContext = (0, launch_js_1.buildAccountingContext)(constants_js_1.USDC_ADDRESSES[chains_1.sepolia.id], 6);
|
|
55
|
+
const configurations = (0, launch_js_1.buildTerminalConfigurations)({
|
|
56
|
+
chainId: chains_1.sepolia.id,
|
|
55
57
|
accountingContexts: [usdcContext],
|
|
56
58
|
});
|
|
57
|
-
expect(configurations[0].accountingContextsToAccept).toEqual([usdcContext]);
|
|
59
|
+
(0, vitest_1.expect)(configurations[0].accountingContextsToAccept).toEqual([usdcContext]);
|
|
58
60
|
});
|
|
59
61
|
});
|
|
60
|
-
describe("buildRulesetMetadata", () => {
|
|
61
|
-
test("uses safe v6 defaults", () => {
|
|
62
|
-
const metadata = buildRulesetMetadata();
|
|
63
|
-
expect(metadata.reservedPercent).toBe(0);
|
|
64
|
-
expect(metadata.cashOutTaxRate).toBe(0);
|
|
65
|
-
expect(metadata.baseCurrency).toBe(1);
|
|
66
|
-
expect(metadata.scopeCashOutsToLocalBalances).toBe(false);
|
|
67
|
-
expect(metadata.dataHook).toBe(zeroAddress);
|
|
68
|
-
expect(metadata.metadata).toBe(0);
|
|
62
|
+
(0, vitest_1.describe)("buildRulesetMetadata", () => {
|
|
63
|
+
(0, vitest_1.test)("uses safe v6 defaults", () => {
|
|
64
|
+
const metadata = (0, launch_js_1.buildRulesetMetadata)();
|
|
65
|
+
(0, vitest_1.expect)(metadata.reservedPercent).toBe(0);
|
|
66
|
+
(0, vitest_1.expect)(metadata.cashOutTaxRate).toBe(0);
|
|
67
|
+
(0, vitest_1.expect)(metadata.baseCurrency).toBe(1);
|
|
68
|
+
(0, vitest_1.expect)(metadata.scopeCashOutsToLocalBalances).toBe(false);
|
|
69
|
+
(0, vitest_1.expect)(metadata.dataHook).toBe(viem_1.zeroAddress);
|
|
70
|
+
(0, vitest_1.expect)(metadata.metadata).toBe(0);
|
|
69
71
|
// v6 field name only — the old inverted field must not exist.
|
|
70
|
-
expect("useTotalSurplusForCashOuts" in metadata).toBe(false);
|
|
72
|
+
(0, vitest_1.expect)("useTotalSurplusForCashOuts" in metadata).toBe(false);
|
|
71
73
|
});
|
|
72
|
-
test("honors overrides", () => {
|
|
73
|
-
const metadata = buildRulesetMetadata({
|
|
74
|
+
(0, vitest_1.test)("honors overrides", () => {
|
|
75
|
+
const metadata = (0, launch_js_1.buildRulesetMetadata)({
|
|
74
76
|
reservedPercent: 5000,
|
|
75
77
|
baseCurrency: 2,
|
|
76
78
|
allowOwnerMinting: true,
|
|
77
79
|
});
|
|
78
|
-
expect(metadata.reservedPercent).toBe(5000);
|
|
79
|
-
expect(metadata.baseCurrency).toBe(2);
|
|
80
|
-
expect(metadata.allowOwnerMinting).toBe(true);
|
|
81
|
-
expect(metadata.pausePay).toBe(false);
|
|
80
|
+
(0, vitest_1.expect)(metadata.reservedPercent).toBe(5000);
|
|
81
|
+
(0, vitest_1.expect)(metadata.baseCurrency).toBe(2);
|
|
82
|
+
(0, vitest_1.expect)(metadata.allowOwnerMinting).toBe(true);
|
|
83
|
+
(0, vitest_1.expect)(metadata.pausePay).toBe(false);
|
|
82
84
|
});
|
|
83
85
|
});
|
|
84
|
-
describe("buildRulesetConfiguration", () => {
|
|
85
|
-
test("uses safe defaults (zero payouts, no approval hook)", () => {
|
|
86
|
-
const configuration = buildRulesetConfiguration();
|
|
87
|
-
expect(configuration.mustStartAtOrAfter).toBe(0);
|
|
88
|
-
expect(configuration.duration).toBe(0);
|
|
89
|
-
expect(configuration.weight).toBe(0n);
|
|
90
|
-
expect(configuration.weightCutPercent).toBe(0);
|
|
91
|
-
expect(configuration.approvalHook).toBe(zeroAddress);
|
|
92
|
-
expect(configuration.splitGroups).toEqual([]);
|
|
93
|
-
expect(configuration.fundAccessLimitGroups).toEqual([]);
|
|
94
|
-
expect(configuration.metadata).toEqual(buildRulesetMetadata());
|
|
86
|
+
(0, vitest_1.describe)("buildRulesetConfiguration", () => {
|
|
87
|
+
(0, vitest_1.test)("uses safe defaults (zero payouts, no approval hook)", () => {
|
|
88
|
+
const configuration = (0, launch_js_1.buildRulesetConfiguration)();
|
|
89
|
+
(0, vitest_1.expect)(configuration.mustStartAtOrAfter).toBe(0);
|
|
90
|
+
(0, vitest_1.expect)(configuration.duration).toBe(0);
|
|
91
|
+
(0, vitest_1.expect)(configuration.weight).toBe(0n);
|
|
92
|
+
(0, vitest_1.expect)(configuration.weightCutPercent).toBe(0);
|
|
93
|
+
(0, vitest_1.expect)(configuration.approvalHook).toBe(viem_1.zeroAddress);
|
|
94
|
+
(0, vitest_1.expect)(configuration.splitGroups).toEqual([]);
|
|
95
|
+
(0, vitest_1.expect)(configuration.fundAccessLimitGroups).toEqual([]);
|
|
96
|
+
(0, vitest_1.expect)(configuration.metadata).toEqual((0, launch_js_1.buildRulesetMetadata)());
|
|
95
97
|
});
|
|
96
98
|
});
|
|
97
|
-
describe("buildLaunchProjectTx", () => {
|
|
98
|
-
test("encodes against the controller ABI with the creation fee as value", () => {
|
|
99
|
-
const creationFee = parseEther("0.01");
|
|
100
|
-
const request = buildLaunchProjectTx({
|
|
101
|
-
chainId: sepolia.id,
|
|
99
|
+
(0, vitest_1.describe)("buildLaunchProjectTx", () => {
|
|
100
|
+
(0, vitest_1.test)("encodes against the controller ABI with the creation fee as value", () => {
|
|
101
|
+
const creationFee = (0, viem_1.parseEther)("0.01");
|
|
102
|
+
const request = (0, launch_js_1.buildLaunchProjectTx)({
|
|
103
|
+
chainId: chains_1.sepolia.id,
|
|
102
104
|
owner: OWNER,
|
|
103
105
|
projectUri: "ipfs://bafy",
|
|
104
106
|
rulesetConfigurations: [
|
|
105
|
-
buildRulesetConfiguration({ weight: parseEther("1000") }),
|
|
107
|
+
(0, launch_js_1.buildRulesetConfiguration)({ weight: (0, viem_1.parseEther)("1000") }),
|
|
106
108
|
],
|
|
107
|
-
terminalConfigurations: buildTerminalConfigurations({
|
|
108
|
-
chainId: sepolia.id,
|
|
109
|
+
terminalConfigurations: (0, launch_js_1.buildTerminalConfigurations)({
|
|
110
|
+
chainId: chains_1.sepolia.id,
|
|
109
111
|
}),
|
|
110
112
|
creationFee,
|
|
111
113
|
});
|
|
112
|
-
expect(request.address).toBe(v6Address("JBController", sepolia.id));
|
|
113
|
-
expect(request.value).toBe(creationFee);
|
|
114
|
-
expect(request.args[4]).toBe(""); // default memo
|
|
115
|
-
const data = encodeFunctionData(request);
|
|
116
|
-
const decoded = decodeFunctionData({ abi: jbControllerAbi, data });
|
|
114
|
+
(0, vitest_1.expect)(request.address).toBe((0, types_js_1.v6Address)("JBController", chains_1.sepolia.id));
|
|
115
|
+
(0, vitest_1.expect)(request.value).toBe(creationFee);
|
|
116
|
+
(0, vitest_1.expect)(request.args[4]).toBe(""); // default memo
|
|
117
|
+
const data = (0, viem_1.encodeFunctionData)(request);
|
|
118
|
+
const decoded = (0, viem_1.decodeFunctionData)({ abi: juicebox_js_1.jbControllerAbi, data });
|
|
117
119
|
if (decoded.functionName !== "launchProjectFor") {
|
|
118
120
|
throw new Error("decoded the wrong function");
|
|
119
121
|
}
|
|
120
|
-
expect(decoded.args[0].toLowerCase()).toBe(OWNER.toLowerCase());
|
|
122
|
+
(0, vitest_1.expect)(decoded.args[0].toLowerCase()).toBe(OWNER.toLowerCase());
|
|
121
123
|
});
|
|
122
124
|
});
|
|
123
|
-
describe("getProjectCreationFee", () => {
|
|
124
|
-
test("reads JBProjects.creationFee on the requested chain", async () => {
|
|
125
|
-
const { client, calls } = stubClient(parseEther("0.001"));
|
|
126
|
-
const fee = await getProjectCreationFee(client, sepolia.id);
|
|
127
|
-
expect(fee).toBe(parseEther("0.001"));
|
|
128
|
-
expect(calls).toHaveLength(1);
|
|
129
|
-
expect(calls[0]).toMatchObject({
|
|
130
|
-
address: v6Address("JBProjects", sepolia.id),
|
|
125
|
+
(0, vitest_1.describe)("getProjectCreationFee", () => {
|
|
126
|
+
(0, vitest_1.test)("reads JBProjects.creationFee on the requested chain", async () => {
|
|
127
|
+
const { client, calls } = stubClient((0, viem_1.parseEther)("0.001"));
|
|
128
|
+
const fee = await (0, launch_js_1.getProjectCreationFee)(client, chains_1.sepolia.id);
|
|
129
|
+
(0, vitest_1.expect)(fee).toBe((0, viem_1.parseEther)("0.001"));
|
|
130
|
+
(0, vitest_1.expect)(calls).toHaveLength(1);
|
|
131
|
+
(0, vitest_1.expect)(calls[0]).toMatchObject({
|
|
132
|
+
address: (0, types_js_1.v6Address)("JBProjects", chains_1.sepolia.id),
|
|
131
133
|
functionName: "creationFee",
|
|
132
134
|
});
|
|
133
135
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.test.js","sourceRoot":"","sources":["../../../src/v6/launch.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"launch.test.js","sourceRoot":"","sources":["../../../src/v6/launch.test.ts"],"names":[],"mappings":"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"}
|