Skip to content

Commit 9014df3

Browse files
Base Mainnet deployment (#956)
Co-authored-by: Patrick McKelvy <pmckelvy1@gmail.com>
1 parent 9f31dcc commit 9014df3

25 files changed

+4766
-932
lines changed

.openzeppelin/base_8453.json

Lines changed: 3149 additions & 0 deletions
Large diffs are not rendered by default.

common/configuration.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export interface ITokens {
2727
aWBTC?: string
2828
aCRV?: string
2929
aEthUSDC?: string
30-
aUSDbCv3?: string
30+
aBasUSDbC?: string
3131
aWETHv3?: string
3232
acbETHv3?: string
3333
cDAI?: string
@@ -109,6 +109,9 @@ interface INetworkConfig {
109109
MORPHO_AAVE_CONTROLLER?: string
110110
MORPHO_REWARDS_DISTRIBUTOR?: string
111111
MORPHO_AAVE_LENS?: string
112+
COMET_REWARDS?: string
113+
AAVE_V3_INCENTIVES_CONTROLLER?: string
114+
AAVE_V3_POOL?: string
112115
}
113116

114117
export const networkConfig: { [key: string]: INetworkConfig } = {
@@ -212,6 +215,9 @@ export const networkConfig: { [key: string]: INetworkConfig } = {
212215
MORPHO_AAVE_LENS: '0x507fA343d0A90786d86C7cd885f5C49263A91FF4',
213216
MORPHO_AAVE_CONTROLLER: '0x777777c9898D384F785Ee44Acfe945efDFf5f3E0',
214217
MORPHO_REWARDS_DISTRIBUTOR: '0x3b14e5c73e0a56d607a8688098326fd4b4292135',
218+
COMET_REWARDS: '0x1B0e765F6224C21223AeA2af16c1C46E38885a40',
219+
AAVE_V3_POOL: '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2',
220+
AAVE_V3_INCENTIVES_CONTROLLER: '0x8164Cc65827dcFe994AB23944CBC90e0aa80bFcb',
215221
},
216222
'1': {
217223
name: 'mainnet',
@@ -304,6 +310,9 @@ export const networkConfig: { [key: string]: INetworkConfig } = {
304310
MORPHO_AAVE_LENS: '0x507fA343d0A90786d86C7cd885f5C49263A91FF4',
305311
MORPHO_AAVE_CONTROLLER: '0x777777c9898D384F785Ee44Acfe945efDFf5f3E0',
306312
MORPHO_REWARDS_DISTRIBUTOR: '0x3b14e5c73e0a56d607a8688098326fd4b4292135',
313+
COMET_REWARDS: '0x1B0e765F6224C21223AeA2af16c1C46E38885a40',
314+
AAVE_V3_POOL: '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2',
315+
AAVE_V3_INCENTIVES_CONTROLLER: '0x8164Cc65827dcFe994AB23944CBC90e0aa80bFcb',
307316
},
308317
'3': {
309318
name: 'tenderly',
@@ -396,6 +405,9 @@ export const networkConfig: { [key: string]: INetworkConfig } = {
396405
MORPHO_AAVE_LENS: '0x507fA343d0A90786d86C7cd885f5C49263A91FF4',
397406
MORPHO_AAVE_CONTROLLER: '0x777777c9898D384F785Ee44Acfe945efDFf5f3E0',
398407
MORPHO_REWARDS_DISTRIBUTOR: '0x3b14e5c73e0a56d607a8688098326fd4b4292135',
408+
COMET_REWARDS: '0x1B0e765F6224C21223AeA2af16c1C46E38885a40',
409+
AAVE_V3_POOL: '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2',
410+
AAVE_V3_INCENTIVES_CONTROLLER: '0x8164Cc65827dcFe994AB23944CBC90e0aa80bFcb',
399411
},
400412
'5': {
401413
name: 'goerli',
@@ -495,13 +507,13 @@ export const networkConfig: { [key: string]: INetworkConfig } = {
495507
WETH: '0x4200000000000000000000000000000000000006',
496508
cbETH: '0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22',
497509
cUSDbCv3: '0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf',
498-
aUSDbCv3: '0x0a1d576f3eFeF75b330424287a95A366e8281D54',
510+
aBasUSDbC: '0x0a1d576f3eFeF75b330424287a95A366e8281D54',
499511
aWETHv3: '0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7',
500-
acbETHv3: '0xcf3D55c10DB69f28fD1A75Bd73f3D8A2d9c595ad'
512+
acbETHv3: '0xcf3D55c10DB69f28fD1A75Bd73f3D8A2d9c595ad',
501513
},
502514
chainlinkFeeds: {
503515
DAI: '0x591e79239a7d679378ec8c847e5038150364c78f', // 0.3%, 24hr
504-
ETH: '0x71041dddad3595f9ced3dccfbe3d1f4b0a16bb70', // 0.5%, 24hr
516+
ETH: '0x71041dddad3595f9ced3dccfbe3d1f4b0a16bb70', // 0.15%, 20min
505517
WBTC: '0xccadc697c55bbb68dc5bcdf8d3cbe83cdd4e071e', // 0.5%, 24hr
506518
USDC: '0x7e860098f58bbfc8648a4311b374b1d669a2bc6b', // 0.3%, 24hr
507519
USDT: '0xf19d560eb8d2adf07bd6d13ed03e1d11215721f9', // 0.3%, 24hr
@@ -512,6 +524,9 @@ export const networkConfig: { [key: string]: INetworkConfig } = {
512524
cbETHETHexr: '0x868a501e68F3D1E89CfC0D22F6b22E8dabce5F04', // 0.5%, 24hr
513525
},
514526
GNOSIS_EASY_AUCTION: '0xb1875Feaeea32Bbb02DE83D81772e07E37A40f02', // mock
527+
COMET_REWARDS: '0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1',
528+
AAVE_V3_POOL: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',
529+
AAVE_V3_INCENTIVES_CONTROLLER: '0xf9cc4F0D883F1a1eb2c253bdb46c254Ca51E1F44',
515530
},
516531
}
517532

hardhat.config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,14 @@ const config: HardhatUserConfig = {
142142
etherscan: {
143143
apiKey: useEnv('ETHERSCAN_API_KEY'),
144144
customChains: [
145+
{
146+
network: 'base',
147+
chainId: 8453,
148+
urls: {
149+
apiURL: 'https://api.basescan.org/api',
150+
browserURL: 'https://basescan.org',
151+
},
152+
},
145153
{
146154
network: 'base-goerli',
147155
chainId: 84531,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"assets": {
3+
"COMP": "0x277FD5f51fE53a9B3707a0383bF930B149C74ABf"
4+
},
5+
"collateral": {
6+
"DAI": "0x5EBE8927e5495e0A7731888C81AF463cD63602fb",
7+
"WETH": "0x42D0fA25d6d5bff01aC050c0F5aB0B2C9D01b4a3",
8+
"USDbC": "0x6490D66B17A1E9a460Ab54131165C8F921aCcDeB",
9+
"cbETH": "0x5fE248625aC2AB0e17A115fef288f17AF1952402",
10+
"cUSDbCv3": "0xa372EC846131FBf9AE8b589efa3D041D9a94dF41",
11+
"aBasUSDbC": "0x1DdB7dfdC5D26FE1f2aD02d9972f12481346Ae9b"
12+
},
13+
"erc20s": {
14+
"COMP": "0x9e1028F5F1D5eDE59748FFceE5532509976840E0",
15+
"DAI": "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb",
16+
"WETH": "0x4200000000000000000000000000000000000006",
17+
"USDbC": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA",
18+
"cbETH": "0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22",
19+
"cUSDbCv3": "0xbC0033679AEf41Fb9FeB553Fdf55a8Bb2fC5B29e",
20+
"aBasUSDbC": "0x308447562442Cc43978f8274fA722C9C14BafF8b"
21+
}
22+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"prerequisites": {
3+
"RSR": "0xaB36452DbAC151bE02b16Ca17d8919826072f64a",
4+
"RSR_FEED": "0xAa98aE504658766Dfe11F31c5D95a0bdcABDe0b1",
5+
"GNOSIS_EASY_AUCTION": "0xb1875Feaeea32Bbb02DE83D81772e07E37A40f02"
6+
},
7+
"tradingLib": "0x4E01677488384B851EeAa09C8b8F6Dd0b16d7E9B",
8+
"cvxMiningLib": "",
9+
"facadeRead": "0xe1aa15DA8b993c6312BAeD91E0b470AE405F91BF",
10+
"facadeAct": "0x3d6D679c863858E89e35c925F937F5814ca687F3",
11+
"facadeWriteLib": "0x29e9740275D26fdeDBb0ABA8129C74c15c393027",
12+
"basketLib": "0x199E12d58B36deE2D2B3dD2b91aD7bb25c787a71",
13+
"facadeWrite": "0x0903048fD4E948c60451B41A48B35E0bafc0967F",
14+
"deployer": "0xf1B06c2305445E34CF0147466352249724c2EAC1",
15+
"rsrAsset": "0x23b57479327f9BccE6A1F6Be65F3dAa3C9Db797B",
16+
"implementations": {
17+
"main": "0x1D6d0B74E7A701aE5C2E11967b242E9861275143",
18+
"trading": {
19+
"gnosisTrade": "0xD4e1D5b1311C992b2735710D46A10284Bcd7D39F",
20+
"dutchTrade": "0xDfCc89cf76aC93D113A21Da8fbfA63365b1E3DC7"
21+
},
22+
"components": {
23+
"assetRegistry": "0x9c387fc258061bd3E02c851F36aE227DB03a396C",
24+
"backingManager": "0x63e12c3b2DBCaeF1835Bb99Ac1Fdb0Ebe1bE69bE",
25+
"basketHandler": "0x25E92785C1AC01B397224E0534f3D626868A1Cbf",
26+
"broker": "0x12c3BB1B0da85fDaE0137aE8fDe901F7D0e106ba",
27+
"distributor": "0xd31de64957b79435bfc702044590ac417e02c19B",
28+
"furnace": "0x45D7dFE976cdF80962d863A66918346a457b87Bd",
29+
"rsrTrader": "0xAeA6BD7b231C0eC7f35C2bdf47A76053D09dbD09",
30+
"rTokenTrader": "0xAeA6BD7b231C0eC7f35C2bdf47A76053D09dbD09",
31+
"rToken": "0xA42850A760151bb3ACF17E7f8643EB4d864bF7a6",
32+
"stRSR": "0x53321f03A7cce52413515DFD0527e0163ec69A46"
33+
}
34+
}
35+
}

scripts/addresses/mainnet-3.0.0/1-tmp-assets-collateral.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
"maDAI": "0x9d38BFF9Af50738DF92a54Ceab2a2C2322BB1FAB",
4747
"maWBTC": "0x49A44d50d3B1E098DAC9402c4aF8D0C0E499F250",
4848
"maWETH": "0x878b995bDD2D9900BEE896Bd78ADd877672e1637",
49-
"maStETH": "0x33E840e5711549358f6d4D11F9Ab2896B36E9822"
49+
"maStETH": "0x33E840e5711549358f6d4D11F9Ab2896B36E9822",
50+
"aEthUSDC": "0x12c3BB1B0da85fDaE0137aE8fDe901F7D0e106ba"
5051
},
5152
"erc20s": {
5253
"stkAAVE": "0x4da27a545c0c5B758a6BA100e3a049001de870f5",
@@ -93,6 +94,7 @@
9394
"maDAI": "0xE2b16e14dB6216e33082D5A8Be1Ef01DF7511bBb",
9495
"maWBTC": "0xe0E1d3c6f09DA01399e84699722B11308607BBfC",
9596
"maWETH": "0x291ed25eB61fcc074156eE79c5Da87e5DA94198F",
96-
"maStETH": "0x97F9d5ed17A0C99B279887caD5254d15fb1B619B"
97+
"maStETH": "0x97F9d5ed17A0C99B279887caD5254d15fb1B619B",
98+
"aEthUSDC": "0x63e12c3b2DBCaeF1835Bb99Ac1Fdb0Ebe1bE69bE"
9799
}
98100
}

scripts/deploy.ts

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable no-process-exit */
22
import hre from 'hardhat'
33
import { getChainId } from '../common/blockchain-utils'
4-
import { networkConfig } from '../common/configuration'
4+
import { baseL2Chains, networkConfig } from '../common/configuration'
55
import { sh } from './deployment/utils'
66

77
async function main() {
@@ -25,7 +25,8 @@ async function main() {
2525
// Part 1/3 of the *overall* deployment process: Deploy all contracts
2626
// See `confirm.ts` for part 2
2727

28-
const scripts = [
28+
// Phase 1- Implementations
29+
let scripts = [
2930
'phase1-common/0_setup_deployments.ts',
3031
'phase1-common/1_deploy_libraries.ts',
3132
'phase1-common/2_deploy_implementations.ts',
@@ -34,35 +35,55 @@ async function main() {
3435
'phase1-common/5_deploy_deployer.ts',
3536
'phase1-common/6_deploy_facadeWrite.ts',
3637
'phase1-common/7_deploy_facadeAct.ts',
37-
// =============================================
38-
'phase2-assets/0_setup_deployments.ts',
39-
'phase2-assets/1_deploy_assets.ts',
40-
'phase2-assets/assets/deploy_crv.ts',
41-
'phase2-assets/assets/deploy_cvx.ts',
42-
'phase2-assets/2_deploy_collateral.ts',
43-
'phase2-assets/collaterals/deploy_lido_wsteth_collateral.ts',
44-
'phase2-assets/collaterals/deploy_rocket_pool_reth_collateral.ts',
45-
'phase2-assets/collaterals/deploy_flux_finance_collateral.ts',
46-
'phase2-assets/collaterals/deploy_ctokenv3_usdc_collateral.ts',
47-
'phase2-assets/collaterals/deploy_convex_stable_plugin.ts',
48-
'phase2-assets/collaterals/deploy_convex_rToken_metapool_plugin.ts',
49-
'phase2-assets/collaterals/deploy_convex_stable_metapool_plugin.ts',
50-
'phase2-assets/collaterals/deploy_curve_stable_plugin.ts',
51-
'phase2-assets/collaterals/deploy_curve_rToken_metapool_plugin.ts',
52-
'phase2-assets/collaterals/deploy_curve_stable_metapool_plugin.ts',
53-
'phase2-assets/collaterals/deploy_dsr_sdai.ts',
54-
'phase2-assets/collaterals/deploy_cbeth_collateral.ts',
55-
'phase2-assets/collaterals/deploy_morpho_aavev2_plugin.ts',
56-
'phase2-assets/collaterals/deploy_aave_v3_usdc.ts',
57-
// ===============================================
58-
// These phase3 scripts will not deploy functional RTokens or Governance. They deploy bricked
59-
// versions that are used for verification only. Further deployment is left up to the Register.
60-
// 'phase3-rtoken/0_setup_deployments.ts',
61-
// 'phase3-rtoken/1_deploy_rtoken.ts',
62-
// 'phase3-rtoken/2_deploy_governance.ts',
63-
// We can uncomment this section whenever we update governance, which will be rarely
6438
]
6539

40+
// =============================================
41+
42+
// Phase 2 - Assets/Collateral
43+
if (!baseL2Chains.includes(hre.network.name)) {
44+
scripts.push(
45+
'phase2-assets/0_setup_deployments.ts',
46+
'phase2-assets/1_deploy_assets.ts',
47+
'phase2-assets/assets/deploy_crv.ts',
48+
'phase2-assets/assets/deploy_cvx.ts',
49+
'phase2-assets/2_deploy_collateral.ts',
50+
'phase2-assets/collaterals/deploy_lido_wsteth_collateral.ts',
51+
'phase2-assets/collaterals/deploy_rocket_pool_reth_collateral.ts',
52+
'phase2-assets/collaterals/deploy_flux_finance_collateral.ts',
53+
'phase2-assets/collaterals/deploy_ctokenv3_usdc_collateral.ts',
54+
'phase2-assets/collaterals/deploy_convex_stable_plugin.ts',
55+
'phase2-assets/collaterals/deploy_convex_rToken_metapool_plugin.ts',
56+
'phase2-assets/collaterals/deploy_convex_stable_metapool_plugin.ts',
57+
'phase2-assets/collaterals/deploy_curve_stable_plugin.ts',
58+
'phase2-assets/collaterals/deploy_curve_rToken_metapool_plugin.ts',
59+
'phase2-assets/collaterals/deploy_curve_stable_metapool_plugin.ts',
60+
'phase2-assets/collaterals/deploy_dsr_sdai.ts',
61+
'phase2-assets/collaterals/deploy_cbeth_collateral.ts',
62+
'phase2-assets/collaterals/deploy_morpho_aavev2_plugin.ts',
63+
'phase2-assets/collaterals/deploy_aave_v3_usdc.ts'
64+
)
65+
} else if (chainId == '8453' || chainId == '84531') {
66+
// Base L2 chains
67+
scripts.push(
68+
'phase2-assets/0_setup_deployments.ts',
69+
'phase2-assets/1_deploy_assets.ts',
70+
'phase2-assets/2_deploy_collateral.ts',
71+
'phase2-assets/collaterals/deploy_cbeth_collateral.ts',
72+
'phase2-assets/collaterals/deploy_ctokenv3_usdbc_collateral.ts',
73+
'phase2-assets/collaterals/deploy_aave_v3_usdbc.ts'
74+
)
75+
}
76+
77+
// ===============================================
78+
79+
// Phase 3 - RTokens
80+
// These phase3 scripts will not deploy functional RTokens or Governance. They deploy bricked
81+
// versions that are used for verification only. Further deployment is left up to the Register.
82+
// 'phase3-rtoken/0_setup_deployments.ts',
83+
// 'phase3-rtoken/1_deploy_rtoken.ts',
84+
// 'phase3-rtoken/2_deploy_governance.ts',
85+
// We can uncomment and prepare this section whenever we update governance, which will be rarely
86+
6687
for (const script of scripts) {
6788
console.log('\n===========================================\n', script, '')
6889
await sh(`hardhat run scripts/deployment/${script}`)

scripts/deployment/phase1-common/1_deploy_libraries.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from 'fs'
22
import hre, { ethers } from 'hardhat'
33
import { getChainId } from '../../../common/blockchain-utils'
4-
import { networkConfig } from '../../../common/configuration'
4+
import { baseL2Chains, networkConfig } from '../../../common/configuration'
55
import { getDeploymentFile, getDeploymentFilename, IDeployments } from '../common'
66
import { validatePrerequisites } from '../utils'
77
import { BasketLibP1, CvxMining, RecollateralizationLibP1 } from '../../../typechain'
@@ -47,17 +47,19 @@ async function main() {
4747
fs.writeFileSync(deploymentFilename, JSON.stringify(deployments, null, 2))
4848

4949
// Deploy CvxMining external library
50-
const CvxMiningFactory = await ethers.getContractFactory('CvxMining')
51-
cvxMiningLib = <CvxMining>await CvxMiningFactory.connect(burner).deploy()
52-
await cvxMiningLib.deployed()
53-
deployments.cvxMiningLib = cvxMiningLib.address
50+
if (!baseL2Chains.includes(hre.network.name)) {
51+
const CvxMiningFactory = await ethers.getContractFactory('CvxMining')
52+
cvxMiningLib = <CvxMining>await CvxMiningFactory.connect(burner).deploy()
53+
await cvxMiningLib.deployed()
54+
deployments.cvxMiningLib = cvxMiningLib.address
5455

55-
fs.writeFileSync(deploymentFilename, JSON.stringify(deployments, null, 2))
56+
fs.writeFileSync(deploymentFilename, JSON.stringify(deployments, null, 2))
57+
}
5658

5759
console.log(`Deployed to ${hre.network.name} (${chainId}):
5860
TradingLib: ${tradingLib.address}
5961
BasketLib: ${basketLib.address}
60-
CvxMiningLib: ${cvxMiningLib.address}
62+
CvxMiningLib: ${cvxMiningLib ? cvxMiningLib.address : 'N/A'}
6163
Deployment file: ${deploymentFilename}`)
6264
}
6365

scripts/deployment/phase2-assets/1_deploy_assets.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from 'fs'
22
import hre, { ethers } from 'hardhat'
33
import { getChainId } from '../../../common/blockchain-utils'
4-
import { networkConfig } from '../../../common/configuration'
4+
import { baseL2Chains, networkConfig } from '../../../common/configuration'
55
import { fp } from '../../../common/numbers'
66
import {
77
getDeploymentFile,
@@ -37,19 +37,21 @@ async function main() {
3737
const deployedAssets: string[] = []
3838

3939
/******** Deploy StkAAVE Asset **************************/
40-
const { asset: stkAAVEAsset } = await hre.run('deploy-asset', {
41-
priceTimeout: priceTimeout.toString(),
42-
priceFeed: networkConfig[chainId].chainlinkFeeds.AAVE,
43-
oracleError: fp('0.01').toString(), // 1%
44-
tokenAddress: networkConfig[chainId].tokens.stkAAVE,
45-
maxTradeVolume: fp('1e6').toString(), // $1m,
46-
oracleTimeout: oracleTimeout(chainId, '3600').toString(), // 1 hr
47-
})
48-
await (<Asset>await ethers.getContractAt('Asset', stkAAVEAsset)).refresh()
40+
if (!baseL2Chains.includes(hre.network.name)) {
41+
const { asset: stkAAVEAsset } = await hre.run('deploy-asset', {
42+
priceTimeout: priceTimeout.toString(),
43+
priceFeed: networkConfig[chainId].chainlinkFeeds.AAVE,
44+
oracleError: fp('0.01').toString(), // 1%
45+
tokenAddress: networkConfig[chainId].tokens.stkAAVE,
46+
maxTradeVolume: fp('1e6').toString(), // $1m,
47+
oracleTimeout: oracleTimeout(chainId, '3600').toString(), // 1 hr
48+
})
49+
await (<Asset>await ethers.getContractAt('Asset', stkAAVEAsset)).refresh()
4950

50-
assetCollDeployments.assets.stkAAVE = stkAAVEAsset
51-
assetCollDeployments.erc20s.stkAAVE = networkConfig[chainId].tokens.stkAAVE
52-
deployedAssets.push(stkAAVEAsset.toString())
51+
assetCollDeployments.assets.stkAAVE = stkAAVEAsset
52+
assetCollDeployments.erc20s.stkAAVE = networkConfig[chainId].tokens.stkAAVE
53+
deployedAssets.push(stkAAVEAsset.toString())
54+
}
5355

5456
/******** Deploy Comp Asset **************************/
5557
const { asset: compAsset } = await hre.run('deploy-asset', {

0 commit comments

Comments
 (0)