Skip to content

Latest commit

 

History

History
521 lines (494 loc) · 33.7 KB

YPP-0087.md

File metadata and controls

521 lines (494 loc) · 33.7 KB

Proposal

Deploy & configure contracts needed by Contango.

Background

Contango exchange uses fixed rate markets to synthesise expirable futures. In order to allow for a smoother interaction, Yield will deploy a set of contracts specially tailored for Contango.

Details

Here are the steps:

  1. Deploy a separate Cauldron (no need for governance approval)
  2. Deploy a specialised Ladle (no need for governance approval)
  3. Deploy a specialised Witch (no need for governance approval)
  4. Deploy PoolOracle (no need for governance approval)
  5. Deploy YieldSpaceMultiOracle (no need for governance approval)
  6. Deploy new Joins (no need for governance approval)
  7. Initialise PoolOracle (no need for governance approval)
  8. Governance proposal
    1. Configure YieldSpaceMultiOracle permissions
    2. Configure Cauldron permissions
    3. Configure Ladle permissions
    4. Give Contango permissions to create vaults on ContangoLadle
    5. Configure each new Join's permissions
    6. Add Accumulator oracle sources
    7. Add Composite oracle sources
    8. Add Composite oracle paths
    9. Add assets to the Contango cauldron
    10. Configure base assets on the Contango cauldron
    11. Add series to the Contango cauldron
    12. Create ilks on the Contango cauldron
    13. Grant permissions to ContangoWitch
    14. Configure assets and limits on ContangoWitch
    15. Enable ilks for the created series

Script that performed said actions: https://github.com/yieldprotocol/environments-v2/blob/580205c1913f5e018f2870ba7dadd1664a9a2f1c/scripts/governance/contango/mainnet/deployAndOrchestrate/deployAndOrchestrateContango.sh

The contracts have been deployed to Ethereum mainnet and the proposal sent to the multisig.

Testing

The proposal approval & execution were tested on tenderly: https://dashboard.tenderly.co/Yield/contango/fork/7262b45d-a0be-4426-a43b-ba2ef5f1a881

Configuration applied:

// code, symbol, stable, maxDebt, minDebt, decimals,
export const ASSETS: Array<Asset> = [
  new Asset('00', 'ETH', false, 100, 1, 18),
  new Asset('01', 'DAI', true, 100000, 1000, 18),
  new Asset('02', 'USDC', true, 100000, 1000, 6),
  new Asset('18', 'FRAX', true, 100000, 1000, 18),
]

export const EXPIRIES: Array<Expiry> = [
  { code: '08', display: '2212' },
  { code: '09', display: '2303' },
]

export const SERIES: Array<Series> = ASSETS.map((asset) => EXPIRIES.map((expiry) => new Series(asset, expiry))).flat()


export const rateChiSources = ASSETS.map(({ bytes: base }) => [
  [base, RATE, WAD.toString(), WAD.toString()] as const,
  [base, CHI, WAD.toString(), WAD.toString()] as const,
]).flat()

// Assets that will be made into a base
export const bases: Array<[string, string]> = ASSETS.map(({ bytes: base }) => [base, joins.getOrThrow(base)])

// Input data: baseId, quoteId, oracle name
export const compositeSources = [
  SERIES.map((series) => [series.bytes, series.asset.bytes, protocol.getOrThrow(YIELD_SPACE_MULTI_ORACLE)] as const), // All fyTokens as collateral use the same oracle
  ASSETS.map(({ bytes: base }) =>
    ASSETS.map(({ bytes: quote }) => [base, quote, protocol.getOrThrow(CHAINLINK)] as const)
  )
    .flat()
    .filter(([base, quote]) => base !== quote), // Resolve any base against all other bases
].flat()

// Input data: assetId, assetId, [intermediate assetId]
export const compositePaths = ASSETS.map((asset) =>
  SERIES.filter((series) => series.asset.code !== asset.code).map(
    (series) => [asset.bytes, series.bytes, [series.asset.bytes]] as const
  )
).flat()

/// @notice Assets that will be added to the protocol
/// @param Asset identifier (bytes6 tag)
/// @param Address for the asset
/// @param Address for the join
export const assetsToAdd = [
  ASSETS.map(({ bytes: base }) => [base, assets.getOrThrow(base), joins.getOrThrow(base)] as const),
  SERIES.map(({ bytes: base }) => [base, fyTokens.getOrThrow(base), joins.getOrThrow(base)] as const),
].flat()

export const seriesToAdd: SeriesToAdd[] = SERIES.map(({ bytes: seriesId }) => ({
  seriesId,
  fyToken: fyTokens.getOrThrow(seriesId),
}))

