Deployed Curve pool contracts.
Each subdirectory holds contracts and other files specific to a single Curve pool.
3pool: Tri-poolbusd: BUSD pool, with lending on yearn.financecompound: Compound pool, with lending on Compoundgusd: GUSD metapoolhbtc: hBTC poolhusd: HUSD metapoolpax: PAX pool, with lending on yearn.financeren: RenBTC poolsbtc: sBTC poolsnow: Snow pool, for swaps between yVault tokenssusd: sUSD poolusdk: USDK metapoolusdn: USDN metapoolusdt: USDT pool, with lending on Compoundy: 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`
// 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
"tethered": false, // does the token contract return `None` on a successful transfer/approve?
"wrapped": true, // is wrapping used for this coin?
"wrapped_decimals": 18, // decimal places for the wrapped coin - can be omitted if wrapped == false
// 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
},
]
}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,
"wrapped": false
},
{
// the second coin in the metapool is the LP token from the base pool
"decimals": 18,
"wrapped": false,
"base_pool_token": true
}
]
}