Executed

Add Yearn Finance’s msETH/WETH Autocompounding LP Vault as Collateral for HAI


Proposal ID

437731...7262

Proposed

Aug 23rd, 2025

Result details
Final Votes

Quorum

38.01K of 9.74K

Majority support

Yes

For

38.01K

Against

0

Abstain

0

Actions

Type

Address

Details

Custom

0xfE79...6143

deployCollateralJoin(..)

Custom

Account

0xfE79...6143

Method

deployCollateralJoin(..)

Custom

0x81c5...B427

initializeCollateralType(..)

Custom

Account

0x81c5...B427

Method

initializeCollateralType(..)

Custom

0x9Ff8...A700

initializeCollateralType(..)

Custom

Account

0x9Ff8...A700

Method

initializeCollateralType(..)

Custom

0x6270...b3A6

initializeCollateralType(..)

Custom

Account

0x6270...b3A6

Method

initializeCollateralType(..)

Proposal

Overview

This proposal adds Velodrome v2 msETH-WETH Factory Yearn vault tokens as an approved collateral type in HAI Protocol, extending our initial collaboration with Metronome on msETH collateral.

By integrating the Yearn vault, HAI can support leveraged liquidity provisioning for the msETH-WETH Velodrome pool while capturing Yearn’s auto-compounded yield.

This strengthens the msETH collateral ecosystem, deepens HAI liquidity, and builds on the DAO’s strategic alignment with Metronome.

Details

Adding a new collateral to the system requires deploying multiple contracts and calling functions on existing ones to initialize the new collateral.

Each collateral has it's own set of parameters that define how it interacts with the rest of the HAI system.

msETH-WETH LP Yearn Vault Collateral Parameters

General

ParameterValue
Token NameyvVelo-msETH-WETH-f
Token Address0xd0d2Ac44Cc842079e978bB11b094764f7D0dec6A

Collateral Auction House

ParameterValue
minimumBid100 HAI
minDiscount0% (no discount)
maxDiscount20%
perSecondDiscountUpdateRate2 hours

Oracle / Price Feed


SAFEEngine

ParameterValue
debtCeiling200,000 HAI
debtFloor150 HAI

Oracle Relayer

ParameterValue
safetyCRatio180%
liquidationCRatio175%

TaxCollector

ParameterValue
stabilityFee2.5%

LiquidationEngine

ParameterValue
liquidationPenalty20%
liquidationQuantity50,000 HAI

This proposal will have 9 actions

// 0x59562d56454c4f2d4d534554482d574554480000000000000000000000000000
bytes32 constant YV_VELO_MSETH_WETH = bytes32("YV-VELO-MSETH-WETH");

1. Deploy a new collateral join for YV_VELO_MSETH_WETH in the Collateral Join Factory [_Executable Code Function 1*]

address OP_YV_VELO_MSETH_WETH_ADDRESS = 0xd0d2Ac44Cc842079e978bB11b094764f7D0dec6A;

collateralJoinFactory.deployCollateralJoin({_cType: YV_VELO_MSETH_WETH, _collateral: OP_YV_VELO_MSETH_WETH_ADDRESS});

2. Initialize new collateral in the Collateral Auction House Factory. This will deploy a new collateral auction house for YV_VELO_MSETH_WETH. [_Executable Code Function 2*]

bc -l <<< 'scale=27; e( l(.80)/(60 * 60 * 2) )'
 .999969008320347275063858549
 999_969_008_320_347_275_063_858_549

 _collateralAuctionHouseParams[YV_VELO_MSETH_WETH] = ICollateralAuctionHouse
    .CollateralAuctionHouseParams({
        minimumBid: 100 * WAD, // 100 HAI
        minDiscount: 1e18, // no discount
        maxDiscount: 0.8e18, // -20%
        perSecondDiscountUpdateRate: 999_969_008_320_347_275_063_858_549 // -20% / 2hs
});

// Encoded Params:
0x0000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000033b27ac8fdc450a6cb21575

3. Initialize the new collateral in the SAFE (Vault) Engine [Executable Code Function 3]

_safeEngineCParams[YV_VELO_MSETH_WETH] = ISAFEEngine.SAFEEngineCollateralParams({
    debtCeiling: 200_000 * RAD, // 200k HAI
    debtFloor: 150 * RAD // 150 HAI
});

// Encoded Params: 0x000000000000000000000088d8762bf324cd0fa5880a69fb6ac80000000000000000000000000000000000001a463b8d8ef089acfcf74dc68649c00000000000

safeEngine.initializeCollateralType(YV_VELO_MSETH_WETH, abi.encode(_safeEngineCParams[YV_VELO_MSETH_WETH]));

4. Initialize the new collateral in the Oracle Relayer [Executable Code Function 4]

delayedOracle[YV_VELO_MSETH_WETH] = IDelayedOracle(
    0xb780ebA83D6210B4f7fcc86B2996F2918Eb7B14b
);

_oracleRelayerCParams[YV_VELO_MSETH_WETH] = IOracleRelayer.OracleRelayerCollateralParams({
    oracle: delayedOracle[YV_VELO_MSETH_WETH],
    safetyCRatio: 1.8e27, // 180%
    liquidationCRatio: 1.75e27 // 175%
});

// Encoded Params: 0x000000000000000000000000b780eba83d6210b4f7fcc86b2996f2918eb7b14b000000000000000000000000000000000000000005d0ecd38610e6d408000000000000000000000000000000000000000000000005a790ea17ace06a96000000

