mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
add WETH to constructor of swap adapters
This commit is contained in:
parent
d611b1e8dc
commit
41efe9e811
|
@ -32,17 +32,21 @@ abstract contract BaseUniswapAdapter is FlashLoanReceiverBase, IBaseUniswapAdapt
|
||||||
// USD oracle asset address
|
// USD oracle asset address
|
||||||
address public constant override USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96;
|
address public constant override USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96;
|
||||||
|
|
||||||
address public constant WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
|
// address public constant WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; mainnet
|
||||||
|
// address public constant WETH_ADDRESS = 0xd0a1e359811322d97991e03f863a0c30c2cf029c; kovan
|
||||||
|
|
||||||
|
address public immutable override WETH_ADDRESS;
|
||||||
IPriceOracleGetter public immutable override ORACLE;
|
IPriceOracleGetter public immutable override ORACLE;
|
||||||
IUniswapV2Router02 public immutable override UNISWAP_ROUTER;
|
IUniswapV2Router02 public immutable override UNISWAP_ROUTER;
|
||||||
|
|
||||||
constructor(ILendingPoolAddressesProvider addressesProvider, IUniswapV2Router02 uniswapRouter)
|
constructor(
|
||||||
public
|
ILendingPoolAddressesProvider addressesProvider,
|
||||||
FlashLoanReceiverBase(addressesProvider)
|
IUniswapV2Router02 uniswapRouter,
|
||||||
{
|
address wethAddress
|
||||||
|
) public FlashLoanReceiverBase(addressesProvider) {
|
||||||
ORACLE = IPriceOracleGetter(addressesProvider.getPriceOracle());
|
ORACLE = IPriceOracleGetter(addressesProvider.getPriceOracle());
|
||||||
UNISWAP_ROUTER = uniswapRouter;
|
UNISWAP_ROUTER = uniswapRouter;
|
||||||
|
WETH_ADDRESS = wethAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -29,10 +29,11 @@ contract UniswapLiquiditySwapAdapter is BaseUniswapAdapter {
|
||||||
bool[] useEthPath;
|
bool[] useEthPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(ILendingPoolAddressesProvider addressesProvider, IUniswapV2Router02 uniswapRouter)
|
constructor(
|
||||||
public
|
ILendingPoolAddressesProvider addressesProvider,
|
||||||
BaseUniswapAdapter(addressesProvider, uniswapRouter)
|
IUniswapV2Router02 uniswapRouter,
|
||||||
{}
|
address wethAddress
|
||||||
|
) public BaseUniswapAdapter(addressesProvider, uniswapRouter, wethAddress) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Swaps the received reserve amount from the flash loan into the asset specified in the params.
|
* @dev Swaps the received reserve amount from the flash loan into the asset specified in the params.
|
||||||
|
@ -148,13 +149,19 @@ contract UniswapLiquiditySwapAdapter is BaseUniswapAdapter {
|
||||||
vars.aToken = _getReserveData(assetToSwapFromList[vars.i]).aTokenAddress;
|
vars.aToken = _getReserveData(assetToSwapFromList[vars.i]).aTokenAddress;
|
||||||
|
|
||||||
vars.aTokenInitiatorBalance = IERC20(vars.aToken).balanceOf(msg.sender);
|
vars.aTokenInitiatorBalance = IERC20(vars.aToken).balanceOf(msg.sender);
|
||||||
vars.amountToSwap =
|
vars.amountToSwap = amountToSwapList[vars.i] > vars.aTokenInitiatorBalance
|
||||||
amountToSwapList[vars.i] > vars.aTokenInitiatorBalance ? vars.aTokenInitiatorBalance : amountToSwapList[vars.i];
|
? vars.aTokenInitiatorBalance
|
||||||
|
: amountToSwapList[vars.i];
|
||||||
|
|
||||||
_pullAToken(assetToSwapFromList[vars.i], vars.aToken, msg.sender, vars.amountToSwap, permitParams[vars.i]);
|
_pullAToken(
|
||||||
|
assetToSwapFromList[vars.i],
|
||||||
|
vars.aToken,
|
||||||
|
msg.sender,
|
||||||
|
vars.amountToSwap,
|
||||||
|
permitParams[vars.i]
|
||||||
|
);
|
||||||
|
|
||||||
vars.receivedAmount =
|
vars.receivedAmount = _swapExactTokensForTokens(
|
||||||
_swapExactTokensForTokens(
|
|
||||||
assetToSwapFromList[vars.i],
|
assetToSwapFromList[vars.i],
|
||||||
assetToSwapToList[vars.i],
|
assetToSwapToList[vars.i],
|
||||||
vars.amountToSwap,
|
vars.amountToSwap,
|
||||||
|
|
|
@ -22,10 +22,11 @@ contract UniswapRepayAdapter is BaseUniswapAdapter {
|
||||||
bool useEthPath;
|
bool useEthPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(ILendingPoolAddressesProvider addressesProvider, IUniswapV2Router02 uniswapRouter)
|
constructor(
|
||||||
public
|
ILendingPoolAddressesProvider addressesProvider,
|
||||||
BaseUniswapAdapter(addressesProvider, uniswapRouter)
|
IUniswapV2Router02 uniswapRouter,
|
||||||
{}
|
address wethAddress
|
||||||
|
) public BaseUniswapAdapter(addressesProvider, uniswapRouter, wethAddress) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Uses the received funds from the flash loan to repay a debt on the protocol on behalf of the user. Then pulls
|
* @dev Uses the received funds from the flash loan to repay a debt on the protocol on behalf of the user. Then pulls
|
||||||
|
@ -114,7 +115,8 @@ contract UniswapRepayAdapter is BaseUniswapAdapter {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get exact collateral needed for the swap to avoid leftovers
|
// Get exact collateral needed for the swap to avoid leftovers
|
||||||
uint256[] memory amounts = _getAmountsIn(collateralAsset, debtAsset, amountToRepay, useEthPath);
|
uint256[] memory amounts =
|
||||||
|
_getAmountsIn(collateralAsset, debtAsset, amountToRepay, useEthPath);
|
||||||
require(amounts[0] <= maxCollateralToSwap, 'slippage too high');
|
require(amounts[0] <= maxCollateralToSwap, 'slippage too high');
|
||||||
|
|
||||||
// Pull aTokens from user
|
// Pull aTokens from user
|
||||||
|
@ -182,7 +184,8 @@ contract UniswapRepayAdapter is BaseUniswapAdapter {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint256 neededForFlashLoanDebt = repaidAmount.add(premium);
|
uint256 neededForFlashLoanDebt = repaidAmount.add(premium);
|
||||||
uint256[] memory amounts = _getAmountsIn(collateralAsset, debtAsset, neededForFlashLoanDebt, useEthPath);
|
uint256[] memory amounts =
|
||||||
|
_getAmountsIn(collateralAsset, debtAsset, neededForFlashLoanDebt, useEthPath);
|
||||||
require(amounts[0] <= maxCollateralToSwap, 'slippage too high');
|
require(amounts[0] <= maxCollateralToSwap, 'slippage too high');
|
||||||
|
|
||||||
// Pull aTokens from user
|
// Pull aTokens from user
|
||||||
|
@ -235,7 +238,11 @@ contract UniswapRepayAdapter is BaseUniswapAdapter {
|
||||||
bytes32 r,
|
bytes32 r,
|
||||||
bytes32 s,
|
bytes32 s,
|
||||||
bool useEthPath
|
bool useEthPath
|
||||||
) = abi.decode(params, (address, uint256, uint256, uint256, uint256, uint8, bytes32, bytes32, bool));
|
) =
|
||||||
|
abi.decode(
|
||||||
|
params,
|
||||||
|
(address, uint256, uint256, uint256, uint256, uint8, bytes32, bytes32, bool)
|
||||||
|
);
|
||||||
|
|
||||||
return
|
return
|
||||||
RepayParams(
|
RepayParams(
|
||||||
|
|
|
@ -24,6 +24,8 @@ interface IBaseUniswapAdapter {
|
||||||
address[] path;
|
address[] path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function WETH_ADDRESS() external returns (address);
|
||||||
|
|
||||||
function MAX_SLIPPAGE_PERCENT() external returns (uint256);
|
function MAX_SLIPPAGE_PERCENT() external returns (uint256);
|
||||||
|
|
||||||
function FLASHLOAN_PREMIUM_TOTAL() external returns (uint256);
|
function FLASHLOAN_PREMIUM_TOTAL() external returns (uint256);
|
||||||
|
|
|
@ -6,6 +6,8 @@ import { accounts } from './test-wallets.js';
|
||||||
import { eEthereumNetwork } from './helpers/types';
|
import { eEthereumNetwork } from './helpers/types';
|
||||||
import { BUIDLEREVM_CHAINID, COVERAGE_CHAINID } from './helpers/buidler-constants';
|
import { BUIDLEREVM_CHAINID, COVERAGE_CHAINID } from './helpers/buidler-constants';
|
||||||
|
|
||||||
|
require('dotenv').config();
|
||||||
|
|
||||||
import '@nomiclabs/hardhat-ethers';
|
import '@nomiclabs/hardhat-ethers';
|
||||||
import '@nomiclabs/hardhat-waffle';
|
import '@nomiclabs/hardhat-waffle';
|
||||||
import 'temp-hardhat-etherscan';
|
import 'temp-hardhat-etherscan';
|
||||||
|
@ -45,7 +47,7 @@ const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number
|
||||||
? `https://eth-${
|
? `https://eth-${
|
||||||
networkName === 'main' ? 'mainnet' : networkName
|
networkName === 'main' ? 'mainnet' : networkName
|
||||||
}.alchemyapi.io/v2/${ALCHEMY_KEY}`
|
}.alchemyapi.io/v2/${ALCHEMY_KEY}`
|
||||||
: `https://${networkName}.infura.io/v3/${INFURA_KEY}`,
|
: `https://${networkName === 'main' ? 'mainnet' : networkName}.infura.io/v3/${INFURA_KEY}`,
|
||||||
hardfork: HARDFORK,
|
hardfork: HARDFORK,
|
||||||
blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT,
|
blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT,
|
||||||
gasMultiplier: DEFAULT_GAS_MUL,
|
gasMultiplier: DEFAULT_GAS_MUL,
|
||||||
|
|
|
@ -338,7 +338,6 @@ export const deployGenericAToken = async (
|
||||||
string,
|
string,
|
||||||
tEthereumAddress,
|
tEthereumAddress,
|
||||||
tEthereumAddress
|
tEthereumAddress
|
||||||
|
|
||||||
] = [poolAddress, underlyingAssetAddress, treasuryAddress, name, symbol, incentivesController];
|
] = [poolAddress, underlyingAssetAddress, treasuryAddress, name, symbol, incentivesController];
|
||||||
return withSaveAndVerify(
|
return withSaveAndVerify(
|
||||||
await new ATokenFactory(await getFirstSigner()).deploy(...args),
|
await new ATokenFactory(await getFirstSigner()).deploy(...args),
|
||||||
|
@ -506,7 +505,7 @@ export const deployMockUniswapRouter = async (verify?: boolean) =>
|
||||||
);
|
);
|
||||||
|
|
||||||
export const deployUniswapLiquiditySwapAdapter = async (
|
export const deployUniswapLiquiditySwapAdapter = async (
|
||||||
args: [tEthereumAddress, tEthereumAddress],
|
args: [tEthereumAddress, tEthereumAddress, tEthereumAddress],
|
||||||
verify?: boolean
|
verify?: boolean
|
||||||
) =>
|
) =>
|
||||||
withSaveAndVerify(
|
withSaveAndVerify(
|
||||||
|
@ -517,7 +516,7 @@ export const deployUniswapLiquiditySwapAdapter = async (
|
||||||
);
|
);
|
||||||
|
|
||||||
export const deployUniswapRepayAdapter = async (
|
export const deployUniswapRepayAdapter = async (
|
||||||
args: [tEthereumAddress, tEthereumAddress],
|
args: [tEthereumAddress, tEthereumAddress, tEthereumAddress],
|
||||||
verify?: boolean
|
verify?: boolean
|
||||||
) =>
|
) =>
|
||||||
withSaveAndVerify(
|
withSaveAndVerify(
|
||||||
|
|
|
@ -43,10 +43,10 @@
|
||||||
"print-contracts:main": "npm run hardhat:main -- print-contracts",
|
"print-contracts:main": "npm run hardhat:main -- print-contracts",
|
||||||
"print-contracts:ropsten": "npm run hardhat:main -- print-contracts",
|
"print-contracts:ropsten": "npm run hardhat:main -- print-contracts",
|
||||||
"dev:deployUIProvider": "npm run hardhat:kovan deploy-UiPoolDataProvider",
|
"dev:deployUIProvider": "npm run hardhat:kovan deploy-UiPoolDataProvider",
|
||||||
"dev:deployUniswapRepayAdapter": "hardhat --network kovan deploy-UniswapRepayAdapter --provider 0x88757f2f99175387aB4C6a4b3067c77A695b0349 --router 0xfcd87315f0e4067070ade8682fcdbc3006631441",
|
"dev:deployUniswapRepayAdapter": "hardhat --network kovan deploy-UniswapRepayAdapter --provider 0x88757f2f99175387aB4C6a4b3067c77A695b0349 --router 0xfcd87315f0e4067070ade8682fcdbc3006631441 --weth 0xd0a1e359811322d97991e03f863a0c30c2cf029c",
|
||||||
"dev:UniswapLiquiditySwapAdapter": "hardhat --network kovan deploy-UniswapLiquiditySwapAdapter --provider 0x88757f2f99175387aB4C6a4b3067c77A695b0349 --router 0xfcd87315f0e4067070ade8682fcdbc3006631441",
|
"dev:UniswapLiquiditySwapAdapter": "hardhat --network kovan deploy-UniswapLiquiditySwapAdapter --provider 0x88757f2f99175387aB4C6a4b3067c77A695b0349 --router 0xfcd87315f0e4067070ade8682fcdbc3006631441 --weth 0xd0a1e359811322d97991e03f863a0c30c2cf029c",
|
||||||
"main:deployUniswapRepayAdapter": "hardhat --network main deploy-UniswapRepayAdapter --provider 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5 --router 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
|
"main:deployUniswapRepayAdapter": "hardhat --network main deploy-UniswapRepayAdapter --provider 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5 --router 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D --weth 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
||||||
"main:UniswapLiquiditySwapAdapter": "hardhat --network main deploy-UniswapLiquiditySwapAdapter --provider 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5 --router 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
|
"main:UniswapLiquiditySwapAdapter": "hardhat --network main deploy-UniswapLiquiditySwapAdapter --provider 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5 --router 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D --weth 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
||||||
"kovan:verify": "npm run hardhat:kovan verify:general -- --all --pool Aave",
|
"kovan:verify": "npm run hardhat:kovan verify:general -- --all --pool Aave",
|
||||||
"ropsten:verify": "npm run hardhat:ropsten verify:general -- --all --pool Aave",
|
"ropsten:verify": "npm run hardhat:ropsten verify:general -- --all --pool Aave",
|
||||||
"mainnet:verify": "npm run hardhat:main verify:general -- --all --pool Aave",
|
"mainnet:verify": "npm run hardhat:main verify:general -- --all --pool Aave",
|
||||||
|
|
|
@ -9,8 +9,9 @@ const CONTRACT_NAME = 'UniswapLiquiditySwapAdapter';
|
||||||
task(`deploy-${CONTRACT_NAME}`, `Deploys the ${CONTRACT_NAME} contract`)
|
task(`deploy-${CONTRACT_NAME}`, `Deploys the ${CONTRACT_NAME} contract`)
|
||||||
.addParam('provider', 'Address of the LendingPoolAddressesProvider')
|
.addParam('provider', 'Address of the LendingPoolAddressesProvider')
|
||||||
.addParam('router', 'Address of the uniswap router')
|
.addParam('router', 'Address of the uniswap router')
|
||||||
|
.addParam('weth', 'Address of the weth token')
|
||||||
.addFlag('verify', `Verify ${CONTRACT_NAME} contract via Etherscan API.`)
|
.addFlag('verify', `Verify ${CONTRACT_NAME} contract via Etherscan API.`)
|
||||||
.setAction(async ({ provider, router, verify }, localBRE) => {
|
.setAction(async ({ provider, router, weth, verify }, localBRE) => {
|
||||||
await localBRE.run('set-DRE');
|
await localBRE.run('set-DRE');
|
||||||
|
|
||||||
if (!localBRE.network.config.chainId) {
|
if (!localBRE.network.config.chainId) {
|
||||||
|
@ -25,10 +26,10 @@ task(`deploy-${CONTRACT_NAME}`, `Deploys the ${CONTRACT_NAME} contract`)
|
||||||
*/
|
*/
|
||||||
const uniswapRepayAdapter = await new UniswapLiquiditySwapAdapterFactory(
|
const uniswapRepayAdapter = await new UniswapLiquiditySwapAdapterFactory(
|
||||||
await getFirstSigner()
|
await getFirstSigner()
|
||||||
).deploy(provider, router);
|
).deploy(provider, router, weth);
|
||||||
await uniswapRepayAdapter.deployTransaction.wait();
|
await uniswapRepayAdapter.deployTransaction.wait();
|
||||||
console.log(`${CONTRACT_NAME}.address`, uniswapRepayAdapter.address);
|
console.log(`${CONTRACT_NAME}.address`, uniswapRepayAdapter.address);
|
||||||
await verifyContract(uniswapRepayAdapter.address, [provider, router]);
|
await verifyContract(uniswapRepayAdapter.address, [provider, router, weth]);
|
||||||
|
|
||||||
console.log(`\tFinished ${CONTRACT_NAME} proxy and implementation deployment`);
|
console.log(`\tFinished ${CONTRACT_NAME} proxy and implementation deployment`);
|
||||||
});
|
});
|
||||||
|
|
|
@ -9,8 +9,9 @@ const CONTRACT_NAME = 'UniswapRepayAdapter';
|
||||||
task(`deploy-${CONTRACT_NAME}`, `Deploys the ${CONTRACT_NAME} contract`)
|
task(`deploy-${CONTRACT_NAME}`, `Deploys the ${CONTRACT_NAME} contract`)
|
||||||
.addParam('provider', 'Address of the LendingPoolAddressesProvider')
|
.addParam('provider', 'Address of the LendingPoolAddressesProvider')
|
||||||
.addParam('router', 'Address of the uniswap router')
|
.addParam('router', 'Address of the uniswap router')
|
||||||
|
.addParam('weth', 'Address of the weth token')
|
||||||
.addFlag('verify', `Verify ${CONTRACT_NAME} contract via Etherscan API.`)
|
.addFlag('verify', `Verify ${CONTRACT_NAME} contract via Etherscan API.`)
|
||||||
.setAction(async ({ provider, router, verify }, localBRE) => {
|
.setAction(async ({ provider, router, weth, verify }, localBRE) => {
|
||||||
await localBRE.run('set-DRE');
|
await localBRE.run('set-DRE');
|
||||||
|
|
||||||
if (!localBRE.network.config.chainId) {
|
if (!localBRE.network.config.chainId) {
|
||||||
|
@ -18,17 +19,18 @@ task(`deploy-${CONTRACT_NAME}`, `Deploys the ${CONTRACT_NAME} contract`)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`\n- ${CONTRACT_NAME} deployment`);
|
console.log(`\n- ${CONTRACT_NAME} deployment`);
|
||||||
const args = [
|
// const args = [
|
||||||
'0x88757f2f99175387aB4C6a4b3067c77A695b0349', // lending provider kovan address
|
// '0x88757f2f99175387aB4C6a4b3067c77A695b0349', // lending provider kovan address
|
||||||
'0xfcd87315f0e4067070ade8682fcdbc3006631441', // uniswap router address
|
// '0xfcd87315f0e4067070ade8682fcdbc3006631441', // uniswap router address
|
||||||
];
|
// ];
|
||||||
const uniswapRepayAdapter = await new UniswapRepayAdapterFactory(await getFirstSigner()).deploy(
|
const uniswapRepayAdapter = await new UniswapRepayAdapterFactory(await getFirstSigner()).deploy(
|
||||||
provider,
|
provider,
|
||||||
router
|
router,
|
||||||
|
weth
|
||||||
);
|
);
|
||||||
await uniswapRepayAdapter.deployTransaction.wait();
|
await uniswapRepayAdapter.deployTransaction.wait();
|
||||||
console.log(`${CONTRACT_NAME}.address`, uniswapRepayAdapter.address);
|
console.log(`${CONTRACT_NAME}.address`, uniswapRepayAdapter.address);
|
||||||
await verifyContract(uniswapRepayAdapter.address, [provider, router]);
|
await verifyContract(uniswapRepayAdapter.address, [provider, router, weth]);
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`\tFinished ${CONTRACT_NAME}${CONTRACT_NAME}lDataProvider proxy and implementation deployment`
|
`\tFinished ${CONTRACT_NAME}${CONTRACT_NAME}lDataProvider proxy and implementation deployment`
|
||||||
|
|
Loading…
Reference in New Issue
Block a user