dsa-polygon-migration/contracts/senders/aave-v2-connector/main.sol

62 lines
2.4 KiB
Solidity
Raw Normal View History

2021-04-02 15:28:00 +00:00
pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
2021-04-16 22:31:51 +00:00
import { TokenInterface } from "../../common/interfaces.sol";
2021-04-08 00:10:38 +00:00
import { AaveInterface, ATokenInterface, AaveDataRaw } from "./interfaces.sol";
2021-04-02 15:28:00 +00:00
import { Helpers } from "./helpers.sol";
import { Events } from "./events.sol";
contract AaveMigrateResolver is Helpers, Events {
function migrate(
2021-04-13 22:43:51 +00:00
address targetDsa,
address[] memory supplyTokens,
address[] memory borrowTokens,
uint[] memory variableBorrowAmts,
uint[] memory stableBorrowAmts,
uint[] memory supplyAmts,
2021-04-08 00:10:38 +00:00
uint ethAmt // if ethAmt is > 0 then use migrateWithflash
2021-04-02 15:28:00 +00:00
) external payable returns (string memory _eventName, bytes memory _eventParam) {
2021-04-13 22:43:51 +00:00
require(supplyTokens.length > 0, "0-length-not-allowed");
require(supplyTokens.length == supplyAmts.length, "invalid-length");
require(borrowTokens.length == variableBorrowAmts.length && borrowTokens.length == stableBorrowAmts.length, "invalid-length");
require(targetDsa != address(0), "invalid-address");
2021-04-02 15:28:00 +00:00
2021-04-08 00:10:38 +00:00
AaveDataRaw memory data;
2021-04-13 22:43:51 +00:00
data.targetDsa = targetDsa;
data.supplyTokens = supplyTokens;
data.borrowTokens = borrowTokens;
data.variableBorrowAmts = variableBorrowAmts;
data.stableBorrowAmts = stableBorrowAmts;
data.supplyAmts = supplyAmts;
for (uint i = 0; i < data.supplyTokens.length; i++) {
address _token = data.supplyTokens[i] == ethAddr ? wethAddr : data.supplyTokens[i];
data.supplyTokens[i] = _token;
2021-04-02 15:28:00 +00:00
(address _aToken, ,) = aaveData.getReserveTokensAddresses(_token);
ATokenInterface _aTokenContract = ATokenInterface(_aToken);
if (data.supplyAmts[i] == uint(-1)) {
data.supplyAmts[i] = _aTokenContract.balanceOf(address(this));
}
_aTokenContract.approve(address(migrator), data.supplyAmts[i]);
2021-04-02 15:28:00 +00:00
}
2021-04-08 00:10:38 +00:00
if (ethAmt > 0) {
migrator.migrateWithFlash(data, ethAmt);
} else {
migrator.migrate(data);
}
2021-04-02 15:28:00 +00:00
_eventName = "LogAaveV2Migrate(address,address,address[],address[])";
_eventParam = abi.encode(msg.sender, data.targetDsa, data.supplyTokens, data.borrowTokens);
2021-04-02 15:28:00 +00:00
}
2021-04-08 00:10:38 +00:00
2021-04-02 15:28:00 +00:00
}
2021-04-16 18:59:01 +00:00
contract ConnectV2AaveV2PolygonMigrator is AaveMigrateResolver {
string constant public name = "Aave-V2-Polygon-Migrator-v1";
}