Skip to content

Latest commit

 

History

History
228 lines (203 loc) · 8.54 KB

YPP-0019.md

File metadata and controls

228 lines (203 loc) · 8.54 KB

Proposal

Release June 2022 and September 2022 ETH series.

Background

ETH borrowing is less popular than DAI or USDC borrowing, but at the same time offers interesting opportunities when combined with staked Ether offerings, with the possibility of leveraging.

Details

The summary of the execution is as follows:

  1. Deploy the FYETH2206 and FYETH2209 fyToken (no need for governance approval)
  2. Deploy the FYETH2206 and FYETH2209 pools (no need for governance approval)
  3. Deploy YSETH6MMS and YSETH6MJD strategies (no need for governance approval)
  4. Governance proposal a. Update chi and rate oracles b. Update Paths in the Composite Oracle for ETH -> STETH -> WSTETH c. Make ETH into an underlying d. Approve ETH, DAI, USDC, WBTC and LINK as collaterals for ETH using the Chainlink Oracles, with existing price feeds e. Approve ENS as collateral for ETH using the Uniswap Oracle, with existing price feeds f. Approve WSTETH as collateral for ETH using the Composite Oracles, with existing price feeds g. Add the FYETH2206 and FYETH2209 fyToken and pools as series h. Add ETH as a collateral for the FYETH2206 and FYETH2209 series i. Initialize the FYETH2206 and FYETH2209 pools with 0.02 ETH each, and burn the LP tokens j. Orchestrate the YSETH6MMS and YSETH6MJD strategies k. Initialize the YSETH6MMS and YSETH6MJD strategies with 0.02 ETH each, and burn the strategy tokens

These steps in 4 are encoded into the addEthSeries.ts scripts, while the steps 1 to 3 are the regular deployment scripts from the environment deployment.

This input will be used:

Base Config

