Skip to content

Commit ffa90f0

Browse files
committed
fix : address pr comments
1 parent f33c26d commit ffa90f0

10 files changed

+332
-106
lines changed
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"AllowancePositionManager - borrowOnBehalfOf": "306478",
3-
"AllowancePositionManager - withdrawOnBehalfOf: full": "121565",
4-
"AllowancePositionManager - withdrawOnBehalfOf: partial": "131756",
5-
"Common - setSelfAsUserPositionManagerWithSig": "72588",
6-
"SupplyRepayPositionManager - repayOnBehalfOf": "167131",
7-
"SupplyRepayPositionManager - supplyOnBehalfOf": "135803"
2+
"AllowancePositionManager: borrowOnBehalfOf": "308793",
3+
"AllowancePositionManager: withdrawOnBehalfOf: full": "123435",
4+
"AllowancePositionManager: withdrawOnBehalfOf: partial": "134093",
5+
"SupplyRepayPositionManager: repayOnBehalfOf": "167131",
6+
"SupplyRepayPositionManager: supplyOnBehalfOf": "135803",
7+
"common: setSelfAsUserPositionManagerWithSig": "72588"
88
}

src/position-manager/AllowancePositionManager.sol

Lines changed: 69 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ contract AllowancePositionManager is
3939

4040
/// @inheritdoc IAllowancePositionManager
4141
function approveWithdraw(address spender, uint256 reserveId, uint256 amount) external {
42-
_withdrawAllowances[msg.sender][spender][reserveId] = amount;
43-
emit WithdrawApproval(msg.sender, spender, reserveId, amount);
42+
_updateWithdrawAllowance(msg.sender, spender, reserveId, amount, true);
4443
}
4544

4645
/// @inheritdoc IAllowancePositionManager
@@ -49,19 +48,19 @@ contract AllowancePositionManager is
4948
bytes calldata signature
5049
) external {
5150
require(block.timestamp <= params.deadline, InvalidSignature());
52-
address user = params.owner;
5351
bytes32 digest = _hashTypedData(params.hash());
54-
require(SignatureChecker.isValidSignatureNow(user, digest, signature), InvalidSignature());
55-
_useCheckedNonce(user, params.nonce);
52+
require(
53+
SignatureChecker.isValidSignatureNow(params.owner, digest, signature),
54+
InvalidSignature()
55+
);
56+
_useCheckedNonce(params.owner, params.nonce);
5657

57-
_withdrawAllowances[user][params.spender][params.reserveId] = params.amount;
58-
emit WithdrawApproval(user, params.spender, params.reserveId, params.amount);
58+
_updateWithdrawAllowance(params.owner, params.spender, params.reserveId, params.amount, true);
5959
}
6060

6161
/// @inheritdoc IAllowancePositionManager
6262
function approveCreditDelegation(address spender, uint256 reserveId, uint256 amount) external {
63-
_creditDelegations[msg.sender][spender][reserveId] = amount;
64-
emit CreditDelegation(msg.sender, spender, reserveId, amount);
63+
_updateCreditDelegation(msg.sender, spender, reserveId, amount, true);
6564
}
6665

6766
/// @inheritdoc IAllowancePositionManager
@@ -70,25 +69,36 @@ contract AllowancePositionManager is
7069
bytes calldata signature
7170
) external {
7271
require(block.timestamp <= params.deadline, InvalidSignature());
73-
address user = params.owner;
7472
bytes32 digest = _hashTypedData(params.hash());
75-
require(SignatureChecker.isValidSignatureNow(user, digest, signature), InvalidSignature());
76-
_useCheckedNonce(user, params.nonce);
73+
require(
74+
SignatureChecker.isValidSignatureNow(params.owner, digest, signature),
75+
InvalidSignature()
76+
);
77+
_useCheckedNonce(params.owner, params.nonce);
7778

78-
_creditDelegations[user][params.spender][params.reserveId] = params.amount;
79-
emit CreditDelegation(user, params.spender, params.reserveId, params.amount);
79+
_updateCreditDelegation(params.owner, params.spender, params.reserveId, params.amount, true);
8080
}
8181

8282
/// @inheritdoc IAllowancePositionManager
8383
function renounceWithdrawAllowance(address owner, uint256 reserveId) external {
84-
_withdrawAllowances[owner][msg.sender][reserveId] = 0;
85-
emit WithdrawApproval(owner, msg.sender, reserveId, 0);
84+
_updateWithdrawAllowance(
85+
owner,
86+
msg.sender,
87+
reserveId,
88+
0,
89+
!(_withdrawAllowances[owner][msg.sender][reserveId] == 0)
90+
);
8691
}
8792

