Skip to content

Commit 480e518

Browse files
committed
fix : missing gas tests + small fix
1 parent ffa90f0 commit 480e518

File tree

6 files changed

+271
-37
lines changed

6 files changed

+271
-37
lines changed

snapshots/PositionManager.Operations.json

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
11
{
2+
"AllowancePositionManager: approveWithdraw": "46836",
3+
"AllowancePositionManager: approveWithdrawWithSig": "63047",
24
"AllowancePositionManager: borrowOnBehalfOf": "308793",
3-
"AllowancePositionManager: withdrawOnBehalfOf: full": "123435",
4-
"AllowancePositionManager: withdrawOnBehalfOf: partial": "134093",
5+
"AllowancePositionManager: creditDelegation": "46814",
6+
"AllowancePositionManager: creditDelegationWithSig": "63134",
7+
"AllowancePositionManager: renounceCreditDelegation": "24967",
8+
"AllowancePositionManager: renounceWithdrawAllowance": "24989",
9+
"AllowancePositionManager: withdrawOnBehalfOf: full": "123488",
10+
"AllowancePositionManager: withdrawOnBehalfOf: partial": "134160",
11+
"PositionConfigPositionManager: renounceGlobalPermission": "24423",
12+
"PositionConfigPositionManager: renounceUserDynamicConfigPermission": "24468",
13+
"PositionConfigPositionManager: renounceUserRiskPremiumPermission": "24467",
14+
"PositionConfigPositionManager: renounceUsingAsCollateralPermission": "24490",
15+
"PositionConfigPositionManager: setGlobalPermission": "46607",
16+
"PositionConfigPositionManager: setUserDynamicConfigPermission": "46563",
17+
"PositionConfigPositionManager: setUserRiskPremiumPermission": "46542",
18+
"PositionConfigPositionManager: setUsingAsCollateralOnBehalfOf": "69052",
19+
"PositionConfigPositionManager: setUsingAsCollateralPermission": "46607",
20+
"PositionConfigPositionManager: updateUserDynamicConfigOnBehalfOf": "46765",
21+
"PositionConfigPositionManager: updateUserRiskPremiumOnBehalfOf": "127837",
522
"SupplyRepayPositionManager: repayOnBehalfOf": "167131",
623
"SupplyRepayPositionManager: supplyOnBehalfOf": "135803",
724
"common: setSelfAsUserPositionManagerWithSig": "72588"

src/position-manager/AllowancePositionManager.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ contract AllowancePositionManager is
5959
}
6060