// Input data: baseId, ilkId, ratio (1000000 == 100%), line, dust, dec
/// @notice Collateralisation parameters and debt limits for each new asset pair
/// @param Base asset identifier (bytes6 tag)
/// @param Collateral asset identifier (bytes6 tag)
/// @param Collateralisation ratio, with six decimals
/// @param Maximum protocol debt, decimals to be added
/// @param Minimum vault debt, decimals to be added
/// @param Decimals to add to maximum protocol debt, and minimum vault debt.
export const fyTokenDebtLimits = ASSETS.map((asset) =>
  SERIES.filter((series) => series.asset.code !== asset.code).map((series) => {
    const collateralisationRatio = asset.stable && series.asset.stable ? 1100000 : 1400000
    return [asset.bytes, series.bytes, collateralisationRatio, asset.maxDebt, asset.minDebt, asset.decimals] as const
  })
).flat()

export const auctionLineAndLimits: AuctionLineAndLimit[] = ASSETS.map((asset) =>
  SERIES.filter((series) => series.asset.code !== asset.code).map((series) => {
    const stablePair = asset.stable && series.asset.stable
    const vaultProportion = stablePair ? parseUnits('1') : parseUnits('0.5')
    const collateralisationRatio = stablePair ? 1100000 : 1400000
    const initialDiscount = 1050000
    const collateralProportion = parseUnits((initialDiscount / collateralisationRatio).toString())

    return {
      baseId: asset.bytes,
      ilkId: series.bytes,
      duration: 600,
      vaultProportion,
      collateralProportion,
      max: parseUnits((asset.maxDebt * 10).toString(), asset.decimals),
    }
  })
).flat()

// Input data: seriesId, [ilkIds]
/// @notice New asset pairs to be accepted
/// @param Base asset identifier (bytes6 tag)
/// @param Array of collateral asset identifiers (bytes6 tag array)
export const seriesIlks: Array<[string, string[]]> = SERIES.map((base) => {
  const ilks = SERIES.filter((ilk) => ilk.asset.code !== base.asset.code && ilk.expiry.code === base.expiry.code)
  return [base.bytes, ilks.map(({ bytes }) => bytes)]
})

Proposal log

