@@ -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