Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions contract-addresses/mainnetAddresses.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@
"rariPool18FeiPCVDepositAddress": { "artifact" : "ERC20CompoundPCVDeposit", "address": "0x5A8CB4556e5D5935Af06beab8292905f48131479"},
"rariPool19FeiAddress": { "artifact" : "CErc20Delegator", "address": "0x04281F6715Dea6A8EbBCE143D86ea506FF326531"},
"rariPool19FeiPCVDepositAddress": { "artifact" : "ERC20CompoundPCVDeposit", "address": "0xD6960adba53212bBE96E54a7AFeDA2066437D000"},
"rariPool22FeiAddress": { "artifact" : "CErc20Delegator", "address": "0x653A32ED7AaA3DB37520125CDB45c17AdB3fdF01"},
"rariPool22FeiPCVDepositAddress": { "artifact" : "ERC20CompoundPCVDeposit", "address": "0x7CeBaB7b4B4399343f6D0D36B550EE097F60d7fE"},
"rariPool24FeiAddress": { "artifact" : "CErc20Delegator", "address": "0xb5A817E5354736eafe3A0C85620433eE75daA649"},
"rariPool24FeiPCVDepositAddress": { "artifact" : "ERC20CompoundPCVDeposit", "address": "0x1434F99EDB2bD03DECCCFe21288767b8324B7403"},
"rariPool25FeiAddress": { "artifact" : "CErc20Delegator", "address": "0xE468D0244D75b9b18B27cb682AeC3ab35d33663B"},
Expand All @@ -104,10 +106,10 @@
"rariPool6FeiPCVDepositAddress": { "artifact" : "ERC20CompoundPCVDeposit", "address": "0xB51f09B6F103D697dc5d64DC904Ad6a2Dad39987"},
"rariPool7FeiAddress": { "artifact" : "CErc20Delegator", "address": "0xE640E9beC342B86266B2bD79F3847e7958cb30C4"},
"rariPool7FeiPCVDepositAddress": { "artifact" : "ERC20CompoundPCVDeposit", "address": "0x74B235Fef146cDB5BE0D3786a9f3774674b3615E"},
"rariPool8ComptrollerAddress": { "address": "0xc54172e34046c1653d1920d40333dd358c7a1af4"},
"rariPool8ComptrollerAddress": { "artifact" : "Unitroller", "address": "0xc54172e34046c1653d1920d40333dd358c7a1af4"},
"rariPool8DaiAddress": { "artifact" : "CErc20Delegator", "address": "0x7e9cE3CAa9910cc048590801e64174957Ed41d43" },
"rariPool8DaiIrmAddress": {"address": "0xede47399e2aa8f076d40dc52896331cba8bd40f7" },
"rariPool8EthAddress": { "address": "0xbB025D470162CC5eA24daF7d4566064EE7f5F111"},
"rariPool8EthAddress": { "artifact" : "CErc20Delegator", "address": "0xbB025D470162CC5eA24daF7d4566064EE7f5F111"},
"rariPool8EthIrmAddress": {"address": "0xbab47e4b692195bf064923178a90ef999a15f819" },
"rariPool8FeiAddress": { "artifact" : "CErc20Delegator", "address": "0xd8553552f8868C1Ef160eEdf031cF0BCf9686945"},
"rariPool8FeiIrmAddress": {"address": "0x8f47be5692180079931e2f983db6996647aba0a5" },
Expand Down
4 changes: 4 additions & 0 deletions contracts/external/Unitroller.sol
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,15 @@ abstract contract Unitroller {
}

