Skip to content

Commit

Permalink
feat: FRAX FP post deploy
Browse files Browse the repository at this point in the history
  • Loading branch information
naddison36 authored and superduck35 committed Jul 5, 2021
1 parent 9516051 commit ef5cff6
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 8 deletions.
3 changes: 1 addition & 2 deletions hardhat-fork-polygon.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ export default {
blockGasLimit: 20000000, // 20 million
gasPrice: 5000000000, // 5 Gwei
forking: {
url: "https://matic-mainnet-archive-rpc.bwarelabs.com",
blockNumber: 15510323,
url: process.env.NODE_URL || "https://matic-mainnet-archive-rpc.bwarelabs.com",
},
},
},
Expand Down
6 changes: 3 additions & 3 deletions hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ export const hardhatConfig = {
gasLimit: 8000000,
},
polygon_testnet: {
url: "https://rpc-mumbai.maticvigil.com",
url: process.env.NODE_URL || "https://rpc-mumbai.maticvigil.com",
},
polygon_mainnet: {
url: "https://rpc-mainnet.matic.quiknode.pro",
url: process.env.NODE_URL || "https://rpc-mainnet.matic.quiknode.pro",
},
mainnet: {
url: process.env.NODE_URL || "",
url: process.env.NODE_URL || "https://main-light.eth.linkpool.io",
},
},
solidity: {
Expand Down
27 changes: 24 additions & 3 deletions tasks/feeder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import "tsconfig-paths/register"
import { task, types } from "hardhat/config"
import { Signer } from "ethers"

import { FeederPool, FeederPool__factory, Masset } from "types/generated"
import { BN } from "@utils/math"
import { ERC20__factory, FeederPool, FeederPool__factory, IERC20__factory, Masset } from "types/generated"
import { BN, simpleToExactAmount } from "@utils/math"
import { dumpConfigStorage, dumpFassetStorage, dumpTokenStorage } from "./utils/storage-utils"
import {
getMultiRedemptions,
Expand All @@ -21,10 +21,11 @@ import {
getSavingsManager,
getCollectedInterest,
} from "./utils/snap-utils"
import { Token, tokens } from "./utils/tokens"
import { PFRAX, PmUSD, Token, tokens } from "./utils/tokens"
import { btcFormatter, QuantityFormatter, usdFormatter } from "./utils/quantity-formatters"
import { getSwapRates } from "./utils/rates-utils"
import { getSigner } from "./utils/defender-utils"
import { logTxDetails } from "./utils"

const getBalances = async (mAsset: Masset | FeederPool, toBlock: number, asset: Token): Promise<Balances> => {
const mAssetBalance = await mAsset.totalSupply({
Expand Down Expand Up @@ -195,4 +196,24 @@ task("feeder-rates", "Feeder rate comparison to Curve")
await snapConfig(feederPool, block.blockNumber)
})

task("frax-post-deploy", "Mint FRAX Feeder Pool").setAction(async (_, { ethers, network }) => {
const signer = await getSigner(network.name, ethers)

const frax = ERC20__factory.connect(PFRAX.address, signer)
const fraxFp = FeederPool__factory.connect(PFRAX.feederPool, signer)
const musd = await IERC20__factory.connect(PmUSD.address, signer)

const approveAmount = simpleToExactAmount(100)
const bAssetAmount = simpleToExactAmount(10)
const minAmount = simpleToExactAmount(9)

let tx = await frax.approve(PFRAX.feederPool, approveAmount)
await logTxDetails(tx, "approve FRAX")

tx = await musd.approve(PFRAX.feederPool, approveAmount)
await logTxDetails(tx, "approve mUSD")

tx = await fraxFp.mintMulti([PFRAX.address, PmUSD.address], [bAssetAmount, bAssetAmount], minAmount, await signer.getAddress())
await logTxDetails(tx, "mint FRAX FP")
})
module.exports = {}
66 changes: 66 additions & 0 deletions test-fork/feeders/feeders-frax.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { impersonateAccount } from "@utils/fork"
import { simpleToExactAmount } from "@utils/math"
import { expect } from "chai"
import { ethers, network } from "hardhat"
import { PFRAX, PmUSD } from "tasks/utils"
import { Account } from "types"
import { ERC20, ERC20__factory, FeederPool, FeederPool__factory, IERC20, IERC20__factory } from "types/generated"

const accountAddress = "0xdccb7a6567603af223c090be4b9c83eced210f18"

context("FRAX Feeder Pool on Polygon", () => {
let account: Account
let frax: ERC20
let fraxFp: FeederPool
let musd: IERC20

before("reset block number", async () => {
await network.provider.request({
method: "hardhat_reset",
params: [
{
forking: {
jsonRpcUrl: process.env.NODE_URL,
blockNumber: 16440763,
},
},
],
})
account = await impersonateAccount(accountAddress)

frax = ERC20__factory.connect(PFRAX.address, account.signer)
fraxFp = FeederPool__factory.connect(PFRAX.feederPool, account.signer)
musd = await IERC20__factory.connect(PmUSD.address, account.signer)
})
it("Test connectivity", async () => {
const currentBlock = await ethers.provider.getBlockNumber()
console.log(`Current block ${currentBlock}`)
const startEther = await account.signer.getBalance()
console.log(`Deployer ${account} has ${startEther} Ether`)
})
it("Approve spend of FRAX", async () => {
expect(await frax.allowance(account.address, PFRAX.feederPool), "Allowance before").to.eq(0)
const approveAmount = simpleToExactAmount(20)
await frax.approve(PFRAX.feederPool, approveAmount)
expect(await frax.allowance(account.address, PFRAX.feederPool), "Allowance after").to.eq(approveAmount)
})
it("Approve spend of mUSD", async () => {
expect(await musd.allowance(account.address, PFRAX.feederPool), "Allowance before").to.eq(0)
const approveAmount = simpleToExactAmount(21)
await musd.approve(PFRAX.feederPool, approveAmount)
expect(await musd.allowance(account.address, PFRAX.feederPool), "Allowance after").to.eq(approveAmount)
})
it("Mint fraxFp", async () => {
const bAssetAmount = simpleToExactAmount(10)
const minAmount = simpleToExactAmount(9)
expect(await frax.balanceOf(account.address), "FRAX balance before").to.gt(bAssetAmount)
expect(await musd.balanceOf(account.address), "mUSD balance before").to.gt(bAssetAmount)
expect(await fraxFp.balanceOf(account.address), "fraxFp balance before").to.eq(0)
expect(await fraxFp.totalSupply(), "totalSupply before").to.eq(0)

await fraxFp.mintMulti([PFRAX.address, PmUSD.address], [bAssetAmount, bAssetAmount], minAmount, account.address)

expect(await fraxFp.balanceOf(account.address), "fraxFp balance after").to.gt(minAmount)
expect(await fraxFp.totalSupply(), "totalSupply after").to.gt(minAmount)
})
})

0 comments on commit ef5cff6

Please sign in to comment.