mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
initial integration of pei, no tests
This commit is contained in:
parent
227c0b4962
commit
43c8ef02db
11
contracts/interfaces/IAaveIncentivesController.sol
Normal file
11
contracts/interfaces/IAaveIncentivesController.sol
Normal file
|
@ -0,0 +1,11 @@
|
|||
// SPDX-License-Identifier: agpl-3.0
|
||||
pragma solidity 0.6.8;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
interface IAaveIncentivesController {
|
||||
function handleAction(
|
||||
address user,
|
||||
uint256 userBalance,
|
||||
uint256 totalSupply
|
||||
) external;
|
||||
}
|
|
@ -9,8 +9,9 @@ contract MockAToken is AToken {
|
|||
LendingPool _pool,
|
||||
address _underlyingAssetAddress,
|
||||
string memory _tokenName,
|
||||
string memory _tokenSymbol
|
||||
) public AToken(_pool, _underlyingAssetAddress, _tokenName, _tokenSymbol) {}
|
||||
string memory _tokenSymbol,
|
||||
address incentivesController
|
||||
) public AToken(_pool, _underlyingAssetAddress, _tokenName, _tokenSymbol, incentivesController) {}
|
||||
|
||||
function getRevision() internal override pure returns (uint256) {
|
||||
return 0x2;
|
||||
|
|
|
@ -9,8 +9,12 @@ contract MockStableDebtToken is StableDebtToken {
|
|||
address _pool,
|
||||
address _underlyingAssetAddress,
|
||||
string memory _tokenName,
|
||||
string memory _tokenSymbol
|
||||
) public StableDebtToken(_pool, _underlyingAssetAddress, _tokenName, _tokenSymbol) {}
|
||||
string memory _tokenSymbol,
|
||||
address incentivesController
|
||||
)
|
||||
public
|
||||
StableDebtToken(_pool, _underlyingAssetAddress, _tokenName, _tokenSymbol, incentivesController)
|
||||
{}
|
||||
|
||||
function getRevision() internal override pure returns (uint256) {
|
||||
return 0x2;
|
||||
|
|
|
@ -9,8 +9,18 @@ contract MockVariableDebtToken is VariableDebtToken {
|
|||
address _pool,
|
||||
address _underlyingAssetAddress,
|
||||
string memory _tokenName,
|
||||
string memory _tokenSymbol
|
||||
) public VariableDebtToken(_pool, _underlyingAssetAddress, _tokenName, _tokenSymbol) {}
|
||||
string memory _tokenSymbol,
|
||||
address incentivesController
|
||||
)
|
||||
public
|
||||
VariableDebtToken(
|
||||
_pool,
|
||||
_underlyingAssetAddress,
|
||||
_tokenName,
|
||||
_tokenSymbol,
|
||||
incentivesController
|
||||
)
|
||||
{}
|
||||
|
||||
function getRevision() internal override pure returns (uint256) {
|
||||
return 0x2;
|
||||
|
|
|
@ -45,8 +45,9 @@ contract AToken is VersionedInitializable, ERC20, IAToken {
|
|||
LendingPool pool,
|
||||
address underlyingAssetAddress,
|
||||
string memory tokenName,
|
||||
string memory tokenSymbol
|
||||
) public ERC20(tokenName, tokenSymbol, 18) {
|
||||
string memory tokenSymbol,
|
||||
address incentivesController
|
||||
) public ERC20(tokenName, tokenSymbol, 18, incentivesController) {
|
||||
POOL = pool;
|
||||
UNDERLYING_ASSET_ADDRESS = underlyingAssetAddress;
|
||||
}
|
||||
|
@ -161,6 +162,21 @@ contract AToken is VersionedInitializable, ERC20, IAToken {
|
|||
return super.balanceOf(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev returns the principal balance of the user and principal total supply.
|
||||
* @param user the address of the user
|
||||
* @return the principal balance of the user
|
||||
* @return the principal total supply
|
||||
**/
|
||||
function getScaledUserBalanceAndSupply(address user)
|
||||
external
|
||||
override
|
||||
view
|
||||
returns (uint256, uint256)
|
||||
{
|
||||
return (super.balanceOf(user), super.totalSupply());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev calculates the total supply of the specific aToken
|
||||
* since the balance of every single user increases over time, the total supply
|
||||
|
|
|
@ -5,6 +5,7 @@ import {Context} from '../misc/Context.sol';
|
|||
import {IERC20} from '../interfaces/IERC20.sol';
|
||||
import {IERC20Detailed} from '../interfaces/IERC20Detailed.sol';
|
||||
import {SafeMath} from '../libraries/math/SafeMath.sol';
|
||||
import {IAaveIncentivesController} from '../interfaces/IAaveIncentivesController.sol';
|
||||
|
||||
/**
|
||||
* @title ERC20
|
||||
|
@ -14,6 +15,8 @@ import {SafeMath} from '../libraries/math/SafeMath.sol';
|
|||
contract ERC20 is Context, IERC20, IERC20Detailed {
|
||||
using SafeMath for uint256;
|
||||
|
||||
IAaveIncentivesController internal immutable _incentivesController;
|
||||
|
||||
mapping(address => uint256) private _balances;
|
||||
mapping(address => mapping(address => uint256)) private _allowances;
|
||||
uint256 private _totalSupply;
|
||||
|
@ -24,11 +27,13 @@ contract ERC20 is Context, IERC20, IERC20Detailed {
|
|||
constructor(
|
||||
string memory name,
|
||||
string memory symbol,
|
||||
uint8 decimals
|
||||
uint8 decimals,
|
||||
address incentivesController
|
||||
) public {
|
||||
_name = name;
|
||||
_symbol = symbol;
|
||||
_decimals = decimals;
|
||||
_incentivesController = IAaveIncentivesController(incentivesController);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -167,8 +172,16 @@ contract ERC20 is Context, IERC20, IERC20Detailed {
|
|||
|
||||
_beforeTokenTransfer(sender, recipient, amount);
|
||||
|
||||
_balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');
|
||||
uint256 oldSenderBalance = _balances[sender];
|
||||
_balances[sender] = oldSenderBalance.sub(amount, 'ERC20: transfer amount exceeds balance');
|
||||
uint256 oldRecipientBalance = _balances[recipient];
|
||||
_balances[recipient] = _balances[recipient].add(amount);
|
||||
|
||||
if (address(_incentivesController) != address(0x0)) {
|
||||
uint256 totalSupply = _totalSupply;
|
||||
_incentivesController.handleAction(sender, totalSupply, oldSenderBalance);
|
||||
_incentivesController.handleAction(recipient, totalSupply, oldRecipientBalance);
|
||||
}
|
||||
emit Transfer(sender, recipient, amount);
|
||||
}
|
||||
|
||||
|
@ -177,8 +190,16 @@ contract ERC20 is Context, IERC20, IERC20Detailed {
|
|||
|
||||
_beforeTokenTransfer(address(0), account, amount);
|
||||
|
||||
_totalSupply = _totalSupply.add(amount);
|
||||
_balances[account] = _balances[account].add(amount);
|
||||
uint256 oldTotalSupply = _totalSupply;
|
||||
_totalSupply = oldTotalSupply.add(amount);
|
||||
|
||||
uint256 oldAccountBalance = _balances[account];
|
||||
_balances[account] = oldAccountBalance.add(amount);
|
||||
|
||||
if (address(_incentivesController) != address(0x0)) {
|
||||
_incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);
|
||||
}
|
||||
|
||||
emit Transfer(address(0), account, amount);
|
||||
}
|
||||
|
||||
|
@ -187,8 +208,16 @@ contract ERC20 is Context, IERC20, IERC20Detailed {
|
|||
|
||||
_beforeTokenTransfer(account, address(0), amount);
|
||||
|
||||
_balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');
|
||||
_totalSupply = _totalSupply.sub(amount);
|
||||
uint256 oldTotalSupply = _totalSupply;
|
||||
_totalSupply = oldTotalSupply.sub(amount);
|
||||
|
||||
uint256 oldAccountBalance = _balances[account];
|
||||
_balances[account] = oldAccountBalance.sub(amount, 'ERC20: burn amount exceeds balance');
|
||||
|
||||
if (address(_incentivesController) != address(0x0)) {
|
||||
_incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);
|
||||
}
|
||||
|
||||
emit Transfer(account, address(0), amount);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,8 +26,9 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
|
|||
address pool,
|
||||
address underlyingAsset,
|
||||
string memory name,
|
||||
string memory symbol
|
||||
) public DebtTokenBase(pool, underlyingAsset, name, symbol) {}
|
||||
string memory symbol,
|
||||
address incentivesController
|
||||
) public DebtTokenBase(pool, underlyingAsset, name, symbol, incentivesController) {}
|
||||
|
||||
/**
|
||||
* @dev gets the revision of the stable debt token implementation
|
||||
|
|
|
@ -22,8 +22,9 @@ contract VariableDebtToken is DebtTokenBase, IVariableDebtToken {
|
|||
address pool,
|
||||
address underlyingAsset,
|
||||
string memory name,
|
||||
string memory symbol
|
||||
) public DebtTokenBase(pool, underlyingAsset, name, symbol) {}
|
||||
string memory symbol,
|
||||
address incentivesController
|
||||
) public DebtTokenBase(pool, underlyingAsset, name, symbol, incentivesController) {}
|
||||
|
||||
/**
|
||||
* @dev gets the revision of the stable debt token implementation
|
||||
|
|
|
@ -38,8 +38,9 @@ abstract contract DebtTokenBase is ERC20, VersionedInitializable {
|
|||
address pool,
|
||||
address underlyingAssetAddress,
|
||||
string memory name,
|
||||
string memory symbol
|
||||
) public ERC20(name, symbol, 18) {
|
||||
string memory symbol,
|
||||
address incentivesController
|
||||
) public ERC20(name, symbol, 18, incentivesController) {
|
||||
POOL = ILendingPool(pool);
|
||||
UNDERLYING_ASSET = underlyingAssetAddress;
|
||||
}
|
||||
|
|
|
@ -82,6 +82,14 @@ interface IAToken is IERC20 {
|
|||
**/
|
||||
function scaledBalanceOf(address user) external view returns (uint256);
|
||||
|
||||
/**
|
||||
* @dev returns the principal balance of the user and principal total supply.
|
||||
* @param user the address of the user
|
||||
* @return the principal balance of the user
|
||||
* @return the principal total supply
|
||||
**/
|
||||
function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);
|
||||
|
||||
/**
|
||||
* @dev Used to validate transfers before actually executing them.
|
||||
* @param user address of the user to check
|
||||
|
|
Loading…
Reference in New Issue
Block a user