Skip to content

Commit

Permalink
Merge pull request aave#105 from aave/feat/3.0.1
Browse files Browse the repository at this point in the history
Feat/3.0.1
  • Loading branch information
miguelmtzinf authored Nov 18, 2022
2 parents 654303d + 8b1d632 commit f7c1437
Show file tree
Hide file tree
Showing 46 changed files with 138 additions and 94 deletions.
4 changes: 2 additions & 2 deletions contracts/adapters/paraswap/BaseParaSwapAdapter.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';
import {FlashLoanSimpleReceiverBase} from '@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';
import {PercentageMath} from '@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';
import {PercentageMath} from '@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/adapters/paraswap/ParaSwapLiquiditySwapAdapter.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';
import {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/adapters/paraswap/ParaSwapRepayAdapter.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';
import {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

interface IParaSwapAugustus {
function getTokenTransferProxy() external view returns (address);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

interface IParaSwapAugustusRegistry {
function isValidAugustus(address augustus) external view returns (bool);
Expand Down
2 changes: 1 addition & 1 deletion contracts/dependencies/openzeppelin/ReentrancyGuard.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: MIT

pragma solidity 0.8.10;
pragma solidity ^0.8.10;

/**
* @dev Contract module that helps prevent reentrant calls to a function.
Expand Down
2 changes: 1 addition & 1 deletion contracts/libraries/DataTypesHelper.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.10;
pragma solidity ^0.8.10;

import {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';
import {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';
Expand Down
2 changes: 1 addition & 1 deletion contracts/misc/UiIncentiveDataProviderV3.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.10;
pragma solidity ^0.8.10;

import {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';
import {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/misc/UiPoolDataProviderV3.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';
import {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/misc/WalletBalanceProvider.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {Address} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol';
import {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';
Expand Down
2 changes: 1 addition & 1 deletion contracts/misc/WrappedTokenGatewayV3.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.10;
pragma solidity ^0.8.10;

import {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';
import {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/misc/interfaces/IEACAggregatorProxy.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

interface IEACAggregatorProxy {
function decimals() external view returns (uint8);
Expand Down
4 changes: 2 additions & 2 deletions contracts/misc/interfaces/IERC20DetailedBytes.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';

Expand Down
4 changes: 2 additions & 2 deletions contracts/misc/interfaces/IUiIncentiveDataProviderV3.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';

Expand Down
4 changes: 2 additions & 2 deletions contracts/misc/interfaces/IUiPoolDataProviderV3.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';

Expand Down
4 changes: 2 additions & 2 deletions contracts/misc/interfaces/IWETH.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

interface IWETH {
function deposit() external payable;
Expand Down
4 changes: 2 additions & 2 deletions contracts/misc/interfaces/IWrappedTokenGatewayV3.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

interface IWrappedTokenGatewayV3 {
function depositETH(
Expand Down
4 changes: 2 additions & 2 deletions contracts/mocks/ATokenMock.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IRewardsController} from '../rewards/interfaces/IRewardsController.sol';

Expand Down
2 changes: 1 addition & 1 deletion contracts/mocks/MockBadTransferStrategy.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.10;
pragma solidity ^0.8.10;

import {ITransferStrategyBase} from '../rewards/interfaces/ITransferStrategyBase.sol';
import {TransferStrategyBase} from '../rewards/transfer-strategies/TransferStrategyBase.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/mocks/attacks/SelfdestructTransfer.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

contract SelfdestructTransfer {
function destroyAndTransfer(address payable to) external payable {
Expand Down
4 changes: 2 additions & 2 deletions contracts/mocks/swap/MockParaSwapAugustus.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IParaSwapAugustus} from '../../adapters/paraswap/interfaces/IParaSwapAugustus.sol';
import {MockParaSwapTokenTransferProxy} from './MockParaSwapTokenTransferProxy.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/mocks/swap/MockParaSwapAugustusRegistry.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IParaSwapAugustusRegistry} from '../../adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol';

Expand Down
4 changes: 2 additions & 2 deletions contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';
import {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';
Expand Down
4 changes: 2 additions & 2 deletions contracts/rewards/EmissionManager.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';
import {IEACAggregatorProxy} from '../misc/interfaces/IEACAggregatorProxy.sol';
Expand Down
6 changes: 2 additions & 4 deletions contracts/rewards/RewardsController.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.10;
pragma solidity ^0.8.10;

import {VersionedInitializable} from '@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol';
import {SafeCast} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol';
Expand All @@ -18,7 +18,7 @@ import {IEACAggregatorProxy} from '../misc/interfaces/IEACAggregatorProxy.sol';
contract RewardsController is RewardsDistributor, VersionedInitializable, IRewardsController {
using SafeCast for uint256;

uint256 public constant REVISION = 1;
uint256 public constant REVISION = 2;

// This mapping allows whitelisted addresses to claim on behalf of others
// useful for contracts that hold tokens to be rewarded but don't have any native logic to claim Liquidity Mining rewards
Expand All @@ -41,8 +41,6 @@ contract RewardsController is RewardsDistributor, VersionedInitializable, IRewar
_;
}

constructor(address emissionManager) RewardsDistributor(emissionManager) {}

/**
* @dev Initialize for RewardsController
* @param emissionManager address of the EmissionManager
Expand Down
41 changes: 29 additions & 12 deletions contracts/rewards/RewardsDistributor.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.10;
pragma solidity ^0.8.10;

import {IScaledBalanceToken} from '@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol';
import {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';
import {SafeCast} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol';
import {IRewardsDistributor} from './interfaces/IRewardsDistributor.sol';
Expand All @@ -13,30 +14,26 @@ import {RewardsDataTypes} from './libraries/RewardsDataTypes.sol';
**/
abstract contract RewardsDistributor is IRewardsDistributor {
using SafeCast for uint256;
// manager of incentives
// Manager of incentives
address internal _emissionManager;

// asset => AssetData
// Map of rewarded asset addresses and their data (assetAddress => assetData)
mapping(address => RewardsDataTypes.AssetData) internal _assets;

// reward => enabled
// Map of reward assets (rewardAddress => enabled)
mapping(address => bool) internal _isRewardEnabled;

// global rewards list
// Rewards list
address[] internal _rewardsList;

//global assets list
// Assets list
address[] internal _assetsList;

modifier onlyEmissionManager() {
require(msg.sender == _emissionManager, 'ONLY_EMISSION_MANAGER');
_;
}

constructor(address emissionManager) {
_setEmissionManager(emissionManager);
}

/// @inheritdoc IRewardsDistributor
function getRewardsData(address asset, address reward)
public
Expand All @@ -57,6 +54,22 @@ abstract contract RewardsDistributor is IRewardsDistributor {
);
}

/// @inheritdoc IRewardsDistributor
function getAssetIndex(address asset, address reward)
external
view
override
returns (uint256, uint256)
{
RewardsDataTypes.RewardData storage rewardData = _assets[asset].rewards[reward];
return
_getAssetIndex(
rewardData,
IScaledBalanceToken(asset).scaledTotalSupply(),
10**_assets[asset].decimals
);
}

/// @inheritdoc IRewardsDistributor
function getDistributionEnd(address asset, address reward)
external
Expand Down Expand Up @@ -186,7 +199,7 @@ abstract contract RewardsDistributor is IRewardsDistributor {

(uint256 newIndex, ) = _updateRewardData(
rewardConfig,
IERC20Detailed(asset).totalSupply(),
IScaledBalanceToken(asset).scaledTotalSupply(),
10**decimals
);

Expand Down Expand Up @@ -405,7 +418,10 @@ abstract contract RewardsDistributor is IRewardsDistributor {
// Add unrealized rewards
for (uint256 i = 0; i < userAssetBalances.length; i++) {
if (userAssetBalances[i].userBalance == 0) {
unclaimedRewards += _assets[userAssetBalances[i].asset].rewards[reward].usersData[user].accrued;
unclaimedRewards += _assets[userAssetBalances[i].asset]
.rewards[reward]
.usersData[user]
.accrued;
} else {
unclaimedRewards +=
_getPendingRewards(user, reward, userAssetBalances[i]) +
Expand Down Expand Up @@ -466,6 +482,7 @@ abstract contract RewardsDistributor is IRewardsDistributor {

/**
* @dev Calculates the next value of an specific distribution index, with validations
* @param rewardData Storage pointer to the distribution reward config
* @param totalSupply of the asset being rewarded
* @param assetUnit One unit of asset (10**decimals)
* @return The new index.
Expand Down
4 changes: 2 additions & 2 deletions contracts/rewards/interfaces/IEmissionManager.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';
import {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.10;
pragma solidity ^0.8.10;

import {ITransferStrategyBase} from './ITransferStrategyBase.sol';

Expand Down
4 changes: 2 additions & 2 deletions contracts/rewards/interfaces/IRewardsController.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IRewardsDistributor} from './IRewardsDistributor.sol';
import {ITransferStrategyBase} from './ITransferStrategyBase.sol';
Expand Down
19 changes: 17 additions & 2 deletions contracts/rewards/interfaces/IRewardsDistributor.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

/**
* @title IRewardsDistributor
Expand Down Expand Up @@ -119,6 +119,21 @@ interface IRewardsDistributor {
uint256
);

/**
* @dev Calculates the next value of an specific distribution index, with validations.
* @param asset The incentivized asset
* @param reward The reward token of the incentivized asset
* @return The old index of the asset distribution
* @return The new index of the asset distribution
**/
function getAssetIndex(address asset, address reward)
external
view
returns(
uint256,
uint256
);

/**
* @dev Returns the list of available reward token addresses of an incentivized asset
* @param asset The incentivized asset
Expand Down
2 changes: 1 addition & 1 deletion contracts/rewards/interfaces/IStakedToken.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.10;
pragma solidity ^0.8.10;

interface IStakedToken {
function STAKED_TOKEN() external view returns (address);
Expand Down
4 changes: 2 additions & 2 deletions contracts/rewards/interfaces/IStakedTokenTransferStrategy.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.10;
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

import {IStakedToken} from '../interfaces/IStakedToken.sol';
import {ITransferStrategyBase} from './ITransferStrategyBase.sol';
Expand Down
Loading

0 comments on commit f7c1437

Please sign in to comment.