oracleRelayer.initializeCollateralType(YV_VELO_MSETH_WETH, abi.encode(_oracleRelayerCParams[YV_VELO_MSETH_WETH]));

5. Initialize the new collateral in the Liquidation Engine [Executable Code Function 5]

address YV_VELO_MSETH_WETH_CAH = 0x430555C6345f4A26DD123F81BE1925968f341A14; // Simulated from step 2

_liquidationEngineCParams[YV_VELO_MSETH_WETH] = ILiquidationEngine
    .LiquidationEngineCollateralParams({
        collateralAuctionHouse: YV_VELO_MSETH_WETH_CAH, // CAH from step 2
        liquidationPenalty: 1.2e18, // 20%
        liquidationQuantity: 50_000 * RAD // 50k HAI
});

// Encoded Params:
0x000000000000000000000000430555c6345f4a26dd123f81be1925968f341a1400000000000000000000000000000000000000000000000010a741a462780000000000000000000000000022361d8afcc93343e962029a7edab2000000000000

liquidationEngine.initializeCollateralType(YV_VELO_MSETH_WETH, abi.encode(_liquidationEngineCParams[YV_VELO_MSETH_WETH]));

6. Initialize the new collateral in the Tax Collector [Executable Code Function 6]

bc -l <<< 'scale=27; e( l(1.025)/(60 * 60 * 24 * 365) )'
1.000000000782997609082909351
1_000_000_000_782_997_609_082_909_351

_taxCollectorCParams[YV_VELO_MSETH_WETH].stabilityFee = 1_000_000_000_782_997_609_082_909_351; // 2.5% / yr

// Encoded Params: 0x0000000000000000000000000000000000000000033b2e3caaae446a355df2a7

taxCollector.initializeCollateralType(YV_VELO_MSETH_WETH, abi.encode(_taxCollectorCParams[YV_VELO_MSETH_WETH]));

7. Add first secondary tax receiver: Stability Fee Treasury [Executable Code Function 7]

// 0x7365636f6e646172795461785265636569766572000000000000000000000000
bytes32 constant SECONDARY_TAX_RECEIVER = bytes32("secondaryTaxReceiver");

note: These are the same secondary tax receivers that are set on the system's other collaterals.

ITaxCollector.TaxReceiver memory firstSecondaryReceiver = ITaxCollector.TaxReceiver({
    receiver: 0xE9E54c55d41D6622933F9F736e0c55484b3c4f6f, // Stability Fee Treasury
    canTakeBackTax: true, // [bool]
    taxPercentage: 0.2e18 // 20%
});

// Encoded Params:
0x000000000000000000000000e9e54c55d41d6622933f9f736e0c55484b3c4f6f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000002c68af0bb140000

taxCollector.modifyParameters(YV_VELO_MSETH_WETH, SECONDARY_TAX_RECEIVER, abi.encode(firstSecondaryReceiver));

8. Add second secondary tax receiver: Admin Safe [Executable Code Function 8]

ITaxCollector.TaxReceiver memory secondSecondaryReceiver = ITaxCollector.TaxReceiver({
    receiver: 0x468c572c41DB8B206B3919AC9a41ad8dE2eAc822, // Admin Safe
    canTakeBackTax: true, // [bool]
    taxPercentage: 0.21e18 // 21%
});

// Encoded Params: 0x000000000000000000000000e9e54c55d41d6622933f9f736e0c55484b3c4f6f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000002c68af0bb140000

taxCollector.modifyParameters(YV_VELO_MSETH_WETH, SECONDARY_TAX_RECEIVER, abi.encode(secondSecondaryReceiver));

9. Setup initial price for the collateral. [Executable Code Function 9]

oracleRelayer.updateCollateralPrice(YV_VELO_MSETH_WETH);

Contracts referenced in this proposal

  1. Yearn Velo Vault Relayer (YV_VELO_MSETH_WETH) -0xde369a4ebb943d2b208503d810065ee2b88d1768
  2. Delayed Oracle (YV_VELO_MSETH_WETH) -0xb780ebA83D6210B4f7fcc86B2996F2918Eb7B14b
  3. Collateral Join Factory -0xfE7987b1Ee45a8d592B15e8E924d50BFC8536143
  4. Collateral Auction House Factory -0x81c5C2DA8C1a74c6077B03aD69ca04b74b94B427
  5. SAFE (Vault) Engine -0x9Ff826860689483181C5FAc9628fd2F70275A700
  6. Oracle Relayer -0x6270403b908505F02Da05BE5c1956aBB59FDb3A6
  7. Liquidation Engine -0x8Be588895BE9B75F9a9dAee185e0c2ad89891b56
  8. Tax Collector -0x62B82ccE08f8F2D808348409E9418c65EB1973C3
  9. Stability Fee Treasury -0xE9E54c55d41D6622933F9F736e0c55484b3c4f6f
  10. Admin Safe - 0x468c572c41DB8B206B3919AC9a41ad8dE2eAc822
  11. yvVelo-msETH-WETH Token - 0xd0d2Ac44Cc842079e978bB11b094764f7D0dec6A
Final Votes

Quorum

38.01K of 9.74K

Majority support

Yes

For

38.01K

Against

0

Abstain

0

Final Votes
Status

Sat Aug 23, 10:57 pm

Draft created

Sat Aug 23, 10:59 pm

Published onchain

Sun Aug 24, 10:59 am

Voting period started

Mon Aug 25, 03:47 pm

Voting period extended

Tue Aug 26, 03:47 pm

Voting period ended

Tue Aug 26, 06:13 pm

Proposal queued

Wed Aug 27, 06:29 pm

Proposal executed