➜  environments-v2 git:(contango/mainnetDeploymentExecution) ✗ sh ./scripts/governance/contango/mainnet/deployAndOrchestrate/deployAndOrchestrateContango.sh
++ dirname ./scripts/governance/contango/mainnet/deployAndOrchestrate/deployAndOrchestrateContango.sh
+ export HERE=./scripts/governance/contango/mainnet/deployAndOrchestrate
+ HERE=./scripts/governance/contango/mainnet/deployAndOrchestrate
+ RUN='npx hardhat run --network mainnet'
+ export CONF=/Users/egillhreinsson/dev/environments-v2/./scripts/governance/contango/mainnet/deployAndOrchestrate/contango.mainnet.config
+ CONF=/Users/egillhreinsson/dev/environments-v2/./scripts/governance/contango/mainnet/deployAndOrchestrate/contango.mainnet.config
+ npx hardhat run --network mainnet ./scripts/governance/contango/mainnet/deployAndOrchestrate/orchestrate.ts
yieldSpaceMultiOracle.grantRoles(gov, timelock)
yieldSpaceMultiOracle.grantRole(ROOT, cloak)
yieldSpaceMultiOracle.revokeRole(ROOT, deployer)
cauldron.grantRoles(gov, timelock)
cauldron.grantRole(ROOT, cloak)
cauldron.revokeRole(ROOT, deployer)
ladle.grantRoles(gov, timelock)
ladle.grantRole(ROOT, cloak)
ladle.revokeRole(ROOT, deployer)
cauldron.grantRoles(ladle)
cloak.plan(ladle): 0xd0bd5ef58c64c7acdb4850155e85c61754028233815013e863549cb3fbc0e75d
contangoLadle.grantRole(contango)
cloak.plan(contangoLadle): 0x54b77e3ecf5292cd78c4028fe7c57f5b735711eba63566ba920703ab5b2ad445
witch.revokeRole(deployer)
witch.grantRoles(timelock)
cauldron.grantRoles(witch)
cloak.plan(witch): 0x4d156a253efd62797942954562072bedb17c60b0a4dc407dcc903943c86967d7
join.revokeRole(ROOT, deployer)
join.grantRole(ROOT, cloak)
join.revokeRole(ROOT, deployer)
join.grantRole(ROOT, cloak)
join.revokeRole(ROOT, deployer)
join.grantRole(ROOT, cloak)
join.revokeRole(ROOT, deployer)
join.grantRole(ROOT, cloak)
join.revokeRole(ROOT, deployer)
join.grantRole(ROOT, cloak)
join.revokeRole(ROOT, deployer)
join.grantRole(ROOT, cloak)
join.revokeRole(ROOT, deployer)
join.grantRole(ROOT, cloak)
join.revokeRole(ROOT, deployer)
join.grantRole(ROOT, cloak)
compoundOracle: 0x95750d6F5fba4ed1cc4Dc42D2c01dFD3DB9a11eC
Accumulator(00/0x524154450000): 1000000000000000000, 1000000000000000000
Accumulator(00/0x434849000000): 1000000000000000000, 1000000000000000000
Accumulator(01/0x524154450000): 1000000000000000000, 1000000000000000000
Accumulator(01/0x434849000000): 1000000000000000000, 1000000000000000000
Accumulator(02/0x524154450000): 1000000000000000000, 1000000000000000000
Accumulator(02/0x434849000000): 1000000000000000000, 1000000000000000000
Accumulator for (18/0x524154450000): already set
Accumulator for (18/0x434849000000): already set
Adding 0008/00 from 0x96bF9aB0E421a3da31D4506c967A825312455767
pair: 0008/00 -> 0x9D34dF69958675450ab8E53c8Df5531203398Dc9
Adding 0009/00 from 0x96bF9aB0E421a3da31D4506c967A825312455767
pair: 0009/00 -> 0x1b2145139516cB97568B76a2FdbE37D2BCD61e63
Adding 0108/01 from 0x96bF9aB0E421a3da31D4506c967A825312455767
pair: 0108/01 -> 0x52956Fb3DC3361fd24713981917f2B6ef493DCcC
Adding 0109/01 from 0x96bF9aB0E421a3da31D4506c967A825312455767
pair: 0109/01 -> 0xBdc7Bdae87dfE602E91FDD019c4C0334C38f6A46
Adding 0208/02 from 0x96bF9aB0E421a3da31D4506c967A825312455767
pair: 0208/02 -> 0xB2fff7FEA1D455F0BCdd38DA7DeE98af0872a13a
Adding 0209/02 from 0x96bF9aB0E421a3da31D4506c967A825312455767
pair: 0209/02 -> 0x48b95265749775310B77418Ff6f9675396ABE1e8
Adding 1808/18 from 0x96bF9aB0E421a3da31D4506c967A825312455767
pair: 1808/18 -> 0xFa38F3717daD95085FF725aA93608Af3fa1D9e58
Adding 1809/18 from 0x96bF9aB0E421a3da31D4506c967A825312455767
pair: 1809/18 -> 0x1D2eB98042006B1bAFd10f33743CcbB573429daa
Adding 0x303030380000/0x303000000000 from 0x210F4e1942bEEc4038743A8f885B870E0c27b414
pair: 0008/00 -> 0x210F4e1942bEEc4038743A8f885B870E0c27b414
Adding 0x303030390000/0x303000000000 from 0x210F4e1942bEEc4038743A8f885B870E0c27b414
pair: 0009/00 -> 0x210F4e1942bEEc4038743A8f885B870E0c27b414
Adding 0x303130380000/0x303100000000 from 0x210F4e1942bEEc4038743A8f885B870E0c27b414
pair: 0108/01 -> 0x210F4e1942bEEc4038743A8f885B870E0c27b414
Adding 0x303130390000/0x303100000000 from 0x210F4e1942bEEc4038743A8f885B870E0c27b414
pair: 0109/01 -> 0x210F4e1942bEEc4038743A8f885B870E0c27b414
Adding 0x303230380000/0x303200000000 from 0x210F4e1942bEEc4038743A8f885B870E0c27b414
pair: 0208/02 -> 0x210F4e1942bEEc4038743A8f885B870E0c27b414
Adding 0x303230390000/0x303200000000 from 0x210F4e1942bEEc4038743A8f885B870E0c27b414
pair: 0209/02 -> 0x210F4e1942bEEc4038743A8f885B870E0c27b414
Adding 0x313830380000/0x313800000000 from 0x210F4e1942bEEc4038743A8f885B870E0c27b414
pair: 1808/18 -> 0x210F4e1942bEEc4038743A8f885B870E0c27b414
Adding 0x313830390000/0x313800000000 from 0x210F4e1942bEEc4038743A8f885B870E0c27b414
pair: 1809/18 -> 0x210F4e1942bEEc4038743A8f885B870E0c27b414
Adding 0x303000000000/0x303100000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 00/01 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x303000000000/0x303200000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 00/02 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x303000000000/0x313800000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 00/18 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x303100000000/0x303000000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 01/00 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x303100000000/0x303200000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 01/02 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x303100000000/0x313800000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 01/18 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x303200000000/0x303000000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 02/00 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x303200000000/0x303100000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 02/01 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x303200000000/0x313800000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 02/18 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x313800000000/0x303000000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 18/00 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x313800000000/0x303100000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 18/01 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
Adding 0x313800000000/0x303200000000 from 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
pair: 18/02 -> 0xcDCe5C87f691058B61f3A65913f1a3cBCbAd9F52
[path: 00/0108 -> 0x303100000000],
[path: 00/0109 -> 0x303100000000],
[path: 00/0208 -> 0x303200000000],
[path: 00/0209 -> 0x303200000000],
[path: 00/1808 -> 0x313800000000],
[path: 00/1809 -> 0x313800000000],
[path: 01/0008 -> 0x303000000000],
[path: 01/0009 -> 0x303000000000],
[path: 01/0208 -> 0x303200000000],
[path: 01/0209 -> 0x303200000000],
[path: 01/1808 -> 0x313800000000],
[path: 01/1809 -> 0x313800000000],
[path: 02/0008 -> 0x303000000000],
[path: 02/0009 -> 0x303000000000],
[path: 02/0108 -> 0x303100000000],
[path: 02/0109 -> 0x303100000000],
[path: 02/1808 -> 0x313800000000],
[path: 02/1809 -> 0x313800000000],
[path: 18/0008 -> 0x303000000000],
[path: 18/0009 -> 0x303000000000],
[path: 18/0108 -> 0x303100000000],
[path: 18/0109 -> 0x303100000000],
[path: 18/0208 -> 0x303200000000],
[path: 18/0209 -> 0x303200000000],
Using asset at 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Using join at 0x3bDb887Dc46ec0E964Df89fFE2980db0121f0fD0
Adding asset 0x303000000000 at 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 with join 0x3bDb887Dc46ec0E964Df89fFE2980db0121f0fD0
cloak.plan(join, join(00)): 0x009551a31ff57c48ace67879d9929586356f1ba69cceb3a1d87c84ca8bfd899d
Using asset at 0x6B175474E89094C44Da98b954EedeAC495271d0F
Using join at 0x4fE92119CDf873Cf8826F4E6EcfD4E578E3D44Dc
Adding asset 0x303100000000 at 0x6B175474E89094C44Da98b954EedeAC495271d0F with join 0x4fE92119CDf873Cf8826F4E6EcfD4E578E3D44Dc
cloak.plan(join, join(01)): 0xaea087919f820f46d9f5e40047aa2e582068f3e042247b2d939f4f83a0248b08
Using asset at 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Using join at 0x0d9A1A773be5a83eEbda23bf98efB8585C3ae4f4
Adding asset 0x303200000000 at 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 with join 0x0d9A1A773be5a83eEbda23bf98efB8585C3ae4f4
cloak.plan(join, join(02)): 0x298572ccda2ac70ccf32bd64cda2f5d852dd0d259c5f7fc8173b1e5287b8e1d1
Using asset at 0x853d955aCEf822Db058eb8505911ED77F175b99e
Using join at 0x5655A973A49e1F9c1408bb9A617Fd0DBD0352464
Adding asset 0x313800000000 at 0x853d955aCEf822Db058eb8505911ED77F175b99e with join 0x5655A973A49e1F9c1408bb9A617Fd0DBD0352464
cloak.plan(join, join(18)): 0xf4f607b5fc60a6ce45b5eb4c50125403276d0ce8cdfdb63255f9e1aaa1a58b17
Using asset at 0x386a0A72FfEeB773381267D69B61aCd1572e074D
Using join at 0x3D31eddd017d4C9F3aD291b51Fb18A44CE456494
Adding asset 0x303030380000 at 0x386a0A72FfEeB773381267D69B61aCd1572e074D with join 0x3D31eddd017d4C9F3aD291b51Fb18A44CE456494
cloak.plan(join, join(0008)): 0xfe32b7dfe42574d169f713dcf7e6841af8c5b660610ba3105edfd8bbffc5b66c
Using asset at 0x0FBd5ca8eE61ec921B3F61B707f1D7D64456d2d1
Using join at 0x2F201B7B1176ECABA3D9E6C3e720B1f6A923229E
Adding asset 0x303030390000 at 0x0FBd5ca8eE61ec921B3F61B707f1D7D64456d2d1 with join 0x2F201B7B1176ECABA3D9E6C3e720B1f6A923229E
cloak.plan(join, join(0009)): 0xa4b48eb4519de8e09bda943dda4e7d81820821416c6a88609c8d318804ab2f74
Using asset at 0xcDfBf28Db3B1B7fC8efE08f988D955270A5c4752
Using join at 0xea8cD16b9cEdC799a2e3aCD7f122975fB2cDa98E
Adding asset 0x303130380000 at 0xcDfBf28Db3B1B7fC8efE08f988D955270A5c4752 with join 0xea8cD16b9cEdC799a2e3aCD7f122975fB2cDa98E
cloak.plan(join, join(0108)): 0x3f775449fc0bf24f346e3fa8a0edd48b802dd6b30f2f38656d9cdaa789cd8035
Using asset at 0x79A6Be1Ae54153AA6Fc7e4795272c63F63B2a6DC
Using join at 0x954f7cF4a0473CCde2AD4c85Da65A84Df03F3B30
Adding asset 0x303130390000 at 0x79A6Be1Ae54153AA6Fc7e4795272c63F63B2a6DC with join 0x954f7cF4a0473CCde2AD4c85Da65A84Df03F3B30
cloak.plan(join, join(0109)): 0x5952d48c424ee1603311c0dc31a9e4674348478251a3bb03369a847ba6e14a03
Using asset at 0x38b8BF13c94082001f784A642165517F8760988f
Using join at 0x62bF66Fc3e14a008c34E7A6BCAcD99945C02deAb
Adding asset 0x303230380000 at 0x38b8BF13c94082001f784A642165517F8760988f with join 0x62bF66Fc3e14a008c34E7A6BCAcD99945C02deAb
cloak.plan(join, join(0208)): 0x89f43e2fd178e6a0439b158390c0a57199230cebf24d79097df69232c8e22328
Using asset at 0x22E1e5337C5BA769e98d732518b2128dE14b553C
Using join at 0x718814062E4143a1fF3b3B7cD36e1d6C9603b85F
Adding asset 0x303230390000 at 0x22E1e5337C5BA769e98d732518b2128dE14b553C with join 0x718814062E4143a1fF3b3B7cD36e1d6C9603b85F
cloak.plan(join, join(0209)): 0x12fb7849bb377d85102dc687796ca1f4bece9a40d7f8f07ff6e0c51f769f1702
Using asset at 0xC20952b2C8bB6689e7EC2F70Aeba392C378EC413
Using join at 0xcF678E428fBd6d9173fb780e971e4A123b68877a
Adding asset 0x313830380000 at 0xC20952b2C8bB6689e7EC2F70Aeba392C378EC413 with join 0xcF678E428fBd6d9173fb780e971e4A123b68877a
cloak.plan(join, join(1808)): 0xc3be6aad3beabb4c726ad3d33440ea35e5933608c0830e73a057f4e19051ab3a
Using asset at 0x2eb907fb4b71390dC5CD00e6b81B7dAAcE358193
Using join at 0xA9A04F40101F62397A24B3cEebbdC9660898e172
Adding asset 0x313830390000 at 0x2eb907fb4b71390dC5CD00e6b81B7dAAcE358193 with join 0xA9A04F40101F62397A24B3cEebbdC9660898e172
cloak.plan(join, join(1809)): 0x073b2dc574fce7d857a0e453badc215b421d985a208c366186865ba6e1c7753b
cloak.plan(witch, join(00)): 0x324b45e53307cb196143ae355d7d10a392e17f681e7cadf1e09a87044b58d25b
Asset 00 made into base using 0x95750d6F5fba4ed1cc4Dc42D2c01dFD3DB9a11eC
cloak.plan(witch, join(01)): 0xdc35e845f75f53541279530074a5ea2f0e25015f056474c206a1432197e3a87e
Asset 01 made into base using 0x95750d6F5fba4ed1cc4Dc42D2c01dFD3DB9a11eC
cloak.plan(witch, join(02)): 0x5e9ecee95d050a07e359f57d1761797563594e94eda820f29b4de3d93c10e3e2
Asset 02 made into base using 0x95750d6F5fba4ed1cc4Dc42D2c01dFD3DB9a11eC
cloak.plan(witch, join(18)): 0xc73ab96a8c98cdd1601a305867936d080c73307bee03c627c455cff92f528e98
Asset 18 made into base using 0x95750d6F5fba4ed1cc4Dc42D2c01dFD3DB9a11eC
Using fyToken at 0x386a0A72FfEeB773381267D69B61aCd1572e074D for 0x303030380000
Using pool at 0x9D34dF69958675450ab8E53c8Df5531203398Dc9 for 0x303030380000
Adding 0x303030380000 for 0x303000000000 using 0x386a0A72FfEeB773381267D69B61aCd1572e074D
Adding 0x303030380000 pool to Ladle using 0x9D34dF69958675450ab8E53c8Df5531203398Dc9
fyToken.grantRoles(mint/burn, ladle)
cloak.plan(ladle, fyToken(0008)): 0x0036a000ec3fd4038233c24c95f4cbe73bed61174735f5c63c41af558f34e4bc
cloak.plan(witch, burn(0008)): 0x925896ad15e84f7d47200af6791e4780fb2373bd3aaa4af35a81a0422356ab97
Using fyToken at 0x0FBd5ca8eE61ec921B3F61B707f1D7D64456d2d1 for 0x303030390000
Using pool at 0x1b2145139516cB97568B76a2FdbE37D2BCD61e63 for 0x303030390000
Adding 0x303030390000 for 0x303000000000 using 0x0FBd5ca8eE61ec921B3F61B707f1D7D64456d2d1
Adding 0x303030390000 pool to Ladle using 0x1b2145139516cB97568B76a2FdbE37D2BCD61e63
fyToken.grantRoles(mint/burn, ladle)
cloak.plan(ladle, fyToken(0009)): 0x5b1926b9b97abec865b4ce81daeb4f9ed34e21a74f5c05dbb258629459adac3a
cloak.plan(witch, burn(0009)): 0x3c323fa28e8bdc0fb58c7a0e91e6ec006fcb22b7e3c85303aadc8cbf22b94dd7
Using fyToken at 0xcDfBf28Db3B1B7fC8efE08f988D955270A5c4752 for 0x303130380000
Using pool at 0x52956Fb3DC3361fd24713981917f2B6ef493DCcC for 0x303130380000
Adding 0x303130380000 for 0x303100000000 using 0xcDfBf28Db3B1B7fC8efE08f988D955270A5c4752
Adding 0x303130380000 pool to Ladle using 0x52956Fb3DC3361fd24713981917f2B6ef493DCcC
fyToken.grantRoles(mint/burn, ladle)
cloak.plan(ladle, fyToken(0108)): 0xa3e82c38714ff319e109a372530c9325be08426d856e69c2246330c30b48488f
cloak.plan(witch, burn(0108)): 0x5828873737cc3ff7b0e042e0dc19b7d4dad2d0e9b922b082e7dd76c6e424b0b3
Using fyToken at 0x79A6Be1Ae54153AA6Fc7e4795272c63F63B2a6DC for 0x303130390000
Using pool at 0xBdc7Bdae87dfE602E91FDD019c4C0334C38f6A46 for 0x303130390000
Adding 0x303130390000 for 0x303100000000 using 0x79A6Be1Ae54153AA6Fc7e4795272c63F63B2a6DC
Adding 0x303130390000 pool to Ladle using 0xBdc7Bdae87dfE602E91FDD019c4C0334C38f6A46
fyToken.grantRoles(mint/burn, ladle)
cloak.plan(ladle, fyToken(0109)): 0x5be5a8fad0c3c986858553cd50490cf91d2d9ee82b6275255be68428e3412a79
cloak.plan(witch, burn(0109)): 0xdc7aada5c4389b676f3887764041328fc3205ec0e39be41b6af0baf3e8cee668
Using fyToken at 0x38b8BF13c94082001f784A642165517F8760988f for 0x303230380000
Using pool at 0xB2fff7FEA1D455F0BCdd38DA7DeE98af0872a13a for 0x303230380000
Adding 0x303230380000 for 0x303200000000 using 0x38b8BF13c94082001f784A642165517F8760988f
Adding 0x303230380000 pool to Ladle using 0xB2fff7FEA1D455F0BCdd38DA7DeE98af0872a13a
fyToken.grantRoles(mint/burn, ladle)
cloak.plan(ladle, fyToken(0208)): 0xd7e5dfbaa975b81d86955c06b6dc3d83d7a802066c98e6aa72b8da3b33dfc605
cloak.plan(witch, burn(0208)): 0x14fe1511fb3f5405339dc24e8bead6322b9e58fece6d69aaba693698fff6e8ee
Using fyToken at 0x22E1e5337C5BA769e98d732518b2128dE14b553C for 0x303230390000
Using pool at 0x48b95265749775310B77418Ff6f9675396ABE1e8 for 0x303230390000
Adding 0x303230390000 for 0x303200000000 using 0x22E1e5337C5BA769e98d732518b2128dE14b553C
Adding 0x303230390000 pool to Ladle using 0x48b95265749775310B77418Ff6f9675396ABE1e8
fyToken.grantRoles(mint/burn, ladle)
cloak.plan(ladle, fyToken(0209)): 0x8b200ce9fa11c5f5b0122f0a33f8c9f62feb22bad26438b48390165efacd34e3
cloak.plan(witch, burn(0209)): 0x13a9ee87f042de169aca34477f8a27018e6fe70e6ea86c1576ff5b838ef5d7d9
Using fyToken at 0xC20952b2C8bB6689e7EC2F70Aeba392C378EC413 for 0x313830380000
Using pool at 0xFa38F3717daD95085FF725aA93608Af3fa1D9e58 for 0x313830380000
Adding 0x313830380000 for 0x313800000000 using 0xC20952b2C8bB6689e7EC2F70Aeba392C378EC413
Adding 0x313830380000 pool to Ladle using 0xFa38F3717daD95085FF725aA93608Af3fa1D9e58
fyToken.grantRoles(mint/burn, ladle)
cloak.plan(ladle, fyToken(1808)): 0xfed97371da4ff4535ce43a660ffbba86f9f5ef14d742f155914f2a5bda8ea245
cloak.plan(witch, burn(1808)): 0x2382ae2929cbfd00e5a24f63efef5c5d2cff3a3613daa27abff5879d487cb423
Using fyToken at 0x2eb907fb4b71390dC5CD00e6b81B7dAAcE358193 for 0x313830390000
Using pool at 0x1D2eB98042006B1bAFd10f33743CcbB573429daa for 0x313830390000
Adding 0x313830390000 for 0x313800000000 using 0x2eb907fb4b71390dC5CD00e6b81B7dAAcE358193
Adding 0x313830390000 pool to Ladle using 0x1D2eB98042006B1bAFd10f33743CcbB573429daa
fyToken.grantRoles(mint/burn, ladle)
cloak.plan(ladle, fyToken(1809)): 0x64545edaca6fe3b307ffa19478c97e663bf1dc1a78a9ac2605bcb4bdca2b73bb
cloak.plan(witch, burn(1809)): 0xf62b19f6d2dfd6952c3012fd65db5598917f90a846a6f8fdd7b161c9c63c6960
Witch#setLineAndLimit(ilkId: 0108, baseId: 00, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000.0)
Witch#setLineAndLimit(ilkId: 0109, baseId: 00, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000.0)
Witch#setLineAndLimit(ilkId: 0208, baseId: 00, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000.0)
Witch#setLineAndLimit(ilkId: 0209, baseId: 00, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000.0)
Witch#setLineAndLimit(ilkId: 1808, baseId: 00, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000.0)
Witch#setLineAndLimit(ilkId: 1809, baseId: 00, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000.0)
Witch#setLineAndLimit(ilkId: 0008, baseId: 01, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 0009, baseId: 01, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 0208, baseId: 01, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 0209, baseId: 01, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 1808, baseId: 01, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 1809, baseId: 01, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 0008, baseId: 02, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 0.000001)
Witch#setLineAndLimit(ilkId: 0009, baseId: 02, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 0.000001)
Witch#setLineAndLimit(ilkId: 0108, baseId: 02, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 0.000001)
Witch#setLineAndLimit(ilkId: 0109, baseId: 02, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 0.000001)
Witch#setLineAndLimit(ilkId: 1808, baseId: 02, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 0.000001)
Witch#setLineAndLimit(ilkId: 1809, baseId: 02, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 0.000001)
Witch#setLineAndLimit(ilkId: 0008, baseId: 18, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 0009, baseId: 18, duration: 600 seconds, vaultProportion: 0.5, collateralProportion: 0.75, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 0108, baseId: 18, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 0109, baseId: 18, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 0208, baseId: 18, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 1000000.0)
Witch#setLineAndLimit(ilkId: 0209, baseId: 18, duration: 600 seconds, vaultProportion: 1.0, collateralProportion: 0.9545454545454546, max: 1000000.0)
Allowing witch to exit join: 0xea8cD16b9cEdC799a2e3aCD7f122975fB2cDa98E
cloak.plan(witch, exit(0108)): 0xba6e9bd4cb2cbdc4c77cb3632fd8f0b4cad6fe37ab95745dd03c244a60840309
Allowing witch to exit join: 0x954f7cF4a0473CCde2AD4c85Da65A84Df03F3B30
cloak.plan(witch, exit(0109)): 0xc0b27dad7c6fd95efe35653e6f07c33832802fe35bda266713a948092034181d
Allowing witch to exit join: 0x62bF66Fc3e14a008c34E7A6BCAcD99945C02deAb
cloak.plan(witch, exit(0208)): 0x1bc3b434c9370aa33606c4c11307dc892073388fc5f6bcdc4843d9dfd8112611
Allowing witch to exit join: 0x718814062E4143a1fF3b3B7cD36e1d6C9603b85F
cloak.plan(witch, exit(0209)): 0xfdba5e63f258ab826ab3bbfa703ebfcd60fa2d7d33ba01f611dbd0c88116ed4e
Allowing witch to exit join: 0xcF678E428fBd6d9173fb780e971e4A123b68877a
cloak.plan(witch, exit(1808)): 0x5626a3d5352c38e2404a1836914531d3ef01be11e086065dc32c2335b22651a3
Allowing witch to exit join: 0xA9A04F40101F62397A24B3cEebbdC9660898e172
cloak.plan(witch, exit(1809)): 0x821a83c2c77e849006e9fd314e8039615d65eeb1d0ab220971a2420a455bf555
Allowing witch to exit join: 0x3D31eddd017d4C9F3aD291b51Fb18A44CE456494
cloak.plan(witch, exit(0008)): 0x62841acc27f56c7b49e92449133bf533fec530b8dc1efbc2bb914f8c34c35f5c
Allowing witch to exit join: 0x2F201B7B1176ECABA3D9E6C3e720B1f6A923229E
cloak.plan(witch, exit(0009)): 0x3d8f59cfbb6e4bbbe6ce305a0ea9c0159f1139aa2558965f032d812b7cfda188
Adding for 00/0108 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 00/0108 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 00/0108 maxDebt: 100, minDebt: 1, decimals: 18
Adding for 00/0109 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 00/0109 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 00/0109 maxDebt: 100, minDebt: 1, decimals: 18
Adding for 00/0208 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 00/0208 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 00/0208 maxDebt: 100, minDebt: 1, decimals: 18
Adding for 00/0209 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 00/0209 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 00/0209 maxDebt: 100, minDebt: 1, decimals: 18
Adding for 00/1808 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 00/1808 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 00/1808 maxDebt: 100, minDebt: 1, decimals: 18
Adding for 00/1809 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 00/1809 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 00/1809 maxDebt: 100, minDebt: 1, decimals: 18
Adding for 01/0008 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 01/0008 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 01/0008 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 01/0009 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 01/0009 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 01/0009 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 01/0208 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 01/0208 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 01/0208 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 01/0209 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 01/0209 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 01/0209 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 01/1808 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 01/1808 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 01/1808 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 01/1809 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 01/1809 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 01/1809 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 02/0008 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 02/0008 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 02/0008 maxDebt: 100000, minDebt: 1000, decimals: 6
Adding for 02/0009 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 02/0009 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 02/0009 maxDebt: 100000, minDebt: 1000, decimals: 6
Adding for 02/0108 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 02/0108 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 02/0108 maxDebt: 100000, minDebt: 1000, decimals: 6
Adding for 02/0109 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 02/0109 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 02/0109 maxDebt: 100000, minDebt: 1000, decimals: 6
Adding for 02/1808 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 02/1808 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 02/1808 maxDebt: 100000, minDebt: 1000, decimals: 6
Adding for 02/1809 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 02/1809 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 02/1809 maxDebt: 100000, minDebt: 1000, decimals: 6
Adding for 18/0008 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 18/0008 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 18/0008 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 18/0009 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 18/0009 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.4
Setting debt limits for 18/0009 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 18/0108 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 18/0108 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 18/0108 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 18/0109 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 18/0109 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 18/0109 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 18/0208 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 18/0208 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 18/0208 maxDebt: 100000, minDebt: 1000, decimals: 18
Adding for 18/0209 from 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4
Setting spot oracle for 18/0209 to address: 0xA81414a544D0bd8a28257F4038D3D24B08Dd9Bb4, ratio: 1.1
Setting debt limits for 18/0209 maxDebt: 100000, minDebt: 1000, decimals: 18
Updating 0x303030380000 series with 0x303130380000,0x303230380000,0x313830380000 ilks
addIlks 0008: 0x303130380000,0x303230380000,0x313830380000
Updating 0x303030390000 series with 0x303130390000,0x303230390000,0x313830390000 ilks
addIlks 0009: 0x303130390000,0x303230390000,0x313830390000
Updating 0x303130380000 series with 0x303030380000,0x303230380000,0x313830380000 ilks
addIlks 0108: 0x303030380000,0x303230380000,0x313830380000
Updating 0x303130390000 series with 0x303030390000,0x303230390000,0x313830390000 ilks
addIlks 0109: 0x303030390000,0x303230390000,0x313830390000
Updating 0x303230380000 series with 0x303030380000,0x303130380000,0x313830380000 ilks
addIlks 0208: 0x303030380000,0x303130380000,0x313830380000
Updating 0x303230390000 series with 0x303030390000,0x303130390000,0x313830390000 ilks
addIlks 0209: 0x303030390000,0x303130390000,0x313830390000
Updating 0x313830380000 series with 0x303030380000,0x303130380000,0x303230380000 ilks
addIlks 1808: 0x303030380000,0x303130380000,0x303230380000
Updating 0x313830390000 series with 0x303030390000,0x303130390000,0x303230390000 ilks
addIlks 1809: 0x303030390000,0x303130390000,0x303230390000