@@ -53,8 +53,7 @@ contract AllowancePositionManager is
5353
5454 /// @inheritdoc IAllowancePositionManager
5555 function approveWithdraw (address spender , uint256 reserveId , uint256 amount ) external {
56- _withdrawAllowances[msg .sender ][spender][reserveId] = amount;
57- emit WithdrawApproval (msg .sender , spender, reserveId, amount);
56+ _updateWithdrawAllowance (msg .sender , spender, reserveId, amount, true );
5857 }
5958
6059 /// @inheritdoc IAllowancePositionManager
@@ -63,13 +62,14 @@ contract AllowancePositionManager is
6362 bytes calldata signature
6463 ) external {
6564 require (block .timestamp <= params.deadline, InvalidSignature ());
66- address user = params.owner;
6765 bytes32 digest = _hashTypedData (params.hash ());
68- require (SignatureChecker.isValidSignatureNow (user, digest, signature), InvalidSignature ());
69- _useCheckedNonce (user, params.nonce);
66+ require (
67+ SignatureChecker.isValidSignatureNow (params.owner, digest, signature),
68+ InvalidSignature ()
69+ );
70+ _useCheckedNonce (params.owner, params.nonce);
7071
71- _withdrawAllowances[user][params.spender][params.reserveId] = params.amount;
72- emit WithdrawApproval (user, params.spender, params.reserveId, params.amount);
72+ _updateWithdrawAllowance (params.owner, params.spender, params.reserveId, params.amount, true );
7373 }
7474
7575 /// @inheritdoc IAllowancePositionManager
@@ -78,45 +78,51 @@ contract AllowancePositionManager is
7878 }
7979
8080 /// @inheritdoc IAllowancePositionManager
81- function approveCreditDelegation (address spender , uint256 reserveId , uint256 amount ) external {
82- _creditDelegations[msg .sender ][spender][reserveId] = amount;
83- emit CreditDelegation (msg .sender , spender, reserveId, amount);
81+ function creditDelegation (address spender , uint256 reserveId , uint256 amount ) external {
82+ _updateCreditDelegation (msg .sender , spender, reserveId, amount, true );
8483 }
8584
8685 /// @inheritdoc IAllowancePositionManager
87- function approveCreditDelegationWithSig (
86+ function creditDelegationWithSig (
8887 EIP712Types.CreditDelegation calldata params ,
8988 bytes calldata signature
9089 ) external {
9190 require (block .timestamp <= params.deadline, InvalidSignature ());
92- address user = params.owner;
9391 bytes32 digest = _hashTypedData (params.hash ());
94- require (SignatureChecker.isValidSignatureNow (user, digest, signature), InvalidSignature ());
95- _useCheckedNonce (user, params.nonce);
92+ require (
93+ SignatureChecker.isValidSignatureNow (params.owner, digest, signature),
94+ InvalidSignature ()
95+ );
96+ _useCheckedNonce (params.owner, params.nonce);
9697
97- _creditDelegations[user][params.spender][params.reserveId] = params.amount;
98- emit CreditDelegation (user, params.spender, params.reserveId, params.amount);
98+ _updateCreditDelegation (params.owner, params.spender, params.reserveId, params.amount, true );
9999 }
100100
101101 /// @inheritdoc IAllowancePositionManager
102- function temporaryApproveCreditDelegation (
103- address spender ,
104- uint256 reserveId ,
105- uint256 amount
106- ) external {
102+ function temporaryCreditDelegation (address spender , uint256 reserveId , uint256 amount ) external {
107103 _temporaryCreditDelegationsSlot (msg .sender , spender, reserveId).tstore (amount);
108104 }
109105
110106 /// @inheritdoc IAllowancePositionManager
111107 function renounceWithdrawAllowance (address owner , uint256 reserveId ) external {
112- _withdrawAllowances[owner][msg .sender ][reserveId] = 0 ;
113- emit WithdrawApproval (owner, msg .sender , reserveId, 0 );
108+ _updateWithdrawAllowance (
109+ owner,
110+ msg .sender ,
111+ reserveId,
112+ 0 ,
113+ ! (_withdrawAllowances[owner][msg .sender ][reserveId] == 0 )
114+ );
114115 }
115116
116117 /// @inheritdoc IAllowancePositionManager
117118 function renounceCreditDelegation (address owner , uint256 reserveId ) external {
118- _creditDelegations[owner][msg .sender ][reserveId] = 0 ;
119- emit CreditDelegation (owner, msg .sender , reserveId, 0 );
119+ _updateCreditDelegation (
120+ owner,
121+ msg .sender ,
122+ reserveId,
123+ 0 ,
124+ ! (_creditDelegations[owner][msg .sender ][reserveId] == 0 )
125+ );
120126 }
121127
122128 /// @inheritdoc IAllowancePositionManager
@@ -169,7 +175,7 @@ contract AllowancePositionManager is
169175 }
170176
171177 /// @inheritdoc IAllowancePositionManager
172- function creditDelegationAllowance (
178+ function creditDelegation (
173179 address owner ,
174180 address spender ,
175181 uint256 reserveId
@@ -192,6 +198,32 @@ contract AllowancePositionManager is
192198 return EIP712Hash.CREDIT_DELEGATION_TYPEHASH;
193199 }
194200
201+ function _updateWithdrawAllowance (
202+ address owner ,
203+ address spender ,
204+ uint256 reserveId ,
205+ uint256 newAllowance ,
206+ bool emitEvent
207+ ) internal {
208+ _withdrawAllowances[owner][spender][reserveId] = newAllowance;
209+ if (emitEvent) {
210+ emit WithdrawApproval (owner, spender, reserveId, newAllowance);
211+ }
212+ }
213+
214+ function _updateCreditDelegation (
215+ address owner ,
216+ address spender ,
217+ uint256 reserveId ,
218+ uint256 newCreditDelegation ,
219+ bool emitEvent
220+ ) internal {
221+ _creditDelegations[owner][spender][reserveId] = newCreditDelegation;
222+ if (emitEvent) {
223+ emit CreditDelegation (owner, spender, reserveId, newCreditDelegation);
224+ }
225+ }
226+
195227 function _domainNameAndVersion () internal pure override returns (string memory , string memory ) {
196228 return ('AllowancePositionManager ' , '1 ' );
197229 }
@@ -216,7 +248,13 @@ contract AllowancePositionManager is
216248 } else {
217249 uint256 allowance = _withdrawAllowances[onBehalfOf][spender][reserveId];
218250 require (allowance >= amount, InsufficientWithdrawAllowance (allowance, amount));
219- _withdrawAllowances[onBehalfOf][spender][reserveId] = allowance.uncheckedSub (amount);
251+ _updateWithdrawAllowance ({
252+ owner: onBehalfOf,
253+ spender: spender,
254+ reserveId: reserveId,
255+ newAllowance: allowance.uncheckedSub (amount),
256+ emitEvent: true
257+ });
220258 }
221259 }
222260
@@ -240,7 +278,13 @@ contract AllowancePositionManager is
240278 } else {
241279 uint256 allowance = _creditDelegations[onBehalfOf][spender][reserveId];
242280 require (allowance >= amount, InsufficientCreditDelegation (allowance, amount));
243- _creditDelegations[onBehalfOf][spender][reserveId] = allowance.uncheckedSub (amount);
281+ _updateCreditDelegation ({
282+ owner: onBehalfOf,
283+ spender: spender,
284+ reserveId: reserveId,
285+ newCreditDelegation: allowance.uncheckedSub (amount),
286+ emitEvent: true
287+ });
244288 }
245289 }
246290
0 commit comments