Deployed Curve pool contracts.
Each subdirectory holds contracts and other files specific to a single Curve pool.
3pool: Tri-poolaave: Aave pool, with lending on Aavebbtc: bBTC metapoolbusd: BUSD pool, with lending on yearn.financecompound: Compound pool, with lending on Compounddusd: DUSD metapooleurs: EURS poolgusd: GUSD metapoolhbtc: hBTC poolhusd: HUSD metapoollinkusd: LinkUSD metapoolmusd: MUSD metapoolobtc: oBTC metapoolpax: PAX pool, with lending on yearn.financepbtc: pBTC metapoolren: RenBTC poolrsv: RSV metapoolsbtc: sBTC poolseth: sETH poolsteth: stETH poolsusd: sUSD pooltbtc: tBTC metapoolusdk: USDK metapoolusdn: USDN metapoolusdt: USDT pool, with lending on Compoundust: UST metapooly: Y pool, with lending on yearn.finance
- Contracts for a new pool should be placed in their own subdirectory using the same name as is given on the website.
- The LP token contract does not need to be included, unless it deviates from the standard contracts within
contracts/testing - Each subdirectory must contain a
pooldata.jsonfile using the structure given below. This is required in order to initialize fixtures when running the test suite.
{
"lp_contract": "CurveTokenV1", // LP token contract to use with this pool, from `contracts/tokens`
"wrapped_contract": "yERC20", // mock wrapped coin contract to use, from `contracts/testing`
// optional
"rate_calculator_address": "" // address of exchange rate calculator for with unique pool logic
// constructor settings for the LP token - required for deployment
"lp_constructor": {
"symbol": "",
"name": ""
},
// constructor settings for the pool - required for deployment
"swap_constructor": {
"_A": 200,
"_fee": 4000000,
"_admin_fee": 0
},
// each list item represents 1 swappable coin within the pool
"coins": [
{
// required fields
"decimals": 18, // number of decimal places for the underlying coin - omit if no underlying
"wrapped_decimals": 18, // decimal places for the wrapped coin - omit if no wrapping
"tethered": false, // does the token contract return `None` on a successful transfer/approve?
// optional fields
"name": "", // underlying coin name
"withdrawal_fee": 0, // fee applied when converting wrapped to underlying, expressed in bps
"underlying_address": "0x00", // underlying coin mainnet deployment address, used in forked tests
"wrapped_address": "0x00" // wrapped coin mainnet deployment address
},
],
// optional settings used in unit tests
"testing": {
"initial_amount": 100 // amount of each coin to be added as initial liquidity
}
}A metapool is a pool where a stablecoin is paired against the LP token from another pool.
The pooldata.json for a metapool is similar to that of a regular pool:
{
"lp_contract": "CurveContractV2", // LP token contract to use with this pool, from `contracts/tokens`
"base_pool": "3pool", // Name for the related base pool
"coins": [
{
// the first coin in the metapool is an unwrapped stablecoin
"decimals": 18,
"tethered": false,
},
{
// the second coin in the metapool is the LP token from the base pool
"decimals": 18,
"base_pool_token": true
}
]
}