mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
feat: Added configurator managing flashloan premiums
This commit is contained in:
parent
39301ebee1
commit
a6b71313e1
|
@ -471,4 +471,17 @@ interface ILendingPool {
|
||||||
function updateFlashBorrowerAuthorization(address flashBorrower, bool authorized) external;
|
function updateFlashBorrowerAuthorization(address flashBorrower, bool authorized) external;
|
||||||
|
|
||||||
function isFlashBorrowerAuthorized(address flashBorrower) external view returns (bool);
|
function isFlashBorrowerAuthorized(address flashBorrower) external view returns (bool);
|
||||||
|
|
||||||
|
function updateFlashloanPremiums(
|
||||||
|
uint256 flashLoanPremiumTotal,
|
||||||
|
uint256 flashLoanPremiumToProtocol
|
||||||
|
) external;
|
||||||
|
|
||||||
|
function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);
|
||||||
|
|
||||||
|
function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint256);
|
||||||
|
|
||||||
|
function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint256);
|
||||||
|
|
||||||
|
function MAX_NUMBER_RESERVES() external view returns (uint256);
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,6 +233,18 @@ interface ILendingPoolConfigurator {
|
||||||
**/
|
**/
|
||||||
event RiskAdminUnregistered(address indexed admin);
|
event RiskAdminUnregistered(address indexed admin);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Emitted when a the total premium on flashloans is updated
|
||||||
|
* @param flashloanPremiumTotal the new premium
|
||||||
|
**/
|
||||||
|
event FlashloanPremiumTotalUpdated(uint256 flashloanPremiumTotal);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Emitted when a the part of the premium that goes to protoco lis updated
|
||||||
|
* @param flashloanPremiumToProtocol the new premium
|
||||||
|
**/
|
||||||
|
event FlashloanPremiumToProcolUpdated(uint256 flashloanPremiumToProtocol);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Initializes reserves in batch
|
* @dev Initializes reserves in batch
|
||||||
* @param input The array of reserves initialization parameters
|
* @param input The array of reserves initialization parameters
|
||||||
|
@ -410,4 +422,8 @@ interface ILendingPoolConfigurator {
|
||||||
* @param asset the address of the reserve to drop
|
* @param asset the address of the reserve to drop
|
||||||
**/
|
**/
|
||||||
function dropReserve(address asset) external;
|
function dropReserve(address asset) external;
|
||||||
|
|
||||||
|
function updateFlashloanPremiumTotal(uint256 flashloanPremiumTotal) external;
|
||||||
|
|
||||||
|
function updateFlashloanPremiumToProtocol(uint256 flashloanPremiumToProtocol) external;
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,9 +87,9 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
function initialize(ILendingPoolAddressesProvider provider) public initializer {
|
function initialize(ILendingPoolAddressesProvider provider) public initializer {
|
||||||
_addressesProvider = provider;
|
_addressesProvider = provider;
|
||||||
_maxStableRateBorrowSizePercent = 2500;
|
_maxStableRateBorrowSizePercent = 2500;
|
||||||
_flashLoanPremiumToLP = 7;
|
_flashLoanPremiumTotal = 9;
|
||||||
_maxNumberOfReserves = 128;
|
_maxNumberOfReserves = 128;
|
||||||
_flashLoanPremiumToProtocol = 2;
|
_flashLoanPremiumToProtocol = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -437,7 +437,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
uint256 currentPremiumToProtocol;
|
uint256 currentPremiumToProtocol;
|
||||||
uint256 currentAmountPlusPremium;
|
uint256 currentAmountPlusPremium;
|
||||||
address debtToken;
|
address debtToken;
|
||||||
uint256 flashloanPremiumToLP;
|
uint256 flashloanPremiumTotal;
|
||||||
uint256 flashloanPremiumToProtocol;
|
uint256 flashloanPremiumToProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -474,19 +474,18 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
address[] memory aTokenAddresses = new address[](assets.length);
|
address[] memory aTokenAddresses = new address[](assets.length);
|
||||||
uint256[] memory totalPremiums = new uint256[](assets.length);
|
uint256[] memory totalPremiums = new uint256[](assets.length);
|
||||||
vars.receiver = IFlashLoanReceiver(receiverAddress);
|
vars.receiver = IFlashLoanReceiver(receiverAddress);
|
||||||
(vars.flashloanPremiumToLP, vars.flashloanPremiumToProtocol) = _authorizedFlashBorrowers[
|
(vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = _authorizedFlashBorrowers[
|
||||||
msg.sender
|
msg.sender
|
||||||
]
|
]
|
||||||
? (0, 0)
|
? (0, 0)
|
||||||
: (_flashLoanPremiumToLP, _flashLoanPremiumToProtocol);
|
: (_flashLoanPremiumTotal, _flashLoanPremiumToProtocol);
|
||||||
|
|
||||||
for (vars.i = 0; vars.i < assets.length; vars.i++) {
|
for (vars.i = 0; vars.i < assets.length; vars.i++) {
|
||||||
aTokenAddresses[vars.i] = _reserves[assets[vars.i]].aTokenAddress;
|
aTokenAddresses[vars.i] = _reserves[assets[vars.i]].aTokenAddress;
|
||||||
|
|
||||||
vars.currentPremiumToLP = amounts[vars.i].percentMul(vars.flashloanPremiumToLP);
|
totalPremiums[vars.i] = amounts[vars.i].percentMul(vars.flashloanPremiumTotal);
|
||||||
vars.currentPremiumToProtocol = amounts[vars.i].percentMul(vars.flashloanPremiumToProtocol);
|
vars.currentPremiumToProtocol = amounts[vars.i].percentMul(vars.flashloanPremiumToProtocol);
|
||||||
|
vars.currentPremiumToLP = totalPremiums[vars.i].sub(vars.currentPremiumToProtocol);
|
||||||
totalPremiums[vars.i] = vars.currentPremiumToLP.add(vars.currentPremiumToProtocol);
|
|
||||||
|
|
||||||
IAToken(aTokenAddresses[vars.i]).transferUnderlyingTo(receiverAddress, amounts[vars.i]);
|
IAToken(aTokenAddresses[vars.i]).transferUnderlyingTo(receiverAddress, amounts[vars.i]);
|
||||||
}
|
}
|
||||||
|
@ -737,21 +736,28 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
/**
|
/**
|
||||||
* @dev Returns the percentage of available liquidity that can be borrowed at once at stable rate
|
* @dev Returns the percentage of available liquidity that can be borrowed at once at stable rate
|
||||||
*/
|
*/
|
||||||
function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view returns (uint256) {
|
function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view override returns (uint256) {
|
||||||
return _maxStableRateBorrowSizePercent;
|
return _maxStableRateBorrowSizePercent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Returns the fee on flash loans
|
* @dev Returns the total fee on flash loans
|
||||||
*/
|
*/
|
||||||
function FLASHLOAN_PREMIUM_TOTAL() public view returns (uint256) {
|
function FLASHLOAN_PREMIUM_TOTAL() public view override returns (uint256) {
|
||||||
return _flashLoanPremiumToLP;
|
return _flashLoanPremiumTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Returns the part of the flashloan fees sent to protocol
|
||||||
|
*/
|
||||||
|
function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view override returns (uint256) {
|
||||||
|
return _flashLoanPremiumToProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Returns the maximum number of reserves supported to be listed in this LendingPool
|
* @dev Returns the maximum number of reserves supported to be listed in this LendingPool
|
||||||
*/
|
*/
|
||||||
function MAX_NUMBER_RESERVES() public view returns (uint256) {
|
function MAX_NUMBER_RESERVES() public view override returns (uint256) {
|
||||||
return _maxNumberOfReserves;
|
return _maxNumberOfReserves;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -899,6 +905,14 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
return _authorizedFlashBorrowers[flashBorrower];
|
return _authorizedFlashBorrowers[flashBorrower];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateFlashloanPremiums(
|
||||||
|
uint256 flashLoanPremiumTotal,
|
||||||
|
uint256 flashLoanPremiumToProtocol
|
||||||
|
) external override onlyLendingPoolConfigurator {
|
||||||
|
_flashLoanPremiumTotal = flashLoanPremiumTotal;
|
||||||
|
_flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;
|
||||||
|
}
|
||||||
|
|
||||||
struct ExecuteBorrowParams {
|
struct ExecuteBorrowParams {
|
||||||
address asset;
|
address asset;
|
||||||
address user;
|
address user;
|
||||||
|
|
|
@ -508,6 +508,26 @@ contract LendingPoolConfigurator is VersionedInitializable, ILendingPoolConfigur
|
||||||
return _riskAdmins[admin];
|
return _riskAdmins[admin];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @inheritdoc ILendingPoolConfigurator
|
||||||
|
function updateFlashloanPremiumTotal(uint256 flashloanPremiumTotal)
|
||||||
|
external
|
||||||
|
override
|
||||||
|
onlyPoolAdmin
|
||||||
|
{
|
||||||
|
_pool.updateFlashloanPremiums(flashloanPremiumTotal, _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL());
|
||||||
|
emit FlashloanPremiumTotalUpdated(flashloanPremiumTotal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @inheritdoc ILendingPoolConfigurator
|
||||||
|
function updateFlashloanPremiumToProtocol(uint256 flashloanPremiumToProtocol)
|
||||||
|
external
|
||||||
|
override
|
||||||
|
onlyPoolAdmin
|
||||||
|
{
|
||||||
|
_pool.updateFlashloanPremiums(_pool.FLASHLOAN_PREMIUM_TOTAL(), flashloanPremiumToProtocol);
|
||||||
|
emit FlashloanPremiumToProcolUpdated(flashloanPremiumToProtocol);
|
||||||
|
}
|
||||||
|
|
||||||
function _initTokenWithProxy(address implementation, bytes memory initParams)
|
function _initTokenWithProxy(address implementation, bytes memory initParams)
|
||||||
internal
|
internal
|
||||||
returns (address)
|
returns (address)
|
||||||
|
|
|
@ -26,7 +26,7 @@ contract LendingPoolStorage {
|
||||||
|
|
||||||
uint256 internal _maxStableRateBorrowSizePercent;
|
uint256 internal _maxStableRateBorrowSizePercent;
|
||||||
|
|
||||||
uint256 internal _flashLoanPremiumToLP;
|
uint256 internal _flashLoanPremiumTotal;
|
||||||
|
|
||||||
uint256 internal _maxNumberOfReserves;
|
uint256 internal _maxNumberOfReserves;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user