Skip to content
This repository was archived by the owner on Aug 26, 2024. It is now read-only.

Commit cc90ce5

Browse files
committed
Merge branch 'development' into update-base-flywheel-script
2 parents 2a61759 + 0c26e97 commit cc90ce5

File tree

22 files changed

+657
-778
lines changed

22 files changed

+657
-778
lines changed
+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import { addTransaction, prepareAndLogTransaction } from "../logging";
2+
import {
3+
AerodromeDeployFnParams,
4+
ChainlinkAsset,
5+
ChainlinkDeployFnParams,
6+
ChainlinkFeedBaseCurrency
7+
} from "../../../chains/types";
8+
9+
import { addUnderlyingsToMpo } from "./utils";
10+
import { Address, encodeFunctionData } from "viem";
11+
import { underlying } from "../utils";
12+
import { DeployResult } from "hardhat-deploy/types";
13+
14+
export const deployAerodromeOracle = async ({
15+
viem,
16+
getNamedAccounts,
17+
deployments,
18+
pricesContract,
19+
assets
20+
}: AerodromeDeployFnParams): Promise<{ apo: DeployResult }> => {
21+
const { deployer } = await getNamedAccounts();
22+
const publicClient = await viem.getPublicClient();
23+
const walletClient = await viem.getWalletClient(deployer as Address);
24+
let tx;
25+
26+
//// Aerodrome Oracle
27+
const apo = await deployments.deploy("AerodromePriceOracle", {
28+
from: deployer,
29+
args: [pricesContract],
30+
log: true,
31+
waitConfirmations: 1
32+
});
33+
if (apo.transactionHash) await publicClient.waitForTransactionReceipt({ hash: apo.transactionHash as Address });
34+
console.log("ChainlinkPriceOracleV2: ", apo.address);
35+
36+
const aerodrome = await viem.getContractAt(
37+
"AerodromePriceOracle",
38+
(await deployments.get("AerodromePriceOracle")).address as Address
39+
);
40+
41+
const underlyings = assets.map((c) => underlying(assets, c.symbol));
42+
43+
const mpo = await viem.getContractAt(
44+
"MasterPriceOracle",
45+
(await deployments.get("MasterPriceOracle")).address as Address
46+
);
47+
await addUnderlyingsToMpo(mpo as any, underlyings, aerodrome.address, deployer, publicClient, walletClient);
48+
49+
const addressesProvider = await viem.getContractAt(
50+
"AddressesProvider",
51+
(await deployments.get("AddressesProvider")).address as Address
52+
);
53+
const aerodromeAddress = await addressesProvider.read.getAddress(["AerodromePriceOracle"]);
54+
if (aerodromeAddress !== aerodrome.address) {
55+
if (((await addressesProvider.read.owner()) as Address).toLowerCase() === deployer.toLowerCase()) {
56+
tx = await addressesProvider.write.setAddress(["AerodromePriceOracle", aerodrome.address]);
57+
await publicClient.waitForTransactionReceipt({ hash: tx });
58+
console.log(`setAddress AerodromePriceOracle at ${tx}`);
59+
} else {
60+
prepareAndLogTransaction({
61+
contractInstance: addressesProvider,
62+
functionName: "setAddress",
63+
args: ["AerodromePriceOracle", aerodrome.address],
64+
description: "Set AerodromePriceOracle address on AddressProvider",
65+
inputs: [
66+
{ internalType: "string", name: "id", type: "string" },
67+
{ internalType: "address", name: "newAddress", type: "address" }
68+
]
69+
});
70+
console.log("Logged Transaction to setAddress ChainlinkPriceOracleV2 on AddressProvider");
71+
}
72+
}
73+
74+
return { apo };
75+
};

chainDeploy/mainnets/base.ts

+58-57
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,65 @@
1-
// import { ChainDeployConfig, deployChainlinkOracle } from "../helpers";
2-
// import { ChainlinkAsset } from "../../chains/types";
1+
import { ChainDeployConfig } from "../helpers";
2+
import { OracleTypes, SupportedAsset } from "../../chains/types";
3+
import { base } from "../../chains";
4+
import { deployAerodromeOracle } from "../helpers/oracles/aerodrome";
5+
import { HardhatRuntimeEnvironment } from "hardhat/types";
36

4-
// const assets = base.assets;
7+
const assets = base.assets;
58

