2021-04-15 10:39:41 +00:00
|
|
|
const hre = require("hardhat");
|
|
|
|
const { expect } = require("chai");
|
|
|
|
const { ethers, network, waffle } = hre;
|
|
|
|
const { provider, deployContract } = waffle
|
|
|
|
|
|
|
|
const Migrator = require("../artifacts/contracts/senders/aave-v2-migrator/main.sol/MigrateResolver.json")
|
|
|
|
|
|
|
|
describe("Migrator", function() {
|
|
|
|
let accounts, masterAddress, master, migrator, ethereum
|
2021-04-15 12:12:42 +00:00
|
|
|
|
|
|
|
const erc20Abi = [
|
|
|
|
"function balanceOf(address) view returns (uint)",
|
|
|
|
"function transfer(address to, uint amount)"
|
|
|
|
]
|
|
|
|
|
2021-04-15 10:39:41 +00:00
|
|
|
const usdc = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
|
|
|
|
const usdt = '0xdac17f958d2ee523a2206206994597c13d831ec7'
|
|
|
|
const dai = '0x6b175474e89094c44da98b954eedeac495271d0f'
|
|
|
|
const wbtc = '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599'
|
|
|
|
const aave = '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9'
|
|
|
|
const eth = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'
|
|
|
|
const weth = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'
|
|
|
|
const supportedTokens = [usdc, usdt, dai, wbtc, aave, eth, weth]
|
|
|
|
before(async function() {
|
|
|
|
masterAddress = "0xb1DC62EC38E6E3857a887210C38418E4A17Da5B2"
|
|
|
|
await hre.network.provider.request({
|
|
|
|
method: "hardhat_impersonateAccount",
|
|
|
|
params: [ masterAddress ]
|
|
|
|
})
|
|
|
|
|
|
|
|
accounts = await ethers.getSigners();
|
|
|
|
master = ethers.provider.getSigner(masterAddress)
|
|
|
|
|
|
|
|
migrator = await deployContract(master, Migrator, [])
|
|
|
|
|
|
|
|
console.log("Migrator deployed: ", migrator.address)
|
|
|
|
|
2021-04-15 12:12:42 +00:00
|
|
|
const usdcHolderAddr = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503' // 1,000,000
|
|
|
|
await accounts[0].sendTransaction({ to: usdcHolderAddr, value: ethers.utils.parseEther('1') })
|
|
|
|
await hre.network.provider.request({
|
|
|
|
method: "hardhat_impersonateAccount",
|
|
|
|
params: [ usdcHolderAddr ]
|
|
|
|
})
|
|
|
|
const usdcHolder = ethers.provider.getSigner(usdcHolderAddr)
|
|
|
|
const usdcContract = new ethers.Contract(usdc, erc20Abi, usdcHolder)
|
|
|
|
await usdcContract.transfer(migrator.address, ethers.utils.parseUnits('1000000', 6))
|
|
|
|
|
|
|
|
const usdtHolderAddr = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503' // 1,000,000
|
|
|
|
await accounts[0].sendTransaction({ to: usdtHolderAddr, value: ethers.utils.parseEther('1') })
|
|
|
|
await hre.network.provider.request({
|
|
|
|
method: "hardhat_impersonateAccount",
|
|
|
|
params: [ usdtHolderAddr ]
|
|
|
|
})
|
|
|
|
const usdtHolder = ethers.provider.getSigner(usdtHolderAddr)
|
|
|
|
const usdtContract = new ethers.Contract(usdt, erc20Abi, usdtHolder)
|
|
|
|
await usdtContract.transfer(migrator.address, ethers.utils.parseUnits('1000000', 6))
|
|
|
|
|
|
|
|
const daiHolderAddr = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503' // 1,000,000
|
|
|
|
await accounts[0].sendTransaction({ to: daiHolderAddr, value: ethers.utils.parseEther('1') })
|
|
|
|
await hre.network.provider.request({
|
|
|
|
method: "hardhat_impersonateAccount",
|
|
|
|
params: [ daiHolderAddr ]
|
|
|
|
})
|
|
|
|
const daiHolder = ethers.provider.getSigner(daiHolderAddr)
|
|
|
|
const daiContract = new ethers.Contract(dai, erc20Abi, daiHolder)
|
|
|
|
await daiContract.transfer(migrator.address, ethers.utils.parseUnits('1000000', 18))
|
|
|
|
|
|
|
|
const wbtcHolderAddr = '0xf977814e90da44bfa03b6295a0616a897441acec' // 16
|
|
|
|
await hre.network.provider.request({
|
|
|
|
method: "hardhat_impersonateAccount",
|
|
|
|
params: [ wbtcHolderAddr ]
|
|
|
|
})
|
|
|
|
const wbtcHolder = ethers.provider.getSigner(wbtcHolderAddr)
|
|
|
|
const wbtcContract = new ethers.Contract(wbtc, erc20Abi, wbtcHolder)
|
|
|
|
await wbtcContract.transfer(migrator.address, ethers.utils.parseUnits('16', 8))
|
|
|
|
|
|
|
|
const wethHolderAddr = '0x0f4ee9631f4be0a63756515141281a3e2b293bbe' // 500
|
|
|
|
await hre.network.provider.request({
|
|
|
|
method: "hardhat_impersonateAccount",
|
|
|
|
params: [ wethHolderAddr ]
|
|
|
|
})
|
|
|
|
const wethHolder = ethers.provider.getSigner(wethHolderAddr)
|
|
|
|
const wethContract = new ethers.Contract(weth, erc20Abi, wethHolder)
|
|
|
|
await wethContract.transfer(migrator.address, ethers.utils.parseUnits('500', 18))
|
|
|
|
|
2021-04-15 10:39:41 +00:00
|
|
|
ethereum = network.provider
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should set tokens", async function() {
|
|
|
|
const tx = await migrator.connect(master).addTokenSupport(supportedTokens)
|
|
|
|
const receipt = await tx.wait()
|
|
|
|
|
|
|
|
const isUsdc = await migrator.isSupportedToken(usdc)
|
|
|
|
expect(isUsdc).to.be.true;
|
|
|
|
})
|
2021-04-15 12:12:42 +00:00
|
|
|
|
|
|
|
it("test migrate", async function() {
|
|
|
|
const sourceAddr = '0x42c7788dd1cef71cf04ae4d6bca37d129c27e001'
|
|
|
|
const rawData = {
|
|
|
|
targetDsa: sourceAddr,
|
|
|
|
supplyTokens: [eth],
|
|
|
|
borrowTokens: [usdc],
|
|
|
|
supplyAmts: [ethers.utils.parseEther('20')],
|
|
|
|
variableBorrowAmts: [ethers.utils.parseUnits('10000', 6)],
|
|
|
|
stableBorrowAmts: [ethers.utils.parseUnits('10000', 6)]
|
|
|
|
}
|
|
|
|
|
|
|
|
await hre.network.provider.request({
|
|
|
|
method: "hardhat_impersonateAccount",
|
|
|
|
params: [ sourceAddr ]
|
|
|
|
})
|
|
|
|
const signer = ethers.provider.getSigner(sourceAddr)
|
|
|
|
|
|
|
|
const tx = await migrator.connect(signer).migrate(rawData)
|
|
|
|
const receipt = await tx.wait()
|
|
|
|
|
|
|
|
console.log(receipt)
|
|
|
|
})
|
2021-04-15 10:39:41 +00:00
|
|
|
})
|