@rev-net/core-v6 0.0.12 → 0.0.13
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/AUDIT_INSTRUCTIONS.md +295 -0
- package/CHANGE_LOG.md +316 -0
- package/README.md +2 -2
- package/RISKS.md +180 -35
- package/SKILLS.md +1 -1
- package/USER_JOURNEYS.md +489 -0
- package/package.json +9 -9
- package/script/Deploy.s.sol +40 -6
- package/script/helpers/RevnetCoreDeploymentLib.sol +7 -1
- package/src/REVDeployer.sol +63 -47
- package/src/REVLoans.sol +51 -15
- package/src/interfaces/IREVDeployer.sol +0 -1
- package/src/structs/REV721TiersHookFlags.sol +1 -0
- package/src/structs/REVAutoIssuance.sol +1 -0
- package/src/structs/REVBaseline721HookConfig.sol +1 -0
- package/src/structs/REVConfig.sol +1 -0
- package/src/structs/REVCroptopAllowedPost.sol +1 -0
- package/src/structs/REVDeploy721TiersHookConfig.sol +1 -0
- package/src/structs/REVDescription.sol +1 -0
- package/src/structs/REVLoan.sol +1 -0
- package/src/structs/REVLoanSource.sol +1 -0
- package/src/structs/REVStageConfig.sol +1 -0
- package/src/structs/REVSuckerDeploymentConfig.sol +1 -0
- package/test/REV.integrations.t.sol +132 -12
- package/test/REVAutoIssuanceFuzz.t.sol +23 -3
- package/test/REVDeployerRegressions.t.sol +35 -4
- package/test/REVInvincibility.t.sol +58 -8
- package/test/REVInvincibilityHandler.sol +29 -0
- package/test/REVLifecycle.t.sol +28 -3
- package/test/REVLoans.invariants.t.sol +52 -5
- package/test/REVLoansAttacks.t.sol +43 -5
- package/test/REVLoansFeeRecovery.t.sol +50 -11
- package/test/REVLoansFindings.t.sol +27 -3
- package/test/REVLoansRegressions.t.sol +25 -3
- package/test/REVLoansSourceFeeRecovery.t.sol +491 -0
- package/test/REVLoansSourced.t.sol +56 -7
- package/test/REVLoansUnSourced.t.sol +49 -5
- package/test/TestBurnHeldTokens.t.sol +32 -5
- package/test/TestCEIPattern.t.sol +26 -2
- package/test/TestCashOutCallerValidation.t.sol +30 -4
- package/test/TestConversionDocumentation.t.sol +26 -5
- package/test/TestCrossCurrencyReclaim.t.sol +584 -0
- package/test/TestCrossSourceReallocation.t.sol +26 -2
- package/test/TestERC2771MetaTx.t.sol +557 -0
- package/test/TestEmptyBuybackSpecs.t.sol +23 -3
- package/test/TestFlashLoanSurplus.t.sol +28 -3
- package/test/TestHookArrayOOB.t.sol +24 -4
- package/test/TestLiquidationBehavior.t.sol +26 -3
- package/test/TestLoanSourceRotation.t.sol +525 -0
- package/test/TestLongTailEconomics.t.sol +651 -0
- package/test/TestLowFindings.t.sol +65 -2
- package/test/TestMixedFixes.t.sol +28 -3
- package/test/TestPermit2Signatures.t.sol +657 -0
- package/test/TestReallocationSandwich.t.sol +384 -0
- package/test/TestRevnetRegressions.t.sol +324 -0
- package/test/TestSplitWeightAdjustment.t.sol +24 -2
- package/test/TestSplitWeightE2E.t.sol +29 -2
- package/test/TestSplitWeightFork.t.sol +46 -7
- package/test/TestStageTransitionBorrowable.t.sol +24 -2
- package/test/TestSwapTerminalPermission.t.sol +23 -3
- package/test/TestUint112Overflow.t.sol +28 -2
- package/test/TestZeroRepayment.t.sol +26 -2
- package/test/fork/ForkTestBase.sol +46 -3
- package/test/fork/TestCashOutFork.t.sol +1 -1
- package/test/fork/TestLoanBorrowFork.t.sol +1 -0
- package/test/fork/TestLoanCrossRulesetFork.t.sol +3 -1
- package/test/fork/TestLoanLiquidationFork.t.sol +1 -0
- package/test/fork/TestLoanReallocateFork.t.sol +1 -0
- package/test/fork/TestLoanRepayFork.t.sol +1 -0
- package/test/fork/TestLoanTransferFork.t.sol +133 -0
- package/test/fork/TestSplitWeightFork.t.sol +3 -0
- package/test/helpers/REVEmpty721Config.sol +1 -0
- package/test/mock/MockBuybackDataHook.sol +1 -0
- package/test/regression/TestBurnPermissionRequired.t.sol +267 -0
- package/test/regression/TestCrossRevnetLiquidation.t.sol +228 -0
- package/test/regression/TestCumulativeLoanCounter.t.sol +27 -4
- package/test/regression/TestLiquidateGapHandling.t.sol +29 -4
- package/test/regression/TestZeroPriceFeed.t.sol +396 -0
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
pragma solidity 0.8.26;
|
|
3
3
|
|
|
4
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
4
5
|
import "forge-std/Test.sol";
|
|
6
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
5
7
|
import /* {*} from */ "@bananapus/core-v6/test/helpers/TestBaseWorkflow.sol";
|
|
6
|
-
import /* {*} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
8
|
+
// import /* {*} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
9
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
7
10
|
import /* {*} from */ "./../src/REVDeployer.sol";
|
|
11
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
8
12
|
import "@croptop/core-v6/src/CTPublisher.sol";
|
|
9
13
|
import {MockBuybackDataHook} from "./mock/MockBuybackDataHook.sol";
|
|
10
14
|
|
|
15
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
11
16
|
import "@bananapus/core-v6/script/helpers/CoreDeploymentLib.sol";
|
|
17
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
12
18
|
import "@bananapus/721-hook-v6/script/helpers/Hook721DeploymentLib.sol";
|
|
19
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
13
20
|
import "@bananapus/suckers-v6/script/helpers/SuckerDeploymentLib.sol";
|
|
21
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
14
22
|
import "@croptop/core-v6/script/helpers/CroptopDeploymentLib.sol";
|
|
23
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
15
24
|
import "@bananapus/router-terminal-v6/script/helpers/RouterTerminalDeploymentLib.sol";
|
|
16
25
|
import {JBConstants} from "@bananapus/core-v6/src/libraries/JBConstants.sol";
|
|
17
26
|
import {JBAccountingContext} from "@bananapus/core-v6/src/structs/JBAccountingContext.sol";
|
|
@@ -31,7 +40,6 @@ import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStor
|
|
|
31
40
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
32
41
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
33
42
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
34
|
-
import {REVCroptopAllowedPost} from "../src/structs/REVCroptopAllowedPost.sol";
|
|
35
43
|
|
|
36
44
|
struct FeeProjectConfig {
|
|
37
45
|
REVConfig configuration;
|
|
@@ -40,23 +48,38 @@ struct FeeProjectConfig {
|
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
contract TestLowFindings is TestBaseWorkflow {
|
|
51
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
43
52
|
bytes32 REV_DEPLOYER_SALT = "REVDeployer";
|
|
53
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
44
54
|
bytes32 ERC20_SALT = "REV_TOKEN";
|
|
45
55
|
|
|
56
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
46
57
|
REVDeployer REV_DEPLOYER;
|
|
58
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
47
59
|
JB721TiersHook EXAMPLE_HOOK;
|
|
60
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
48
61
|
IJB721TiersHookDeployer HOOK_DEPLOYER;
|
|
62
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
49
63
|
IJB721TiersHookStore HOOK_STORE;
|
|
64
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
50
65
|
IJBAddressRegistry ADDRESS_REGISTRY;
|
|
66
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
51
67
|
IREVLoans LOANS_CONTRACT;
|
|
68
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
52
69
|
MockERC20 TOKEN;
|
|
70
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
53
71
|
IJBSuckerRegistry SUCKER_REGISTRY;
|
|
72
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
54
73
|
CTPublisher PUBLISHER;
|
|
74
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
55
75
|
MockBuybackDataHook MOCK_BUYBACK;
|
|
56
76
|
|
|
77
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
57
78
|
uint256 FEE_PROJECT_ID;
|
|
79
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
58
80
|
uint256 REVNET_ID;
|
|
59
81
|
|
|
82
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
60
83
|
address USER = makeAddr("user");
|
|
61
84
|
|
|
62
85
|
address private constant TRUSTED_FORWARDER = 0xB2b5841DBeF766d4b521221732F9B618fCf34A87;
|
|
@@ -86,6 +109,7 @@ contract TestLowFindings is TestBaseWorkflow {
|
|
|
86
109
|
autoIssuances: new REVAutoIssuance[](0),
|
|
87
110
|
splitPercent: 2000,
|
|
88
111
|
splits: splits,
|
|
112
|
+
// forge-lint: disable-next-line(unsafe-typecast)
|
|
89
113
|
initialIssuance: uint112(1000 * decimalMultiplier),
|
|
90
114
|
issuanceCutFrequency: 90 days,
|
|
91
115
|
issuanceCutPercent: JBConstants.MAX_WEIGHT_CUT_PERCENT / 2,
|
|
@@ -94,6 +118,7 @@ contract TestLowFindings is TestBaseWorkflow {
|
|
|
94
118
|
});
|
|
95
119
|
|
|
96
120
|
REVConfig memory revnetConfiguration = REVConfig({
|
|
121
|
+
// forge-lint: disable-next-line(named-struct-fields)
|
|
97
122
|
description: REVDescription("Revnet", "$REV", "ipfs://test", ERC20_SALT),
|
|
98
123
|
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
99
124
|
splitOperator: multisig(),
|
|
@@ -138,6 +163,7 @@ contract TestLowFindings is TestBaseWorkflow {
|
|
|
138
163
|
autoIssuances: new REVAutoIssuance[](0),
|
|
139
164
|
splitPercent: 2000,
|
|
140
165
|
splits: splits,
|
|
166
|
+
// forge-lint: disable-next-line(unsafe-typecast)
|
|
141
167
|
initialIssuance: uint112(1000 * decimalMultiplier),
|
|
142
168
|
issuanceCutFrequency: 0,
|
|
143
169
|
issuanceCutPercent: 0,
|
|
@@ -162,6 +188,7 @@ contract TestLowFindings is TestBaseWorkflow {
|
|
|
162
188
|
loanSources[0] = REVLoanSource({token: JBConstants.NATIVE_TOKEN, terminal: jbMultiTerminal()});
|
|
163
189
|
|
|
164
190
|
REVConfig memory revnetConfiguration = REVConfig({
|
|
191
|
+
// forge-lint: disable-next-line(named-struct-fields)
|
|
165
192
|
description: REVDescription("TwoStage", "$TWO", "ipfs://test", "TWO_TOKEN"),
|
|
166
193
|
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
167
194
|
splitOperator: multisig(),
|
|
@@ -206,6 +233,7 @@ contract TestLowFindings is TestBaseWorkflow {
|
|
|
206
233
|
autoIssuances: new REVAutoIssuance[](0),
|
|
207
234
|
splitPercent: 2000,
|
|
208
235
|
splits: splits,
|
|
236
|
+
// forge-lint: disable-next-line(unsafe-typecast)
|
|
209
237
|
initialIssuance: uint112(1000 * decimalMultiplier),
|
|
210
238
|
issuanceCutFrequency: 0,
|
|
211
239
|
issuanceCutPercent: 0,
|
|
@@ -217,6 +245,7 @@ contract TestLowFindings is TestBaseWorkflow {
|
|
|
217
245
|
loanSources[0] = REVLoanSource({token: JBConstants.NATIVE_TOKEN, terminal: jbMultiTerminal()});
|
|
218
246
|
|
|
219
247
|
REVConfig memory revnetConfiguration = REVConfig({
|
|
248
|
+
// forge-lint: disable-next-line(named-struct-fields)
|
|
220
249
|
description: REVDescription("Single", "$SGL", "ipfs://test", "SGL_TOKEN"),
|
|
221
250
|
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
222
251
|
splitOperator: multisig(),
|
|
@@ -550,6 +579,7 @@ contract TestLowFindings is TestBaseWorkflow {
|
|
|
550
579
|
|
|
551
580
|
// Increase surplus WITHOUT minting new tokens — makes existing collateral worth more.
|
|
552
581
|
// This allows reallocating collateral since borrowable(reduced collateral) > loan.amount.
|
|
582
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
553
583
|
address DONOR = makeAddr("donor");
|
|
554
584
|
vm.deal(DONOR, 100 ether);
|
|
555
585
|
vm.prank(DONOR);
|
|
@@ -578,4 +608,37 @@ contract TestLowFindings is TestBaseWorkflow {
|
|
|
578
608
|
assertTrue(newLoanId != loanId, "New loan should have different ID");
|
|
579
609
|
assertTrue(newLoanId != reallocatedLoanId, "New loan should differ from reallocated loan");
|
|
580
610
|
}
|
|
611
|
+
|
|
612
|
+
/// @notice Borrowing with a collateral count so small that the bonding curve rounds the borrow amount to zero
|
|
613
|
+
/// should revert with `REVLoans_ZeroBorrowAmount`.
|
|
614
|
+
function test_borrowFrom_revertsOnZeroBorrowAmount() public {
|
|
615
|
+
uint256 revnetId = _deploySingleStageRevnet();
|
|
616
|
+
|
|
617
|
+
// Pay ETH into revnet to create surplus and get tokens.
|
|
618
|
+
vm.prank(USER);
|
|
619
|
+
uint256 tokens =
|
|
620
|
+
jbMultiTerminal().pay{value: 10 ether}(revnetId, JBConstants.NATIVE_TOKEN, 10 ether, USER, 0, "", "");
|
|
621
|
+
assertGt(tokens, 0, "Should have received tokens");
|
|
622
|
+
|
|
623
|
+
// Confirm that 1 wei of collateral produces a zero borrowable amount.
|
|
624
|
+
// With surplus ~10e18 and totalSupply ~10_000e18, mulDiv(10e18, 1, 10_000e18) rounds to 0.
|
|
625
|
+
uint256 borrowable =
|
|
626
|
+
LOANS_CONTRACT.borrowableAmountFrom(revnetId, 1, 18, uint32(uint160(JBConstants.NATIVE_TOKEN)));
|
|
627
|
+
assertEq(borrowable, 0, "Borrowable amount for 1 wei of collateral should be 0");
|
|
628
|
+
|
|
629
|
+
// Mock the BURN permission (permission ID 11) for the loans contract.
|
|
630
|
+
mockExpect(
|
|
631
|
+
address(jbPermissions()),
|
|
632
|
+
abi.encodeCall(IJBPermissions.hasPermission, (address(LOANS_CONTRACT), USER, revnetId, 11, true, true)),
|
|
633
|
+
abi.encode(true)
|
|
634
|
+
);
|
|
635
|
+
|
|
636
|
+
REVLoanSource memory source = REVLoanSource({token: JBConstants.NATIVE_TOKEN, terminal: jbMultiTerminal()});
|
|
637
|
+
uint256 minPrepaid = LOANS_CONTRACT.MIN_PREPAID_FEE_PERCENT();
|
|
638
|
+
|
|
639
|
+
// Attempt to borrow with 1 wei of collateral -- bonding curve returns 0, should revert.
|
|
640
|
+
vm.prank(USER);
|
|
641
|
+
vm.expectRevert(REVLoans.REVLoans_ZeroBorrowAmount.selector);
|
|
642
|
+
LOANS_CONTRACT.borrowFrom(revnetId, source, 0, 1, payable(USER), minPrepaid);
|
|
643
|
+
}
|
|
581
644
|
}
|
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
pragma solidity 0.8.26;
|
|
3
3
|
|
|
4
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
4
5
|
import "forge-std/Test.sol";
|
|
6
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
5
7
|
import /* {*} from */ "@bananapus/core-v6/test/helpers/TestBaseWorkflow.sol";
|
|
6
|
-
import /* {*} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
8
|
+
// import /* {*} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
9
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
7
10
|
import /* {*} from */ "./../src/REVDeployer.sol";
|
|
11
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
8
12
|
import "@croptop/core-v6/src/CTPublisher.sol";
|
|
9
13
|
import {MockBuybackDataHook} from "./mock/MockBuybackDataHook.sol";
|
|
14
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
10
15
|
import "@bananapus/core-v6/script/helpers/CoreDeploymentLib.sol";
|
|
16
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
11
17
|
import "@bananapus/721-hook-v6/script/helpers/Hook721DeploymentLib.sol";
|
|
18
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
12
19
|
import "@bananapus/suckers-v6/script/helpers/SuckerDeploymentLib.sol";
|
|
20
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
13
21
|
import "@croptop/core-v6/script/helpers/CroptopDeploymentLib.sol";
|
|
22
|
+
// forge-lint: disable-next-line(unaliased-plain-import)
|
|
14
23
|
import "@bananapus/router-terminal-v6/script/helpers/RouterTerminalDeploymentLib.sol";
|
|
15
24
|
import {JBConstants} from "@bananapus/core-v6/src/libraries/JBConstants.sol";
|
|
16
25
|
import {JBAccountingContext} from "@bananapus/core-v6/src/structs/JBAccountingContext.sol";
|
|
@@ -21,7 +30,6 @@ import {REVLoan} from "../src/structs/REVLoan.sol";
|
|
|
21
30
|
import {REVStageConfig, REVAutoIssuance} from "../src/structs/REVStageConfig.sol";
|
|
22
31
|
import {REVLoanSource} from "../src/structs/REVLoanSource.sol";
|
|
23
32
|
import {REVDescription} from "../src/structs/REVDescription.sol";
|
|
24
|
-
import {IREVLoans} from "./../src/interfaces/IREVLoans.sol";
|
|
25
33
|
import {JBSuckerDeployerConfig} from "@bananapus/suckers-v6/src/structs/JBSuckerDeployerConfig.sol";
|
|
26
34
|
import {JBSuckerRegistry} from "@bananapus/suckers-v6/src/JBSuckerRegistry.sol";
|
|
27
35
|
import {JB721TiersHookDeployer} from "@bananapus/721-hook-v6/src/JB721TiersHookDeployer.sol";
|
|
@@ -30,26 +38,39 @@ import {JB721TiersHookStore} from "@bananapus/721-hook-v6/src/JB721TiersHookStor
|
|
|
30
38
|
import {JBAddressRegistry} from "@bananapus/address-registry-v6/src/JBAddressRegistry.sol";
|
|
31
39
|
import {IJBAddressRegistry} from "@bananapus/address-registry-v6/src/interfaces/IJBAddressRegistry.sol";
|
|
32
40
|
import {REVEmpty721Config} from "./helpers/REVEmpty721Config.sol";
|
|
33
|
-
import {REVCroptopAllowedPost} from "../src/structs/REVCroptopAllowedPost.sol";
|
|
34
41
|
|
|
35
42
|
/// @notice Tests for PR #32: liquidation boundary, reallocate msg.value, and decimal normalization fixes.
|
|
36
43
|
contract TestMixedFixes is TestBaseWorkflow {
|
|
44
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
37
45
|
bytes32 REV_DEPLOYER_SALT = "REVDeployer";
|
|
38
46
|
|
|
47
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
39
48
|
REVDeployer REV_DEPLOYER;
|
|
49
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
40
50
|
JB721TiersHook EXAMPLE_HOOK;
|
|
51
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
41
52
|
IJB721TiersHookDeployer HOOK_DEPLOYER;
|
|
53
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
42
54
|
IJB721TiersHookStore HOOK_STORE;
|
|
55
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
43
56
|
IJBAddressRegistry ADDRESS_REGISTRY;
|
|
57
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
44
58
|
REVLoans LOANS_CONTRACT;
|
|
59
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
45
60
|
MockERC20 TOKEN;
|
|
61
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
46
62
|
IJBSuckerRegistry SUCKER_REGISTRY;
|
|
63
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
47
64
|
CTPublisher PUBLISHER;
|
|
65
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
48
66
|
MockBuybackDataHook MOCK_BUYBACK;
|
|
49
67
|
|
|
68
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
50
69
|
uint256 FEE_PROJECT_ID;
|
|
70
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
51
71
|
uint256 REVNET_ID;
|
|
52
72
|
|
|
73
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
53
74
|
address USER = makeAddr("user");
|
|
54
75
|
|
|
55
76
|
address private constant TRUSTED_FORWARDER = 0xB2b5841DBeF766d4b521221732F9B618fCf34A87;
|
|
@@ -122,6 +143,7 @@ contract TestMixedFixes is TestBaseWorkflow {
|
|
|
122
143
|
extraMetadata: 0
|
|
123
144
|
});
|
|
124
145
|
REVConfig memory cfg = REVConfig({
|
|
146
|
+
// forge-lint: disable-next-line(named-struct-fields)
|
|
125
147
|
description: REVDescription("Revnet", "$REV", "ipfs://test", "REV_TOKEN"),
|
|
126
148
|
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
127
149
|
splitOperator: multisig(),
|
|
@@ -168,6 +190,7 @@ contract TestMixedFixes is TestBaseWorkflow {
|
|
|
168
190
|
REVLoanSource[] memory ls = new REVLoanSource[](1);
|
|
169
191
|
ls[0] = REVLoanSource({token: JBConstants.NATIVE_TOKEN, terminal: jbMultiTerminal()});
|
|
170
192
|
REVConfig memory cfg = REVConfig({
|
|
193
|
+
// forge-lint: disable-next-line(named-struct-fields)
|
|
171
194
|
description: REVDescription("NANA", "$NANA", "ipfs://test2", "NANA_TOKEN"),
|
|
172
195
|
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
173
196
|
splitOperator: multisig(),
|
|
@@ -312,6 +335,7 @@ contract TestMixedFixes is TestBaseWorkflow {
|
|
|
312
335
|
|
|
313
336
|
// ==================== Mixed-Decimal Normalization Tests ====================
|
|
314
337
|
|
|
338
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
315
339
|
uint256 MIXED_REVNET_ID;
|
|
316
340
|
|
|
317
341
|
/// @notice Deploy a revnet with BOTH ETH (18 dec) and TOKEN (6 dec) as loan sources.
|
|
@@ -345,6 +369,7 @@ contract TestMixedFixes is TestBaseWorkflow {
|
|
|
345
369
|
ls[0] = REVLoanSource({token: JBConstants.NATIVE_TOKEN, terminal: jbMultiTerminal()});
|
|
346
370
|
ls[1] = REVLoanSource({token: address(TOKEN), terminal: jbMultiTerminal()});
|
|
347
371
|
REVConfig memory cfg = REVConfig({
|
|
372
|
+
// forge-lint: disable-next-line(named-struct-fields)
|
|
348
373
|
description: REVDescription("Mixed", "$MIX", "ipfs://mix", "MIX_TOKEN"),
|
|
349
374
|
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
350
375
|
splitOperator: multisig(),
|