6-
// export const deployConfig: ChainDeployConfig = {
7-
// blocksPerYear: Number(base.specificParams.blocksPerYear),
8-
// cgId: base.specificParams.cgId,
9-
// nativeTokenName: "Base",
10-
// nativeTokenSymbol: "ETH",
11-
// stableToken: base.chainAddresses.STABLE_TOKEN,
12-
// uniswap: {
13-
// flashSwapFee: 30, // TODO set the correct fee
14-
// hardcoded: [],
15-
// uniswapData: [],
16-
// uniswapOracleInitialDeployTokens: [],
17-
// uniswapV2FactoryAddress: "0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6",
18-
// uniswapV2RouterAddress: "0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24",
19-
// uniswapV3SwapRouter: "0x2626664c2603336E57B271c5C0b26F421741e481",
20-
// uniswapV3Quoter: "0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a"
21-
// },
22-
// wtoken: base.chainAddresses.W_TOKEN,
23-
// nativeTokenUsdChainlinkFeed: base.chainAddresses.W_TOKEN_USD_CHAINLINK_PRICE_FEED
24-
// };
9+
const pricesContract = "0xee717411f6E44F9feE011835C8E6FAaC5dEfF166";
2510

26-
// const chainlinkAssets: ChainlinkAsset[] = base.assets
27-
// .filter((asset) => asset.oracle === OracleTypes.ChainlinkPriceOracleV2)
28-
// .map((asset) => ({
29-
// aggregator: (asset.oracleSpecificParams as ChainlinkSpecificParams).aggregator,
30-
// feedBaseCurrency: (asset.oracleSpecificParams as ChainlinkSpecificParams).feedBaseCurrency,
31-
// symbol: asset.symbol
32-
// }));
11+
export const deployConfig: ChainDeployConfig = {
12+
blocksPerYear: Number(base.specificParams.blocksPerYear),
13+
cgId: base.specificParams.cgId,
14+
nativeTokenName: "Base",
15+
nativeTokenSymbol: "ETH",
16+
stableToken: base.chainAddresses.STABLE_TOKEN,
17+
uniswap: {
18+
flashSwapFee: 30, // TODO set the correct fee
19+
hardcoded: [],
20+
uniswapData: [],
21+
uniswapOracleInitialDeployTokens: [],
22+
uniswapV2FactoryAddress: "0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6",
23+
uniswapV2RouterAddress: "0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24",
24+
uniswapV3SwapRouter: "0x2626664c2603336E57B271c5C0b26F421741e481",
25+
uniswapV3Quoter: "0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a"
26+
},
27+
wtoken: base.chainAddresses.W_TOKEN,
28+
nativeTokenUsdChainlinkFeed: base.chainAddresses.W_TOKEN_USD_CHAINLINK_PRICE_FEED
29+
};
3330

34-
// export const deploy = async ({ run, ethers, getNamedAccounts, deployments }): Promise<void> => {
35-
// const { deployer } = await getNamedAccounts();
31+
const aerodromeAssets: SupportedAsset[] = base.assets.filter(
32+
(asset) => asset.oracle === OracleTypes.AerodromePriceOracle
33+
);
3634

37-
// //// ChainLinkV2 Oracle
38-
// await deployChainlinkOracle({
39-
// run,
40-
// ethers,
41-
// getNamedAccounts,
42-
// deployments,
43-
// deployConfig,
44-
// assets,
45-
// chainlinkAssets
46-
// });
35+
export const deploy = async ({ run, viem, getNamedAccounts, deployments }: HardhatRuntimeEnvironment): Promise<void> => {
36+
const { deployer } = await getNamedAccounts();
4737

48-
// //// Uniswap V3 Liquidator Funder
49-
// const uniswapV3LiquidatorFunder = await deployments.deploy("UniswapV3LiquidatorFunder", {
50-
// from: deployer,
51-
// args: [],
52-
// log: true,
53-
// waitConfirmations: 1
54-
// });
55-
// console.log("UniswapV3LiquidatorFunder: ", uniswapV3LiquidatorFunder.address);
38+
//// ChainLinkV2 Oracle
39+
await deployAerodromeOracle({
40+
run,
41+
viem,
42+
getNamedAccounts,
43+
deployments,
44+
deployConfig,
45+
assets: aerodromeAssets,
46+
pricesContract
47+
});
5648

57-
// const solidlySwapLiquidator = await deployments.deploy("SolidlySwapLiquidator", {
58-
// from: deployer,
59-
// args: [],
60-
// log: true,
61-
// waitConfirmations: 1
62-
// });
63-
// console.log("solidlySwapLiquidator: ", solidlySwapLiquidator.address);
64-
// };
49+
//// Uniswap V3 Liquidator Funder
50+
const uniswapV3LiquidatorFunder = await deployments.deploy("UniswapV3LiquidatorFunder", {
51+
from: deployer,
52+
args: [],
53+
log: true,
54+
waitConfirmations: 1
55+
});
56+
console.log("UniswapV3LiquidatorFunder: ", uniswapV3LiquidatorFunder.address);
57+
58+
const solidlySwapLiquidator = await deployments.deploy("SolidlySwapLiquidator", {
59+
from: deployer,
60+
args: [],
61+
log: true,
62+
waitConfirmations: 1
63+
});
64+
console.log("solidlySwapLiquidator: ", solidlySwapLiquidator.address);
65+
};

