Skip to content

Commit

Permalink
⬆️ Update aave-helpers lib (aave-dao#30)
Browse files Browse the repository at this point in the history
* ⬆️ 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 <harshsatishpandey@gmail.com>

* ✅ fix tests (Ownable: caller is not the owner)

* 🐛 fix issue wrong owner RiskSteward.sol

---------

Co-authored-by: Harsh Pandey <harshsatishpandey@gmail.com>
  • Loading branch information
MartinGbz and brotherlymite authored Feb 4, 2025
1 parent 27dd0ad commit 9d11b05
Show file tree
Hide file tree
Showing 11 changed files with 98 additions and 67 deletions.
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
url = https://github.com/bgd-labs/aave-capo
[submodule "lib/aave-helpers"]
path = lib/aave-helpers
url = https://github.com/bgd-labs/aave-helpers
url = https://github.com/bgd-labs/aave-helpers
4 changes: 2 additions & 2 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ src = 'src'
test = 'tests'
script = 'scripts'
out = 'out'
solc = '0.8.20'
solc = '0.8.22'
optimizer = true
optimizer_runs = 200
libs = ['lib']
Expand All @@ -18,7 +18,7 @@ src = 'zksync'
test = 'zksync'
script = 'scripts'
libs = ['lib']
solc = '0.8.20'
solc = '0.8.22'
fs_permissions = [{ access = "write", path = "./reports" }]
ffi = true
evm_version = 'shanghai'
Expand Down
16 changes: 10 additions & 6 deletions generator/utils/importsResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,13 @@ function generateRiskStewardImport(code: string) {
const match = code.match(/RiskStewards(\w+)/);

if (match) {
imports = `import {RiskStewards${match[1]}} from '${match[1] == 'ZkSync' ? '../' : ''}../../../../scripts/networks/RiskStewards${match[1]}.s.sol';\n`;
imports = `import {RiskStewards${match[1]}} from '${
match[1] == 'ZkSync' ? '../' : ''
}../../../../scripts/networks/RiskStewards${match[1]}.s.sol';\n`;
if (findMatch(code, 'IRiskSteward')) {
imports += `import {IRiskSteward${findMatch(code, 'IPriceCapAdapter') ? ', IPriceCapAdapter': ''}} from '../../../interfaces/IRiskSteward.sol';\n`;
imports += `import {IRiskSteward${
findMatch(code, 'IPriceCapAdapter') ? ', IPriceCapAdapter' : ''
}} from '../../../interfaces/IRiskSteward.sol';\n`;
}
}
return imports;
Expand All @@ -52,9 +56,9 @@ function generateRiskStewardImport(code: string) {
function generateEngineImport(code: string) {
const matches = [...code.matchAll(/Aave(V[2..3])Payload([A-Za-z]+)/g)].flat();
if (matches.length > 0)
return `import {${matches[0]}} from 'aave-helpers/src/${matches[1].toLowerCase()}-config-engine/${
return `import {${
matches[0]
}.sol';\n`;
}} from 'aave-helpers/src/${matches[1].toLowerCase()}-config-engine/${matches[0]}.sol';\n`;
}

function findMatches(code: string, needles: string[] | readonly string[]) {
Expand Down Expand Up @@ -110,10 +114,10 @@ export function prefixWithImports(code: string) {
}
// common imports
if (findMatch(code, 'IERC20')) {
imports += `import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';\n`;
imports += `import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol';\n`;
}
if (findMatch(code, 'forceApprove')) {
imports += `import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';\n`;
imports += `import {SafeERC20} from 'openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol';\n`;
}
if (findMatch(code, 'GovernanceV3Ethereum')) {
imports += `import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol';\n`;
Expand Down
2 changes: 1 addition & 1 deletion lib/aave-helpers
Submodule aave-helpers updated 73 files
+3 −3 .github/dependabot.yml
+2 −2 .gitignore
+7 −0 .prettierignore
+145 −165 CHANGELOG.md
+1 −1 diffs/AMMTEST_before_AMMTEST_after.md
+1 −1 diffs/adi_test_adi_diffs_before_adi_test_adi_diffs_after.md
+32 −2 diffs/default_before_default_after.md
+14 −14 diffs/preTestV2RatesUpdates_postTestV2RatesUpdates.md
+2 −574 diffs/zksync_before_zksync_after.md
+17 −7 foundry.toml
+1 −1 lib/aave-address-book
+1 −1 lib/forge-std
+2,123 −0 package-lock.json
+2 −3 package.json
+3 −8 scripts/AaveSwapperDeployment.s.sol
+0 −22 scripts/AaveWstethWithdrawerDeployment.s.sol
+1 −1 scripts/DeployBridges.s.sol
+3 −2 scripts/V2RateStrategyFactory.s.sol
+2 −2 src/CollectorUtils.sol
+2 −2 src/CommonTestBase.sol
+1 −2 src/GovV3Helpers.sol
+3 −3 src/ProtocolV2TestBase.sol
+7 −3 src/ProtocolV3TestBase.sol
+0 −114 src/asset-manager/AaveWstethWithdrawer.sol
+0 −14 src/asset-manager/Common.sol
+0 −41 src/asset-manager/LSDLiquidityGaugeManager.sol
+0 −192 src/asset-manager/README.md
+0 −42 src/asset-manager/StrategicAssetsManager.sol
+0 −224 src/asset-manager/VeTokenManager.sol
+0 −72 src/asset-manager/VlTokenManager.sol
+ src/asset-manager/images/AaveWstethWithdrawer.png
+0 −74 src/asset-manager/interfaces/IAaveWstethWithdrawer.sol
+0 −16 src/asset-manager/interfaces/IDelegateRegistry.sol
+0 −12 src/asset-manager/interfaces/ILiquidityGaugeController.sol
+0 −27 src/asset-manager/interfaces/IVeToken.sol
+0 −45 src/asset-manager/interfaces/IVlToken.sol
+0 −90 src/asset-manager/interfaces/IWardenBoost.sol
+4 −6 src/bridges/arbitrum/AaveArbEthERC20Bridge.sol
+4 −6 src/bridges/optimism/AaveOpEthERC20Bridge.sol
+4 −6 src/bridges/polygon/AavePolEthERC20Bridge.sol
+4 −6 src/bridges/polygon/AavePolEthPlasmaBridge.sol
+1 −1 src/dependencies/DefaultReserveInterestRateStrategy.sol
+1 −1 src/riskstewards/CapsPlusRiskSteward.sol
+0 −1 src/riskstewards/ICapsPlusRiskSteward.sol
+10 −10 src/swaps/AaveSwapper.sol
+2 −2 src/swaps/BaseSwapPayload.sol
+2 −2 src/swaps/DepositV2SwapPayload.sol
+2 −2 src/swaps/DepositV3SwapPayload.sol
+0 −3 src/swaps/interfaces/IAaveSwapper.sol
+1 −1 src/swaps/interfaces/IMilkman.sol
+1 −1 src/v2-config-engine/AaveV2Payload.sol
+1 −1 src/v2-config-engine/V2RateStrategyFactory.sol
+1 −1 tests/CollectorUtils.t.sol
+1 −1 tests/GovV3Test.t.sol
+1 −1 tests/ProtocolV2TestBase.t.sol
+0 −245 tests/asset-manager/AaveWstethWithdrawerTest.t.sol
+0 −120 tests/asset-manager/TestLSDLiquidityGaugeManager.t.sol
+0 −125 tests/asset-manager/TestStrategicAssetsManager.t.sol
+0 −529 tests/asset-manager/TestVeTokenManager.t.sol
+0 −251 tests/asset-manager/TestVlTokenManager.t.sol
+8 −4 tests/bridges/arbitrum/AaveArbEthERC20BridgeTest.t.sol
+6 −6 tests/bridges/arbitrum/ArbSysMock.sol
+8 −4 tests/bridges/optimism/AaveOpEthERC20BridgeTest.t.sol
+8 −4 tests/bridges/polygon/AavePolEthERC20BridgeTest.t.sol
+8 −4 tests/bridges/polygon/AavePolEthPlasmaBridge.t.sol
+18 −13 tests/swaps/AaveSwapperTest.t.sol
+1 −1 tests/swaps/DepositV2SwapPayloadTest.t.sol
+1 −1 tests/swaps/DepositV3SwapPayloadTest.t.sol
+1 −1 tests/v2-config-engine/AaveV2ConfigEngineTest.t.sol
+0 −1,041 yarn.lock
+7 −3 zksync/src/ProtocolV3TestBase.sol
+2 −2 zksync/src/SnapshotHelpersV3.sol
+22 −0 zksync/tests/ProtocolV3TestBase.t.sol
2 changes: 1 addition & 1 deletion remappings.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ solidity-utils/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/lib/so
lib/aave-helpers:aave-v3-origin/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src
aave-v3-origin/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/
aave-capo/=lib/aave-capo/src
lib/aave-capo:cl-synchronicity-price-adapter/=lib/aave-capo/lib/cl-synchronicity-price-adapter/src/
lib/aave-capo:cl-synchronicity-price-adapter/=lib/aave-capo/lib/cl-synchronicity-price-adapter/src/
82 changes: 49 additions & 33 deletions report/contracts/src/contracts/RiskSteward.sol.gcov.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,22 @@

<body>

<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr>
<td class="title">LCOV - code coverage report</td>
</tr>
<tr>
<td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td>
</tr>

<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<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>
<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>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
Expand Down Expand Up @@ -53,29 +59,33 @@
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntry">0</td>
</tr>
<tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr>
<td><img src="../../../glass.png" width=3 height=3 alt=""></td>
</tr>
</table>
</td>
</tr>

<tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<tr>
<td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td>
</tr>
</table>

<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: BUSL-1.1</span>
<span id="L2"><span class="lineNum"> 2</span> : : pragma solidity ^0.8.0;</span>
<span id="L3"><span class="lineNum"> 3</span> : : </span>
<span id="L4"><span class="lineNum"> 4</span> : : import {IPoolDataProvider} from 'aave-address-book/AaveV3.sol';</span>
<span id="L5"><span class="lineNum"> 5</span> : : import {Address} from 'solidity-utils/contracts/oz-common/Address.sol';</span>
<span id="L5"><span class="lineNum"> 5</span> : : import {Address} from 'openzeppelin-contracts/contracts/utils/Address.sol';</span>
<span id="L6"><span class="lineNum"> 6</span> : : import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol';</span>
<span id="L7"><span class="lineNum"> 7</span> : : import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol';</span>
<span id="L7"><span class="lineNum"> 7</span> : : import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';</span>
<span id="L8"><span class="lineNum"> 8</span> : : import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/periphery/contracts/v3-config-engine/AaveV3ConfigEngine.sol';</span>
<span id="L9"><span class="lineNum"> 9</span> : : import {IRiskSteward} from '../interfaces/IRiskSteward.sol';</span>
<span id="L10"><span class="lineNum"> 10</span> : : import {IDefaultInterestRateStrategyV2} from 'aave-v3-origin/core/contracts/interfaces/IDefaultInterestRateStrategyV2.sol';</span>
Expand Down Expand Up @@ -509,16 +519,22 @@
<span id="L438"><span class="lineNum"> 438</span> : : }</span>
<span id="L439"><span class="lineNum"> 439</span> : : }</span>
</pre>
</td>
</tr>
</table>
<br>
</td>
</tr>
</table>
<br>

<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
<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>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr>
<td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td>
</tr>
<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>
</table>
<br>

</body>
</html>

</html>
16 changes: 9 additions & 7 deletions src/contracts/AaveStewardInjector.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {IRiskOracle} from './dependencies/IRiskOracle.sol';
import {IRiskSteward} from '../interfaces/IRiskSteward.sol';
import {IAaveStewardInjector, AutomationCompatibleInterface} from '../interfaces/IAaveStewardInjector.sol';
import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol';
import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';

/**
* @title AaveStewardInjector
Expand Down Expand Up @@ -45,11 +45,15 @@ contract AaveStewardInjector is Ownable, IAaveStewardInjector {
* @param guardian address of the guardian / owner of the stewards injector.
* @param whitelistedAsset address of the whitelisted asset for which update can be injected.
*/
constructor(address riskOracle, address riskSteward, address guardian, address whitelistedAsset) {
constructor(
address riskOracle,
address riskSteward,
address guardian,
address whitelistedAsset
) Ownable(guardian) {
RISK_ORACLE = riskOracle;
RISK_STEWARD = riskSteward;
WHITELISTED_ASSET = whitelistedAsset;
_transferOwnership(guardian);
}

/**
Expand Down Expand Up @@ -108,13 +112,11 @@ contract AaveStewardInjector is Ownable, IAaveStewardInjector {
function _canUpdateBeInjected(
IRiskOracle.RiskParameterUpdate memory updateRiskParams
) internal view returns (bool) {
return (
!isUpdateIdExecuted(updateRiskParams.updateId) &&
return (!isUpdateIdExecuted(updateRiskParams.updateId) &&
(updateRiskParams.timestamp + EXPIRATION_PERIOD > block.timestamp) &&
updateRiskParams.market == WHITELISTED_ASSET &&
keccak256(bytes(updateRiskParams.updateType)) == keccak256(bytes(WHITELISTED_UPDATE_TYPE)) &&
!isDisabled(updateRiskParams.updateId)
);
!isDisabled(updateRiskParams.updateId));
}

/**
Expand Down
8 changes: 4 additions & 4 deletions src/contracts/RiskSteward.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
pragma solidity ^0.8.0;

import {IPoolDataProvider} from 'aave-address-book/AaveV3.sol';
import {Address} from 'solidity-utils/contracts/oz-common/Address.sol';
import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol';
import {Address} from 'openzeppelin-contracts/contracts/utils/Address.sol';
import {SafeCast} from 'openzeppelin-contracts/contracts/utils/math/SafeCast.sol';
import {EngineFlags} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/EngineFlags.sol';
import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol';
import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';
import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
import {IRiskSteward} from '../interfaces/IRiskSteward.sol';
import {IDefaultInterestRateStrategyV2} from 'aave-v3-origin/src/contracts/interfaces/IDefaultInterestRateStrategyV2.sol';
Expand Down Expand Up @@ -59,7 +59,7 @@ contract RiskSteward is Ownable, IRiskSteward {
IEngine engine,
address riskCouncil,
Config memory riskConfig
) {
) Ownable(msg.sender) {
POOL_DATA_PROVIDER = poolDataProvider;
CONFIG_ENGINE = engine;
RISK_COUNCIL = riskCouncil;
Expand Down
26 changes: 17 additions & 9 deletions tests/AaveStewardsInjector.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {TestnetProcedures} from 'aave-v3-origin/tests/utils/TestnetProcedures.so
import {RiskOracle} from '../src/contracts/dependencies/RiskOracle.sol';
import {AaveStewardInjector, IAaveStewardInjector} from '../src/contracts/AaveStewardInjector.sol';
import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol';
import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';

contract AaveStewardsInjector_Test is TestnetProcedures {
RiskSteward _riskSteward;
Expand Down Expand Up @@ -50,17 +51,16 @@ contract AaveStewardsInjector_Test is TestnetProcedures {
string[] memory initialUpdateTypes = new string[](1);
initialUpdateTypes[0] = 'RateStrategyUpdate';

_riskOracle = new RiskOracle(
'RiskOracle',
initialSenders,
initialUpdateTypes
);
_riskOracle = new RiskOracle('RiskOracle', initialSenders, initialUpdateTypes);
vm.stopPrank();

// setup steward injector
vm.startPrank(_stewardsInjectorOwner);

address computedRiskStewardAddress = vm.computeCreateAddress(_stewardsInjectorOwner, vm.getNonce(_stewardsInjectorOwner) + 1);
address computedRiskStewardAddress = vm.computeCreateAddress(
_stewardsInjectorOwner,
vm.getNonce(_stewardsInjectorOwner) + 1
);
_stewardInjector = new AaveStewardInjector(
address(_riskOracle),
address(computedRiskStewardAddress),
Expand Down Expand Up @@ -102,7 +102,9 @@ contract AaveStewardsInjector_Test is TestnetProcedures {
_addUpdateToRiskOracle();

vm.prank(address(1));
vm.expectRevert(bytes('Ownable: caller is not the owner'));
vm.expectRevert(
abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, address(1))
);
_stewardInjector.disableUpdateById(1, true);

assertFalse(_stewardInjector.isDisabled(1));
Expand Down Expand Up @@ -131,7 +133,7 @@ contract AaveStewardsInjector_Test is TestnetProcedures {
}

function test_isUpdatedIdExecuted() public {
// add rate update to risk oracle
// add rate update to risk oracle
_addUpdateToRiskOracle();

assertFalse(_stewardInjector.isUpdateIdExecuted(1));
Expand Down Expand Up @@ -160,7 +162,13 @@ contract AaveStewardsInjector_Test is TestnetProcedures {
}

function test_reverts_sameUpdateInjectedTwice() public {
_addUpdateToRiskOracle(EngineFlags.KEEP_CURRENT, 5_00, EngineFlags.KEEP_CURRENT, EngineFlags.KEEP_CURRENT, block.timestamp - 100); // updateId 1
_addUpdateToRiskOracle(
EngineFlags.KEEP_CURRENT,
5_00,
EngineFlags.KEEP_CURRENT,
EngineFlags.KEEP_CURRENT,
block.timestamp - 100
); // updateId 1

vm.expectEmit(address(_stewardInjector));
emit ActionSucceeded(1);
Expand Down
5 changes: 3 additions & 2 deletions tests/RiskSteward.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {RiskSteward, IRiskSteward, IEngine, EngineFlags} from 'src/contracts/Ris
import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol';
import {ConfigEngineDeployer} from './utils/ConfigEngineDeployer.sol';
import {Ownable} from 'openzeppelin-contracts/contracts/access/Ownable.sol';

contract RiskSteward_Test is Test {
address public constant riskCouncil = address(42);
Expand Down Expand Up @@ -907,10 +908,10 @@ contract RiskSteward_Test is Test {
vm.expectRevert(IRiskSteward.InvalidCaller.selector);
steward.updateRates(rateStrategyUpdate);

vm.expectRevert('Ownable: caller is not the owner');
vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, caller));
steward.setRiskConfig(riskConfig);

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

vm.stopPrank();
Expand Down
2 changes: 1 addition & 1 deletion tests/RiskStewardCapo.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {ConfigEngineDeployer} from './utils/ConfigEngineDeployer.sol';
import {IPriceCapAdapter} from 'aave-capo/interfaces/IPriceCapAdapter.sol';
import {IPriceCapAdapterStable, IChainlinkAggregator} from 'aave-capo/interfaces/IPriceCapAdapterStable.sol';
import {PriceCapAdapterStable} from 'aave-capo/contracts/PriceCapAdapterStable.sol';
import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol';
import {SafeCast} from 'openzeppelin-contracts/contracts/utils/math/SafeCast.sol';

contract RiskSteward_Capo_Test is Test {
using SafeCast for uint256;
Expand Down

0 comments on commit 9d11b05

Please sign in to comment.