Skip to content

Commit 9d11b05

Browse files
⬆️ Update aave-helpers lib (#30)
* ⬆️ update aave-helpers lib * forge install: openzeppelin-contracts v5.2.0 * ✨ update all import to match open-zeppelin * 🐛 remove ownership transfer in AaveStewardInjector constructor * 🔥 remove openzeppelin contracts lib * ✨ use oppenzeppelin-contracts lib from aave-helpers * 🐛 fix use guardian instead of riskSteward * ⬆️ bump solc version * 🔥 remove openzeppelin-contracts module * fix: remappings.txt Co-authored-by: Harsh Pandey <[email protected]> * ✅ fix tests (Ownable: caller is not the owner) * 🐛 fix issue wrong owner RiskSteward.sol --------- Co-authored-by: Harsh Pandey <[email protected]>
1 parent 27dd0ad commit 9d11b05

File tree

11 files changed

+98
-67
lines changed

11 files changed

+98
-67
lines changed

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
url = https://github.com/bgd-labs/aave-capo
44
[submodule "lib/aave-helpers"]
55
path = lib/aave-helpers
6-
url = https://github.com/bgd-labs/aave-helpers
6+
url = https://github.com/bgd-labs/aave-helpers

foundry.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ src = 'src'
33
test = 'tests'
44
script = 'scripts'
55
out = 'out'
6-
solc = '0.8.20'
6+
solc = '0.8.22'
77
optimizer = true
88
optimizer_runs = 200
99
libs = ['lib']
@@ -18,7 +18,7 @@ src = 'zksync'
1818
test = 'zksync'
1919
script = 'scripts'
2020
libs = ['lib']
21-
solc = '0.8.20'
21+
solc = '0.8.22'
2222
fs_permissions = [{ access = "write", path = "./reports" }]
2323
ffi = true
2424
evm_version = 'shanghai'

generator/utils/importsResolver.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,13 @@ function generateRiskStewardImport(code: string) {
4141
const match = code.match(/RiskStewards(\w+)/);
4242

4343
if (match) {
44-
imports = `import {RiskStewards${match[1]}} from '${match[1] == 'ZkSync' ? '../' : ''}../../../../scripts/networks/RiskStewards${match[1]}.s.sol';\n`;
44+
imports = `import {RiskStewards${match[1]}} from '${
45+
match[1] == 'ZkSync' ? '../' : ''
46+
}../../../../scripts/networks/RiskStewards${match[1]}.s.sol';\n`;
4547
if (findMatch(code, 'IRiskSteward')) {
46-
imports += `import {IRiskSteward${findMatch(code, 'IPriceCapAdapter') ? ', IPriceCapAdapter': ''}} from '../../../interfaces/IRiskSteward.sol';\n`;
48+
imports += `import {IRiskSteward${
49+
findMatch(code, 'IPriceCapAdapter') ? ', IPriceCapAdapter' : ''
50+
}} from '../../../interfaces/IRiskSteward.sol';\n`;
4751
}
4852
}
4953
return imports;
@@ -52,9 +56,9 @@ function generateRiskStewardImport(code: string) {
5256
function generateEngineImport(code: string) {
5357
const matches = [...code.matchAll(/Aave(V[2..3])Payload([A-Za-z]+)/g)].flat();
5458
if (matches.length > 0)
55-
return `import {${matches[0]}} from 'aave-helpers/src/${matches[1].toLowerCase()}-config-engine/${
59+
return `import {${
5660
matches[0]
57-
}.sol';\n`;
61+
}} from 'aave-helpers/src/${matches[1].toLowerCase()}-config-engine/${matches[0]}.sol';\n`;
5862
}
5963

6064
function findMatches(code: string, needles: string[] | readonly string[]) {
@@ -110,10 +114,10 @@ export function prefixWithImports(code: string) {
110114
}
111115
// common imports
112116
if (findMatch(code, 'IERC20')) {
113-
imports += `import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';\n`;
117+
imports += `import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol';\n`;
114118
}
115119
if (findMatch(code, 'forceApprove')) {
116-
imports += `import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';\n`;
120+
imports += `import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol';\n`;
117121
}
118122
if (findMatch(code, 'GovernanceV3Ethereum')) {
119123
imports += `import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';\n`;

lib/aave-helpers

Submodule aave-helpers updated 73 files

remappings.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ solidity-utils/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/lib/so
55
lib/aave-helpers:aave-v3-origin/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src
66
aave-v3-origin/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/
77
aave-capo/=lib/aave-capo/src
8-
lib/aave-capo:cl-synchronicity-price-adapter/=lib/aave-capo/lib/cl-synchronicity-price-adapter/src/
8+
lib/aave-capo:cl-synchronicity-price-adapter/=lib/aave-capo/lib/cl-synchronicity-price-adapter/src/

report/contracts/src/contracts/RiskSteward.sol.gcov.html

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,22 @@
1010

1111
<body>
1212

13-
<table width="100%" border=0 cellspacing=0 cellpadding=0>
14-
<tr><td class="title">LCOV - code coverage report</td></tr>
15-
<tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
13+
<table width="100%" border=0 cellspacing=0 cellpadding=0>
14+
<tr>
15+
<td class="title">LCOV - code coverage report</td>
16+
</tr>
17+
<tr>
18+
<td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td>
19+
</tr>
1620

17-
<tr>
18-
<td width="100%">
19-
<table cellpadding=1 border=0 width="100%">
21+
<tr>
22+
<td width="100%">
23+
<table cellpadding=1 border=0 width="100%">
2024
<tr>
2125
<td width="10%" class="headerItem">Current view:</td>
22-
<td width="10%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">contracts/src/contracts</a> - RiskSteward.sol<span style="font-size: 80%;"> (source / <a href="RiskSteward.sol.func-c.html">functions</a>)</span></td>
26+
<td width="10%" class="headerValue"><a href="../../../index.html">top level</a> - <a
27+
href="index.html">contracts/src/contracts</a> - RiskSteward.sol<span style="font-size: 80%;"> (source /
28+
<a href="RiskSteward.sol.func-c.html">functions</a>)</span></td>
2329
<td width="5%"></td>
2430
<td width="5%"></td>
2531
<td width="5%" class="headerCovTableHead">Coverage</td>
@@ -53,29 +59,33 @@
5359
<td class="headerCovTableEntry">0</td>
5460
<td class="headerCovTableEntry">0</td>
5561
</tr>
56-
<tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
57-
</table>
58-
</td>
59-
</tr>
62+
<tr>
63+
<td><img src="../../../glass.png" width=3 height=3 alt=""></td>
64+
</tr>
65+
</table>
66+
</td>
67+
</tr>
6068

61-
<tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
62-
</table>
69+
<tr>
70+
<td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td>
71+
</tr>
72+
</table>
6373

64-
<table cellpadding=0 cellspacing=0 border=0>
65-
<tr>
66-
<td><br></td>
67-
</tr>
68-
<tr>
69-
<td>
70-
<pre class="sourceHeading"> Branch data Line data Source code</pre>
71-
<pre class="source">
74+
<table cellpadding=0 cellspacing=0 border=0>
75+
<tr>
76+
<td><br></td>
77+
</tr>
78+
<tr>
79+
<td>
80+
<pre class="sourceHeading"> Branch data Line data Source code</pre>
81+
<pre class="source">
7282
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: BUSL-1.1</span>
7383
<span id="L2"><span class="lineNum"> 2</span> : : pragma solidity ^0.8.0;</span>
7484
<span id="L3"><span class="lineNum"> 3</span> : : </span>
7585
<span id="L4"><span class="lineNum"> 4</span> : : import {IPoolDataProvider} from 'aave-address-book/AaveV3.sol';</span>
76-
<span id="L5"><span class="lineNum"> 5</span> : : import {Address} from 'solidity-utils/contracts/oz-common/Address.sol';</span>
86+
<span id="L5"><span class="lineNum"> 5</span> : : import {Address} from 'openzeppelin-contracts/contracts/utils/Address.sol';</span>
7787
<span id="L6"><span class="lineNum"> 6</span> : : import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';</span>
78-
<span id="L7"><span class="lineNum"> 7</span> : : import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol';</span>
88+
<span id="L7"><span class="lineNum"> 7</span> : : import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';</span>
7989
<span id="L8"><span class="lineNum"> 8</span> : : import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/periphery/contracts/v3-config-engine/AaveV3ConfigEngine.sol';</span>
8090
<span id="L9"><span class="lineNum"> 9</span> : : import {IRiskSteward} from '../interfaces/IRiskSteward.sol';</span>
8191
<span id="L10"><span class="lineNum"> 10</span> : : import {IDefaultInterestRateStrategyV2} from 'aave-v3-origin/core/contracts/interfaces/IDefaultInterestRateStrategyV2.sol';</span>
@@ -509,16 +519,22 @@
509519
<span id="L438"><span class="lineNum"> 438</span> : : }</span>
510520
<span id="L439"><span class="lineNum"> 439</span> : : }</span>
511521
</pre>
512-
</td>
513-
</tr>
514-
</table>
515-
<br>
522+
</td>
523+
</tr>
524+
</table>
525+
<br>
516526

517-
<table width="100%" border=0 cellspacing=0 cellpadding=0>
518-
<tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
519-
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
520-
</table>
521-
<br>
527+
<table width="100%" border=0 cellspacing=0 cellpadding=0>
528+
<tr>
529+
<td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td>
530+
</tr>
531+
<tr>
532+
<td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV
533+
version 2.0-1</a></td>
534+
</tr>
535+
</table>
536+
<br>
522537

523538
</body>
524-
</html>
539+
540+
</html>

src/contracts/AaveStewardInjector.sol

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {IRiskOracle} from './dependencies/IRiskOracle.sol';
55
import {IRiskSteward} from '../interfaces/IRiskSteward.sol';
66
import {IAaveStewardInjector, AutomationCompatibleInterface} from '../interfaces/IAaveStewardInjector.sol';
77
import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
8-
import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol';
8+
import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';
99

1010
/**
1111
* @title AaveStewardInjector
@@ -45,11 +45,15 @@ contract AaveStewardInjector is Ownable, IAaveStewardInjector {
4545
* @param guardian address of the guardian / owner of the stewards injector.
4646
* @param whitelistedAsset address of the whitelisted asset for which update can be injected.
4747
*/
48-
constructor(address riskOracle, address riskSteward, address guardian, address whitelistedAsset) {
48+
constructor(
49+
address riskOracle,
50+
address riskSteward,
51+
address guardian,
52+
address whitelistedAsset
53+
) Ownable(guardian) {
4954
RISK_ORACLE = riskOracle;
5055
RISK_STEWARD = riskSteward;
5156
WHITELISTED_ASSET = whitelistedAsset;
52-
_transferOwnership(guardian);
5357
}
5458

5559
/**
@@ -108,13 +112,11 @@ contract AaveStewardInjector is Ownable, IAaveStewardInjector {
108112
function _canUpdateBeInjected(
109113
IRiskOracle.RiskParameterUpdate memory updateRiskParams
110114
) internal view returns (bool) {
111-
return (
112-
!isUpdateIdExecuted(updateRiskParams.updateId) &&
115+
return (!isUpdateIdExecuted(updateRiskParams.updateId) &&
113116
(updateRiskParams.timestamp + EXPIRATION_PERIOD > block.timestamp) &&
114117
updateRiskParams.market == WHITELISTED_ASSET &&
115118
keccak256(bytes(updateRiskParams.updateType)) == keccak256(bytes(WHITELISTED_UPDATE_TYPE)) &&
116-
!isDisabled(updateRiskParams.updateId)
117-
);
119+
!isDisabled(updateRiskParams.updateId));
118120
}
119121

120122
/**

src/contracts/RiskSteward.sol

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
pragma solidity ^0.8.0;
33

44
import {IPoolDataProvider} from 'aave-address-book/AaveV3.sol';
5-
import {Address} from 'solidity-utils/contracts/oz-common/Address.sol';
6-
import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol';
5+
import {Address} from 'openzeppelin-contracts/contracts/utils/Address.sol';
6+
import {SafeCast} from 'openzeppelin-contracts/contracts/utils/math/SafeCast.sol';
77
import {EngineFlags} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/EngineFlags.sol';
8-
import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol';
8+
import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';
99
import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
1010
import {IRiskSteward} from '../interfaces/IRiskSteward.sol';
1111
import {IDefaultInterestRateStrategyV2} from 'aave-v3-origin/src/contracts/interfaces/IDefaultInterestRateStrategyV2.sol';
@@ -59,7 +59,7 @@ contract RiskSteward is Ownable, IRiskSteward {
5959
IEngine engine,
6060
address riskCouncil,
6161
Config memory riskConfig
62-
) {
62+
) Ownable(msg.sender) {
6363
POOL_DATA_PROVIDER = poolDataProvider;
6464
CONFIG_ENGINE = engine;
6565
RISK_COUNCIL = riskCouncil;

tests/AaveStewardsInjector.t.sol

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {TestnetProcedures} from 'aave-v3-origin/tests/utils/TestnetProcedures.so
66
import {RiskOracle} from '../src/contracts/dependencies/RiskOracle.sol';
77
import {AaveStewardInjector, IAaveStewardInjector} from '../src/contracts/AaveStewardInjector.sol';
88
import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol';
9+
import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';
910

1011
contract AaveStewardsInjector_Test is TestnetProcedures {
1112
RiskSteward _riskSteward;
@@ -50,17 +51,16 @@ contract AaveStewardsInjector_Test is TestnetProcedures {
5051
string[] memory initialUpdateTypes = new string[](1);
5152
initialUpdateTypes[0] = 'RateStrategyUpdate';
5253

53-
_riskOracle = new RiskOracle(
54-
'RiskOracle',
55-
initialSenders,
56-
initialUpdateTypes
57-
);
54+
_riskOracle = new RiskOracle('RiskOracle', initialSenders, initialUpdateTypes);
5855
vm.stopPrank();
5956

6057
// setup steward injector
6158
vm.startPrank(_stewardsInjectorOwner);
6259

63-
address computedRiskStewardAddress = vm.computeCreateAddress(_stewardsInjectorOwner, vm.getNonce(_stewardsInjectorOwner) + 1);
60+
address computedRiskStewardAddress = vm.computeCreateAddress(
61+
_stewardsInjectorOwner,
62+
vm.getNonce(_stewardsInjectorOwner) + 1
63+
);
6464
_stewardInjector = new AaveStewardInjector(
6565
address(_riskOracle),
6666
address(computedRiskStewardAddress),
@@ -102,7 +102,9 @@ contract AaveStewardsInjector_Test is TestnetProcedures {
102102
_addUpdateToRiskOracle();
103103

104104
vm.prank(address(1));
105-
vm.expectRevert(bytes('Ownable: caller is not the owner'));
105+
vm.expectRevert(
106+
abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, address(1))
107+
);
106108
_stewardInjector.disableUpdateById(1, true);
107109

108110
assertFalse(_stewardInjector.isDisabled(1));
@@ -131,7 +133,7 @@ contract AaveStewardsInjector_Test is TestnetProcedures {
131133
}
132134

133135
function test_isUpdatedIdExecuted() public {
134-
// add rate update to risk oracle
136+
// add rate update to risk oracle
135137
_addUpdateToRiskOracle();
136138

137139
assertFalse(_stewardInjector.isUpdateIdExecuted(1));
@@ -160,7 +162,13 @@ contract AaveStewardsInjector_Test is TestnetProcedures {
160162
}
161163

162164
function test_reverts_sameUpdateInjectedTwice() public {
163-
_addUpdateToRiskOracle(EngineFlags.KEEP_CURRENT, 5_00, EngineFlags.KEEP_CURRENT, EngineFlags.KEEP_CURRENT, block.timestamp - 100); // updateId 1
165+
_addUpdateToRiskOracle(
166+
EngineFlags.KEEP_CURRENT,
167+
5_00,
168+
EngineFlags.KEEP_CURRENT,
169+
EngineFlags.KEEP_CURRENT,
170+
block.timestamp - 100
171+
); // updateId 1
164172

165173
vm.expectEmit(address(_stewardInjector));
166174
emit ActionSucceeded(1);

tests/RiskSteward.t.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {RiskSteward, IRiskSteward, IEngine, EngineFlags} from 'src/contracts/Ris
1010
import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
1111
import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol';
1212
import {ConfigEngineDeployer} from './utils/ConfigEngineDeployer.sol';
13+
import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';
1314

1415
contract RiskSteward_Test is Test {
1516
address public constant riskCouncil = address(42);
@@ -907,10 +908,10 @@ contract RiskSteward_Test is Test {
907908
vm.expectRevert(IRiskSteward.InvalidCaller.selector);
908909
steward.updateRates(rateStrategyUpdate);
909910

910-
vm.expectRevert('Ownable: caller is not the owner');
911+
vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, caller));
911912
steward.setRiskConfig(riskConfig);
912913

913-
vm.expectRevert('Ownable: caller is not the owner');
914+
vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, caller));
914915
steward.setAddressRestricted(AaveV3EthereumAssets.GHO_UNDERLYING, true);
915916

916917
vm.stopPrank();

0 commit comments

Comments
 (0)