@layerzerolabs/utils-upgradeable-evm-contracts 1.2.9 → 1.2.10
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/.turbo/turbo-lint.log +232 -228
- package/.turbo/turbo-test.log +730 -769
- package/package.json +4 -4
- package/test/AccessControl2StepUpgradeable.t.sol +115 -111
- package/test/AllowlistBaseUpgradeable.t.sol +10 -15
- package/test/AllowlistRBACUpgradeable.t.sol +20 -16
- package/test/FeeConfigBaseUpgradeable.t.sol +68 -70
- package/test/FeeConfigRBACUpgradeable.t.sol +13 -10
- package/test/FeeHandlerBaseUpgradeable.t.sol +22 -28
- package/test/FeeHandlerRBACUpgradeable.t.sol +12 -9
- package/test/PauseBaseUpgradeable.t.sol +72 -85
- package/test/PauseByIDBaseUpgradeable.t.sol +84 -94
- package/test/PauseByIDRBACUpgradeable.t.sol +101 -115
- package/test/PauseRBACUpgradeable.t.sol +74 -106
- package/test/RateLimiterBaseUpgradeable.t.sol +28 -24
- package/test/RateLimiterRBACUpgradeable.t.sol +22 -12
- package/test/RateLimiterRBACUpgradeableInvariant.t.sol +10 -10
|
@@ -6,9 +6,7 @@ import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/trans
|
|
|
6
6
|
import { Test } from "forge-std/Test.sol";
|
|
7
7
|
import { FeeConfigBaseUpgradeable } from "./../contracts/fee-config/FeeConfigBaseUpgradeable.sol";
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
contract FeeConfigBaseUpgradeableMock is FeeConfigBaseUpgradeable {
|
|
9
|
+
contract FeeConfigBaseUpgradeableHarness is FeeConfigBaseUpgradeable {
|
|
12
10
|
constructor() {
|
|
13
11
|
_disableInitializers();
|
|
14
12
|
}
|
|
@@ -25,36 +23,36 @@ contract FeeConfigBaseUpgradeableMock is FeeConfigBaseUpgradeable {
|
|
|
25
23
|
}
|
|
26
24
|
|
|
27
25
|
contract FeeConfigBaseUpgradeableTest is Test {
|
|
28
|
-
|
|
26
|
+
IFeeConfig public feeConfig;
|
|
29
27
|
|
|
30
28
|
uint32 constant EID_1 = 1;
|
|
31
29
|
uint32 constant EID_2 = 2;
|
|
32
30
|
uint16 constant BPS_DENOMINATOR = 10000;
|
|
33
31
|
|
|
34
|
-
function
|
|
35
|
-
|
|
32
|
+
function _deployFeeConfig() internal virtual returns (IFeeConfig) {
|
|
33
|
+
FeeConfigBaseUpgradeableHarness impl = new FeeConfigBaseUpgradeableHarness();
|
|
36
34
|
TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy(
|
|
37
35
|
address(impl),
|
|
38
36
|
address(this),
|
|
39
|
-
abi.encodeWithSelector(
|
|
37
|
+
abi.encodeWithSelector(FeeConfigBaseUpgradeableHarness.initialize.selector)
|
|
40
38
|
);
|
|
41
39
|
|
|
42
|
-
return
|
|
40
|
+
return IFeeConfig(address(proxy));
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
function setUp() public virtual {
|
|
46
|
-
|
|
44
|
+
feeConfig = _deployFeeConfig();
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
function test_setDefaultFeeBps_Fuzz(uint16 _feeBps) public {
|
|
50
48
|
if (_feeBps > BPS_DENOMINATOR) {
|
|
51
49
|
vm.expectRevert(abi.encodeWithSelector(IFeeConfig.InvalidBps.selector, _feeBps));
|
|
52
|
-
|
|
50
|
+
feeConfig.setDefaultFeeBps(_feeBps);
|
|
53
51
|
} else {
|
|
54
52
|
vm.expectEmit(false, false, false, true);
|
|
55
53
|
emit IFeeConfig.DefaultFeeBpsSet(_feeBps);
|
|
56
|
-
|
|
57
|
-
assertEq(
|
|
54
|
+
feeConfig.setDefaultFeeBps(_feeBps);
|
|
55
|
+
assertEq(feeConfig.defaultFeeBps(), _feeBps);
|
|
58
56
|
}
|
|
59
57
|
}
|
|
60
58
|
|
|
@@ -64,22 +62,22 @@ contract FeeConfigBaseUpgradeableTest is Test {
|
|
|
64
62
|
|
|
65
63
|
function test_setFeeBps_Fuzz(uint16 _defaultFeeBps, uint32 _dstEid, uint16 _feeBps, bool _enabled) public {
|
|
66
64
|
_defaultFeeBps = uint16(bound(_defaultFeeBps, 0, BPS_DENOMINATOR));
|
|
67
|
-
|
|
68
|
-
assertEq(
|
|
65
|
+
feeConfig.setDefaultFeeBps(_defaultFeeBps);
|
|
66
|
+
assertEq(feeConfig.defaultFeeBps(), _defaultFeeBps);
|
|
69
67
|
|
|
70
68
|
if (_feeBps > BPS_DENOMINATOR) {
|
|
71
69
|
vm.expectRevert(abi.encodeWithSelector(IFeeConfig.InvalidBps.selector, _feeBps));
|
|
72
|
-
|
|
70
|
+
feeConfig.setFeeBps(_dstEid, _feeBps, _enabled);
|
|
73
71
|
} else {
|
|
74
72
|
vm.expectEmit(false, false, false, true);
|
|
75
73
|
emit IFeeConfig.FeeBpsSet(_dstEid, _feeBps, _enabled);
|
|
76
|
-
|
|
74
|
+
feeConfig.setFeeBps(_dstEid, _feeBps, _enabled);
|
|
77
75
|
|
|
78
|
-
IFeeConfig.FeeConfig memory config =
|
|
76
|
+
IFeeConfig.FeeConfig memory config = feeConfig.feeBps(_dstEid);
|
|
79
77
|
assertEq(config.feeBps, _feeBps);
|
|
80
78
|
assertEq(config.enabled, _enabled);
|
|
81
79
|
|
|
82
|
-
uint256 fee =
|
|
80
|
+
uint256 fee = feeConfig.getFee(_dstEid, 10000);
|
|
83
81
|
uint16 expectedBps = _enabled ? _feeBps : _defaultFeeBps;
|
|
84
82
|
assertEq(fee, expectedBps);
|
|
85
83
|
}
|
|
@@ -91,127 +89,127 @@ contract FeeConfigBaseUpgradeableTest is Test {
|
|
|
91
89
|
|
|
92
90
|
function test_getFee_Fuzz(uint16 _defaultFeeBps, uint32 _dstEid, uint240 _amount) public {
|
|
93
91
|
_defaultFeeBps = uint16(bound(_defaultFeeBps, 0, BPS_DENOMINATOR));
|
|
94
|
-
|
|
92
|
+
feeConfig.setDefaultFeeBps(_defaultFeeBps);
|
|
95
93
|
|
|
96
94
|
uint256 expectedFee = _defaultFeeBps == 0 ? 0 : (uint256(_amount) * _defaultFeeBps) / BPS_DENOMINATOR;
|
|
97
|
-
assertEq(
|
|
95
|
+
assertEq(feeConfig.getFee(_dstEid, _amount), expectedFee);
|
|
98
96
|
}
|
|
99
97
|
|
|
100
98
|
function test_setDefaultFeeBps_RevertInvalid() public {
|
|
101
99
|
vm.expectRevert(abi.encodeWithSelector(IFeeConfig.InvalidBps.selector, 10001));
|
|
102
|
-
|
|
100
|
+
feeConfig.setDefaultFeeBps(10001);
|
|
103
101
|
}
|
|
104
102
|
|
|
105
103
|
function test_setFeeBps_RevertInvalid() public {
|
|
106
104
|
vm.expectRevert(abi.encodeWithSelector(IFeeConfig.InvalidBps.selector, 10001));
|
|
107
|
-
|
|
105
|
+
feeConfig.setFeeBps(EID_1, 10001, true);
|
|
108
106
|
}
|
|
109
107
|
|
|
110
108
|
function test_getFee_Default() public {
|
|
111
|
-
|
|
109
|
+
feeConfig.setDefaultFeeBps(500);
|
|
112
110
|
uint256 amount = 1000;
|
|
113
111
|
uint256 expectedFee = 50;
|
|
114
|
-
assertEq(
|
|
112
|
+
assertEq(feeConfig.getFee(EID_1, amount), expectedFee);
|
|
115
113
|
}
|
|
116
114
|
|
|
117
115
|
function test_getFee_Specific() public {
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
feeConfig.setDefaultFeeBps(500);
|
|
117
|
+
feeConfig.setFeeBps(EID_1, 200, true);
|
|
120
118
|
uint256 amount = 1000;
|
|
121
119
|
uint256 expectedFee = 20;
|
|
122
|
-
assertEq(
|
|
120
|
+
assertEq(feeConfig.getFee(EID_1, amount), expectedFee);
|
|
123
121
|
}
|
|
124
122
|
|
|
125
123
|
function test_getFee_SpecificDisabled() public {
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
feeConfig.setDefaultFeeBps(500);
|
|
125
|
+
feeConfig.setFeeBps(EID_1, 200, false);
|
|
128
126
|
uint256 amount = 1000;
|
|
129
127
|
uint256 expectedFee = 50;
|
|
130
|
-
assertEq(
|
|
128
|
+
assertEq(feeConfig.getFee(EID_1, amount), expectedFee);
|
|
131
129
|
}
|
|
132
130
|
|
|
133
131
|
function test_getFee_BoundaryConditions() public {
|
|
134
|
-
|
|
135
|
-
assertEq(
|
|
136
|
-
|
|
137
|
-
assertEq(
|
|
138
|
-
|
|
139
|
-
assertEq(
|
|
132
|
+
feeConfig.setDefaultFeeBps(500);
|
|
133
|
+
assertEq(feeConfig.getFee(EID_1, 0), 0);
|
|
134
|
+
feeConfig.setFeeBps(EID_1, 10000, true);
|
|
135
|
+
assertEq(feeConfig.getFee(EID_1, 100), 100);
|
|
136
|
+
feeConfig.setFeeBps(EID_1, 0, true);
|
|
137
|
+
assertEq(feeConfig.getFee(EID_1, 1000), 0);
|
|
140
138
|
}
|
|
141
139
|
|
|
142
140
|
function test_getFee_Rounding() public {
|
|
143
|
-
|
|
144
|
-
assertEq(
|
|
145
|
-
assertEq(
|
|
141
|
+
feeConfig.setDefaultFeeBps(1000);
|
|
142
|
+
assertEq(feeConfig.getFee(EID_1, 15), 1);
|
|
143
|
+
assertEq(feeConfig.getFee(EID_1, 9), 0);
|
|
146
144
|
}
|
|
147
145
|
|
|
148
146
|
// ============ getAmountBeforeFee Tests ============
|
|
149
147
|
|
|
150
148
|
function test_getAmountBeforeFee_ZeroBps() public view {
|
|
151
|
-
assertEq(
|
|
152
|
-
assertEq(
|
|
153
|
-
assertEq(
|
|
149
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 0), 0);
|
|
150
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 1000), 1000);
|
|
151
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, type(uint256).max), type(uint256).max);
|
|
154
152
|
}
|
|
155
153
|
|
|
156
154
|
function test_getAmountBeforeFee_MaxBps() public {
|
|
157
|
-
|
|
158
|
-
assertEq(
|
|
159
|
-
assertEq(
|
|
160
|
-
assertEq(
|
|
155
|
+
feeConfig.setDefaultFeeBps(BPS_DENOMINATOR);
|
|
156
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 0), 0);
|
|
157
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 1000), 0);
|
|
158
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, type(uint256).max), 0);
|
|
161
159
|
}
|
|
162
160
|
|
|
163
161
|
function test_getAmountBeforeFee_Default() public {
|
|
164
|
-
|
|
165
|
-
assertEq(
|
|
166
|
-
assertEq(
|
|
162
|
+
feeConfig.setDefaultFeeBps(500);
|
|
163
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 950), 1000);
|
|
164
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_2, 950), 1000);
|
|
167
165
|
}
|
|
168
166
|
|
|
169
167
|
function test_getAmountBeforeFee_Specific() public {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
assertEq(
|
|
173
|
-
assertEq(
|
|
168
|
+
feeConfig.setDefaultFeeBps(500);
|
|
169
|
+
feeConfig.setFeeBps(EID_1, 200, true);
|
|
170
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 980), 1000);
|
|
171
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_2, 950), 1000);
|
|
174
172
|
}
|
|
175
173
|
|
|
176
174
|
function test_getAmountBeforeFee_SpecificDisabled() public {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
assertEq(
|
|
175
|
+
feeConfig.setDefaultFeeBps(500);
|
|
176
|
+
feeConfig.setFeeBps(EID_1, 200, false);
|
|
177
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 950), 1000);
|
|
180
178
|
}
|
|
181
179
|
|
|
182
180
|
function test_getAmountBeforeFee_ZeroAmount() public {
|
|
183
|
-
|
|
184
|
-
assertEq(
|
|
181
|
+
feeConfig.setDefaultFeeBps(500);
|
|
182
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 0), 0);
|
|
185
183
|
}
|
|
186
184
|
|
|
187
185
|
function test_getAmountBeforeFee_Rounding() public {
|
|
188
|
-
|
|
186
|
+
feeConfig.setDefaultFeeBps(1000);
|
|
189
187
|
|
|
190
188
|
// (15 * 10000) / 9000 = 16, getFee(16) = 1, 16-1 = 15.
|
|
191
|
-
assertEq(
|
|
189
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 15), 16);
|
|
192
190
|
// (9 * 10000) / 9000 = 10, getFee(10) = 1, 10-1 = 9.
|
|
193
|
-
assertEq(
|
|
191
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 9), 10);
|
|
194
192
|
// (1 * 10000) / 9000 = 1, getFee(1) = 0, 1-0 = 1.
|
|
195
|
-
assertEq(
|
|
193
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 1), 1);
|
|
196
194
|
}
|
|
197
195
|
|
|
198
196
|
function test_getAmountBeforeFee_BoundaryConditions() public {
|
|
199
197
|
// 1 bps (0.01%) — near-zero fee.
|
|
200
|
-
|
|
201
|
-
assertEq(
|
|
202
|
-
assertEq(
|
|
198
|
+
feeConfig.setDefaultFeeBps(1);
|
|
199
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 9999), 10000);
|
|
200
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 1), 1);
|
|
203
201
|
|
|
204
202
|
// 9999 bps (99.99%) — near-total fee.
|
|
205
|
-
|
|
203
|
+
feeConfig.setDefaultFeeBps(9999);
|
|
206
204
|
// (1 * 10000) / 1 = 10000, getFee(10000) = 9999, 10000-9999 = 1.
|
|
207
|
-
assertEq(
|
|
205
|
+
assertEq(feeConfig.getAmountBeforeFee(EID_1, 1), 10000);
|
|
208
206
|
}
|
|
209
207
|
|
|
210
208
|
function test_getAmountBeforeFee_Fuzz(uint16 _feeBps, uint224 _amountAfterFee) public {
|
|
211
209
|
_feeBps = uint16(bound(_feeBps, 0, BPS_DENOMINATOR));
|
|
212
|
-
|
|
210
|
+
feeConfig.setDefaultFeeBps(_feeBps);
|
|
213
211
|
|
|
214
|
-
uint256 amountBefore =
|
|
212
|
+
uint256 amountBefore = feeConfig.getAmountBeforeFee(EID_1, _amountAfterFee);
|
|
215
213
|
|
|
216
214
|
if (_feeBps == BPS_DENOMINATOR) {
|
|
217
215
|
assertEq(amountBefore, 0);
|
|
@@ -219,7 +217,7 @@ contract FeeConfigBaseUpgradeableTest is Test {
|
|
|
219
217
|
assertEq(amountBefore, _amountAfterFee);
|
|
220
218
|
} else {
|
|
221
219
|
// Core inverse invariant: `amountBefore - getFee(amountBefore) == amountAfterFee`.
|
|
222
|
-
uint256 fee =
|
|
220
|
+
uint256 fee = feeConfig.getFee(EID_1, amountBefore);
|
|
223
221
|
assertEq(amountBefore - fee, _amountAfterFee);
|
|
224
222
|
}
|
|
225
223
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
pragma solidity ^0.8.22;
|
|
3
3
|
|
|
4
|
+
import { IFeeConfig } from "@layerzerolabs/utils-evm-contracts/contracts/interfaces/IFeeConfig.sol";
|
|
4
5
|
import { IAccessControl } from "@openzeppelin/contracts/access/IAccessControl.sol";
|
|
5
6
|
import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
|
|
6
7
|
import { FeeConfigRBACUpgradeable } from "./../contracts/fee-config/FeeConfigRBACUpgradeable.sol";
|
|
7
|
-
import { FeeConfigBaseUpgradeableTest
|
|
8
|
+
import { FeeConfigBaseUpgradeableTest } from "./FeeConfigBaseUpgradeable.t.sol";
|
|
8
9
|
|
|
9
|
-
contract
|
|
10
|
+
contract FeeConfigRBACUpgradeableHarness is FeeConfigRBACUpgradeable {
|
|
10
11
|
constructor() {
|
|
11
12
|
_disableInitializers();
|
|
12
13
|
}
|
|
@@ -19,20 +20,22 @@ contract FeeConfigRBACUpgradeableMock is FeeConfigRBACUpgradeable {
|
|
|
19
20
|
|
|
20
21
|
contract FeeConfigRBACUpgradeableTest is FeeConfigBaseUpgradeableTest {
|
|
21
22
|
address alice = makeAddr("alice");
|
|
23
|
+
FeeConfigRBACUpgradeableHarness feeConfigRbac;
|
|
22
24
|
|
|
23
|
-
function
|
|
24
|
-
|
|
25
|
+
function _deployFeeConfig() internal virtual override returns (IFeeConfig) {
|
|
26
|
+
FeeConfigRBACUpgradeableHarness impl = new FeeConfigRBACUpgradeableHarness();
|
|
25
27
|
TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy(
|
|
26
28
|
address(impl),
|
|
27
29
|
address(this),
|
|
28
|
-
abi.encodeWithSelector(
|
|
30
|
+
abi.encodeWithSelector(FeeConfigRBACUpgradeableHarness.initialize.selector, address(this))
|
|
29
31
|
);
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
feeConfigRbac = FeeConfigRBACUpgradeableHarness(address(proxy));
|
|
34
|
+
return IFeeConfig(address(proxy));
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
function test_setDefaultFeeBps_Revert_Unauthorized() public {
|
|
35
|
-
bytes32 feeConfigManagerRole =
|
|
38
|
+
bytes32 feeConfigManagerRole = feeConfigRbac.FEE_CONFIG_MANAGER_ROLE();
|
|
36
39
|
vm.expectRevert(
|
|
37
40
|
abi.encodeWithSelector(
|
|
38
41
|
IAccessControl.AccessControlUnauthorizedAccount.selector,
|
|
@@ -41,11 +44,11 @@ contract FeeConfigRBACUpgradeableTest is FeeConfigBaseUpgradeableTest {
|
|
|
41
44
|
)
|
|
42
45
|
);
|
|
43
46
|
vm.prank(alice);
|
|
44
|
-
|
|
47
|
+
feeConfig.setDefaultFeeBps(100);
|
|
45
48
|
}
|
|
46
49
|
|
|
47
50
|
function test_setFeeBps_Revert_Unauthorized() public {
|
|
48
|
-
bytes32 feeConfigManagerRole =
|
|
51
|
+
bytes32 feeConfigManagerRole = feeConfigRbac.FEE_CONFIG_MANAGER_ROLE();
|
|
49
52
|
vm.expectRevert(
|
|
50
53
|
abi.encodeWithSelector(
|
|
51
54
|
IAccessControl.AccessControlUnauthorizedAccount.selector,
|
|
@@ -54,6 +57,6 @@ contract FeeConfigRBACUpgradeableTest is FeeConfigBaseUpgradeableTest {
|
|
|
54
57
|
)
|
|
55
58
|
);
|
|
56
59
|
vm.prank(alice);
|
|
57
|
-
|
|
60
|
+
feeConfig.setFeeBps(1, 100, true);
|
|
58
61
|
}
|
|
59
62
|
}
|
|
@@ -6,9 +6,7 @@ import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/trans
|
|
|
6
6
|
import { Test } from "forge-std/Test.sol";
|
|
7
7
|
import { FeeHandlerBaseUpgradeable } from "./../contracts/fee-accounting/FeeHandlerBaseUpgradeable.sol";
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
contract FeeHandlerBaseUpgradeableMock is FeeHandlerBaseUpgradeable {
|
|
9
|
+
contract FeeHandlerBaseUpgradeableHarness is FeeHandlerBaseUpgradeable {
|
|
12
10
|
constructor() {
|
|
13
11
|
_disableInitializers();
|
|
14
12
|
}
|
|
@@ -22,39 +20,48 @@ contract FeeHandlerBaseUpgradeableMock is FeeHandlerBaseUpgradeable {
|
|
|
22
20
|
}
|
|
23
21
|
}
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
contract FeeHandlerBaseUpgradeableTest is Test {
|
|
24
|
+
IFeeHandler public feeHandler;
|
|
27
25
|
|
|
28
26
|
address alice = makeAddr("alice");
|
|
29
27
|
address bob = makeAddr("bob");
|
|
30
28
|
|
|
31
|
-
function
|
|
32
|
-
|
|
29
|
+
function _deployFeeHandler() internal virtual returns (IFeeHandler) {
|
|
30
|
+
FeeHandlerBaseUpgradeableHarness impl = new FeeHandlerBaseUpgradeableHarness();
|
|
31
|
+
TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy(
|
|
32
|
+
address(impl),
|
|
33
|
+
address(this),
|
|
34
|
+
abi.encodeWithSelector(FeeHandlerBaseUpgradeableHarness.initialize.selector, alice)
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
return IFeeHandler(address(proxy));
|
|
33
38
|
}
|
|
34
39
|
|
|
35
|
-
function
|
|
40
|
+
function setUp() public virtual {
|
|
41
|
+
feeHandler = _deployFeeHandler();
|
|
42
|
+
}
|
|
36
43
|
|
|
37
44
|
function test_feeDeposit() public view {
|
|
38
|
-
assertEq(
|
|
45
|
+
assertEq(feeHandler.feeDeposit(), alice);
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
function test_setFeeDeposit() public {
|
|
42
|
-
vm.expectEmit(true, true, true, true, address(
|
|
49
|
+
vm.expectEmit(true, true, true, true, address(feeHandler));
|
|
43
50
|
emit IFeeHandler.FeeDepositSet(bob);
|
|
44
|
-
|
|
51
|
+
feeHandler.setFeeDeposit(bob);
|
|
45
52
|
|
|
46
|
-
assertEq(
|
|
53
|
+
assertEq(feeHandler.feeDeposit(), bob);
|
|
47
54
|
}
|
|
48
55
|
|
|
49
56
|
function test_setFeeDeposit_Revert_ZeroAddress() public {
|
|
50
57
|
vm.expectRevert(IFeeHandler.InvalidFeeDeposit.selector);
|
|
51
|
-
|
|
58
|
+
feeHandler.setFeeDeposit(address(0));
|
|
52
59
|
}
|
|
53
60
|
|
|
54
61
|
function test_setFeeDeposit_Fuzz(address _newDeposit) public {
|
|
55
62
|
vm.assume(_newDeposit != address(0));
|
|
56
|
-
|
|
57
|
-
assertEq(
|
|
63
|
+
feeHandler.setFeeDeposit(_newDeposit);
|
|
64
|
+
assertEq(feeHandler.feeDeposit(), _newDeposit);
|
|
58
65
|
}
|
|
59
66
|
|
|
60
67
|
function test_storageHash() public pure {
|
|
@@ -63,16 +70,3 @@ abstract contract FeeHandlerBaseUpgradeableTestCommon is Test {
|
|
|
63
70
|
assertEq(storageHash, 0xe32e0c5f1df3081ca85b86156deac82a46e8fb7b21b412e09f7ccdc5fca29900);
|
|
64
71
|
}
|
|
65
72
|
}
|
|
66
|
-
|
|
67
|
-
contract FeeHandlerBaseUpgradeableTest is FeeHandlerBaseUpgradeableTestCommon {
|
|
68
|
-
function _deployFeeHandlerHelper() internal virtual override returns (IFeeHandlerTestHelper) {
|
|
69
|
-
FeeHandlerBaseUpgradeableMock impl = new FeeHandlerBaseUpgradeableMock();
|
|
70
|
-
TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy(
|
|
71
|
-
address(impl),
|
|
72
|
-
address(this),
|
|
73
|
-
abi.encodeWithSelector(FeeHandlerBaseUpgradeableMock.initialize.selector, alice)
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
return IFeeHandlerTestHelper(address(proxy));
|
|
77
|
-
}
|
|
78
|
-
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
pragma solidity ^0.8.22;
|
|
3
3
|
|
|
4
|
+
import { IFeeHandler } from "@layerzerolabs/utils-evm-contracts/contracts/interfaces/IFeeHandler.sol";
|
|
4
5
|
import { IAccessControl } from "@openzeppelin/contracts/access/IAccessControl.sol";
|
|
5
6
|
import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
|
|
6
7
|
import { FeeHandlerRBACUpgradeable } from "./../contracts/fee-accounting/FeeHandlerRBACUpgradeable.sol";
|
|
7
|
-
import {
|
|
8
|
+
import { FeeHandlerBaseUpgradeableTest } from "./FeeHandlerBaseUpgradeable.t.sol";
|
|
8
9
|
|
|
9
|
-
contract
|
|
10
|
+
contract FeeHandlerRBACUpgradeableHarness is FeeHandlerRBACUpgradeable {
|
|
10
11
|
constructor() {
|
|
11
12
|
_disableInitializers();
|
|
12
13
|
}
|
|
@@ -17,18 +18,20 @@ contract FeeHandlerRBACUpgradeableMock is FeeHandlerRBACUpgradeable {
|
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
contract FeeHandlerRBACUpgradeableTest is
|
|
21
|
+
contract FeeHandlerRBACUpgradeableTest is FeeHandlerBaseUpgradeableTest {
|
|
21
22
|
address charlie = makeAddr("charlie");
|
|
23
|
+
FeeHandlerRBACUpgradeableHarness feeHandlerRbac;
|
|
22
24
|
|
|
23
|
-
function
|
|
24
|
-
|
|
25
|
+
function _deployFeeHandler() internal virtual override returns (IFeeHandler) {
|
|
26
|
+
FeeHandlerRBACUpgradeableHarness impl = new FeeHandlerRBACUpgradeableHarness();
|
|
25
27
|
TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy(
|
|
26
28
|
address(impl),
|
|
27
29
|
address(this),
|
|
28
|
-
abi.encodeWithSelector(
|
|
30
|
+
abi.encodeWithSelector(FeeHandlerRBACUpgradeableHarness.initialize.selector, address(this), alice)
|
|
29
31
|
);
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
feeHandlerRbac = FeeHandlerRBACUpgradeableHarness(address(proxy));
|
|
34
|
+
return IFeeHandler(address(proxy));
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
function test_setFeeDeposit_Revert_Unauthorized() public {
|
|
@@ -36,10 +39,10 @@ contract FeeHandlerRBACUpgradeableTest is FeeHandlerBaseUpgradeableTestCommon {
|
|
|
36
39
|
abi.encodeWithSelector(
|
|
37
40
|
IAccessControl.AccessControlUnauthorizedAccount.selector,
|
|
38
41
|
charlie,
|
|
39
|
-
|
|
42
|
+
feeHandlerRbac.DEFAULT_ADMIN_ROLE()
|
|
40
43
|
)
|
|
41
44
|
);
|
|
42
45
|
vm.prank(charlie);
|
|
43
|
-
|
|
46
|
+
feeHandler.setFeeDeposit(bob);
|
|
44
47
|
}
|
|
45
48
|
}
|