chainDeploy/mainnets/mode.ts

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { Hash, zeroAddress } from "viem";
22

33
import { ChainDeployConfig, deployChainlinkOracle, deployPythPriceOracle } from "../helpers";
4-
import { writeTransactionsToFile } from "../helpers/logging";
54
import { addRedstoneFallbacks } from "../helpers/oracles/redstoneFallbacks";
65
import { addRedstoneWeETHFallbacks } from "../helpers/oracles/redstoneWeETHFallbacks";
76
import { deployRedStoneWrsETHPriceOracle } from "../helpers/oracles/redstoneWrsETH";
@@ -145,5 +144,4 @@ export const deploy = async ({
145144
await publicClient.waitForTransactionReceipt({ hash: algebraSwapLiquidator.transactionHash as Hash });
146145
}
147146
console.log("AlgebraSwapLiquidator: ", algebraSwapLiquidator.address);
148-
await writeTransactionsToFile();
149147
};

chains/assets.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ export enum assetSymbols {
1717
LUSD = "LUSD",
1818
SOV = "SOV",
1919
tBTC = "tBTC",
20-
RSR = "RSR"
20+
RSR = "RSR",
21+
ION = "ION"
2122
}

chains/base/assets.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export const weETH = "0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A";
1414
export const eUSD = "0xcfa3ef56d303ae4faaba0592388f19d7c3399fb4";
1515
export const bsdETH = "0xcb327b99ff831bf8223cced12b1338ff3aa322ff";
1616
export const RSR = "0xaB36452DbAC151bE02b16Ca17d8919826072f64a";
17+
export const ION = "0x3eE5e23eEE121094f1cFc0Ccc79d6C809Ebd22e5";
1718

1819
export const assets: SupportedAsset[] = [
1920
{
@@ -110,7 +111,7 @@ export const assets: SupportedAsset[] = [
110111
aggregator: "0xFC1415403EbB0c693f9a7844b92aD2Ff24775C65",
111112
feedBaseCurrency: ChainlinkFeedBaseCurrency.ETH
112113
},
113-
initialCf: "70"
114+
initialCf: "0.70"
114115
},
115116
{
116117
symbol: assetSymbols.eUSD,
@@ -124,7 +125,7 @@ export const assets: SupportedAsset[] = [
124125
} as ChainlinkSpecificParams,
125126
initialSupplyCap: parseEther(String(10_000_000)).toString(),
126127
initialBorrowCap: parseEther(String(8_000_000)).toString(),
127-
initialCf: "80"
128+
initialCf: "0.80"
128129
},
129130
{
130131
symbol: assetSymbols.bsdETH,
@@ -138,7 +139,7 @@ export const assets: SupportedAsset[] = [
138139
},
139140
initialSupplyCap: parseEther(String(6_500)).toString(),
140141
initialBorrowCap: parseEther(String(5_200)).toString(),
141-
initialCf: "70"
142+
initialCf: "0.70"
142143
},
143144
{
144145
symbol: assetSymbols.RSR,
@@ -150,6 +151,13 @@ export const assets: SupportedAsset[] = [
150151
aggregator: "0xAa98aE504658766Dfe11F31c5D95a0bdcABDe0b1",
151152
feedBaseCurrency: ChainlinkFeedBaseCurrency.USD
152153
}
154+
},
155+
{
156+
symbol: assetSymbols.ION,
157+
underlying: ION,
158+
name: "Ionic",
159+
decimals: 18,
160+
oracle: OracleTypes.AerodromePriceOracle
153161
}
154162
];
155163

