mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Updated Weth gateway contract
This commit is contained in:
parent
ed93b2730d
commit
a7e1cad87b
|
@ -18,20 +18,21 @@ contract WETHGateway is IWETHGateway, Ownable {
|
||||||
using UserConfiguration for DataTypes.UserConfigurationMap;
|
using UserConfiguration for DataTypes.UserConfigurationMap;
|
||||||
|
|
||||||
IWETH internal immutable WETH;
|
IWETH internal immutable WETH;
|
||||||
ILendingPool internal immutable POOL;
|
|
||||||
IAToken internal immutable aWETH;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Sets the WETH address and the LendingPoolAddressesProvider address. Infinite approves lending pool.
|
* @dev Sets the WETH address and the LendingPoolAddressesProvider address. Infinite approves lending pool.
|
||||||
* @param weth Address of the Wrapped Ether contract
|
* @param weth Address of the Wrapped Ether contract
|
||||||
* @param pool Address of the LendingPool contract
|
|
||||||
**/
|
**/
|
||||||
constructor(address weth, address pool) public {
|
constructor(address weth) public {
|
||||||
ILendingPool poolInstance = ILendingPool(pool);
|
|
||||||
WETH = IWETH(weth);
|
WETH = IWETH(weth);
|
||||||
POOL = poolInstance;
|
}
|
||||||
aWETH = IAToken(poolInstance.getReserveData(weth).aTokenAddress);
|
|
||||||
IWETH(weth).approve(pool, uint256(-1));
|
function authorizeLendingPool(address lendingPool) external onlyOwner {
|
||||||
|
require(
|
||||||
|
ILendingPool(lendingPool).getReserveData(address(WETH)).aTokenAddress != address(0),
|
||||||
|
'AWETH_NOT_SETUP'
|
||||||
|
);
|
||||||
|
WETH.approve(lendingPool, uint256(-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,9 +41,13 @@ contract WETHGateway is IWETHGateway, Ownable {
|
||||||
* @param onBehalfOf address of the user who will receive the aTokens representing the deposit
|
* @param onBehalfOf address of the user who will receive the aTokens representing the deposit
|
||||||
* @param referralCode integrators are assigned a referral code and can potentially receive rewards.
|
* @param referralCode integrators are assigned a referral code and can potentially receive rewards.
|
||||||
**/
|
**/
|
||||||
function depositETH(address onBehalfOf, uint16 referralCode) external payable override {
|
function depositETH(
|
||||||
|
address lendingPool,
|
||||||
|
address onBehalfOf,
|
||||||
|
uint16 referralCode
|
||||||
|
) external payable override {
|
||||||
WETH.deposit{value: msg.value}();
|
WETH.deposit{value: msg.value}();
|
||||||
POOL.deposit(address(WETH), msg.value, onBehalfOf, referralCode);
|
ILendingPool(lendingPool).deposit(address(WETH), msg.value, onBehalfOf, referralCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,7 +55,12 @@ contract WETHGateway is IWETHGateway, Ownable {
|
||||||
* @param amount amount of aWETH to withdraw and receive native ETH
|
* @param amount amount of aWETH to withdraw and receive native ETH
|
||||||
* @param to address of the user who will receive native ETH
|
* @param to address of the user who will receive native ETH
|
||||||
*/
|
*/
|
||||||
function withdrawETH(uint256 amount, address to) external override {
|
function withdrawETH(
|
||||||
|
address lendingPool,
|
||||||
|
uint256 amount,
|
||||||
|
address to
|
||||||
|
) external override {
|
||||||
|
IAToken aWETH = IAToken(ILendingPool(lendingPool).getReserveData(address(WETH)).aTokenAddress);
|
||||||
uint256 userBalance = aWETH.balanceOf(msg.sender);
|
uint256 userBalance = aWETH.balanceOf(msg.sender);
|
||||||
uint256 amountToWithdraw = amount;
|
uint256 amountToWithdraw = amount;
|
||||||
|
|
||||||
|
@ -59,7 +69,7 @@ contract WETHGateway is IWETHGateway, Ownable {
|
||||||
amountToWithdraw = userBalance;
|
amountToWithdraw = userBalance;
|
||||||
}
|
}
|
||||||
aWETH.transferFrom(msg.sender, address(this), amountToWithdraw);
|
aWETH.transferFrom(msg.sender, address(this), amountToWithdraw);
|
||||||
POOL.withdraw(address(WETH), amountToWithdraw, address(this));
|
ILendingPool(lendingPool).withdraw(address(WETH), amountToWithdraw, address(this));
|
||||||
WETH.withdraw(amountToWithdraw);
|
WETH.withdraw(amountToWithdraw);
|
||||||
_safeTransferETH(to, amountToWithdraw);
|
_safeTransferETH(to, amountToWithdraw);
|
||||||
}
|
}
|
||||||
|
@ -71,12 +81,16 @@ contract WETHGateway is IWETHGateway, Ownable {
|
||||||
* @param onBehalfOf the address for which msg.sender is repaying
|
* @param onBehalfOf the address for which msg.sender is repaying
|
||||||
*/
|
*/
|
||||||
function repayETH(
|
function repayETH(
|
||||||
|
address lendingPool,
|
||||||
uint256 amount,
|
uint256 amount,
|
||||||
uint256 rateMode,
|
uint256 rateMode,
|
||||||
address onBehalfOf
|
address onBehalfOf
|
||||||
) external payable override {
|
) external payable override {
|
||||||
(uint256 stableDebt, uint256 variableDebt) =
|
(uint256 stableDebt, uint256 variableDebt) =
|
||||||
Helpers.getUserCurrentDebtMemory(onBehalfOf, POOL.getReserveData(address(WETH)));
|
Helpers.getUserCurrentDebtMemory(
|
||||||
|
onBehalfOf,
|
||||||
|
ILendingPool(lendingPool).getReserveData(address(WETH))
|
||||||
|
);
|
||||||
|
|
||||||
uint256 paybackAmount =
|
uint256 paybackAmount =
|
||||||
DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.STABLE
|
DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.STABLE
|
||||||
|
@ -88,7 +102,7 @@ contract WETHGateway is IWETHGateway, Ownable {
|
||||||
}
|
}
|
||||||
require(msg.value >= paybackAmount, 'msg.value is less than repayment amount');
|
require(msg.value >= paybackAmount, 'msg.value is less than repayment amount');
|
||||||
WETH.deposit{value: paybackAmount}();
|
WETH.deposit{value: paybackAmount}();
|
||||||
POOL.repay(address(WETH), msg.value, rateMode, onBehalfOf);
|
ILendingPool(lendingPool).repay(address(WETH), msg.value, rateMode, onBehalfOf);
|
||||||
|
|
||||||
// refund remaining dust eth
|
// refund remaining dust eth
|
||||||
if (msg.value > paybackAmount) _safeTransferETH(msg.sender, msg.value - paybackAmount);
|
if (msg.value > paybackAmount) _safeTransferETH(msg.sender, msg.value - paybackAmount);
|
||||||
|
@ -101,11 +115,18 @@ contract WETHGateway is IWETHGateway, Ownable {
|
||||||
* @param referralCode integrators are assigned a referral code and can potentially receive rewards
|
* @param referralCode integrators are assigned a referral code and can potentially receive rewards
|
||||||
*/
|
*/
|
||||||
function borrowETH(
|
function borrowETH(
|
||||||
|
address lendingPool,
|
||||||
uint256 amount,
|
uint256 amount,
|
||||||
uint256 interesRateMode,
|
uint256 interesRateMode,
|
||||||
uint16 referralCode
|
uint16 referralCode
|
||||||
) external override {
|
) external override {
|
||||||
POOL.borrow(address(WETH), amount, interesRateMode, referralCode, msg.sender);
|
ILendingPool(lendingPool).borrow(
|
||||||
|
address(WETH),
|
||||||
|
amount,
|
||||||
|
interesRateMode,
|
||||||
|
referralCode,
|
||||||
|
msg.sender
|
||||||
|
);
|
||||||
WETH.withdraw(amount);
|
WETH.withdraw(amount);
|
||||||
_safeTransferETH(msg.sender, amount);
|
_safeTransferETH(msg.sender, amount);
|
||||||
}
|
}
|
||||||
|
@ -152,20 +173,6 @@ contract WETHGateway is IWETHGateway, Ownable {
|
||||||
return address(WETH);
|
return address(WETH);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @dev Get aWETH address used by WETHGateway
|
|
||||||
*/
|
|
||||||
function getAWETHAddress() external view returns (address) {
|
|
||||||
return address(aWETH);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dev Get LendingPool address used by WETHGateway
|
|
||||||
*/
|
|
||||||
function getLendingPoolAddress() external view returns (address) {
|
|
||||||
return address(POOL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Only WETH contract is allowed to transfer ETH here. Prevent other addresses to send Ether to this contract.
|
* @dev Only WETH contract is allowed to transfer ETH here. Prevent other addresses to send Ether to this contract.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2,17 +2,27 @@
|
||||||
pragma solidity 0.6.12;
|
pragma solidity 0.6.12;
|
||||||
|
|
||||||
interface IWETHGateway {
|
interface IWETHGateway {
|
||||||
function depositETH(address onBehalfOf, uint16 referralCode) external payable;
|
function depositETH(
|
||||||
|
address lendingPool,
|
||||||
|
address onBehalfOf,
|
||||||
|
uint16 referralCode
|
||||||
|
) external payable;
|
||||||
|
|
||||||
function withdrawETH(uint256 amount, address onBehalfOf) external;
|
function withdrawETH(
|
||||||
|
address lendingPool,
|
||||||
|
uint256 amount,
|
||||||
|
address onBehalfOf
|
||||||
|
) external;
|
||||||
|
|
||||||
function repayETH(
|
function repayETH(
|
||||||
|
address lendingPool,
|
||||||
uint256 amount,
|
uint256 amount,
|
||||||
uint256 rateMode,
|
uint256 rateMode,
|
||||||
address onBehalfOf
|
address onBehalfOf
|
||||||
) external payable;
|
) external payable;
|
||||||
|
|
||||||
function borrowETH(
|
function borrowETH(
|
||||||
|
address lendingPool,
|
||||||
uint256 amount,
|
uint256 amount,
|
||||||
uint256 interesRateMode,
|
uint256 interesRateMode,
|
||||||
uint16 referralCode
|
uint16 referralCode
|
||||||
|
|
Loading…
Reference in New Issue
Block a user