6161
/// @inheritdoc IAllowancePositionManager
62-
function approveCreditDelegation(address spender, uint256 reserveId, uint256 amount) external {
62+
function creditDelegation(address spender, uint256 reserveId, uint256 amount) external {
6363
_updateCreditDelegation(msg.sender, spender, reserveId, amount, true);
6464
}
6565

6666
/// @inheritdoc IAllowancePositionManager
67-
function approveCreditDelegationWithSig(
67+
function creditDelegationWithSig(
6868
EIP712Types.CreditDelegation calldata params,
6969
bytes calldata signature
7070
) external {

src/position-manager/interfaces/IAllowancePositionManager.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ interface IAllowancePositionManager is IPositionManagerBase {
4848
/// @param spender The address of the spender to receive the allowance.
4949
/// @param reserveId The identifier of the reserve.
5050
/// @param amount The amount of allowance.
51-
function approveCreditDelegation(address spender, uint256 reserveId, uint256 amount) external;
51+
function creditDelegation(address spender, uint256 reserveId, uint256 amount) external;
5252

5353
/// @notice Approves a credit delegation allowance for a spender via signature.
5454
/// @param params The structured CreditDelegation parameters.
5555
/// @param signature The signed bytes for the intent.
56-
function approveCreditDelegationWithSig(
56+
function creditDelegationWithSig(
5757
EIP712Types.CreditDelegation calldata params,
5858
bytes calldata signature
5959
) external;

tests/gas/PositionManagers.Operations.gas.t.sol

Lines changed: 232 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,14 @@ contract AllowancePositionManager_Gas_Tests is SpokeBase {
9393
string internal NAMESPACE = 'PositionManager.Operations';
9494

9595
AllowancePositionManager public positionManager;
96+
uint256 public alicePk;
9697

9798
function setUp() public virtual override {
9899
deployFixtures();
99100
initEnvironment();
100101

102+
(alice, alicePk) = makeAddrAndKey('alice');
103+
101104
positionManager = new AllowancePositionManager(address(spoke1));
102105
vm.prank(SPOKE_ADMIN);
103106
spoke1.updatePositionManager(address(positionManager), true);
@@ -132,7 +135,7 @@ contract AllowancePositionManager_Gas_Tests is SpokeBase {
132135
uint256 borrowAmount = 750e18;
133136

134137
vm.prank(alice);
135-
positionManager.approveCreditDelegation(bob, _daiReserveId(spoke1), borrowAmount);
138+
positionManager.creditDelegation(bob, _daiReserveId(spoke1), borrowAmount);
136139

137140
Utils.supplyCollateral(spoke1, _daiReserveId(spoke1), alice, aliceSupplyAmount, alice);
138141
Utils.supplyCollateral(spoke1, _daiReserveId(spoke1), bob, bobSupplyAmount, bob);
@@ -141,4 +144,232 @@ contract AllowancePositionManager_Gas_Tests is SpokeBase {
141144
positionManager.borrowOnBehalfOf(_daiReserveId(spoke1), borrowAmount, alice);
142145
vm.snapshotGasLastCall(NAMESPACE, 'AllowancePositionManager: borrowOnBehalfOf');
143146
}
147+
148+
function test_approveWithdraw() public {
149+
uint256 amount = 100e18;
150+
151+
vm.prank(alice);
152+
positionManager.approveWithdraw(bob, _daiReserveId(spoke1), amount);
153+
vm.snapshotGasLastCall(NAMESPACE, 'AllowancePositionManager: approveWithdraw');
154+
}
155+
156+
function test_approveWithdrawWithSig() public {
157+
uint256 amount = 100e18;
158+
159+
EIP712Types.WithdrawPermit memory p = EIP712Types.WithdrawPermit({
160+
owner: alice,
161+
spender: bob,
162+
reserveId: _daiReserveId(spoke1),
163+
amount: amount,
164+
nonce: positionManager.nonces(alice, _randomNonceKey()),
165+
deadline: _warpBeforeRandomDeadline()
166+
});
167+
p.nonce = _burnRandomNoncesAtKey(positionManager, alice);
168+
bytes32 digest = _typedDataHash(
169+
positionManager,
170+
vm.eip712HashStruct('WithdrawPermit', abi.encode(p))
171+
);
172+
bytes memory signature = _sign(alicePk, digest);
173+
174+
vm.prank(vm.randomAddress());
175+
positionManager.approveWithdrawWithSig(p, signature);
176+
vm.snapshotGasLastCall(NAMESPACE, 'AllowancePositionManager: approveWithdrawWithSig');
177+
}
178+
179+
function test_renounceWithdrawAllowance() public {
180+
uint256 amount = 100e18;
181+
182+
vm.prank(alice);
183+
positionManager.approveWithdraw(bob, _daiReserveId(spoke1), amount);
184+
185+
vm.prank(bob);
186+
positionManager.renounceWithdrawAllowance(alice, _daiReserveId(spoke1));
187+
vm.snapshotGasLastCall(NAMESPACE, 'AllowancePositionManager: renounceWithdrawAllowance');
188+
}
189+
190+
function test_creditDelegation() public {
191+
uint256 amount = 100e18;
192+
193+
vm.prank(alice);
194+
positionManager.creditDelegation(bob, _daiReserveId(spoke1), amount);
195+
vm.snapshotGasLastCall(NAMESPACE, 'AllowancePositionManager: creditDelegation');
196+
}
197+
198+
function test_creditDelegationWithSig() public {
199+
uint256 amount = 100e18;
200+
201+
EIP712Types.CreditDelegation memory p = EIP712Types.CreditDelegation({
202+
owner: alice,
203+
spender: bob,
204+
reserveId: _daiReserveId(spoke1),
205+
amount: amount,
206+
nonce: positionManager.nonces(alice, _randomNonceKey()),
207+
deadline: _warpBeforeRandomDeadline()
208+
});
209+
p.nonce = _burnRandomNoncesAtKey(positionManager, alice);
210+
bytes32 digest = _typedDataHash(
211+
positionManager,
212+
vm.eip712HashStruct('CreditDelegation', abi.encode(p))
213+
);
214+
bytes memory signature = _sign(alicePk, digest);
215+
216+
vm.prank(vm.randomAddress());
217+
positionManager.creditDelegationWithSig(p, signature);
218+
vm.snapshotGasLastCall(NAMESPACE, 'AllowancePositionManager: creditDelegationWithSig');
219+
}
220+
221+
function test_renounceCreditDelegation() public {
222+
uint256 amount = 100e18;
223+
224+
vm.prank(alice);
225+
positionManager.creditDelegation(bob, _daiReserveId(spoke1), amount);
226+
227+
vm.prank(bob);
228+
positionManager.renounceCreditDelegation(alice, _daiReserveId(spoke1));
229+
vm.snapshotGasLastCall(NAMESPACE, 'AllowancePositionManager: renounceCreditDelegation');
230+
}
231+
232+
function _typedDataHash(
233+
IAllowancePositionManager _positionManager,
234+
bytes32 typeHash
235+
) internal view returns (bytes32) {
236+
return keccak256(abi.encodePacked('\x19\x01', _positionManager.DOMAIN_SEPARATOR(), typeHash));
237+
}
238+
}
239+
240+
/// forge-config: default.isolate = true
241+
contract PositionConfigPositionManager_Gas_Tests is SpokeBase {
242+
string internal NAMESPACE = 'PositionManager.Operations';
243+
244+
PositionConfigPositionManager public positionManager;
245+
246+
function setUp() public virtual override {
247+
deployFixtures();
248+
initEnvironment();
249+
250+
positionManager = new PositionConfigPositionManager(address(spoke1));
251+
252+
vm.prank(SPOKE_ADMIN);
253+
spoke1.updatePositionManager(address(positionManager), true);
254+
255+
vm.prank(alice);
256+
spoke1.setUserPositionManager(address(positionManager), true);
257+
}
258+
259+
function test_setGlobalPermission() public {
260+
vm.prank(alice);
261+
positionManager.setGlobalPermission(bob, true);
262+
vm.snapshotGasLastCall(NAMESPACE, 'PositionConfigPositionManager: setGlobalPermission');
263+
}
264+
265+
function test_setUsingAsCollateralPermission() public {
266+
vm.prank(alice);
267+
positionManager.setUsingAsCollateralPermission(bob, true);
268+
vm.snapshotGasLastCall(
269+
NAMESPACE,
270+
'PositionConfigPositionManager: setUsingAsCollateralPermission'
271+
);
272+
}
273+
274+
function test_setUserRiskPremiumPermission() public {
275+
vm.prank(alice);
276+
positionManager.setUserRiskPremiumPermission(bob, true);
277+
vm.snapshotGasLastCall(
278+
NAMESPACE,
279+
'PositionConfigPositionManager: setUserRiskPremiumPermission'
280+
);
281+
}
282+
283+
function test_setUserDynamicConfigPermission() public {
284+
vm.prank(alice);
285+
positionManager.setUserDynamicConfigPermission(bob, true);
286+
vm.snapshotGasLastCall(
287+
NAMESPACE,
288+
'PositionConfigPositionManager: setUserDynamicConfigPermission'
289+
);
290+
}
291+
292+
function test_renounceGlobalPermission() public {
293+
vm.prank(alice);
294+
positionManager.setGlobalPermission(bob, true);
295+
296+
vm.prank(bob);
297+
positionManager.renounceGlobalPermission(alice);
298+
vm.snapshotGasLastCall(NAMESPACE, 'PositionConfigPositionManager: renounceGlobalPermission');
299+
}
300+
301+
function test_renounceUsingAsCollateralPermission() public {
302+
vm.prank(alice);
303+
positionManager.setUsingAsCollateralPermission(bob, true);
304+
305+
vm.prank(bob);
306+
positionManager.renounceUsingAsCollateralPermission(alice);
307+
vm.snapshotGasLastCall(
308+
NAMESPACE,
309+
'PositionConfigPositionManager: renounceUsingAsCollateralPermission'
310+
);
311+
}
312+
313+
function test_renounceUserRiskPremiumPermission() public {
314+
vm.prank(alice);
315+
positionManager.setUserRiskPremiumPermission(bob, true);
316+
317+
vm.prank(bob);
318+
positionManager.renounceUserRiskPremiumPermission(alice);
319+
vm.snapshotGasLastCall(
320+
NAMESPACE,
321+
'PositionConfigPositionManager: renounceUserRiskPremiumPermission'
322+
);
323+
}
324+
325+
function test_renounceUserDynamicConfigPermission() public {
326+
vm.prank(alice);
327+
positionManager.setUserDynamicConfigPermission(bob, true);
328+
329+
vm.prank(bob);
330+
positionManager.renounceUserDynamicConfigPermission(alice);
331+
vm.snapshotGasLastCall(
332+
NAMESPACE,
333+
'PositionConfigPositionManager: renounceUserDynamicConfigPermission'
334+
);
335+
}
336+
337+
function test_setUsingAsCollateralOnBehalfOf_fuzz_withGlobalPermission() public {
338+
vm.prank(alice);
339+
positionManager.setGlobalPermission(bob, true);
340+
341+
vm.prank(bob);
342+
positionManager.setUsingAsCollateralOnBehalfOf(alice, _daiReserveId(spoke1), true);
343+
vm.snapshotGasLastCall(
344+
NAMESPACE,
345+
'PositionConfigPositionManager: setUsingAsCollateralOnBehalfOf'
346+
);
347+
}
348+
349+
function test_updateUserRiskPremiumOnBehalfOf_withGlobalPermission() public {
350+
vm.prank(alice);
351+
positionManager.setGlobalPermission(bob, true);
352+
353+
Utils.supplyCollateral(spoke1, _daiReserveId(spoke1), alice, 100e18, alice);
354+
Utils.borrow(spoke1, _daiReserveId(spoke1), alice, 75e18, alice);
355+
356+
vm.prank(bob);
357+
positionManager.updateUserRiskPremiumOnBehalfOf(alice);
358+
vm.snapshotGasLastCall(
359+
NAMESPACE,
360+
'PositionConfigPositionManager: updateUserRiskPremiumOnBehalfOf'
361+
);
362+
}
363+
364+
function test_updateUserDynamicConfigOnBehalfOf_withGlobalPermission() public {
365+
vm.prank(alice);
366+
positionManager.setGlobalPermission(bob, true);
367+
368+
vm.prank(bob);
369+
positionManager.updateUserDynamicConfigOnBehalfOf(alice);
370+
vm.snapshotGasLastCall(
371+
NAMESPACE,
372+
'PositionConfigPositionManager: updateUserDynamicConfigOnBehalfOf'
373+
);
374+
}
144375
}

0 commit comments

Comments
 (0)