Skip to content

Commit

Permalink
feat: refactored PoolDataProvider functions in the addresses provider…
Browse files Browse the repository at this point in the history
…, fixed _checkNoLiquidity
  • Loading branch information
The-3D committed Oct 5, 2021
1 parent dda63b8 commit 10300d4
Show file tree
Hide file tree
Showing 8 changed files with 24 additions and 29 deletions.
6 changes: 3 additions & 3 deletions contracts/interfaces/IPoolAddressesProvider.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ interface IPoolAddressesProvider {
event PriceOracleSentinelUpdated(address indexed newAddress);
event ProxyCreated(bytes32 id, address indexed newAddress);
event BridgeAccessControlUpdated(address indexed newAddress);
event DataProviderUpdated(address indexed newAddress);
event PoolDataProviderUpdated(address indexed newAddress);
event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy);

/**
Expand Down Expand Up @@ -126,11 +126,11 @@ interface IPoolAddressesProvider {
* @notice Updates the address of the DataProvider
* @param dataProvider The address of the new DataProvider
**/
function setDataProvider(address dataProvider) external;
function setPoolDataProvider(address dataProvider) external;

/**
* @notice Returns the address of the DataProvider
* @return The DataProvider address
*/
function getDataProvider() external view returns (address);
function getPoolDataProvider() external view returns (address);
}
4 changes: 3 additions & 1 deletion contracts/misc/AaveProtocolDataProvider.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,14 @@ import {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';
import {IStableDebtToken} from '../interfaces/IStableDebtToken.sol';
import {IVariableDebtToken} from '../interfaces/IVariableDebtToken.sol';
import {IPool} from '../interfaces/IPool.sol';
import {IPoolDataProvider} from '../interfaces/IPoolDataProvider.sol';

/**
* @title AaveProtocolDataProvider
* @author Aave
* @notice Peripherial contract to gather and extract information from the Pool.
*/
contract AaveProtocolDataProvider {
contract AaveProtocolDataProvider is IPoolDataProvider {
using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
using UserConfiguration for DataTypes.UserConfigurationMap;
using WadRayMath for uint256;
Expand Down Expand Up @@ -192,6 +193,7 @@ contract AaveProtocolDataProvider {
function getReserveData(address asset)
external
view
override
returns (
uint256 unbacked,
uint256 accruedToTreasuryScaled,
Expand Down
6 changes: 3 additions & 3 deletions contracts/protocol/configuration/PoolAddressesProvider.sol
Original file line number Diff line number Diff line change
Expand Up @@ -124,13 +124,13 @@ contract PoolAddressesProvider is Ownable, IPoolAddressesProvider {
}

/// @inheritdoc IPoolAddressesProvider
function setDataProvider(address dataProvider) external override onlyOwner {
function setPoolDataProvider(address dataProvider) external override onlyOwner {
_addresses[DATA_PROVIDER] = dataProvider;
emit DataProviderUpdated(dataProvider);
emit PoolDataProviderUpdated(dataProvider);
}

/// @inheritdoc IPoolAddressesProvider
function getDataProvider() external view override returns (address) {
function getPoolDataProvider() external view override returns (address) {
return getAddress(DATA_PROVIDER);
}

Expand Down
20 changes: 6 additions & 14 deletions contracts/protocol/pool/PoolConfigurator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesControl
import {IPoolConfigurator} from '../../interfaces/IPoolConfigurator.sol';
import {IPool} from '../../interfaces/IPool.sol';
import {IACLManager} from '../../interfaces/IACLManager.sol';
import {IPoolDataProvider} from '../../interfaces/IPoolDataProvider.sol';

/**
* @title PoolConfigurator
Expand Down Expand Up @@ -258,13 +259,7 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator {

/// @inheritdoc IPoolConfigurator
function setDebtCeiling(address asset, uint256 ceiling) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveData memory reserveData = _pool.getReserveData(asset);
uint256 aTokenSupply = IERC20Detailed(reserveData.aTokenAddress).totalSupply();

if (ceiling > 0) {
require(aTokenSupply == 0, Errors.PC_INVALID_DEBT_CEILING_ASSET_ALREADY_SUPPLIED);
}

_checkNoLiquidity(asset);
DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);
currentConfig.setDebtCeiling(ceiling);
_pool.setConfiguration(asset, currentConfig.data);
Expand Down Expand Up @@ -414,14 +409,11 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator {
}

function _checkNoLiquidity(address asset) internal view {
DataTypes.ReserveData memory reserveData = _pool.getReserveData(asset);
(, , uint256 totalATokens, , , , , , , , , ) = IPoolDataProvider(
_addressesProvider.getPoolDataProvider()
).getReserveData(asset);

uint256 availableLiquidity = IERC20Detailed(asset).balanceOf(reserveData.aTokenAddress);

require(
availableLiquidity == 0 && reserveData.currentLiquidityRate == 0,
Errors.PC_RESERVE_LIQUIDITY_NOT_0
);
require(totalATokens == 0, Errors.PC_RESERVE_LIQUIDITY_NOT_0);
}

function _onlyPoolAdmin() internal view {
Expand Down
2 changes: 1 addition & 1 deletion hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ require(`${path.join(__dirname, 'tasks/misc')}/set-bre.ts`);

const hardhatConfig: HardhatUserConfig = {
gasReporter: {
enabled: true,
enabled: false,
},
contractSizer: {
alphaSort: true,
Expand Down
2 changes: 1 addition & 1 deletion test-suites/__setup.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address);
const admin = await deployer.getAddress();

await addressesProvider.setDataProvider(testHelpers.address);
await addressesProvider.setPoolDataProvider(testHelpers.address);

console.log('Initialize configuration');

Expand Down
1 change: 1 addition & 0 deletions test-suites/configurator-modifiers.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ makeSuite('PoolConfigurator: Modifiers', (testEnv: TestEnv) => {
{ fn: 'deactivateReserve', args: [randomAddress] },
{ fn: 'updateFlashloanPremiumTotal', args: [randomNumber] },
{ fn: 'updateFlashloanPremiumToProtocol', args: [randomNumber] },
{ fn: 'updateFlashloanPremiumToProtocol', args: [randomNumber] },
];
for (const call of calls) {
await expect(
Expand Down
12 changes: 6 additions & 6 deletions test-suites/pool-addresses-provider.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ makeSuite('PoolAddressesProvider', (testEnv: TestEnv) => {
addressesProvider.setPriceOracle,
addressesProvider.setACLAdmin,
addressesProvider.setPriceOracleSentinel,
addressesProvider.setDataProvider,
addressesProvider.setPoolDataProvider,
]) {
await expect(contractFunction(mockAddress)).to.be.revertedWith(INVALID_OWNER_REVERT_MSG);
}
Expand Down Expand Up @@ -138,18 +138,18 @@ makeSuite('PoolAddressesProvider', (testEnv: TestEnv) => {
const { addressesProvider, helpersContract, users } = testEnv;
const currentAddressesProviderOwner = users[1];

expect(await addressesProvider.getDataProvider(), helpersContract.address);
expect(await addressesProvider.getPoolDataProvider(), helpersContract.address);

expect(
await addressesProvider
.connect(currentAddressesProviderOwner.signer)
.setDataProvider(ZERO_ADDRESS)
.setPoolDataProvider(ZERO_ADDRESS)
)
.to.emit(addressesProvider, 'DataProviderUpdated')
.to.emit(addressesProvider, 'PoolDataProviderUpdated')
.withArgs(ZERO_ADDRESS);

expect(await addressesProvider.getDataProvider()).to.be.not.eq(helpersContract.address);
expect(await addressesProvider.getDataProvider()).to.be.eq(ZERO_ADDRESS);
expect(await addressesProvider.getPoolDataProvider()).to.be.not.eq(helpersContract.address);
expect(await addressesProvider.getPoolDataProvider()).to.be.eq(ZERO_ADDRESS);

await evmRevert(snapId);
});
Expand Down

0 comments on commit 10300d4

Please sign in to comment.