@rev-net/core-v6 0.0.30 → 0.0.31
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/USER_JOURNEYS.md +11 -0
- package/package.json +8 -8
- package/script/Deploy.s.sol +4 -1
- package/src/REVDeployer.sol +4 -2
- package/src/REVLoans.sol +81 -59
- package/src/REVOwner.sol +40 -11
- package/src/interfaces/IREVLoans.sol +5 -0
- package/test/REV.integrations.t.sol +10 -1
- package/test/REVAutoIssuanceFuzz.t.sol +10 -1
- package/test/REVDeployerRegressions.t.sol +12 -1
- package/test/REVInvincibility.t.sol +21 -2
- package/test/REVLifecycle.t.sol +12 -1
- package/test/REVLoans.invariants.t.sol +12 -1
- package/test/REVLoansAttacks.t.sol +12 -1
- package/test/REVLoansFeeRecovery.t.sol +12 -1
- package/test/REVLoansFindings.t.sol +12 -1
- package/test/REVLoansRegressions.t.sol +12 -1
- package/test/REVLoansSourceFeeRecovery.t.sol +12 -1
- package/test/REVLoansSourced.t.sol +12 -1
- package/test/REVLoansUnSourced.t.sol +12 -1
- package/test/TestBurnHeldTokens.t.sol +12 -1
- package/test/TestCEIPattern.t.sol +12 -1
- package/test/TestCashOutCallerValidation.t.sol +13 -2
- package/test/TestConversionDocumentation.t.sol +12 -1
- package/test/TestCrossCurrencyReclaim.t.sol +12 -1
- package/test/TestCrossSourceReallocation.t.sol +12 -1
- package/test/TestERC2771MetaTx.t.sol +12 -1
- package/test/TestEmptyBuybackSpecs.t.sol +12 -1
- package/test/TestFlashLoanSurplus.t.sol +12 -1
- package/test/TestHiddenTokens.t.sol +12 -1
- package/test/TestHookArrayOOB.t.sol +12 -1
- package/test/TestLiquidationBehavior.t.sol +12 -1
- package/test/TestLoanSourceRotation.t.sol +12 -1
- package/test/TestLoansCashOutDelay.t.sol +12 -1
- package/test/TestLongTailEconomics.t.sol +12 -1
- package/test/TestLowFindings.t.sol +12 -1
- package/test/TestMixedFixes.t.sol +12 -1
- package/test/TestPermit2Signatures.t.sol +12 -1
- package/test/TestReallocationSandwich.t.sol +12 -1
- package/test/TestRevnetRegressions.t.sol +14 -2
- package/test/TestSplitWeightAdjustment.t.sol +12 -1
- package/test/TestSplitWeightE2E.t.sol +14 -1
- package/test/TestSplitWeightFork.t.sol +14 -1
- package/test/TestStageTransitionBorrowable.t.sol +12 -1
- package/test/TestSwapTerminalPermission.t.sol +12 -1
- package/test/TestUint112Overflow.t.sol +12 -1
- package/test/TestZeroAmountLoanGuard.t.sol +12 -1
- package/test/TestZeroRepayment.t.sol +12 -1
- package/test/audit/CodexPhantomSurplusTerminal.t.sol +367 -0
- package/test/audit/LoanIdOverflowGuard.t.sol +12 -1
- package/test/audit/NemesisOperatorDelegation.t.sol +12 -1
- package/test/fork/ForkTestBase.sol +14 -1
- package/test/mock/MockBuybackCashOutRecorder.sol +2 -0
- package/test/mock/MockBuybackDataHook.sol +3 -1
- package/test/mock/MockBuybackDataHookMintPath.sol +2 -0
- package/test/mock/MockSuckerRegistry.sol +17 -0
- package/test/regression/TestBurnPermissionRequired.t.sol +12 -1
- package/test/regression/TestCashOutBuybackFeeLeak.t.sol +14 -1
- package/test/regression/TestCrossRevnetLiquidation.t.sol +12 -1
- package/test/regression/TestCumulativeLoanCounter.t.sol +12 -1
- package/test/regression/TestLiquidateGapHandling.t.sol +12 -1
- package/test/regression/TestZeroPriceFeed.t.sol +12 -1
package/test/REVLifecycle.t.sol
CHANGED
|
@@ -34,11 +34,14 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
34
34
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
35
35
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
36
36
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
37
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
38
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
37
39
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
38
40
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
39
41
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
40
42
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
41
43
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
44
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
42
45
|
|
|
43
46
|
/// @notice Full revnet lifecycle E2E: deploy 3-stage -> pay -> advance stages -> cash out.
|
|
44
47
|
contract REVLifecycle_Local is TestBaseWorkflow {
|
|
@@ -91,7 +94,14 @@ contract REVLifecycle_Local is TestBaseWorkflow {
|
|
|
91
94
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
92
95
|
HOOK_STORE = new JB721TiersHookStore();
|
|
93
96
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
94
|
-
jbDirectory(),
|
|
97
|
+
jbDirectory(),
|
|
98
|
+
jbPermissions(),
|
|
99
|
+
jbPrices(),
|
|
100
|
+
jbRulesets(),
|
|
101
|
+
HOOK_STORE,
|
|
102
|
+
jbSplits(),
|
|
103
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
104
|
+
multisig()
|
|
95
105
|
);
|
|
96
106
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
97
107
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -100,6 +110,7 @@ contract REVLifecycle_Local is TestBaseWorkflow {
|
|
|
100
110
|
|
|
101
111
|
LOANS_CONTRACT = new REVLoans({
|
|
102
112
|
controller: jbController(),
|
|
113
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
103
114
|
revId: FEE_PROJECT_ID,
|
|
104
115
|
owner: address(this),
|
|
105
116
|
permit2: permit2(),
|
|
@@ -39,11 +39,14 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
39
39
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
40
40
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
41
41
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
42
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
43
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
42
44
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
43
45
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
44
46
|
import {JBTest} from "@bananapus/core-v6/test/helpers/JBTest.sol";
|
|
45
47
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
46
48
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
49
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
47
50
|
|
|
48
51
|
struct FeeProjectConfig {
|
|
49
52
|
REVConfig configuration;
|
|
@@ -530,7 +533,14 @@ contract InvariantREVLoansTests is StdInvariant, TestBaseWorkflow {
|
|
|
530
533
|
HOOK_STORE = new JB721TiersHookStore();
|
|
531
534
|
|
|
532
535
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
533
|
-
jbDirectory(),
|
|
536
|
+
jbDirectory(),
|
|
537
|
+
jbPermissions(),
|
|
538
|
+
jbPrices(),
|
|
539
|
+
jbRulesets(),
|
|
540
|
+
HOOK_STORE,
|
|
541
|
+
jbSplits(),
|
|
542
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
543
|
+
multisig()
|
|
534
544
|
);
|
|
535
545
|
|
|
536
546
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
@@ -542,6 +552,7 @@ contract InvariantREVLoansTests is StdInvariant, TestBaseWorkflow {
|
|
|
542
552
|
|
|
543
553
|
LOANS_CONTRACT = new REVLoans({
|
|
544
554
|
controller: jbController(),
|
|
555
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
545
556
|
revId: FEE_PROJECT_ID,
|
|
546
557
|
owner: address(this),
|
|
547
558
|
permit2: permit2(),
|
|
@@ -38,6 +38,8 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
38
38
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
39
39
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
40
40
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
41
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
42
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
41
43
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
42
44
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
43
45
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
@@ -46,6 +48,7 @@ import {JBRuleset} from "@bananapus/core-v6/src/structs/JBRuleset.sol";
|
|
|
46
48
|
import {JBPayHookSpecification} from "@bananapus/core-v6/src/structs/JBPayHookSpecification.sol";
|
|
47
49
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
48
50
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
51
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
49
52
|
|
|
50
53
|
/// @notice A malicious terminal that re-enters REVLoans during fee payment in _adjust().
|
|
51
54
|
/// @dev Reentrancy during pay() callback in _adjust.
|
|
@@ -369,7 +372,14 @@ contract REVLoansAttacks is TestBaseWorkflow {
|
|
|
369
372
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
370
373
|
HOOK_STORE = new JB721TiersHookStore();
|
|
371
374
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
372
|
-
jbDirectory(),
|
|
375
|
+
jbDirectory(),
|
|
376
|
+
jbPermissions(),
|
|
377
|
+
jbPrices(),
|
|
378
|
+
jbRulesets(),
|
|
379
|
+
HOOK_STORE,
|
|
380
|
+
jbSplits(),
|
|
381
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
382
|
+
multisig()
|
|
373
383
|
);
|
|
374
384
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
375
385
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -384,6 +394,7 @@ contract REVLoansAttacks is TestBaseWorkflow {
|
|
|
384
394
|
|
|
385
395
|
LOANS_CONTRACT = new REVLoans({
|
|
386
396
|
controller: jbController(),
|
|
397
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
387
398
|
revId: FEE_PROJECT_ID,
|
|
388
399
|
owner: address(this),
|
|
389
400
|
permit2: permit2(),
|
|
@@ -39,6 +39,8 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
39
39
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
40
40
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
41
41
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
42
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
43
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
42
44
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
43
45
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
44
46
|
import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
|
|
@@ -47,6 +49,7 @@ import {JBPayHookSpecification} from "@bananapus/core-v6/src/structs/JBPayHookSp
|
|
|
47
49
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
48
50
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
49
51
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
52
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
50
53
|
|
|
51
54
|
/// @notice A terminal mock that always reverts on pay(), used to simulate fee payment failure.
|
|
52
55
|
contract RevertingFeeTerminal is ERC165, IJBPayoutTerminal {
|
|
@@ -333,7 +336,14 @@ contract REVLoansFeeRecovery is TestBaseWorkflow {
|
|
|
333
336
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
334
337
|
HOOK_STORE = new JB721TiersHookStore();
|
|
335
338
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
336
|
-
jbDirectory(),
|
|
339
|
+
jbDirectory(),
|
|
340
|
+
jbPermissions(),
|
|
341
|
+
jbPrices(),
|
|
342
|
+
jbRulesets(),
|
|
343
|
+
HOOK_STORE,
|
|
344
|
+
jbSplits(),
|
|
345
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
346
|
+
multisig()
|
|
337
347
|
);
|
|
338
348
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
339
349
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -349,6 +359,7 @@ contract REVLoansFeeRecovery is TestBaseWorkflow {
|
|
|
349
359
|
|
|
350
360
|
LOANS_CONTRACT = new REVLoans({
|
|
351
361
|
controller: jbController(),
|
|
362
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
352
363
|
revId: FEE_PROJECT_ID,
|
|
353
364
|
owner: address(this),
|
|
354
365
|
permit2: permit2(),
|
|
@@ -40,6 +40,8 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
40
40
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
41
41
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
42
42
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
43
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
44
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
43
45
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
44
46
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
45
47
|
import {JBRuleset} from "@bananapus/core-v6/src/structs/JBRuleset.sol";
|
|
@@ -47,6 +49,7 @@ import {JBPayHookSpecification} from "@bananapus/core-v6/src/structs/JBPayHookSp
|
|
|
47
49
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
48
50
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
49
51
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
52
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
50
53
|
|
|
51
54
|
/// @notice A fake terminal that returns garbage accounting contexts.
|
|
52
55
|
/// Used to test unvalidated loan source terminal rejection.
|
|
@@ -198,7 +201,14 @@ contract REVLoansFindings is TestBaseWorkflow {
|
|
|
198
201
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
199
202
|
HOOK_STORE = new JB721TiersHookStore();
|
|
200
203
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
201
|
-
jbDirectory(),
|
|
204
|
+
jbDirectory(),
|
|
205
|
+
jbPermissions(),
|
|
206
|
+
jbPrices(),
|
|
207
|
+
jbRulesets(),
|
|
208
|
+
HOOK_STORE,
|
|
209
|
+
jbSplits(),
|
|
210
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
211
|
+
multisig()
|
|
202
212
|
);
|
|
203
213
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
204
214
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -207,6 +217,7 @@ contract REVLoansFindings is TestBaseWorkflow {
|
|
|
207
217
|
|
|
208
218
|
LOANS_CONTRACT = new REVLoans({
|
|
209
219
|
controller: jbController(),
|
|
220
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
210
221
|
revId: FEE_PROJECT_ID,
|
|
211
222
|
owner: address(this),
|
|
212
223
|
permit2: permit2(),
|
|
@@ -35,6 +35,8 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
35
35
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
36
36
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
37
37
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
38
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
39
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
38
40
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
39
41
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
40
42
|
import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
|
|
@@ -43,6 +45,7 @@ import {JBPayHookSpecification} from "@bananapus/core-v6/src/structs/JBPayHookSp
|
|
|
43
45
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
44
46
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
45
47
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
48
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
46
49
|
|
|
47
50
|
/// @notice A fake terminal that tracks whether useAllowanceOf was called.
|
|
48
51
|
/// @dev REVLoans.borrowFrom does not validate source terminal registration.
|
|
@@ -193,7 +196,14 @@ contract REVLoansRegressions is TestBaseWorkflow {
|
|
|
193
196
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
194
197
|
HOOK_STORE = new JB721TiersHookStore();
|
|
195
198
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
196
|
-
jbDirectory(),
|
|
199
|
+
jbDirectory(),
|
|
200
|
+
jbPermissions(),
|
|
201
|
+
jbPrices(),
|
|
202
|
+
jbRulesets(),
|
|
203
|
+
HOOK_STORE,
|
|
204
|
+
jbSplits(),
|
|
205
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
206
|
+
multisig()
|
|
197
207
|
);
|
|
198
208
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
199
209
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -202,6 +212,7 @@ contract REVLoansRegressions is TestBaseWorkflow {
|
|
|
202
212
|
|
|
203
213
|
LOANS_CONTRACT = new REVLoans({
|
|
204
214
|
controller: jbController(),
|
|
215
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
205
216
|
revId: FEE_PROJECT_ID,
|
|
206
217
|
owner: address(this),
|
|
207
218
|
permit2: permit2(),
|
|
@@ -35,11 +35,14 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
35
35
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
36
36
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
37
37
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
38
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
39
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
38
40
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
39
41
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
40
42
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
41
43
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
42
44
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
45
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
43
46
|
|
|
44
47
|
struct SourceFeeProjectConfig {
|
|
45
48
|
REVConfig configuration;
|
|
@@ -220,7 +223,14 @@ contract REVLoansSourceFeeRecovery is TestBaseWorkflow {
|
|
|
220
223
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
221
224
|
HOOK_STORE = new JB721TiersHookStore();
|
|
222
225
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
223
|
-
jbDirectory(),
|
|
226
|
+
jbDirectory(),
|
|
227
|
+
jbPermissions(),
|
|
228
|
+
jbPrices(),
|
|
229
|
+
jbRulesets(),
|
|
230
|
+
HOOK_STORE,
|
|
231
|
+
jbSplits(),
|
|
232
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
233
|
+
multisig()
|
|
224
234
|
);
|
|
225
235
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
226
236
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -229,6 +239,7 @@ contract REVLoansSourceFeeRecovery is TestBaseWorkflow {
|
|
|
229
239
|
|
|
230
240
|
LOANS_CONTRACT = new REVLoans({
|
|
231
241
|
controller: jbController(),
|
|
242
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
232
243
|
revId: FEE_PROJECT_ID,
|
|
233
244
|
owner: address(this),
|
|
234
245
|
permit2: permit2(),
|
|
@@ -40,11 +40,14 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
40
40
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
41
41
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
42
42
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
43
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
44
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
43
45
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
44
46
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
45
47
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
46
48
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
47
49
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
50
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
48
51
|
|
|
49
52
|
struct FeeProjectConfig {
|
|
50
53
|
REVConfig configuration;
|
|
@@ -306,7 +309,14 @@ contract REVLoansSourcedTests is TestBaseWorkflow {
|
|
|
306
309
|
HOOK_STORE = new JB721TiersHookStore();
|
|
307
310
|
|
|
308
311
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
309
|
-
jbDirectory(),
|
|
312
|
+
jbDirectory(),
|
|
313
|
+
jbPermissions(),
|
|
314
|
+
jbPrices(),
|
|
315
|
+
jbRulesets(),
|
|
316
|
+
HOOK_STORE,
|
|
317
|
+
jbSplits(),
|
|
318
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
319
|
+
multisig()
|
|
310
320
|
);
|
|
311
321
|
|
|
312
322
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
@@ -330,6 +340,7 @@ contract REVLoansSourcedTests is TestBaseWorkflow {
|
|
|
330
340
|
|
|
331
341
|
LOANS_CONTRACT = new REVLoans({
|
|
332
342
|
controller: jbController(),
|
|
343
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
333
344
|
revId: FEE_PROJECT_ID,
|
|
334
345
|
owner: address(this),
|
|
335
346
|
permit2: permit2(),
|
|
@@ -38,10 +38,13 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
38
38
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
39
39
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
40
40
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
41
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
42
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
41
43
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
42
44
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
43
45
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
44
46
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
47
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
45
48
|
|
|
46
49
|
struct FeeProjectConfig {
|
|
47
50
|
REVConfig configuration;
|
|
@@ -292,7 +295,14 @@ contract REVLoansUnsourcedTests is TestBaseWorkflow {
|
|
|
292
295
|
HOOK_STORE = new JB721TiersHookStore();
|
|
293
296
|
|
|
294
297
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
295
|
-
jbDirectory(),
|
|
298
|
+
jbDirectory(),
|
|
299
|
+
jbPermissions(),
|
|
300
|
+
jbPrices(),
|
|
301
|
+
jbRulesets(),
|
|
302
|
+
HOOK_STORE,
|
|
303
|
+
jbSplits(),
|
|
304
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
305
|
+
multisig()
|
|
296
306
|
);
|
|
297
307
|
|
|
298
308
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
@@ -304,6 +314,7 @@ contract REVLoansUnsourcedTests is TestBaseWorkflow {
|
|
|
304
314
|
|
|
305
315
|
LOANS_CONTRACT = new REVLoans({
|
|
306
316
|
controller: jbController(),
|
|
317
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
307
318
|
revId: FEE_PROJECT_ID,
|
|
308
319
|
owner: address(this),
|
|
309
320
|
permit2: permit2(),
|
|
@@ -35,10 +35,13 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
35
35
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
36
36
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
37
37
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
38
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
39
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
38
40
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
39
41
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
40
42
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
41
43
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
44
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
42
45
|
|
|
43
46
|
struct FeeProjectConfig {
|
|
44
47
|
REVConfig configuration;
|
|
@@ -197,7 +200,14 @@ contract TestBurnHeldTokens is TestBaseWorkflow {
|
|
|
197
200
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
198
201
|
HOOK_STORE = new JB721TiersHookStore();
|
|
199
202
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
200
|
-
jbDirectory(),
|
|
203
|
+
jbDirectory(),
|
|
204
|
+
jbPermissions(),
|
|
205
|
+
jbPrices(),
|
|
206
|
+
jbRulesets(),
|
|
207
|
+
HOOK_STORE,
|
|
208
|
+
jbSplits(),
|
|
209
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
210
|
+
multisig()
|
|
201
211
|
);
|
|
202
212
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
203
213
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -207,6 +217,7 @@ contract TestBurnHeldTokens is TestBaseWorkflow {
|
|
|
207
217
|
|
|
208
218
|
LOANS_CONTRACT = new REVLoans({
|
|
209
219
|
controller: jbController(),
|
|
220
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
210
221
|
revId: FEE_PROJECT_ID,
|
|
211
222
|
owner: address(this),
|
|
212
223
|
permit2: permit2(),
|
|
@@ -37,11 +37,14 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
37
37
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
38
38
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
39
39
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
40
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
41
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
40
42
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
41
43
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
42
44
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
43
45
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
44
46
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
47
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
45
48
|
|
|
46
49
|
/// @notice Contract that reenters REVLoans when it receives ETH during a borrow payout.
|
|
47
50
|
/// Records the loan state it observes during reentrancy to verify CEI correctness.
|
|
@@ -123,7 +126,14 @@ contract TestCEIPattern is TestBaseWorkflow {
|
|
|
123
126
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
124
127
|
HOOK_STORE = new JB721TiersHookStore();
|
|
125
128
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
126
|
-
jbDirectory(),
|
|
129
|
+
jbDirectory(),
|
|
130
|
+
jbPermissions(),
|
|
131
|
+
jbPrices(),
|
|
132
|
+
jbRulesets(),
|
|
133
|
+
HOOK_STORE,
|
|
134
|
+
jbSplits(),
|
|
135
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
136
|
+
multisig()
|
|
127
137
|
);
|
|
128
138
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
129
139
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -136,6 +146,7 @@ contract TestCEIPattern is TestBaseWorkflow {
|
|
|
136
146
|
.addPriceFeedFor(0, uint32(uint160(address(TOKEN))), uint32(uint160(JBConstants.NATIVE_TOKEN)), priceFeed);
|
|
137
147
|
LOANS_CONTRACT = new REVLoans({
|
|
138
148
|
controller: jbController(),
|
|
149
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
139
150
|
revId: FEE_PROJECT_ID,
|
|
140
151
|
owner: address(this),
|
|
141
152
|
permit2: permit2(),
|
|
@@ -39,11 +39,14 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
39
39
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
40
40
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
41
41
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
42
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
43
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
42
44
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
43
45
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
44
46
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
45
47
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
46
48
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
49
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
47
50
|
|
|
48
51
|
struct FeeProjectConfig {
|
|
49
52
|
REVConfig configuration;
|
|
@@ -210,7 +213,14 @@ contract TestCashOutCallerValidation is TestBaseWorkflow {
|
|
|
210
213
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
211
214
|
HOOK_STORE = new JB721TiersHookStore();
|
|
212
215
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
213
|
-
jbDirectory(),
|
|
216
|
+
jbDirectory(),
|
|
217
|
+
jbPermissions(),
|
|
218
|
+
jbPrices(),
|
|
219
|
+
jbRulesets(),
|
|
220
|
+
HOOK_STORE,
|
|
221
|
+
jbSplits(),
|
|
222
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
223
|
+
multisig()
|
|
214
224
|
);
|
|
215
225
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
216
226
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -220,6 +230,7 @@ contract TestCashOutCallerValidation is TestBaseWorkflow {
|
|
|
220
230
|
|
|
221
231
|
LOANS_CONTRACT = new REVLoans({
|
|
222
232
|
controller: jbController(),
|
|
233
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
223
234
|
revId: FEE_PROJECT_ID,
|
|
224
235
|
owner: address(this),
|
|
225
236
|
permit2: permit2(),
|
|
@@ -354,7 +365,7 @@ contract TestCashOutCallerValidation is TestBaseWorkflow {
|
|
|
354
365
|
(
|
|
355
366
|
uint256 cashOutTaxRate,
|
|
356
367
|
uint256 cashOutCount,
|
|
357
|
-
uint256 totalSupply
|
|
368
|
+
uint256 totalSupply,,
|
|
358
369
|
JBCashOutHookSpecification[] memory hookSpecifications
|
|
359
370
|
) = REV_OWNER.beforeCashOutRecordedWith(context);
|
|
360
371
|
|
|
@@ -35,10 +35,13 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
35
35
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
36
36
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
37
37
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
38
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
39
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
38
40
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
39
41
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
40
42
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
41
43
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
44
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
42
45
|
|
|
43
46
|
contract TestConversionDocumentation is TestBaseWorkflow {
|
|
44
47
|
// forge-lint: disable-next-line(mixed-case-variable)
|
|
@@ -140,7 +143,14 @@ contract TestConversionDocumentation is TestBaseWorkflow {
|
|
|
140
143
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
141
144
|
HOOK_STORE = new JB721TiersHookStore();
|
|
142
145
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
143
|
-
jbDirectory(),
|
|
146
|
+
jbDirectory(),
|
|
147
|
+
jbPermissions(),
|
|
148
|
+
jbPrices(),
|
|
149
|
+
jbRulesets(),
|
|
150
|
+
HOOK_STORE,
|
|
151
|
+
jbSplits(),
|
|
152
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
153
|
+
multisig()
|
|
144
154
|
);
|
|
145
155
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
146
156
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -150,6 +160,7 @@ contract TestConversionDocumentation is TestBaseWorkflow {
|
|
|
150
160
|
|
|
151
161
|
LOANS_CONTRACT = new REVLoans({
|
|
152
162
|
controller: jbController(),
|
|
163
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
153
164
|
revId: FEE_PROJECT_ID,
|
|
154
165
|
owner: address(this),
|
|
155
166
|
permit2: permit2(),
|
|
@@ -34,11 +34,14 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
34
34
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
35
35
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
36
36
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
37
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
38
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
37
39
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
38
40
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
39
41
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
40
42
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
41
43
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
44
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
42
45
|
|
|
43
46
|
/// @notice Cross-currency reclaim tests: verify cash-out behavior when a revnet's baseCurrency differs from the
|
|
44
47
|
/// terminal token currency, and when price feeds return various values.
|
|
@@ -89,7 +92,14 @@ contract TestCrossCurrencyReclaim is TestBaseWorkflow {
|
|
|
89
92
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
90
93
|
HOOK_STORE = new JB721TiersHookStore();
|
|
91
94
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
92
|
-
jbDirectory(),
|
|
95
|
+
jbDirectory(),
|
|
96
|
+
jbPermissions(),
|
|
97
|
+
jbPrices(),
|
|
98
|
+
jbRulesets(),
|
|
99
|
+
HOOK_STORE,
|
|
100
|
+
jbSplits(),
|
|
101
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
102
|
+
multisig()
|
|
93
103
|
);
|
|
94
104
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
95
105
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -101,6 +111,7 @@ contract TestCrossCurrencyReclaim is TestBaseWorkflow {
|
|
|
101
111
|
|
|
102
112
|
LOANS_CONTRACT = new REVLoans({
|
|
103
113
|
controller: jbController(),
|
|
114
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
104
115
|
revId: FEE_PROJECT_ID,
|
|
105
116
|
owner: address(this),
|
|
106
117
|
permit2: permit2(),
|
|
@@ -36,11 +36,14 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
36
36
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
37
37
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
38
38
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
39
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
40
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
39
41
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
40
42
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
41
43
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
42
44
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
43
45
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
46
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
44
47
|
|
|
45
48
|
/// @notice Tests for PR #13: cross-source reallocation prevention.
|
|
46
49
|
contract TestCrossSourceReallocation is TestBaseWorkflow {
|
|
@@ -86,7 +89,14 @@ contract TestCrossSourceReallocation is TestBaseWorkflow {
|
|
|
86
89
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
87
90
|
HOOK_STORE = new JB721TiersHookStore();
|
|
88
91
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
89
|
-
jbDirectory(),
|
|
92
|
+
jbDirectory(),
|
|
93
|
+
jbPermissions(),
|
|
94
|
+
jbPrices(),
|
|
95
|
+
jbRulesets(),
|
|
96
|
+
HOOK_STORE,
|
|
97
|
+
jbSplits(),
|
|
98
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
99
|
+
multisig()
|
|
90
100
|
);
|
|
91
101
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
92
102
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -99,6 +109,7 @@ contract TestCrossSourceReallocation is TestBaseWorkflow {
|
|
|
99
109
|
.addPriceFeedFor(0, uint32(uint160(address(TOKEN))), uint32(uint160(JBConstants.NATIVE_TOKEN)), priceFeed);
|
|
100
110
|
LOANS_CONTRACT = new REVLoans({
|
|
101
111
|
controller: jbController(),
|
|
112
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
102
113
|
revId: FEE_PROJECT_ID,
|
|
103
114
|
owner: address(this),
|
|
104
115
|
permit2: permit2(),
|
|
@@ -38,6 +38,8 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
38
38
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
39
39
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
40
40
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
41
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
42
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
41
43
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
42
44
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
43
45
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
@@ -45,6 +47,7 @@ import {ERC2771Forwarder} from "@openzeppelin/contracts/metatx/ERC2771Forwarder.
|
|
|
45
47
|
import {ERC2771ForwarderMock, ForwardRequest} from "@bananapus/core-v6/test/mock/ERC2771ForwarderMock.sol";
|
|
46
48
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
47
49
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
50
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
48
51
|
|
|
49
52
|
struct MetaTxProjectConfig {
|
|
50
53
|
REVConfig configuration;
|
|
@@ -275,7 +278,14 @@ contract TestERC2771MetaTx is TestBaseWorkflow {
|
|
|
275
278
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
276
279
|
HOOK_STORE = new JB721TiersHookStore();
|
|
277
280
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
278
|
-
jbDirectory(),
|
|
281
|
+
jbDirectory(),
|
|
282
|
+
jbPermissions(),
|
|
283
|
+
jbPrices(),
|
|
284
|
+
jbRulesets(),
|
|
285
|
+
HOOK_STORE,
|
|
286
|
+
jbSplits(),
|
|
287
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
288
|
+
multisig()
|
|
279
289
|
);
|
|
280
290
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
281
291
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -291,6 +301,7 @@ contract TestERC2771MetaTx is TestBaseWorkflow {
|
|
|
291
301
|
// Deploy LOANS_CONTRACT with the forwarder as trusted forwarder.
|
|
292
302
|
LOANS_CONTRACT = new REVLoans({
|
|
293
303
|
controller: jbController(),
|
|
304
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
294
305
|
revId: FEE_PROJECT_ID,
|
|
295
306
|
owner: address(this),
|
|
296
307
|
permit2: permit2(),
|