Skip to content

Commit

Permalink
Add USDC market to Sepolia (#831)
Browse files Browse the repository at this point in the history
This PR adds support for Sepolia and deploys a new USDC market there. More work will need to be done to migrate cross-chain governance from L2s to point to Sepolia instead of Goerli, but this should help to unblock developers that need access to a Comet on Sepolia.
  • Loading branch information
kevincheng96 authored Feb 22, 2024
1 parent 22cf923 commit 745fddd
Show file tree
Hide file tree
Showing 12 changed files with 243 additions and 8 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/deploy-market.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:
- fuji
- mainnet
- goerli
- sepolia
- mumbai
- polygon
- arbitrum
Expand Down Expand Up @@ -43,7 +44,7 @@ jobs:
with:
wallet_connect_project_id: ${{ secrets.WALLET_CONNECT_PROJECT_ID }}
requested_network: "${{ inputs.network }}"
ethereum_url: "${{ fromJSON('{\"fuji\":\"https://api.avax-test.network/ext/bc/C/rpc\",\"mainnet\":\"https://mainnet.infura.io/v3/$INFURA_KEY\",\"goerli\":\"https://goerli.infura.io/v3/$INFURA_KEY\",\"mumbai\":\"https://polygon-mumbai.infura.io/v3/$INFURA_KEY\",\"polygon\":\"https://polygon-mainnet.infura.io/v3/$INFURA_KEY\",\"arbitrum-goerli\":\"https://arbitrum-goerli.infura.io/v3/$INFURA_KEY\",\"arbitrum\":\"https://arbitrum-mainnet.infura.io/v3/$INFURA_KEY\",\"base\":\"https://clean-spring-wind.base-mainnet.discover.quiknode.pro/$QUICKNODE_KEY\",\"base-goerli\":\"https://base-goerli.infura.io/v3/$INFURA_KEY\",\"linea-goerli\":\"https://linea-goerli.infura.io/v3/$INFURA_KEY\"}')[inputs.network] }}"
ethereum_url: "${{ fromJSON('{\"fuji\":\"https://api.avax-test.network/ext/bc/C/rpc\",\"mainnet\":\"https://mainnet.infura.io/v3/$INFURA_KEY\",\"goerli\":\"https://goerli.infura.io/v3/$INFURA_KEY\",\"sepolia\":\"https://sepolia.infura.io/v3/$INFURA_KEY\",\"mumbai\":\"https://polygon-mumbai.infura.io/v3/$INFURA_KEY\",\"polygon\":\"https://polygon-mainnet.infura.io/v3/$INFURA_KEY\",\"arbitrum-goerli\":\"https://arbitrum-goerli.infura.io/v3/$INFURA_KEY\",\"arbitrum\":\"https://arbitrum-mainnet.infura.io/v3/$INFURA_KEY\",\"base\":\"https://clean-spring-wind.base-mainnet.discover.quiknode.pro/$QUICKNODE_KEY\",\"base-goerli\":\"https://base-goerli.infura.io/v3/$INFURA_KEY\",\"linea-goerli\":\"https://linea-goerli.infura.io/v3/$INFURA_KEY\"}')[inputs.network] }}"
port: 8585
if: github.event.inputs.eth_pk == ''

Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/enact-migration.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:
- fuji
- mainnet
- goerli
- sepolia
- mumbai
- polygon
- arbitrum
Expand Down Expand Up @@ -62,7 +63,7 @@ jobs:
with:
wallet_connect_project_id: ${{ secrets.WALLET_CONNECT_PROJECT_ID }}
requested_network: "${{ inputs.network }}"
ethereum_url: "${{ fromJSON('{\"fuji\":\"https://api.avax-test.network/ext/bc/C/rpc\",\"mainnet\":\"https://mainnet.infura.io/v3/$INFURA_KEY\",\"goerli\":\"https://goerli.infura.io/v3/$INFURA_KEY\",\"mumbai\":\"https://polygon-mumbai.infura.io/v3/$INFURA_KEY\",\"polygon\":\"https://polygon-mainnet.infura.io/v3/$INFURA_KEY\",\"arbitrum-goerli\":\"https://arbitrum-goerli.infura.io/v3/$INFURA_KEY\",\"arbitrum\":\"https://arbitrum-mainnet.infura.io/v3/$INFURA_KEY\",\"base\":\"https://clean-spring-wind.base-mainnet.discover.quiknode.pro/$QUICKNODE_KEY\",\"base-goerli\":\"https://base-goerli.infura.io/v3/$INFURA_KEY\",\"linea-goerli\":\"https://linea-goerli.infura.io/v3/$INFURA_KEY\"}')[inputs.network] }}"
ethereum_url: "${{ fromJSON('{\"fuji\":\"https://api.avax-test.network/ext/bc/C/rpc\",\"mainnet\":\"https://mainnet.infura.io/v3/$INFURA_KEY\",\"goerli\":\"https://goerli.infura.io/v3/$INFURA_KEY\",\"sepolia\":\"https://sepolia.infura.io/v3/$INFURA_KEY\",\"mumbai\":\"https://polygon-mumbai.infura.io/v3/$INFURA_KEY\",\"polygon\":\"https://polygon-mainnet.infura.io/v3/$INFURA_KEY\",\"arbitrum-goerli\":\"https://arbitrum-goerli.infura.io/v3/$INFURA_KEY\",\"arbitrum\":\"https://arbitrum-mainnet.infura.io/v3/$INFURA_KEY\",\"base\":\"https://clean-spring-wind.base-mainnet.discover.quiknode.pro/$QUICKNODE_KEY\",\"base-goerli\":\"https://base-goerli.infura.io/v3/$INFURA_KEY\",\"linea-goerli\":\"https://linea-goerli.infura.io/v3/$INFURA_KEY\"}')[inputs.network] }}"
port: 8585
if: github.event.inputs.eth_pk == ''

Expand All @@ -71,7 +72,7 @@ jobs:
with:
wallet_connect_project_id: ${{ secrets.WALLET_CONNECT_PROJECT_ID }}
requested_network: "${{ env.GOV_NETWORK }}"
ethereum_url: "${{ fromJSON('{\"fuji\":\"https://api.avax-test.network/ext/bc/C/rpc\",\"mainnet\":\"https://mainnet.infura.io/v3/$INFURA_KEY\",\"goerli\":\"https://goerli.infura.io/v3/$INFURA_KEY\",\"mumbai\":\"https://polygon-mumbai.infura.io/v3/$INFURA_KEY\",\"polygon\":\"https://polygon-mainnet.infura.io/v3/$INFURA_KEY\",\"arbitrum-goerli\":\"https://arbitrum-goerli.infura.io/v3/$INFURA_KEY\",\"arbitrum\":\"https://arbitrum-mainnet.infura.io/v3/$INFURA_KEY\"}')[env.GOV_NETWORK] }}"
ethereum_url: "${{ fromJSON('{\"fuji\":\"https://api.avax-test.network/ext/bc/C/rpc\",\"mainnet\":\"https://mainnet.infura.io/v3/$INFURA_KEY\",\"goerli\":\"https://goerli.infura.io/v3/$INFURA_KEY\",\"sepolia\":\"https://sepolia.infura.io/v3/$INFURA_KEY\",\"mumbai\":\"https://polygon-mumbai.infura.io/v3/$INFURA_KEY\",\"polygon\":\"https://polygon-mainnet.infura.io/v3/$INFURA_KEY\",\"arbitrum-goerli\":\"https://arbitrum-goerli.infura.io/v3/$INFURA_KEY\",\"arbitrum\":\"https://arbitrum-mainnet.infura.io/v3/$INFURA_KEY\"}')[env.GOV_NETWORK] }}"
port: 8685
if: github.event.inputs.eth_pk == '' && env.GOV_NETWORK != ''

Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/prepare-migration.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:
- fuji
- mainnet
- goerli
- sepolia
- mumbai
- polygon
- arbitrum
Expand Down Expand Up @@ -45,7 +46,7 @@ jobs:
with:
wallet_connect_project_id: ${{ secrets.WALLET_CONNECT_PROJECT_ID }}
requested_network: "${{ inputs.network }}"
ethereum_url: "${{ fromJSON('{\"fuji\":\"https://api.avax-test.network/ext/bc/C/rpc\",\"mainnet\":\"https://mainnet.infura.io/v3/$INFURA_KEY\",\"goerli\":\"https://goerli.infura.io/v3/$INFURA_KEY\",\"mumbai\":\"https://polygon-mumbai.infura.io/v3/$INFURA_KEY\",\"polygon\":\"https://polygon-mainnet.infura.io/v3/$INFURA_KEY\",\"arbitrum-goerli\":\"https://arbitrum-goerli.infura.io/v3/$INFURA_KEY\",\"arbitrum\":\"https://arbitrum-mainnet.infura.io/v3/$INFURA_KEY\",\"base\":\"https://clean-spring-wind.base-mainnet.discover.quiknode.pro/$QUICKNODE_KEY\",\"base-goerli\":\"https://base-goerli.infura.io/v3/$INFURA_KEY\",\"linea-goerli\":\"https://linea-goerli.infura.io/v3/$INFURA_KEY\"}')[inputs.network] }}"
ethereum_url: "${{ fromJSON('{\"fuji\":\"https://api.avax-test.network/ext/bc/C/rpc\",\"mainnet\":\"https://mainnet.infura.io/v3/$INFURA_KEY\",\"goerli\":\"https://goerli.infura.io/v3/$INFURA_KEY\",\"sepolia\":\"https://sepolia.infura.io/v3/$INFURA_KEY\",\"mumbai\":\"https://polygon-mumbai.infura.io/v3/$INFURA_KEY\",\"polygon\":\"https://polygon-mainnet.infura.io/v3/$INFURA_KEY\",\"arbitrum-goerli\":\"https://arbitrum-goerli.infura.io/v3/$INFURA_KEY\",\"arbitrum\":\"https://arbitrum-mainnet.infura.io/v3/$INFURA_KEY\",\"base\":\"https://clean-spring-wind.base-mainnet.discover.quiknode.pro/$QUICKNODE_KEY\",\"base-goerli\":\"https://base-goerli.infura.io/v3/$INFURA_KEY\",\"linea-goerli\":\"https://linea-goerli.infura.io/v3/$INFURA_KEY\"}')[inputs.network] }}"
port: 8585
if: github.event.inputs.eth_pk == ''

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/run-scenarios.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ jobs:
strategy:
fail-fast: false
matrix:
bases: [ development, mainnet, mainnet-weth, goerli, goerli-weth, fuji, mumbai, polygon, arbitrum-usdc.e, arbitrum-usdc, arbitrum-goerli-usdc, arbitrum-goerli-usdc.e, base-usdbc, base-weth, base-goerli, base-goerli-weth, linea-goerli]
bases: [ development, mainnet, mainnet-weth, goerli, goerli-weth, sepolia-usdc, fuji, mumbai, polygon, arbitrum-usdc.e, arbitrum-usdc, arbitrum-goerli-usdc, arbitrum-goerli-usdc.e, base-usdbc, base-weth, base-goerli, base-goerli-weth, linea-goerli]
name: Run scenarios
env:
ETHERSCAN_KEY: ${{ secrets.ETHERSCAN_KEY }}
Expand Down
54 changes: 54 additions & 0 deletions deployments/sepolia/usdc/configuration.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
{
"name": "Compound USDC",
"symbol": "cUSDCv3",
"baseToken": "USDC",
"baseTokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
"baseTokenPriceFeed": "0xA2F78ab2355fe2f984D808B5CeE7FD0A93D5270E",
"pauseGuardian": "0x008a4C5448ac1Df676d6F39A0C6F13b21b189389",
"borrowMin": "1e0",
"storeFrontPriceFactor": 0.5,
"targetReserves": "5000000e6",
"rates": {
"supplyKink": 0.85,
"supplySlopeLow": 0.048,
"supplySlopeHigh": 1.6,
"supplyBase": 0,
"borrowKink": 0.85,
"borrowSlopeLow": 0.053,
"borrowSlopeHigh": 1.7,
"borrowBase": 0.015
},
"tracking": {
"indexScale": "1e15",
"baseSupplySpeed": "0.000011574074074074073e15",
"baseBorrowSpeed": "0.0011458333333333333e15",
"baseMinForRewards": "100e6"
},
"rewardToken": "COMP",
"assets": {
"COMP": {
"priceFeed": "0x619db7F74C0061E2917D1D57f834D9D24C5529dA",
"decimals": "18",
"borrowCF": 0.65,
"liquidateCF": 0.7,
"liquidationFactor": 0.92,
"supplyCap": "500000e18"
},
"WBTC": {
"priceFeed": "0x1b44F3514812d835EB1BDB0acB33d3fA3351Ee43",
"decimals": "8",
"borrowCF": 0.7,
"liquidateCF": 0.75,
"liquidationFactor": 0.93,
"supplyCap": "35000e8"
},
"WETH": {
"priceFeed": "0x694AA1769357215DE4FAC081bf1f309aDC325306",
"decimals": "18",
"borrowCF": 0.82,
"liquidateCF": 0.85,
"liquidationFactor": 0.93,
"supplyCap": "1000000e18"
}
}
}
79 changes: 79 additions & 0 deletions deployments/sepolia/usdc/deploy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { Deployed, DeploymentManager } from '../../../plugins/deployment_manager';
import { DeploySpec, cloneGov, deployComet, exp, sameAddress, wait } from '../../../src/deploy';

const clone = {
wbtc: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',
weth: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
};

export default async function deploy(deploymentManager: DeploymentManager, deploySpec: DeploySpec): Promise<Deployed> {
const deployed = await deployContracts(deploymentManager, deploySpec);
await mintTokens(deploymentManager);
return deployed;
}

async function deployContracts(deploymentManager: DeploymentManager, deploySpec: DeploySpec): Promise<Deployed> {
const trace = deploymentManager.tracer()
const signer = await deploymentManager.getSigner();

// Deploy governance contracts
const { COMP, fauceteer, timelock } = await cloneGov(deploymentManager);

// Clone collateral assets from mainnet
const WBTC = await deploymentManager.clone('WBTC', clone.wbtc, []);
const WETH = await deploymentManager.clone('WETH', clone.weth, []);

// Deploy all Comet-related contracts
const deployed = await deployComet(deploymentManager, deploySpec);
const { rewards } = deployed;

// Deploy Bulker
const bulker = await deploymentManager.deploy(
'bulker',
'bulkers/BaseBulker.sol',
[timelock.address, WETH.address]
);

await deploymentManager.idempotent(
async () => (await COMP.balanceOf(rewards.address)).eq(0),
async () => {
trace(`Sending some COMP to CometRewards`);
const amount = exp(1_000_000, 18);
trace(await wait(COMP.connect(signer).transfer(rewards.address, amount)));
trace(`COMP.balanceOf(${rewards.address}): ${await COMP.balanceOf(rewards.address)}`);
trace(`COMP.balanceOf(${signer.address}): ${await COMP.balanceOf(signer.address)}`);
}
);

return { ...deployed, fauceteer, bulker };
}

async function mintTokens(deploymentManager: DeploymentManager) {
const trace = deploymentManager.tracer();
const signer = await deploymentManager.getSigner();
const contracts = await deploymentManager.contracts();
const fauceteer = contracts.get('fauceteer');

trace(`Attempting to mint as ${signer.address}...`);

const WETH = contracts.get('WETH');
await deploymentManager.idempotent(
async () => (await WETH.balanceOf(signer.address)).lt(exp(0.01, 18)),
async () => {
trace(`Minting 0.01 WETH for signer (this is a precious resource!)`);
trace(await wait(WETH.connect(signer).deposit({ value: exp(0.01, 18) })));
trace(`WETH.balanceOf(${signer.address}): ${await WETH.balanceOf(signer.address)}`);
}
);

const WBTC = contracts.get('WBTC');
await deploymentManager.idempotent(
async () => (await WBTC.balanceOf(fauceteer.address)).eq(0),
async () => {
trace(`Minting 20 WBTC to fauceteer`);
const amount = exp(20, await WBTC.decimals());
trace(await wait(WBTC.connect(signer).mint(fauceteer.address, amount)));
trace(`WBTC.balanceOf(${fauceteer.address}): ${await WBTC.balanceOf(fauceteer.address)}`);
}
);
}
78 changes: 78 additions & 0 deletions deployments/sepolia/usdc/relations.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import baseRelationConfig from '../../relations';

export default {
...baseRelationConfig,
// USDC / USD price feed
'0xa2f78ab2355fe2f984d808b5cee7fd0a93d5270e': {
artifact: 'contracts/IPriceFeed.sol:IPriceFeed'
},
// WBTC / USD price feed
'0x1b44f3514812d835eb1bdb0acb33d3fa3351ee43': {
artifact: 'contracts/IPriceFeed.sol:IPriceFeed'
},
// WETH / USD price feed
'0x694aa1769357215de4fac081bf1f309adc325306': {
artifact: 'contracts/IPriceFeed.sol:IPriceFeed'
},
fxRoot: {
relations: {
stateSender: {
field: async fxRoot => fxRoot.stateSender()
}
}
},
arbitrumInbox: {
delegates: {
field: {
slot: '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc'
}
},
relations: {
arbitrumBridge: {
field: async inbox => inbox.bridge()
}
}
},
arbitrumL1GatewayRouter: {
delegates: {
field: {
slot: '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc'
}
}
},
baseL1CrossDomainMessenger: {
delegates: {
// Not great, but this address shouldn't change and is very difficult to grab on-chain (private methods)
field: async () => '0xa042e16781484716c1Ef448c919af7BCd9607467'
}
},
baseL1StandardBridge: {
delegates: {
field: {
slot: '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc'
}
}
},
lineaMessageService: {
artifact: 'contracts/bridges/linea/IMessageService.sol:IMessageService',
// delegates: {
// field: {
// slot: '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc'
// }
// }
},
lineaL1TokenBridge: {
delegates: {
field: {
slot: '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc'
}
}
},
lineaL1usdcBridge: {
delegates: {
field: {
slot: '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc'
}
}
}
};
7 changes: 7 additions & 0 deletions deployments/sepolia/usdc/roots.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"comet": "0xAec1F48e02Cfb822Be958B68C7957156EB3F0b6e",
"configurator": "0xc28aD44975C614EaBe0Ed090207314549e1c6624",
"rewards": "0x8bF5b658bdF0388E8b482ED51B14aef58f90abfD",
"fauceteer": "0x68793eA49297eB75DFB4610B68e076D2A5c7646C",
"bulker": "0x157c001bb1F8b33743B14483Be111C961d8e11dE"
}
11 changes: 11 additions & 0 deletions hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import './tasks/scenario/task.ts';
import relationConfigMap from './deployments/relations';
import goerliRelationConfigMap from './deployments/goerli/usdc/relations';
import goerliWethRelationConfigMap from './deployments/goerli/weth/relations';
import sepoliaUsdcRelationConfigMap from './deployments/sepolia/usdc/relations';
import mumbaiRelationConfigMap from './deployments/mumbai/usdc/relations';
import mainnetRelationConfigMap from './deployments/mainnet/usdc/relations';
import mainnetWethRelationConfigMap from './deployments/mainnet/weth/relations';
Expand Down Expand Up @@ -96,6 +97,7 @@ const networkConfigs: NetworkConfig[] = [
{ network: 'ropsten', chainId: 3 },
{ network: 'rinkeby', chainId: 4 },
{ network: 'goerli', chainId: 5 },
{ network: 'sepolia', chainId: 11155111 },
{
network: 'polygon',
chainId: 137,
Expand Down Expand Up @@ -214,6 +216,7 @@ const config: HardhatUserConfig = {
ropsten: ETHERSCAN_KEY,
rinkeby: ETHERSCAN_KEY,
goerli: ETHERSCAN_KEY,
sepolia: ETHERSCAN_KEY,
// Avalanche
avalanche: SNOWTRACE_KEY,
avalancheFujiTestnet: SNOWTRACE_KEY,
Expand Down Expand Up @@ -291,6 +294,9 @@ const config: HardhatUserConfig = {
usdc: goerliRelationConfigMap,
weth: goerliWethRelationConfigMap
},
sepolia: {
usdc: sepoliaUsdcRelationConfigMap
},
mumbai: {
usdc: mumbaiRelationConfigMap
},
Expand Down Expand Up @@ -356,6 +362,11 @@ const config: HardhatUserConfig = {
network: 'goerli',
deployment: 'weth',
},
{
name: 'sepolia-usdc',
network: 'sepolia',
deployment: 'usdc'
},
{
name: 'mumbai',
network: 'mumbai',
Expand Down
3 changes: 3 additions & 0 deletions plugins/import/etherscan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export function getEtherscanApiUrl(network: string): string {
rinkeby: 'api-rinkeby.etherscan.io',
ropsten: 'api-ropsten.etherscan.io',
goerli: 'api-goerli.etherscan.io',
sepolia: 'api-sepolia.etherscan.io',
mainnet: 'api.etherscan.io',
fuji: 'api-testnet.snowtrace.io',
avalanche: 'api.snowtrace.io',
Expand All @@ -35,6 +36,7 @@ export function getEtherscanUrl(network: string): string {
rinkeby: 'rinkeby.etherscan.io',
ropsten: 'ropsten.etherscan.io',
goerli: 'goerli.etherscan.io',
sepolia: 'sepolia.etherscan.io',
mainnet: 'etherscan.io',
fuji: 'testnet.snowtrace.io',
avalanche: 'snowtrace.io',
Expand All @@ -59,6 +61,7 @@ export function getEtherscanApiKey(network: string): string {
rinkeby: process.env.ETHERSCAN_KEY,
ropsten: process.env.ETHERSCAN_KEY,
goerli: process.env.ETHERSCAN_KEY,
sepolia: process.env.ETHERSCAN_KEY,
mainnet: process.env.ETHERSCAN_KEY,
fuji: process.env.SNOWTRACE_KEY,
avalanche: process.env.SNOWTRACE_KEY,
Expand Down
2 changes: 1 addition & 1 deletion src/deploy/Network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export async function cloneGov(
const admin = adminSigner ?? await deploymentManager.getSigner();
const clone = {
comp: '0xc00e94cb662c3520282e6f5717214004a7f26888',
governorBravoImpl: '0x30065b703de5d473975a2db5bbb790a23fd6efbd',
governorBravoImpl: '0xef3b6e9e13706a8f01fe98fdcf66335dc5cfdeed',
governorBravo: '0xc0da02939e1441f497fd74f78ce7decb17b66529',
};

Expand Down
4 changes: 2 additions & 2 deletions src/deploy/NetworkConfiguration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,11 +136,11 @@ function getOverridesOrConfig(
const interestRateInfoMapping = (rates: NetworkRateConfiguration) => ({
supplyKink: _ => percentage(rates.supplyKink),
supplyPerYearInterestRateSlopeLow: _ => percentage(rates.supplySlopeLow),
supplyPerYearInterestRateSlopeHigh: _ => percentage(rates.supplySlopeHigh),
supplyPerYearInterestRateSlopeHigh: _ => percentage(rates.supplySlopeHigh, false),
supplyPerYearInterestRateBase: _ => percentage(rates.supplyBase),
borrowKink: _ => percentage(rates.borrowKink),
borrowPerYearInterestRateSlopeLow: _ => percentage(rates.borrowSlopeLow),
borrowPerYearInterestRateSlopeHigh: _ => percentage(rates.borrowSlopeHigh),
borrowPerYearInterestRateSlopeHigh: _ => percentage(rates.borrowSlopeHigh, false),
borrowPerYearInterestRateBase: _ => percentage(rates.borrowBase),
});
const trackingInfoMapping = (tracking: NetworkTrackingConfiguration) => ({
Expand Down

0 comments on commit 745fddd

Please sign in to comment.