@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
|
@@ -31,6 +31,8 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
31
31
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
32
32
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
33
33
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
34
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
35
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
34
36
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
35
37
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
36
38
|
import {JBBeforePayRecordedContext} from "@bananapus/core-v6/src/structs/JBBeforePayRecordedContext.sol";
|
|
@@ -39,6 +41,7 @@ import {JBTokenAmount} from "@bananapus/core-v6/src/structs/JBTokenAmount.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 Regression tests for the empty buyback hook specifications fix.
|
|
44
47
|
/// When JBBuybackHook determines minting is cheaper than swapping, it returns an empty
|
|
@@ -82,7 +85,14 @@ contract TestEmptyBuybackSpecs is TestBaseWorkflow {
|
|
|
82
85
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
83
86
|
HOOK_STORE = new JB721TiersHookStore();
|
|
84
87
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
85
|
-
jbDirectory(),
|
|
88
|
+
jbDirectory(),
|
|
89
|
+
jbPermissions(),
|
|
90
|
+
jbPrices(),
|
|
91
|
+
jbRulesets(),
|
|
92
|
+
HOOK_STORE,
|
|
93
|
+
jbSplits(),
|
|
94
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
95
|
+
multisig()
|
|
86
96
|
);
|
|
87
97
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
88
98
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -90,6 +100,7 @@ contract TestEmptyBuybackSpecs is TestBaseWorkflow {
|
|
|
90
100
|
MOCK_BUYBACK_MINT_PATH = new MockBuybackDataHookMintPath();
|
|
91
101
|
LOANS_CONTRACT = new REVLoans({
|
|
92
102
|
controller: jbController(),
|
|
103
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
93
104
|
revId: FEE_PROJECT_ID,
|
|
94
105
|
owner: address(this),
|
|
95
106
|
permit2: permit2(),
|
|
@@ -36,10 +36,13 @@ 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 {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
|
/// @notice Tests showing that flash loan surplus manipulation is economically unprofitable.
|
|
45
48
|
contract TestFlashLoanSurplus is TestBaseWorkflow {
|
|
@@ -89,7 +92,14 @@ contract TestFlashLoanSurplus 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());
|
|
@@ -102,6 +112,7 @@ contract TestFlashLoanSurplus is TestBaseWorkflow {
|
|
|
102
112
|
.addPriceFeedFor(0, uint32(uint160(address(TOKEN))), uint32(uint160(JBConstants.NATIVE_TOKEN)), priceFeed);
|
|
103
113
|
LOANS_CONTRACT = new REVLoans({
|
|
104
114
|
controller: jbController(),
|
|
115
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
105
116
|
revId: FEE_PROJECT_ID,
|
|
106
117
|
owner: address(this),
|
|
107
118
|
permit2: permit2(),
|
|
@@ -37,10 +37,13 @@ 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 {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 the standalone REVHiddenTokens contract.
|
|
46
49
|
contract TestHiddenTokens is TestBaseWorkflow {
|
|
@@ -90,7 +93,14 @@ contract TestHiddenTokens is TestBaseWorkflow {
|
|
|
90
93
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
91
94
|
HOOK_STORE = new JB721TiersHookStore();
|
|
92
95
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
93
|
-
jbDirectory(),
|
|
96
|
+
jbDirectory(),
|
|
97
|
+
jbPermissions(),
|
|
98
|
+
jbPrices(),
|
|
99
|
+
jbRulesets(),
|
|
100
|
+
HOOK_STORE,
|
|
101
|
+
jbSplits(),
|
|
102
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
103
|
+
multisig()
|
|
94
104
|
);
|
|
95
105
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
96
106
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -99,6 +109,7 @@ contract TestHiddenTokens is TestBaseWorkflow {
|
|
|
99
109
|
|
|
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(),
|
|
@@ -32,6 +32,8 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
32
32
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
33
33
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
34
34
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
35
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
36
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
35
37
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
36
38
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
37
39
|
import {JBBeforePayRecordedContext} from "@bananapus/core-v6/src/structs/JBBeforePayRecordedContext.sol";
|
|
@@ -40,6 +42,7 @@ import {JBTokenAmount} from "@bananapus/core-v6/src/structs/JBTokenAmount.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
|
/// @notice Tests for PR #22: fix/c2-hook-array-oob
|
|
45
48
|
/// Verifies that the fix for the hook array out-of-bounds bug works correctly.
|
|
@@ -84,7 +87,14 @@ contract TestHookArrayOOB is TestBaseWorkflow {
|
|
|
84
87
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
85
88
|
HOOK_STORE = new JB721TiersHookStore();
|
|
86
89
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
87
|
-
jbDirectory(),
|
|
90
|
+
jbDirectory(),
|
|
91
|
+
jbPermissions(),
|
|
92
|
+
jbPrices(),
|
|
93
|
+
jbRulesets(),
|
|
94
|
+
HOOK_STORE,
|
|
95
|
+
jbSplits(),
|
|
96
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
97
|
+
multisig()
|
|
88
98
|
);
|
|
89
99
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
90
100
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -92,6 +102,7 @@ contract TestHookArrayOOB is TestBaseWorkflow {
|
|
|
92
102
|
MOCK_BUYBACK = new MockBuybackDataHook();
|
|
93
103
|
LOANS_CONTRACT = new REVLoans({
|
|
94
104
|
controller: jbController(),
|
|
105
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
95
106
|
revId: FEE_PROJECT_ID,
|
|
96
107
|
owner: address(this),
|
|
97
108
|
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 {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.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 Tests for PR #10: liquidation behavior documentation and collateral burn mechanics.
|
|
47
50
|
contract TestLiquidationBehavior is TestBaseWorkflow {
|
|
@@ -87,7 +90,14 @@ contract TestLiquidationBehavior is TestBaseWorkflow {
|
|
|
87
90
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
88
91
|
HOOK_STORE = new JB721TiersHookStore();
|
|
89
92
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
90
|
-
jbDirectory(),
|
|
93
|
+
jbDirectory(),
|
|
94
|
+
jbPermissions(),
|
|
95
|
+
jbPrices(),
|
|
96
|
+
jbRulesets(),
|
|
97
|
+
HOOK_STORE,
|
|
98
|
+
jbSplits(),
|
|
99
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
100
|
+
multisig()
|
|
91
101
|
);
|
|
92
102
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
93
103
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -100,6 +110,7 @@ contract TestLiquidationBehavior is TestBaseWorkflow {
|
|
|
100
110
|
.addPriceFeedFor(0, uint32(uint160(address(TOKEN))), uint32(uint160(JBConstants.NATIVE_TOKEN)), priceFeed);
|
|
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(),
|
|
@@ -36,12 +36,15 @@ 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 {JBSingleAllowance} from "@bananapus/core-v6/src/structs/JBSingleAllowance.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 Tests for loan source rotation: verify behavior when loans are taken from different sources (tokens)
|
|
47
50
|
/// and that existing loans remain valid and repayable after new sources are introduced.
|
|
@@ -90,7 +93,14 @@ contract TestLoanSourceRotation is TestBaseWorkflow {
|
|
|
90
93
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
91
94
|
HOOK_STORE = new JB721TiersHookStore();
|
|
92
95
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
93
|
-
jbDirectory(),
|
|
96
|
+
jbDirectory(),
|
|
97
|
+
jbPermissions(),
|
|
98
|
+
jbPrices(),
|
|
99
|
+
jbRulesets(),
|
|
100
|
+
HOOK_STORE,
|
|
101
|
+
jbSplits(),
|
|
102
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
103
|
+
multisig()
|
|
94
104
|
);
|
|
95
105
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
96
106
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -108,6 +118,7 @@ contract TestLoanSourceRotation is TestBaseWorkflow {
|
|
|
108
118
|
|
|
109
119
|
LOANS_CONTRACT = new REVLoans({
|
|
110
120
|
controller: jbController(),
|
|
121
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
111
122
|
revId: FEE_PROJECT_ID,
|
|
112
123
|
owner: address(this),
|
|
113
124
|
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
|
struct FeeProjectConfig {
|
|
44
47
|
REVConfig configuration;
|
|
@@ -202,7 +205,14 @@ contract TestLoansCashOutDelay is TestBaseWorkflow {
|
|
|
202
205
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
203
206
|
HOOK_STORE = new JB721TiersHookStore();
|
|
204
207
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
205
|
-
jbDirectory(),
|
|
208
|
+
jbDirectory(),
|
|
209
|
+
jbPermissions(),
|
|
210
|
+
jbPrices(),
|
|
211
|
+
jbRulesets(),
|
|
212
|
+
HOOK_STORE,
|
|
213
|
+
jbSplits(),
|
|
214
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
215
|
+
multisig()
|
|
206
216
|
);
|
|
207
217
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
208
218
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -211,6 +221,7 @@ contract TestLoansCashOutDelay is TestBaseWorkflow {
|
|
|
211
221
|
|
|
212
222
|
LOANS_CONTRACT = new REVLoans({
|
|
213
223
|
controller: jbController(),
|
|
224
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
214
225
|
revId: FEE_PROJECT_ID,
|
|
215
226
|
owner: address(this),
|
|
216
227
|
permit2: permit2(),
|
|
@@ -32,11 +32,14 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
32
32
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
33
33
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
34
34
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
35
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
36
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
35
37
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
36
38
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
37
39
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
38
40
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
39
41
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
42
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
40
43
|
|
|
41
44
|
/// @notice Long-tail economic simulation: run a revnet through multiple stage transitions with many payments
|
|
42
45
|
/// and cash outs, verifying value conservation and bonding curve consistency.
|
|
@@ -92,7 +95,14 @@ contract TestLongTailEconomics is TestBaseWorkflow {
|
|
|
92
95
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
93
96
|
HOOK_STORE = new JB721TiersHookStore();
|
|
94
97
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
95
|
-
jbDirectory(),
|
|
98
|
+
jbDirectory(),
|
|
99
|
+
jbPermissions(),
|
|
100
|
+
jbPrices(),
|
|
101
|
+
jbRulesets(),
|
|
102
|
+
HOOK_STORE,
|
|
103
|
+
jbSplits(),
|
|
104
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
105
|
+
multisig()
|
|
96
106
|
);
|
|
97
107
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
98
108
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -101,6 +111,7 @@ contract TestLongTailEconomics 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(),
|
|
@@ -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
|
struct FeeProjectConfig {
|
|
47
50
|
REVConfig configuration;
|
|
@@ -275,7 +278,14 @@ contract TestLowFindings 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());
|
|
@@ -290,6 +300,7 @@ contract TestLowFindings is TestBaseWorkflow {
|
|
|
290
300
|
|
|
291
301
|
LOANS_CONTRACT = new REVLoans({
|
|
292
302
|
controller: jbController(),
|
|
303
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
293
304
|
revId: FEE_PROJECT_ID,
|
|
294
305
|
owner: address(this),
|
|
295
306
|
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
|
/// @notice Tests for PR #32: liquidation boundary, reallocate msg.value, and decimal normalization fixes.
|
|
45
48
|
contract TestMixedFixes is TestBaseWorkflow {
|
|
@@ -85,7 +88,14 @@ contract TestMixedFixes is TestBaseWorkflow {
|
|
|
85
88
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
86
89
|
HOOK_STORE = new JB721TiersHookStore();
|
|
87
90
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
88
|
-
jbDirectory(),
|
|
91
|
+
jbDirectory(),
|
|
92
|
+
jbPermissions(),
|
|
93
|
+
jbPrices(),
|
|
94
|
+
jbRulesets(),
|
|
95
|
+
HOOK_STORE,
|
|
96
|
+
jbSplits(),
|
|
97
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
98
|
+
multisig()
|
|
89
99
|
);
|
|
90
100
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
91
101
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -98,6 +108,7 @@ contract TestMixedFixes is TestBaseWorkflow {
|
|
|
98
108
|
.addPriceFeedFor(0, uint32(uint160(address(TOKEN))), uint32(uint160(JBConstants.NATIVE_TOKEN)), priceFeed);
|
|
99
109
|
LOANS_CONTRACT = new REVLoans({
|
|
100
110
|
controller: jbController(),
|
|
111
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
101
112
|
revId: FEE_PROJECT_ID,
|
|
102
113
|
owner: address(this),
|
|
103
114
|
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";
|
|
@@ -47,6 +49,7 @@ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
|
47
49
|
import {JBFees} from "@bananapus/core-v6/src/libraries/JBFees.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
|
struct Permit2ProjectConfig {
|
|
52
55
|
REVConfig configuration;
|
|
@@ -243,7 +246,14 @@ contract TestPermit2Signatures is TestBaseWorkflow {
|
|
|
243
246
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
244
247
|
HOOK_STORE = new JB721TiersHookStore();
|
|
245
248
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
246
|
-
jbDirectory(),
|
|
249
|
+
jbDirectory(),
|
|
250
|
+
jbPermissions(),
|
|
251
|
+
jbPrices(),
|
|
252
|
+
jbRulesets(),
|
|
253
|
+
HOOK_STORE,
|
|
254
|
+
jbSplits(),
|
|
255
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
256
|
+
multisig()
|
|
247
257
|
);
|
|
248
258
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
249
259
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -258,6 +268,7 @@ contract TestPermit2Signatures is TestBaseWorkflow {
|
|
|
258
268
|
|
|
259
269
|
LOANS_CONTRACT = new REVLoans({
|
|
260
270
|
controller: jbController(),
|
|
271
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
261
272
|
revId: FEE_PROJECT_ID,
|
|
262
273
|
owner: address(this),
|
|
263
274
|
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 Deterministic test for the reallocation sandwich at stage boundaries.
|
|
44
47
|
/// Documents that a borrower can extract additional value by calling `reallocateCollateralFromLoan` immediately
|
|
@@ -145,7 +148,14 @@ contract TestReallocationSandwich is TestBaseWorkflow {
|
|
|
145
148
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
146
149
|
HOOK_STORE = new JB721TiersHookStore();
|
|
147
150
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
148
|
-
jbDirectory(),
|
|
151
|
+
jbDirectory(),
|
|
152
|
+
jbPermissions(),
|
|
153
|
+
jbPrices(),
|
|
154
|
+
jbRulesets(),
|
|
155
|
+
HOOK_STORE,
|
|
156
|
+
jbSplits(),
|
|
157
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
158
|
+
multisig()
|
|
149
159
|
);
|
|
150
160
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
151
161
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -153,6 +163,7 @@ contract TestReallocationSandwich is TestBaseWorkflow {
|
|
|
153
163
|
MOCK_BUYBACK = new MockBuybackDataHook();
|
|
154
164
|
LOANS_CONTRACT = new REVLoans({
|
|
155
165
|
controller: jbController(),
|
|
166
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
156
167
|
revId: FEE_PROJECT_ID,
|
|
157
168
|
owner: address(this),
|
|
158
169
|
permit2: permit2(),
|
|
@@ -38,22 +38,26 @@ 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
|
/// @notice A test harness that exposes REVLoans internal functions for direct testing.
|
|
47
50
|
/// Used to test _totalBorrowedFrom without needing to set up a full borrow flow.
|
|
48
51
|
contract REVLoansHarness is REVLoans {
|
|
49
52
|
constructor(
|
|
50
53
|
IJBController controller,
|
|
54
|
+
IJBSuckerRegistry suckerRegistry,
|
|
51
55
|
uint256 revId,
|
|
52
56
|
address owner,
|
|
53
57
|
IPermit2 permit2,
|
|
54
58
|
address trustedForwarder
|
|
55
59
|
)
|
|
56
|
-
REVLoans(controller, revId, owner, permit2, trustedForwarder)
|
|
60
|
+
REVLoans(controller, suckerRegistry, revId, owner, permit2, trustedForwarder)
|
|
57
61
|
{}
|
|
58
62
|
|
|
59
63
|
/// @notice Expose _totalBorrowedFrom for testing.
|
|
@@ -131,7 +135,14 @@ contract TestRevnetRegressions is TestBaseWorkflow {
|
|
|
131
135
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
132
136
|
HOOK_STORE = new JB721TiersHookStore();
|
|
133
137
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
134
|
-
jbDirectory(),
|
|
138
|
+
jbDirectory(),
|
|
139
|
+
jbPermissions(),
|
|
140
|
+
jbPrices(),
|
|
141
|
+
jbRulesets(),
|
|
142
|
+
HOOK_STORE,
|
|
143
|
+
jbSplits(),
|
|
144
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
145
|
+
multisig()
|
|
135
146
|
);
|
|
136
147
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
137
148
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -140,6 +151,7 @@ contract TestRevnetRegressions is TestBaseWorkflow {
|
|
|
140
151
|
|
|
141
152
|
LOANS_CONTRACT = new REVLoansHarness({
|
|
142
153
|
controller: jbController(),
|
|
154
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
143
155
|
revId: FEE_PROJECT_ID,
|
|
144
156
|
owner: address(this),
|
|
145
157
|
permit2: permit2(),
|
|
@@ -32,6 +32,8 @@ import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
|
32
32
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
33
33
|
import {JB721TiersHook} from "@bananapus/721-hook-v6/src/JB721TiersHook.sol";
|
|
34
34
|
import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStore.sol";
|
|
35
|
+
import {JB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
36
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
35
37
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
36
38
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
37
39
|
import {IJBRulesetDataHook} from "@bananapus/core-v6/src/interfaces/IJBRulesetDataHook.sol";
|
|
@@ -43,6 +45,7 @@ import {JBTokenAmount} from "@bananapus/core-v6/src/structs/JBTokenAmount.sol";
|
|
|
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 Tests for the split weight adjustment in REVDeployer.beforePayRecordedWith.
|
|
48
51
|
contract TestSplitWeightAdjustment is TestBaseWorkflow {
|
|
@@ -83,7 +86,14 @@ contract TestSplitWeightAdjustment is TestBaseWorkflow {
|
|
|
83
86
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
84
87
|
HOOK_STORE = new JB721TiersHookStore();
|
|
85
88
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
86
|
-
jbDirectory(),
|
|
89
|
+
jbDirectory(),
|
|
90
|
+
jbPermissions(),
|
|
91
|
+
jbPrices(),
|
|
92
|
+
jbRulesets(),
|
|
93
|
+
HOOK_STORE,
|
|
94
|
+
jbSplits(),
|
|
95
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
96
|
+
multisig()
|
|
87
97
|
);
|
|
88
98
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
89
99
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -91,6 +101,7 @@ contract TestSplitWeightAdjustment is TestBaseWorkflow {
|
|
|
91
101
|
MOCK_BUYBACK = new MockBuybackDataHookMintPath();
|
|
92
102
|
LOANS_CONTRACT = new REVLoans({
|
|
93
103
|
controller: jbController(),
|
|
104
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
94
105
|
revId: FEE_PROJECT_ID,
|
|
95
106
|
owner: address(this),
|
|
96
107
|
permit2: permit2(),
|
|
@@ -34,6 +34,8 @@ 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 {IJBRulesetDataHook} from "@bananapus/core-v6/src/interfaces/IJBRulesetDataHook.sol";
|
|
@@ -42,6 +44,8 @@ import {JB721TierConfig} from "@bananapus/721-hook-v6/src/structs/JB721TierConfi
|
|
|
42
44
|
import {JB721TierConfigFlags} from "@bananapus/721-hook-v6/src/structs/JB721TierConfigFlags.sol";
|
|
43
45
|
import {JB721InitTiersConfig} from "@bananapus/721-hook-v6/src/structs/JB721InitTiersConfig.sol";
|
|
44
46
|
import {IJB721TokenUriResolver} from "@bananapus/721-hook-v6/src/interfaces/IJB721TokenUriResolver.sol";
|
|
47
|
+
import "@bananapus/721-hook-v6/src/JB721CheckpointsDeployer.sol";
|
|
48
|
+
import {IJB721CheckpointsDeployer} from "@bananapus/721-hook-v6/src/interfaces/IJB721CheckpointsDeployer.sol";
|
|
45
49
|
import {REVDeploy721TiersHookConfig} from "../src/structs/REVDeploy721TiersHookConfig.sol";
|
|
46
50
|
import {REVBaseline721HookConfig} from "../src/structs/REVBaseline721HookConfig.sol";
|
|
47
51
|
import {REV721TiersHookFlags} from "../src/structs/REV721TiersHookFlags.sol";
|
|
@@ -49,6 +53,7 @@ import {REVCroptopAllowedPost} from "../src/structs/REVCroptopAllowedPost.sol";
|
|
|
49
53
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
50
54
|
import {REVOwner} from "../src/REVOwner.sol";
|
|
51
55
|
import {IREVDeployer} from "../src/interfaces/IREVDeployer.sol";
|
|
56
|
+
import {MockSuckerRegistry} from "./mock/MockSuckerRegistry.sol";
|
|
52
57
|
|
|
53
58
|
/// @notice E2E tests verifying that the split weight adjustment in REVDeployer produces correct token counts
|
|
54
59
|
/// when payments flow through the full terminal → store → dataHook → mint pipeline.
|
|
@@ -102,7 +107,14 @@ contract TestSplitWeightE2E is TestBaseWorkflow {
|
|
|
102
107
|
SUCKER_REGISTRY = new JBSuckerRegistry(jbDirectory(), jbPermissions(), multisig(), address(0));
|
|
103
108
|
HOOK_STORE = new JB721TiersHookStore();
|
|
104
109
|
EXAMPLE_HOOK = new JB721TiersHook(
|
|
105
|
-
jbDirectory(),
|
|
110
|
+
jbDirectory(),
|
|
111
|
+
jbPermissions(),
|
|
112
|
+
jbPrices(),
|
|
113
|
+
jbRulesets(),
|
|
114
|
+
HOOK_STORE,
|
|
115
|
+
jbSplits(),
|
|
116
|
+
IJB721CheckpointsDeployer(address(new JB721CheckpointsDeployer())),
|
|
117
|
+
multisig()
|
|
106
118
|
);
|
|
107
119
|
ADDRESS_REGISTRY = new JBAddressRegistry();
|
|
108
120
|
HOOK_DEPLOYER = new JB721TiersHookDeployer(EXAMPLE_HOOK, HOOK_STORE, ADDRESS_REGISTRY, multisig());
|
|
@@ -111,6 +123,7 @@ contract TestSplitWeightE2E is TestBaseWorkflow {
|
|
|
111
123
|
|
|
112
124
|
LOANS_CONTRACT = new REVLoans({
|
|
113
125
|
controller: jbController(),
|
|
126
|
+
suckerRegistry: IJBSuckerRegistry(address(new MockSuckerRegistry())),
|
|
114
127
|
revId: FEE_PROJECT_ID,
|
|
115
128
|
owner: address(this),
|
|
116
129
|
permit2: permit2(),
|