address public admin;
address public pendingAdmin;
uint public closeFactorMantissa;
uint public liquidationIncentiveMantissa;
mapping(address => Market) public markets;
function _setPendingAdmin(address newPendingAdmin) public virtual returns (uint);
function _setCloseFactor(uint newCloseFactorMantissa) external virtual returns (uint256);
function _setLiquidationIncentive(uint newLiquidationIncentiveMantissa) external virtual returns (uint);
function _setCollateralFactor(CToken cToken, uint newCollateralFactorMantissa) public virtual returns (uint256);
function _setBorrowPaused(CToken cToken, bool borrowPaused) external virtual;
function _acceptAdmin() external virtual returns (uint);
function borrowGuardianPaused(address cToken) external view virtual returns(bool);
}
2 changes: 1 addition & 1 deletion hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ const config: HardhatUserConfig = {
chainId: 5777, // Any network (default: none)
forking: enableMainnetForking ? {
url: `https://eth-mainnet.alchemyapi.io/v2/${mainnetAlchemyApiKey}`,
blockNumber: 13283992
blockNumber: 13285280
}: undefined
},
localhost: {
Expand Down
74 changes: 74 additions & 0 deletions proposals/dao/fip_28.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { expect } from "chai";
import hre, { ethers } from "hardhat";

const e18 = ethers.constants.WeiPerEther;

async function setup(addresses, oldContracts, contracts, logging) {}

async function run(addresses, oldContracts, contracts, logging = false) {}

async function teardown(addresses, oldContracts, contracts, logging) {
const {
optimisticTimelockAddress
} = addresses;

const {
rariPool8Comptroller,
rariPool8Dai,
rariPool8Tribe,
rariPool8Eth,
rariPool8Fei
} = contracts;

await hre.network.provider.request({
method: 'hardhat_impersonateAccount',
params: [optimisticTimelockAddress],
});

await (await ethers.getSigners())[0].sendTransaction({
to: optimisticTimelockAddress,
value: ethers.utils.parseEther("10.0")
});

await rariPool8Comptroller._acceptAdmin({from: optimisticTimelockAddress});
await rariPool8Dai._acceptAdmin({from: optimisticTimelockAddress});
await rariPool8Tribe._acceptAdmin({from: optimisticTimelockAddress});
await rariPool8Eth._acceptAdmin({from: optimisticTimelockAddress});
await rariPool8Fei._acceptAdmin({from: optimisticTimelockAddress});
}

async function validate(addresses, oldContracts, contracts) {
const {
rariPool8Comptroller,
fei,
rariPool8Dai,
rariPool8Tribe,
rariPool8Eth,
rariPool8Fei,
rariPool22FeiPCVDeposit
} = contracts;

const {
optimisticTimelockAddress
} = addresses;

// Borrow disabled
expect(await rariPool8Comptroller.borrowGuardianPaused(rariPool8Tribe.address)).to.be.equal(true);

// minted FEI
// 1M from before, 50M from proposal
expect((await fei.balanceOf(optimisticTimelockAddress)).toString()).to.be.equal(e18.mul(51_000_000).toString());

expect((await rariPool22FeiPCVDeposit.balance()).toString()).to.be.equal(e18.mul(1_000_000).toString());

// admin transfer
expect(await rariPool8Comptroller.admin()).to.be.equal(optimisticTimelockAddress);
expect(await rariPool8Dai.admin()).to.be.equal(optimisticTimelockAddress);
expect(await rariPool8Tribe.admin()).to.be.equal(optimisticTimelockAddress);
expect(await rariPool8Eth.admin()).to.be.equal(optimisticTimelockAddress);
expect(await rariPool8Fei.admin()).to.be.equal(optimisticTimelockAddress);
}

module.exports = {
setup, run, teardown, validate
};
13 changes: 12 additions & 1 deletion proposals/dao/v2Phase1.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,20 @@
import hre from 'hardhat';

const { constants: { MAX_UINT256 } } = require('@openzeppelin/test-helpers');
const { expect } = require('../../test/helpers');

const e18 = '000000000000000000';

async function setup(addresses, oldContracts, contracts, logging) {}
async function setup(addresses, oldContracts, contracts, logging) {
const {
timelockAddress
} = addresses;

await hre.network.provider.request({
method: 'hardhat_impersonateAccount',
params: [timelockAddress],
});
}

/*
V2 Phase 1 Upgrade Steps
Expand Down
87 changes: 87 additions & 0 deletions proposals/description/fip_28.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{
"proposal_title": "FIP-28/29 FeiRari TRIBE and Optimistic Approval",
"proposal_commands": [
{
"target": "rariPool8Comptroller",
"values": "0",
"method": "_setBorrowPaused(address,bool)",
"arguments": [
"0xFd3300A9a74b3250F1b2AbC12B47611171910b07",
true
],
"description": "Make fTRIBE unborrowable"
},
{
"target": "fei",
"values": "0",
"method": "mint(address,uint256)",
"arguments": [
"0xbC9C084a12678ef5B516561df902fdc426d95483",
"50000000000000000000000000"
],
"description": "Mint 50m FEI to Optimistic Timelock"
},
{
"target": "rariPool8Comptroller",
"values": "0",
"method": "_setPendingAdmin(address)",
"arguments": [
"0xbC9C084a12678ef5B516561df902fdc426d95483"
],
"description": "set admin Comptroller"
},
{
"target": "rariPool8Dai",
"values": "0",
"method": "_setPendingAdmin(address)",
"arguments": [
"0xbC9C084a12678ef5B516561df902fdc426d95483"
],
"description": "set admin fDAI"
},
{
"target": "rariPool8Tribe",
"values": "0",
"method": "_setPendingAdmin(address)",
"arguments": [
"0xbC9C084a12678ef5B516561df902fdc426d95483"
],
"description": "set admin fTRIBE"
},
{
"target": "rariPool8Eth",
"values": "0",
"method": "_setPendingAdmin(address)",
"arguments": [
"0xbC9C084a12678ef5B516561df902fdc426d95483"
],
"description": "set admin fETH"
},
{
"target": "rariPool8Fei",
"values": "0",
"method": "_setPendingAdmin(address)",
"arguments": [
"0xbC9C084a12678ef5B516561df902fdc426d95483"
],
"description": "set admin fFEI"
},
{
"target": "fei",
"values": "0",
"method": "mint(address,uint256)",
"arguments": [
"0x7CeBaB7b4B4399343f6D0D36B550EE097F60d7fE",
"1000000000000000000000000"
],
"description": "Mint 1m FEI to Fuse Pool 22"
},
{
"target": "rariPool22FeiPCVDeposit",
"values": "0",
"method": "deposit()",
"arguments": [],
"description": "Deposit pool 22 FEI"
}
]
}
1 change: 1 addition & 0 deletions proposals/description/fip_28.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
FIP-28 text
30 changes: 30 additions & 0 deletions scripts/deploy/fip_28.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const ERC20CompoundPCVDeposit = artifacts.require('ERC20CompoundPCVDeposit');

async function deploy(deployAddress, addresses, logging = false) {
const {
coreAddress,
feiAddress,
rariPool22FeiAddress,
} = addresses;

if (
!coreAddress || !feiAddress || !rariPool22FeiAddress
) {
throw new Error('An environment variable contract address is not set');
}

const rariPool22FeiPCVDeposit = await ERC20CompoundPCVDeposit.new(
coreAddress,
rariPool22FeiAddress,
feiAddress,
{ from: deployAddress }
);

logging && console.log('Rari Pool 22 FEI ERC20CompoundPCVDeposit deployed to: ', rariPool22FeiPCVDeposit.address);

return {
rariPool22FeiPCVDeposit
};
}

module.exports = { deploy };
5 changes: 5 additions & 0 deletions test/integration/proposals_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
"exec" : false,
"proposerAddress" : "0xe0ac4559739bD36f0913FB0A3f5bFC19BCBaCD52"
},
"fip_28" : {
"deploy" : false,
"exec" : true,
"proposerAddress" : "0xe0ac4559739bD36f0913FB0A3f5bFC19BCBaCD52"
},
"v2Phase1": {
"deploy" : true,
"exec" : false,
Expand Down