Skip to content

Commit

Permalink
Post mUSD upgrade cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
naddison36 committed Mar 25, 2021
1 parent d53bf9f commit 7aa41ca
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 295 deletions.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Expand Up @@ -9,8 +9,8 @@ import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.s
import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol";

import { IMassetV2 } from "./IMassetV2.sol";
import { DyDxFlashLoan } from "./dydx/DyDxFlashLoan.sol";
import { ICurve } from "../../../interfaces/ICurve.sol";
import { DyDxFlashLoan } from "../../../peripheral/dydx/DyDxFlashLoan.sol";
import { ICurve } from "../../../peripheral/ICurve.sol";

/**
* @title Contract to rebalance mUSD bAssets to new weights for the mUSD V3 upgrade.
Expand All @@ -21,7 +21,7 @@ import { ICurve } from "../../../interfaces/ICurve.sol";
* @dev VERSION: 1.0
* DATE: 2021-03-22
*/
contract MusdV3Rebalance4Pool is DyDxFlashLoan, Ownable {
contract MusdV3Rebalance is DyDxFlashLoan, Ownable {

using SafeERC20 for IERC20;

Expand Down
235 changes: 0 additions & 235 deletions contracts/z_mocks/masset/migrate3/MusdV3Upgrade3PoolDyDx.sol

This file was deleted.

67 changes: 10 additions & 57 deletions test-fork/mUSD/mUSD-migrate.spec.ts
Expand Up @@ -16,10 +16,8 @@ import {
Masset,
MusdV3,
MusdV3__factory,
MusdV3Rebalance4Pool__factory,
MusdV3SusdBalancer__factory,
MusdV3Rebalance4Pool,
MusdV3SusdBalancer,
MusdV3Rebalance__factory,
MusdV3Rebalance,
AaveV2Integration,
AaveV2Integration__factory,
} from "types/generated"
Expand Down Expand Up @@ -341,7 +339,7 @@ const balanceBasset = async (
const validateFlashLoan = async (
flashToken: Token,
basketManager: Contract,
mUsdRebalance: MusdV3Rebalance4Pool,
mUsdRebalance: MusdV3Rebalance,
scaledTargetBalance: BN,
overweightTokenSplits: BN[], // TUSD and USDC proportions in basis points (bps),
loanPercentage = 100,
Expand Down Expand Up @@ -913,9 +911,8 @@ describe("mUSD V2.0 to V3.0", () => {
})
})
})
context.skip("Add DAI and balance mUSD bAssets on-chain using DyDx flash loans", () => {
let mUsdRebalancer: MusdV3Rebalance4Pool
let susdBalancer: MusdV3SusdBalancer
context.only("Add DAI and balance mUSD bAssets on-chain using DyDx flash loans", () => {
let mUsdRebalancer: MusdV3Rebalance
let scaledTargetBalance: BN
let overweightTokenSplits: BN[]
before(async () => {
Expand All @@ -925,7 +922,7 @@ describe("mUSD V2.0 to V3.0", () => {
{
forking: {
jsonRpcUrl: process.env.NODE_URL,
blockNumber: 12088204,
blockNumber: 12088142,
},
},
],
Expand Down Expand Up @@ -959,7 +956,7 @@ describe("mUSD V2.0 to V3.0", () => {
console.log(`TUSD ${overweightTokenSplits[0]} bps, USDT ${overweightTokenSplits[1]} bps of the overweight tokens`)

const signer = await impersonate(daiWhaleAddress)
const mUsdRebalancerFactory = new MusdV3Rebalance4Pool__factory(signer)
const mUsdRebalancerFactory = new MusdV3Rebalance__factory(signer)
mUsdRebalancer = await mUsdRebalancerFactory.attach(rebalancerAddress)
})
it("whales approve rebalance contract to fund loan shortfalls", async () => {
Expand All @@ -986,56 +983,12 @@ describe("mUSD V2.0 to V3.0", () => {
await inputTokenContract2.transfer(aaveCoreV1Address, simpleToExactAmount(9000000, 18))
})
it("first DAI flash loan", async () => {
await validateFlashLoan(DAI, basketManager, mUsdRebalancer, scaledTargetBalance, overweightTokenSplits, 100)
await validateFlashLoan(DAI, basketManager, mUsdRebalancer, scaledTargetBalance, overweightTokenSplits, 50)
})
it("second DAI flash loan", async () => {
// For this to work more DAI liquidity is needed in DyDx
it.skip("second DAI flash loan", async () => {
await validateFlashLoan(DAI, basketManager, mUsdRebalancer, scaledTargetBalance, overweightTokenSplits, 100)
})
})
context.skip("Balance sUSD", () => {
it("Deploy sUSD balancer contract", async () => {
const susdBalancerFactory = new MusdV3SusdBalancer__factory(accounts.deployer)
susdBalancer = await susdBalancerFactory.deploy()
})
it("sUSD whale approves sUSD balancer contract", async () => {
const sUsdWhaleSigner = await impersonate(sUSD.whaleAddress)
const susd = new ERC20__factory(sUsdWhaleSigner).attach(sUSD.address)
await susd.approve(susdBalancer.address, simpleToExactAmount(12000000, sUSD.decimals))
})
it("use sUSD to balance TUSD and USDT", async () => {
const tusd = new ERC20__factory(accounts.deployer).attach(TUSD.address)
const usdt = new ERC20__factory(accounts.deployer).attach(USDT.address)
const tusdBefore = await tusd.balanceOf(sUSD.whaleAddress)
const usdtBefore = await usdt.balanceOf(sUSD.whaleAddress)
// Get sUSD balance in mUSD
const susdInMusd = await basketManager.getBasset(sUSD.address)
// flash loan amount = target balance - current balance
const loanAmount = scaledTargetBalance.sub(susdInMusd.vaultBalance)
console.log(
`sUSD ${formatUnits(loanAmount)} under weight = ${formatUnits(scaledTargetBalance)} target - ${formatUnits(
susdInMusd.vaultBalance,
)} vault balance`,
)

const swapInputs = [
loanAmount.mul(overweightTokenSplits[0]).div(10000),
loanAmount.mul(overweightTokenSplits[1]).div(10000),
]
console.log(
`Borrow ${formatUnits(swapInputs[0].add(swapInputs[1]), sUSD.decimals)} sUSD to mUSD swap ${formatUnits(
swapInputs[0],
sUSD.decimals,
)} sUSD->TUSD and ${formatUnits(swapInputs[1], sUSD.decimals)} sUSD->USDT `,
)

await susdBalancer.balanceSusd([TUSD.address, USDT.address], swapInputs, sUSD.whaleAddress)

// check more than 9.3m TUSD and 1.3m USDT has been returned to the funder
const tusdAfter = await tusd.balanceOf(sUSD.whaleAddress)
const usdtAfter = await usdt.balanceOf(sUSD.whaleAddress)
expect(tusdAfter).to.gt(tusdBefore.add(simpleToExactAmount(9300000, TUSD.decimals)))
expect(usdtAfter).to.gt(usdtBefore.add(simpleToExactAmount(1300000, USDT.decimals)))
})
})
})
})

0 comments on commit 7aa41ca

Please sign in to comment.