export const assets: Map<string, string> = new Map([
  [ETH, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'],
  [DAI, '0x6B175474E89094C44Da98b954EedeAC495271d0F'],
  [USDC, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'],
  [WBTC, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599'],
  [WSTETH, '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'],
  [STETH, '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84'],
  [LINK, '0x514910771af9ca656af840dff83e8264ecf986ca'],
  [ENS, '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72'],
  [YVUSDC, '0xa354F35829Ae975e850e23e9615b11Da1B3dC4DE'],
  [UNI, '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'],
])

export const joins: Map<string, string> = new Map([
  [ETH, '0x3bDb887Dc46ec0E964Df89fFE2980db0121f0fD0'],
  [DAI, '0x4fE92119CDf873Cf8826F4E6EcfD4E578E3D44Dc'],
  [USDC, '0x0d9A1A773be5a83eEbda23bf98efB8585C3ae4f4'],
  [WBTC, '0x00De0AEFcd3069d88f85b4F18b144222eaAb92Af'],
  [WSTETH, '0x5364d336c2d2391717bD366b29B6F351842D7F82'],
  [LINK, '0xbDaBb91cDbDc252CBfF3A707819C5f7Ec2B92833'],
  [ENS, '0x5AAfd8F0bfe3e1e6bAE781A6641096317D762969'],
  [YVUSDC, '0x403ae7384E89b086Ea2935d5fAFed07465242B38'],
  [UNI, '0x41567f6A109f5bdE283Eb5501F21e3A0bEcbB779'],
])

Proposal Config

export const governance: Map<string, string> = base_config.governance
export const protocol: Map<string, string> = base_config.protocol
export const assets: Map<string, string> = base_config.assets
export const joins: Map<string, string> = base_config.joins
export const newFYTokens: Map<string, string> = base_config.newFYTokens
export const newPools: Map<string, string> = base_config.newPools
export const newStrategies: Map<string, string> = base_config.newStrategies

export const rateChiSources: Array<[string, string, string, string]> = [
  [ETH, RATE, WAD.toString(), WAD.toString()],
  [ETH, CHI, WAD.toString(), WAD.toString()],
]

// Assets that will be made into a base
export const bases: Array<[string, string]> = [[ETH, base_config.joins.get(ETH) as string]]

// Input data: baseId, ilkId, ratio (1000000 == 100%), line, dust, dec
export const chainlinkDebtLimits: Array<[string, string, number, number, number, number]> = [
  [ETH, DAI, 1400000, 1000000000, 1250000, 12],
  [ETH, USDC, 1400000, 1000000000, 1250000, 12],
  [ETH, ETH, 1000000, 2500000000, 0, 12], // Constant 1, no dust
]

export const newChiSources: Array<[string, string]> = [[ETH, '0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5']]

export const newRateSources: Array<[string, string]> = [[ETH, '0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5']]

// Input data: baseId, ilkId, oracle name, ratio (1000000 == 100%), inv(ratio), line, dust, dec
export const newChainlinkLimits: Array<[string, string, number, number, number, number]> = [
  [ETH, ETH, 1000000, 2500000000, 0, 12], // Constant 1, no dust
  [ETH, DAI, 1500000, 250000000, 10000, 12],
  [ETH, USDC, 1500000, 250000000, 10000, 12],
  [ETH, WBTC, 1500000, 250000000, 10000, 12],
  [ETH, LINK, 1500000, 250000000, 10000, 12],
  [ETH, UNI, 1500000, 250000000, 10000, 12],
]

export const newCompositePaths: Array<[string, string, Array<string>]> = [[WSTETH, ETH, [STETH]]]

// Input data: baseId, ilkId, oracle name, ratio (1000000 == 100%), inv(ratio), line, dust, dec
export const newCompositeLimits: Array<[string, string, number, number, number, number]> = [
  [ETH, WSTETH, 1000000, 250000000, 10000, 12],
]

// Input data: baseId, ilkId, oracle name, ratio (1000000 == 100%), inv(ratio), line, dust, dec
export const newUniswapLimits: Array<[string, string, number, number, number, number]> = [
  [ETH, ENS, 1500000, 250000000, 10000, 12],
]

// seriesId, underlyingId, chiOracleAddress, joinAddress, maturity, name, symbol
export const fyTokenData: Array<[string, string, string, string, number, string, string]> = [
  [FYETH2206, ETH, protocol.get(COMPOUND) as string, joins.get(ETH) as string, EOJUN22, 'FYETH2206', 'FYETH2206'],
  [FYETH2209, ETH, protocol.get(COMPOUND) as string, joins.get(ETH) as string, EOSEP22, 'FYETH2209', 'FYETH2209'],
]

// seriesId, baseAddress, fyTokenAddress, ts (time stretch), g1 (Sell base to the pool fee), g2 (Sell fyToken to the pool fee)
export const poolData: Array<[string, string, string, BigNumber, BigNumber, BigNumber]> = [
  [
    FYETH2206,
    assets.get(ETH) as string,
    newFYTokens.get(FYETH2206) as string,
    ONE64.div(secondsIn40Years),
    ONE64.mul(75).div(100),
    ONE64.mul(100).div(75),
  ],
  [
    FYETH2209,
    assets.get(ETH) as string,
    newFYTokens.get(FYETH2209) as string,
    ONE64.div(secondsIn40Years),
    ONE64.mul(75).div(100),
    ONE64.mul(100).div(75),
  ],
]

// seriesId, initAmount
export const poolsInit: Array<[string, string, BigNumber, BigNumber]> = [
  [FYETH2206, ETH, WAD.div(50), ZERO],
  [FYETH2209, ETH, WAD.div(50), ZERO],
]

// seriesId, accepted ilks
export const seriesIlks: Array<[string, string[]]> = [
  [FYETH2206, [ETH, DAI, USDC]],
  [FYETH2209, [ETH, DAI, USDC]],
]

export const strategiesData: Array<[string, string, string]> = [
  // name, symbol, baseId
  ['Yield Strategy ETH 6M Mar Sep', YSETH6MMS, ETH],
  ['Yield Strategy ETH 6M Jun Dec', YSETH6MJD, ETH],
]

// Input data
export const strategiesInit: Array<[string, string, string, BigNumber]> = [
  // [strategyId, startPoolAddress, startPoolId, initAmount]
  [YSETH6MMS, newPools.get(FYETH2209) as string, FYETH2209, WAD.div(50)],
  [YSETH6MJD, newPools.get(FYETH2206) as string, FYETH2206, WAD.div(50)],
]

Protocol addresses

{
  "dataType": "Map",
  "value": [
    [
      "safeERC20Namer",
      "0x39bb9cBe0221D769E30bD08d185842065BcE1706"
    ],
    [
      "compoundOracle",
      "0x53FBa816BD69a7f2a096f58687f87dd3020d0d5c"
    ],
    [
      "chainlinkOracle",
      "0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52"
    ],
    [
      "cauldron",
      "0xc88191F8cb8e6D4a668B047c1C8503432c3Ca867"
    ],
    [
      "ladle",
      "0x6cB18fF2A33e981D1e38A663Ca056c0a5265066A"
    ],
    [
      "router",
      "0x1bF78bE42cD72bbFCCEEf67dCC0a0E2a0EB5da57"
    ],
    [
      "witch",
      "0x53C3760670f6091E1eC76B4dd27f73ba4CAd5061"
    ],
    [
      "lidoOracle",
      "0x84066CAeA6186a02ED74EBF32BF008A47CbE26AD"
    ],
    [
      "compositeOracle",
      "0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4"
    ],
    [
      "yieldMath",
      "0x50c15883934c1A14Bfc07904afd383F7Fb80b354"
    ],
    [
      "yieldMathExtensions",
      "0xdC3758330939A0253F30083a23e8843778348991"
    ],
    [
      "poolView",
      "0x23cc87FBEBDD67ccE167Fa9Ec6Ad3b7fE3892E30"
    ],
    [
      "uniswapOracle",
      "0x358538ea4F52Ac15C551f88C701696f6d9b38F3C"
    ],
    [
      "yearnOracle",
      "0xC597E9cA52Afc13F7F5EDdaC9e53DEF569236016"
    ]
  ]
}

Testing

TBA