chains/base/leveragePairs.ts

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,28 @@
1+
import { Address } from "viem";
12
import { LeveragePoolConfig } from "../types";
23

3-
const leveragePairs: LeveragePoolConfig[] = [];
4+
const collaterals: Address[] = [
5+
"0x079f84161642D81aaFb67966123C9949F9284bf5", // ionezETH
6+
"0x9D62e30c6cB7964C99314DCf5F847e36Fcb29ca9", // ionwstETH
7+
"0x9c201024A62466F9157b2dAaDda9326207ADDd29", // ioncbETH
8+
"0x014e08F05ac11BB532BE62774A4C548368f59779", // ionAERO
9+
"0xa900A17a49Bc4D442bA7F72c39FA2108865671f0", // ionUSDC
10+
"0x9c2A4f9c5471fd36bE3BBd8437A33935107215A1", // ionEUSD
11+
"0x49420311B518f3d0c94e897592014de53831cfA3", // ionWETH
12+
"0x84341B650598002d427570298564d6701733c805", // ionweETH
13+
"0x3D9669DE9E3E98DB41A1CbF6dC23446109945E3C" // ionbsdETH
14+
];
15+
const borrows: Address[] = [
16+
"0xa900A17a49Bc4D442bA7F72c39FA2108865671f0", // ionUSDC
17+
"0x49420311B518f3d0c94e897592014de53831cfA3", // ionWETH
18+
"0x9c2A4f9c5471fd36bE3BBd8437A33935107215A1" // ionEUSD
19+
];
20+
21+
const leveragePairs: LeveragePoolConfig[] = [
22+
{
23+
pool: "Main" as Address,
24+
pairs: collaterals.flatMap((collateral) => borrows.map((borrow) => ({ collateral, borrow })))
25+
}
26+
];
427

528
export default leveragePairs;

chains/index.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { default as mode } from "./mode";
2+
import { default as base } from "./base";
23
import { ChainConfig } from "./types";
34

4-
export { mode };
5+
export { mode, base };
56

67
export const chainIdToConfig: { [chainId: number]: ChainConfig } = {
7-
[mode.chainId]: mode
8+
[mode.chainId]: mode,
9+
[base.chainId]: base
810
};

chains/mode/assets.ts

+15-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const mBTC = "0x59889b7021243dB5B1e065385F918316cD90D46c";
1717
export const MODE = "0xDfc7C877a950e49D2610114102175A06C2e3167a";
1818
// export const ION = "0x18470019bf0e94611f15852f7e93cf5d65bc34ca";
1919
export const KIM = "0x6863fb62Ed27A9DdF458105B507C15b5d741d62e";
20+
export const STONE = "0x80137510979822322193fc997d400d5a6c747bf7";
2021

2122
export const assets: SupportedAsset[] = [
2223
{
@@ -52,21 +53,32 @@ export const assets: SupportedAsset[] = [
5253
underlying: ezETH,
5354
name: "Renzo Restaked ETH",
5455
decimals: 18,
55-
oracle: OracleTypes.RedstoneAdapterPriceOracle
56+
oracle: OracleTypes.RedstoneAdapterPriceOracle,
57+
initialCf: "0.8"
5658
},
5759
{
5860
symbol: "weETH",
5961
underlying: weETH,
6062
name: "Wrapped eETH",
6163
decimals: 18,
62-
oracle: OracleTypes.RedstoneAdapterPriceOracle
64+
oracle: OracleTypes.RedstoneAdapterPriceOracle,
65+
initialCf: "0.8"
66+
},
67+
{
68+
symbol: "STONE",
69+
underlying: STONE,
70+
name: "StakeStone Ether",
71+
decimals: 18,
72+
oracle: OracleTypes.RedstoneAdapterPriceOracle,
73+
initialCf: "0.775"
6374
},
6475
{
6576
symbol: "wrsETH",
6677
underlying: wrsETH,
6778
name: "rsETHWrapper",
6879
decimals: 18,
69-
oracle: OracleTypes.RedstoneAdapterWrsETHPriceOracle
80+
oracle: OracleTypes.RedstoneAdapterWrsETHPriceOracle,
81+
initialCf: "0.775"
7082
},
7183
{
7284
symbol: "MODE",

0 commit comments

Comments
 (0)