8893
/// @inheritdoc IAllowancePositionManager
8994
function renounceCreditDelegation(address owner, uint256 reserveId) external {
90-
_creditDelegations[owner][msg.sender][reserveId] = 0;
91-
emit CreditDelegation(owner, msg.sender, reserveId, 0);
95+
_updateCreditDelegation(
96+
owner,
97+
msg.sender,
98+
reserveId,
99+
0,
100+
!(_creditDelegations[owner][msg.sender][reserveId] == 0)
101+
);
92102
}
93103

94104
/// @inheritdoc IAllowancePositionManager
@@ -100,7 +110,13 @@ contract AllowancePositionManager is
100110
require(amount > 0, InvalidAmount());
101111
uint256 currentAllowance = _withdrawAllowances[onBehalfOf][msg.sender][reserveId];
102112
require(currentAllowance >= amount, InsufficientWithdrawAllowance(currentAllowance, amount));
103-
_withdrawAllowances[onBehalfOf][msg.sender][reserveId] = currentAllowance.uncheckedSub(amount);
113+
_updateWithdrawAllowance(
114+
onBehalfOf,
115+
msg.sender,
116+
reserveId,
117+
currentAllowance.uncheckedSub(amount),
118+
true
119+
);
104120

105121
IERC20 asset = _getReserveUnderlying(reserveId);
106122
(uint256 withdrawnShares, uint256 withdrawnAmount) = ISpokeBase(SPOKE).withdraw(
@@ -122,7 +138,13 @@ contract AllowancePositionManager is
122138
require(amount > 0, InvalidAmount());
123139
uint256 currentAllowance = _creditDelegations[onBehalfOf][msg.sender][reserveId];
124140
require(currentAllowance >= amount, InsufficientCreditDelegation(currentAllowance, amount));
125-
_creditDelegations[onBehalfOf][msg.sender][reserveId] = currentAllowance.uncheckedSub(amount);
141+
_updateCreditDelegation(
142+
onBehalfOf,
143+
msg.sender,
144+
reserveId,
145+
currentAllowance.uncheckedSub(amount),
146+
true
147+
);
126148

127149
IERC20 asset = _getReserveUnderlying(reserveId);
128150
(uint256 borrowedShares, uint256 borrowedAmount) = ISpokeBase(SPOKE).borrow(
@@ -145,7 +167,7 @@ contract AllowancePositionManager is
145167
}
146168

147169
/// @inheritdoc IAllowancePositionManager
148-
function creditDelegationAllowance(
170+
function creditDelegation(
149171
address owner,
150172
address spender,
151173
uint256 reserveId
@@ -168,6 +190,32 @@ contract AllowancePositionManager is
168190
return EIP712Hash.CREDIT_DELEGATION_TYPEHASH;
169191
}
170192

193+
function _updateWithdrawAllowance(
194+
address owner,
195+
address spender,
196+
uint256 reserveId,
197+
uint256 newAllowance,
198+
bool emitEvent
199+
) internal {
200+
_withdrawAllowances[owner][spender][reserveId] = newAllowance;
201+
if (emitEvent) {
202+
emit WithdrawApproval(owner, spender, reserveId, newAllowance);
203+
}
204+
}
205+
206+
function _updateCreditDelegation(
207+
address owner,
208+
address spender,
209+
uint256 reserveId,
210+
uint256 newCreditDelegation,
211+
bool emitEvent
212+
) internal {
213+
_creditDelegations[owner][spender][reserveId] = newCreditDelegation;
214+
if (emitEvent) {
215+
emit CreditDelegation(owner, spender, reserveId, newCreditDelegation);
216+
}
217+
}
218+
171219
function _domainNameAndVersion() internal pure override returns (string memory, string memory) {
172220
return ('AllowancePositionManager', '1');
173221
}

src/position-manager/PositionConfigPositionManager.sol

Lines changed: 73 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,42 +13,98 @@ import {IPositionConfigPositionManager, ConfigPermissions} from 'src/position-ma
1313
contract PositionConfigPositionManager is IPositionConfigPositionManager, PositionManagerBase {
1414
using ConfigPermissionsMap for ConfigPermissions;
1515

16-
mapping(address owner => mapping(address caller => ConfigPermissions)) private _configPermissions;
16+
mapping(address owner => mapping(address caller => ConfigPermissions)) private _config;
1717

1818
/// @dev Constructor.
1919
/// @param spoke_ The address of the spoke contract.
2020
constructor(address spoke_) PositionManagerBase(spoke_) {}
2121

2222
/// @inheritdoc IPositionConfigPositionManager
2323
function setGlobalPermission(address caller, bool permission) external {
24-
_configPermissions[msg.sender][caller] = _configPermissions[msg.sender][caller]
25-
.setFullPermissions(permission);
24+
ConfigPermissions oldPermissions = _config[msg.sender][caller];
25+
ConfigPermissions newPermissions = oldPermissions.setFullPermissions(permission);
26+
_config[msg.sender][caller] = newPermissions;
2627

27-
emit GlobalConfigPermissionUpdated(msg.sender, caller, permission);
28+
if (!oldPermissions.eq(newPermissions)) {
29+
emit ConfigPermissionsUpdated(msg.sender, caller, newPermissions);
30+
}
2831
}
2932

3033
/// @inheritdoc IPositionConfigPositionManager
3134
function setUsingAsCollateralPermission(address caller, bool permission) external {
32-
_configPermissions[msg.sender][caller] = _configPermissions[msg.sender][caller]
33-
.setCanSetUsingAsCollateral(permission);
35+
ConfigPermissions oldPermissions = _config[msg.sender][caller];
36+
ConfigPermissions newPermissions = oldPermissions.setCanSetUsingAsCollateral(permission);
37+
_config[msg.sender][caller] = newPermissions;
3438

35-
emit SetUsingAsCollateralPermissionUpdated(msg.sender, caller, permission);
39+
if (!oldPermissions.eq(newPermissions)) {
40+
emit ConfigPermissionsUpdated(msg.sender, caller, newPermissions);
41+
}
3642
}
3743

3844
/// @inheritdoc IPositionConfigPositionManager
3945
function setUserRiskPremiumPermission(address caller, bool permission) external {
40-
_configPermissions[msg.sender][caller] = _configPermissions[msg.sender][caller]
41-
.setCanUpdateUserRiskPremium(permission);
46+
ConfigPermissions oldPermissions = _config[msg.sender][caller];
47+
ConfigPermissions newPermissions = oldPermissions.setCanUpdateUserRiskPremium(permission);
48+
_config[msg.sender][caller] = newPermissions;
4249

43-
emit UserRiskPremiumPermissionUpdated(msg.sender, caller, permission);
50+
if (!oldPermissions.eq(newPermissions)) {
51+
emit ConfigPermissionsUpdated(msg.sender, caller, newPermissions);
52+
}
4453
}
4554

4655
/// @inheritdoc IPositionConfigPositionManager
4756
function setUserDynamicConfigPermission(address caller, bool permission) external {
48-
_configPermissions[msg.sender][caller] = _configPermissions[msg.sender][caller]
49-
.setCanUpdateUserDynamicConfig(permission);
57+
ConfigPermissions oldPermissions = _config[msg.sender][caller];
58+
ConfigPermissions newPermissions = oldPermissions.setCanUpdateUserDynamicConfig(permission);
59+
_config[msg.sender][caller] = newPermissions;
5060

51-
emit UserDynamicConfigPermissionUpdated(msg.sender, caller, permission);
61+
if (!oldPermissions.eq(newPermissions)) {
62+
emit ConfigPermissionsUpdated(msg.sender, caller, newPermissions);
63+
}
64+
}
65+
66+
/// @inheritdoc IPositionConfigPositionManager
67+
function renounceGlobalPermission(address owner) external {
68+
ConfigPermissions oldPermissions = _config[owner][msg.sender];
69+
ConfigPermissions newPermissions = oldPermissions.setFullPermissions(false);
70+
_config[owner][msg.sender] = newPermissions;
71+
72+
if (!oldPermissions.eq(newPermissions)) {
73+
emit ConfigPermissionsUpdated(owner, msg.sender, newPermissions);
74+
}
75+
}
76+
77+
/// @inheritdoc IPositionConfigPositionManager
78+
function renounceUsingAsCollateralPermission(address owner) external {
79+
ConfigPermissions oldPermissions = _config[owner][msg.sender];
80+
ConfigPermissions newPermissions = oldPermissions.setCanSetUsingAsCollateral(false);
81+
_config[owner][msg.sender] = newPermissions;
82+
83+
if (!oldPermissions.eq(newPermissions)) {
84+
emit ConfigPermissionsUpdated(owner, msg.sender, newPermissions);
85+
}
86+
}
87+
88+
/// @inheritdoc IPositionConfigPositionManager
89+
function renounceUserRiskPremiumPermission(address owner) external {
90+
ConfigPermissions oldPermissions = _config[owner][msg.sender];
91+
ConfigPermissions newPermissions = oldPermissions.setCanUpdateUserRiskPremium(false);
92+
_config[owner][msg.sender] = newPermissions;
93+
94+
if (!oldPermissions.eq(newPermissions)) {
95+
emit ConfigPermissionsUpdated(owner, msg.sender, newPermissions);
96+
}
97+
}
98+
99+
/// @inheritdoc IPositionConfigPositionManager
100+
function renounceUserDynamicConfigPermission(address owner) external {
101+
ConfigPermissions oldPermissions = _config[owner][msg.sender];
102+
ConfigPermissions newPermissions = oldPermissions.setCanUpdateUserDynamicConfig(false);
103+
_config[owner][msg.sender] = newPermissions;
104+
105+
if (!oldPermissions.eq(newPermissions)) {
106+
emit ConfigPermissionsUpdated(owner, msg.sender, newPermissions);
107+
}
52108
}
53109

54110
/// @inheritdoc IPositionConfigPositionManager
@@ -57,30 +113,21 @@ contract PositionConfigPositionManager is IPositionConfigPositionManager, Positi
57113
uint256 reserveId,
58114
bool usingAsCollateral
59115
) external {
60-
require(
61-
_configPermissions[onBehalfOf][msg.sender].canSetUsingAsCollateral(),
62-
CallerNotAllowed()
63-
);
116+
require(_config[onBehalfOf][msg.sender].canSetUsingAsCollateral(), CallerNotAllowed());
64117

65118
ISpoke(SPOKE).setUsingAsCollateral(reserveId, usingAsCollateral, onBehalfOf);
66119
}
67120

68121
/// @inheritdoc IPositionConfigPositionManager
69122
function updateUserRiskPremiumOnBehalfOf(address onBehalfOf) external {
70-
require(
71-
_configPermissions[onBehalfOf][msg.sender].canUpdateUserRiskPremium(),
72-
CallerNotAllowed()
73-
);
123+
require(_config[onBehalfOf][msg.sender].canUpdateUserRiskPremium(), CallerNotAllowed());
74124

75125
ISpoke(SPOKE).updateUserRiskPremium(onBehalfOf);
76126
}
77127

78128
/// @inheritdoc IPositionConfigPositionManager
79129
function updateUserDynamicConfigOnBehalfOf(address onBehalfOf) external {
80-
require(
81-
_configPermissions[onBehalfOf][msg.sender].canUpdateUserDynamicConfig(),
82-
CallerNotAllowed()
83-
);
130+
require(_config[onBehalfOf][msg.sender].canUpdateUserDynamicConfig(), CallerNotAllowed());
84131

85132
ISpoke(SPOKE).updateUserDynamicConfig(onBehalfOf);
86133
}
@@ -90,7 +137,7 @@ contract PositionConfigPositionManager is IPositionConfigPositionManager, Positi
90137
address caller,
91138
address onBehalfOf
92139
) external view returns (ConfigPermissionValues memory) {
93-
ConfigPermissions permissions = _configPermissions[onBehalfOf][caller];
140+
ConfigPermissions permissions = _config[onBehalfOf][caller];
94141
return
95142
ConfigPermissionValues({
96143
canSetUsingAsCollateral: permissions.canSetUsingAsCollateral(),

src/position-manager/PositionManagerBase.sol

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ abstract contract PositionManagerBase is IPositionManagerBase, Multicall {
2929
bytes calldata signature
3030
) external {
3131
try
32-
ISpoke(SPOKE).setUserPositionManagerWithSig(
33-
address(this),
34-
params.user,
35-
params.approve,
36-
params.nonce,
37-
params.deadline,
38-
signature
39-
)
32+
ISpoke(SPOKE).setUserPositionManagerWithSig({
33+
positionManager: address(this),
34+
user: params.user,
35+
approve: params.approve,
36+
nonce: params.nonce,
37+
deadline: params.deadline,
38+
signature: signature
39+
})
4040
{} catch {}
4141
}
4242

src/position-manager/interfaces/IAllowancePositionManager.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ interface IAllowancePositionManager is IPositionManagerBase {
112112
/// @param spender The address of the spender.
113113
/// @param reserveId The identifier of the reserve.
114114
/// @return The amount of credit delegation allowance.
115-
function creditDelegationAllowance(
115+
function creditDelegation(
116116
address owner,
117117
address spender,
118118
uint256 reserveId

0 commit comments

Comments
 (0)