Add Market ezETH on ETH Mainnet

Summary

We would like to propose on addition of ezETH market to Compound V3 on Ethereum Mainnet

Motivation

LRTs are a great use case for Compound - the fastest growing sector in 2024. Renzo is one of the first LRTs with $950M+ in TVL, 15K+ holders, and 50K+ txs. ezETH has a proven track record of being a low-volatility asset owing to a deep liquidity pool.

Integrating ezETH as a collateral asset will potentially create new demand for borrowable assets on Compound. This will bring a larger user base to both Compound and Renzo.

Proposed Collateral

We propose adding the following asset as collaterals for the ezETH market

ETH

ezETH

We invite the community to suggest and give inputs for any other collateral assets.

Relevant Statistics and Links

Website: https://www.renzoprotocol.com/
Twitter: https://twitter.com/RenzoProtocol
Contract address: ezETH (Renzo Restaked ETH) Token Tracker | Etherscan
Docs: Intro | Renzo Protocol
Source code: GitHub - Renzo-Protocol/contracts-public: Renzo Protocol Public
Contract: ezETH (Renzo Restaked ETH) Token Tracker | Etherscan
Audits: https://github.com/HalbornSecurity/PublicReports/blob/master/Solidity Smart Contract Audits/Renzo_Protocol_EVM_Contracts_Smart_Contract_Security_Assessment_Report_Halborn_Final.pdf
Oracles: Chainlink ezETH-ETH price feeds live on 20th of March

Total Value Locked: $950 Million

Total supply: 215K+ Renzo Restaked ETH

24H trading volume: $41,203,780

Why Renzo:

Backed by Maven11, Robot Ventures, IOSG, OKX Ventures and more Renzo is a Liquid Restaking Token (LRT) and Strategy Manager for EigenLayer. It is the interface to the EigenLayer ecosystem securing Actively Validated Services (AVSs) and offering a higher yield than ETH staking.

The protocol abstracts all complexity from the end-user and enables easy collaboration between them and EigenLayer node operators.

Users can deposit native ETH or LSTs and receive ezETH - The liquid restaking token representing a user’s restaked position at Renzo. .

ezETH is one of the largest LRTs with $950M+ TVL, a fast growing user base, and ezETH/ETH pair is one of the most liquid low-volatile pairs with $65M+ in TVL and $40M+ in daily volumes.

Points

Renzo awards ezPoints and EigenLayer Restaked Points based on users’ ezETH holdings. Every user that deposits ezETH in Compound will also be awarded ezPoints and EigenLayer points 1:1.

Next Steps

Adding ezETH enables Compound protocol users to get the full benefits of the Liquid Restaking. Furthermore, it positions Compound as the premier protocol within the liquid Restaking space.

We invite the community to consider this application for listing the USDT market and welcome suggestions in this direction.

Additionally, we look forward to the community to suggest

Collateral Factor

Reserve Factor

Borrowing Limit

3 Likes

that is a good idea . Just do it

Hey mate, i just went over your gov proposal and was wondering if you are trying to be the first gov clown or something.

In all seriousness, i don’t see how this can be collateral, prior to for example stETH being collateral.
As ezETH compounds(pun intended) risk on top of all the staked ETH the ezETH sausage consists of.

1 Like

Gauntlet - Initial Parameter Recommendations for ezETH and Ethereum WETH Comet on Compound v3

Simple Summary

Should the community wish to proceed with @kratiki’s new market listing proposal, Gauntlet provides the following parameter recommendations for a new WETH Comet on Mainnet with ezETH as collateral. Gauntlet recommends the following parameters for listing ezETH and the new ETH Comet:

ezETH Parameter Value
Collateral Factor 80%
Liquidation Factor 85%
Liquidation Penalty 10%
Supply Cap 2800

Analysis

ezETH Liquidity sources

Dex Category Pool Assets TVL (mil) 24H Volume (mil) ezETH TVL (mil) URL
Balancer ezETH/WETH 74.63 47 46.7 link
Curve ezETH/WETH 3.6 0.4 1.9 link
Uniswap V3 ezETH/WETH 1.2 7.9 0.5 link
Total - 79.43 55.6 49.1 -

The balancer ezETH-WETH pool is the largest source of liquidity for ezETH, however, the composition of this pool is largely ezETH making up more than 60% of the TVL.

ezETH/ETH Liquidity on Balancer

Apart from the above ezETH, liquidity is available in tripool of ezETH/rswETH/weETH having total TVL of $39.6M as ancilliary sources of liquidity. However since we are more concerned with the liquidity with respect to WETH, we only limit our sources to WETH pools.

Liquidity Reserving Tokens (LRTs) entail both uncertainty regarding liquidity profiles and associated slashing risks. While LRTs may reserve liquidity for in-protocol, instant redemptions, withdrawals are subsequently rate-limited by the underlying protocols once the pool is depleted. This limitation could potentially affect liquidity availability. Therefore, Gauntlet advises adopting a highly conservative approach to parameters and suggests capping the supply to $10 million or 2800 tokens.

Oracle Risk

Chainlink’s price feed has only been live for a few weeks and is market rate based which could expose the protocol to both inorganic/artificial inflation in the staking rate as well as downward price deviations from the underlying. Gauntlet would like to highlight this potential risk to the community.

Yield Risk

Currently LRTs such as ezETH have elevated yields due to points program. EigenLayer maturity and AVS launch will cause yield shocks and consequentially elevate slippage magnitude and liquidity on DEXs. Gauntlet would like flag this potential risk to the community.

Storefront Price Factor: 60%

Gauntlet recommends keeping the storefront price factor at 60% for this new WETH Comet.

Target Reserves: 10,000

After Gauntlet’s forum post analyzing Target Reserves, Gauntlet recommends a target reserve of 10k for this new WETH Comet.

IR Curve Parameters

Gauntlet recommends the following IR parameters for this ETH Comet:

Parameter Recommended Value
Annual Supply Interest Rate Base 0
Annual Supply Interest Rate Slope Low 0.020
Supply Kink 0.9
Annual Supply Interest Rate Slope High 1
Annual Borrow Interest Rate Base 0.005
Annual Borrow Interest Rate Slope Low 0.0235
Borrow Kink 0.9
Annual Borrow Interest Rate Slope High 1

The chart above demonstrates that the generation of WETH Comet reserves will be positive when utilization exceeds 64%.

Considering the market equilibrium assumption of reaching 90% utilization, the following chart forecasts annualized reserves corresponding to various borrowing amounts. At $6.5M borrows, the Comets would generate annual reserves of ~$38.7k.

Incentive Parameters

Our COMP rewards recommendations are designed to offer appealing distribution APRs when the comets are first launched and when supply caps are highly utilized.

Gauntlet is recommending supply rewards to incentivize a more significant inflow of supply tokens into the protocol. This is important in the early stages of protocol growth since WETH supply is required before borrowers can join. Daily COMP rewards are subject to change as TVL rises and the markets evolve.

Daily COMP Supply Rewards Daily COMP Borrow Rewards
3 0

Here’s an update on the current COMP rewards structure in Ethereum v3 WETH (LRT):

  • Daily COMP Supply Rewards: 3 COMP
  • Daily COMP Borrow Rewards: 0 COMP

Assuming full usage of supply caps and current liquidation factors, the total borrowing power would be $8.5M.

Here’s a breakdown based on our assumptions:

  • Borrow Usage (80%): This leads to a borrowing volume of $6.8M.
  • Utilization (90%): Corresponding to a supply volume of $7.5M.

With the above utilization and the present Interest Rate curve:

  • Supply APR: 1.80%
  • Borrow APR: 2.62%

Given the current COMP price of $89:

  • Supply Distribution APR: 1.13%
  • Borrow Distribution APR: 0%

This results in the following Net APRs:

  • Net Supply APR: 2.93%
  • Net Borrow APR: 2.62%

The chart above illustrates the Distribution Annual Percentage Rates (APRs) across various supply levels, assuming a 90% utilization rate. It’s noteworthy that Supply APR will exceed 2% until the market’s supply reaches $4.5M. These incentive distributions are strategically designed to accelerate the new WETH Comet. The current projected net APRs are within reasonable ranges.

Next Steps

We welcome community feedback.

3 Likes

[Gauntlet] - ezETH Recommendation Update

Simple Summary

Gauntlet would like to make an adjustment to the ezETH recommendations. Gauntlet suggests to hold off listing ezETH until withdrawals are enabled due to substantial WETH outflows from ezETH’s largest source of liquidity - ezETH-WETH Balancer pool

Analysis

ezETH Liquidity sources

Dex Category TVL(mil) URL
balancer_ethereum 105.49 Link
uniswap_v3 19.44 Link
curve 14.15 Link

Total TVL: $139.05mil

The balancer ezETH-WETH pool is the largest source of liquidity for ezETH, however, the composition of this pool is largely ezETH making up more than 92% of the TVL, the composition of the pool has largely trended towards ezETH accumulation post the depeg. The total WETH across all the liquidity sources amount to ~$20M currently.

ezETH/ETH Liquidity on Balancer

Apart from the above ezETH, liquidity is available in tripool of ezETH/rswETH/weETH having total TVL of $12M as ancilliary sources of liquidity. However since we are more concerned with the liquidity with respect to WETH, we only limit our sources to WETH pools.

Future Listing

Gauntlet is recommending the inclusion of LRTs within the current WETH Comet to adapt to market demand and LRT market maturation moving forward. Once ezETH is liquidity improves and whithdrawals are enabled, Gauntlet will recommend it to be included into the current WETH Comet. The rationale for including ezETH and other LRTs to the main WETH Comet is the following:

WETH Fragmentation: Creating two separate Comets for WETH could fragment liquidity, resulting in a poor user experience and reduced capital efficiency. Once Eigenlayer AVS goes live and point farming demand decreases, maintaining sufficient demand for a separate Comet may be challenging. Therefore, consolidating WETH liquidity within a single Comet is preferable.

WETH Borrowing Demand: Gauntlet aims to enhance WETH utilization within the existing WETH Comet. The WETH Comet has been experiencing low utilization recently with market demand moving towards recursive LRT strategies. Including LRTs in this Comet will help boost demand for WETH and improve overall utilization.

3 Likes

Quick update on withdrawals:

Contract upgrades were successful for withdraws. Renzo will be testing out the feature with smaller amounts and will open up to larger quantities in a week.

Can view the developments here:

Requesting @Gauntlet to share their assessment of ezETH as a collateral asset.

1 Like

Simple Summary

Gauntlet aligns with listing ezETH as collateral on the WETH v3 Comet given the withdrawals being enabled and pending any additional audits. The below risk recommendations are a refresh of the analysis done previously.

Parameter Value
Collateral Factor 80%
Liquidation Factor 85%
Liquidation Penalty 10%
Supply Cap 2,900

Analysis

ezETH Liquidity sources

Dex Category TVL(mil) URL
balancer_ethereum 105.49 Link
uniswap_v3 20.4 Link
curve 18.1 Link

Total TVL: $144mil

The balancer ezETH-WETH pool continues to be the largest source of liquidity for ezETH, where the composition of this pool is still largely ezETH, where it makes up more than 92% of the TVL. The total WETH across all the liquidity sources at current WETH prices amount to ~$21M.

Apart from the above ezETH, liquidity is available in tripool of ezETH/rswETH/weETH having total TVL of $12.3M as ancilliary sources of liquidity. However as mentioned in the previous post, we are more concerned with the liquidity with respect to WETH, and only limit our sources to WETH pools.

Supply Cap and Liquidation Penalty (LP)

Although in the previous LRT listing recommendations we used 5% slippage to be a sufficient benchmark for supply caps against a Liquidation Penalty of 10%, given the skewed TVL for ezETH on dexes towards higher ezETH concentration, Gauntlet recommends a supply cap amounting to half of WETH liquidity available in the above pools. The recommended supply cap would then be $10.5M in WETH, i.e. 2,900 ezETH.

Liquidation Factor and Collateral Factor

Metric Value
Annualized Volatility 28.3%
Max Drawdown from Exchange Rate 4.64%

Liquidation Factor = 1 - (LP+Volatility)

Considering the provided metrics alongside the proposed Liquidation Penalty, application of the below formula yields an LF of 70% and CF of 65%. However, Gauntlet recommends aligning the LF and CF with those of weETH and rsETH,i.e an LF of 85% and CF of 80%. As seen in the above visualization, ezETH is gradually regaining peg to WETH along with withdrawals being enabled soon. Gauntlet believes that these recommended adjustments would more accurately depict ezETH’s risk profile.

Oracles

As mentioned in the [Franklin DAO] Request for comment on: Market pricing vs. exchange rate pricing for LSTs and potential oracle implementations post, Gauntlet supports exchange rate oracles for ezETH within this correlated Comet if the community decides to pursue this strategy. Renzo’s team has created a rate provider contract to get the exchange rate.

Yield Risk

Currently LRTs such as ezETH have elevated yields due to points program. EigenLayer maturity and AVS launch will cause yield shocks and consequentially elevate slippage magnitude and liquidity on DEXs. Gauntlet would like flag this potential risk to the community.

IR Curve Parameters

Gauntlet recommends the IR in line with previous LRT asset listing recommendations in the WETH Comet to account for higher utilization due to the prospective addition of ezETH.

We made updates to the above reply, post clarification with Renzo’s team on the withdrawal timeline as well as details on the oracle implementation.

2 Likes

PR - On-chain proposal to add ezETH in WETH Mainnet market by MishaShWoof · Pull Request #874 · compound-finance/comet · GitHub

Actions

  1. Run Slither. Fails. :x:. On-chain proposal to add ezETH in WETH Mainnet market · woof-software/comet@a22991a · GitHub
  2. Forge test. Success.:white_check_mark: On-chain proposal to add ezETH in WETH Mainnet market · woof-software/comet@a22991a · GitHub
  3. Gas Profiler. Success.:white_check_mark: On-chain proposal to add ezETH in WETH Mainnet market · woof-software/comet@a22991a · GitHub
  4. Scan. Success.:white_check_mark: On-chain proposal to add ezETH in WETH Mainnet market · woof-software/comet@a22991a · GitHub
  5. mainnet-weth Scenario. Success.:white_check_mark: On-chain proposal to add ezETH in WETH Mainnet market · woof-software/comet@a22991a · GitHub
  6. Unit tests. Success.:white_check_mark: On-chain proposal to add ezETH in WETH Mainnet market · woof-software/comet@a22991a · GitHub
  7. Eslint. Success.:white_check_mark: On-chain proposal to add ezETH in WETH Mainnet market · woof-software/comet@a22991a · GitHub
  8. Contract linter. Success.:white_check_mark: On-chain proposal to add ezETH in WETH Mainnet market · woof-software/comet@a22991a · GitHub
  9. Prepare migration. Success.:white_check_mark: Prepare Migration · woof-software/comet@a22991a · GitHub
  10. Enact migration with impersonate. Success.:white_check_mark: Enact Migration · woof-software/comet@a22991a · GitHub

Description we use:

Add ezETH as collateral into cWETHv3 on Mainnet\n\n

Proposal summary\n\n

Compound Growth Program [AlphaGrowth] proposes to add ezETH into cWETHv3 on Ethereum network. This proposal takes the governance steps recommended and necessary to update a Compound III WETH market on Ethereum. Simulations have confirmed the market’s readiness, as much as possible, using the Comet scenario suite. The new parameters include setting the risk parameters based off of the recommendations from Gauntlet.\n\n

Further detailed information can be found on the corresponding proposal pull request and forum discussion.\n\n

Yield Risk\n\n

Currently LRTs such as ezETH have elevated yields due to points program. EigenLayer maturity and AVS launch will cause yield shocks and consequentially elevate slippage magnitude and liquidity on DEXs. Gauntlet flags this potential risk to the community.\n\n\n

Proposal Actions\n\n

The first proposal action adds ezETH asset as collateral with the corresponding configuration.\n\n

The second action deploys and upgrades Comet to a new version.

Compound ezETH, rsETH, weETH Price Feeds Audit

July 1-5, 2024

Total Issues: 7 (7 resolved)

Notes & Additional Information: 7 (7 resolved)

Scope

We audited pull requests #872 and #877 of the compound-finance/comet repository at commit 228b6e4 and 2c33985 respectively.

In scope were the following files:

PR #872
contracts
└── pricefeeds
    ├── vendor
    │   └── IBalancerRateProvider.sol
    ├── EzETHExchangeRatePriceFeed.sol
    └── ReverseMultiplicativePriceFeed.sol

PR #877
contracts
├── IRateProvider.sol
└── pricefeeds
    ├── vendor
    │   └── kelp
    │       └──ILRTOracle.sol
    ├── RateBasedScalingPriceFeed.sol
    └── RsETHScalingPriceFeed.sol

System Overview

Compound v3, referred to hereafter as Comet, till now only used Chainlink as its source of asset prices. The contracts under review enable the usage of exchange-rate oracles for liquid staking and restaking tokens. These exchange rate oracles calculate the price of a token by dividing the TVL of the token’s protocol by the total supply of the token. The TVL in turn can be calculated using exchange rate oracles or market rate oracles.

A brief summary of the main contracts

  • EzETHExchangeRatePriceFeed
  • RsETHScalingPriceFeed
  • RateBasedScalingPriceFeed
    • This is similar to the ScalingPriceFeed contract but it works with oracles that have the getRate() function. This contract is not specific to any asset. It will be used for weETH but can be used with other assets too.
  • ReverseMultiplicativePriceFeed
    • This is similar to the MultiplicativePriceFeed contract but it multiplies the inverse of the second price feed with the first. It is useful in scenarios where an asset X only has a USD denominated price feed, but its price is required in ETH. This contract will multiply the X/USD price with the inverse of ETH/USD price to calculate the X/ETH price.

Trust Assumptions

Previously stated oracle risks from the Gauntlet team still seem to be present with the usage of the LRTOracle contract specifically the getAssetPrice function. A summary of such is that it utilizes multiple oracles to price the assets it accepts as deposits and this reliance on multiple oracles is risky. Now, the rsETHScalingPriceFeed feed doesn’t use this function but instead uses the public state variable rsETHPrice. This can be updated at any time by anyone with the updateRSETHPrice function in the LRTOracle. This function

  • Gets all supported assets:stETH, ETHx, sfrxETH and ETH.
  • Gets the total deposits of each asset in the LRT Deposit Pool
  • Gets the asset price from the getAssetPrice using the different oracles gathered in the assetPriceOracle state variable.
  • Out of the four asset oracles, ETHx and sfrxETH use exchange rate oracles while stETH and ETH have fixed prices equal to 1e18 wei.
  • Each asset amount is then multiplied by its respective price and then totaled
  • Finally the total (amount * price) is divided by the rsEth total supply and some checks are done for price limits.

Since ETHx and sfrxETH are using exchange rate oracles, the oracle risks stated by the Gauntlet team are present for the rsETHScalingPriceFeed contract. It is assumed that taking such risks has been weighed by the Woof Software team.

In addition, there is an assumption that the price feed contracts are going to be deployed with the correct configuration.

Notes & Additional Information

Typographical Error

Within the ReverseMultiplicativePriceFeed contract there is a typographical error with the public state variable priceFeedAScalling and it should be priceFeedAScale.

To improve code readability, consider addressing this typographical error and thoroughly examining the codebase to rectify any additional ones.

Update: Resolved in commit df7bab0.

Misleading Natspec Comments

In ReverseMultiplicativePriceFeed we have identified the following comments which may be misleading

  • On line 33 of the ReverseMultiplicativePriceFeed contract, the natspec for priceFeedAScaling incorrectly refers to it as combinedScale.
  • On line 73 of the ReverseMultiplicativePriceFeed contract, the stated formula does not match the implementation on the next line.

These can be misleading to future developers and users when attempting to understand the ReverseMultiplicativePriceFeed contract.

Consider revising the comments to remove ambiguity for others reviewing the codebase.

Update: Resolved in commit df7bab0.

Use signed256() instead of directly typecasting with int256()

Throughout the codebase, the uint256 values returned by the underlying price feeds are directly converted to int256 using int256(). Although, the likelihood of overflow is unlikely while typecasting these returned values, caution should still be taken on:

  • line 71 of the EzETHExchangeRatePriceFeed contract
  • line 74 of the ReverseMultiplicativePriceFeed
  • line 70 of the RateBasedScalingPriceFeed contract
  • line 69 of the RsETHScalingPriceFeed contract

Consider using the signed256 function present in all the listed contracts removing the risk of overflow while typecasting.

Update: Resolved EzETHExchangeRatePriceFeed and ReverseMultiplicativePriceFeed in commit df7bab0 and RateBasedScalingPriceFeed and RsETHScalingPriceFeed in commit f242649.

Constants Not Using UPPER_CASE Format

Throughout the codebase, there are constants not using the UPPER_CASE format. For instance:

According to the Solidity Style Guide, constants should be named with all capital letters with underscores separating words. For better readability, consider following this convention.

Update: Resolved RateBasedScalingPriceFeed and RsETHScalingPriceFeed in commit f242649 and EzETHExchangeRatePriceFeed in commit 2553a7d.

Missing Sanity Checks For Function Argument

Throughout the codebase, the constructor parameter decimals_ is used without any checks for the validity of the data:

Consider implementing sanity checks for the decimals_ constructor parameter as is done in other price feed contracts.

Update: Resolved RateBasedScalingPriceFeed and RsETHScalingPriceFeed in commit 563f2ba and EzETHExchangeRatePriceFeed in commit df7bab0.

The added sanity check in EzETHExchangeRatePriceFeed deems the shouldUpscale check unnecessary, since ezETHRateProviderDecimals is hardcoded to 18, thus, shouldUpscale would always be false. The code could be refactored to rescaleFactor = signed256(10 ** (ezETHRateProviderDecimals - decimals_)).

Use of External Call to Retrieve the decimals of priceFeedB is Inefficient

The function latestRoundData in the ReverseMultiplicativePriceFeed contract uses an external call to retrieve the decimals of priceFeedB, on line 74. Due to the unlikelihood of the decimals for a Chainlink price feed changing, making this call each time is unnecessary and inefficient.

Consider creating an immutable variable to be set to the scale of the priceFeedB decimals in the constructor, similar to priceFeedA.

Update: Resolved in commit df7bab0.

Using Zero-values for Unutilized Fields Contradicts Precedent

Throughout the codebase, the function latestRoundData returns zero-values for all uninitialized fields. For instance:

  • Line 71 of the EzETHExchangeRatePriceFeed contract.
  • Line 70 of the RateBasedScalingPriceFeed contract.
  • Line 70 of the RsETHScalingPriceFeed contract.

In each case, only the price is retrieved with the respective method from the underlying price feed and these feeds do not provide the other data fields. The Comet protocol when using the latestRoundData in the function getPrice does not use these other data fields. However, In the ConstantPriceFeed contract there are non-zero values being used for the non-essential fields. Meaning there is a precedent to return non-zero values for those non-essential fields.

Consider returning non-zero values for roundId, startedAt, updatedAt, and answeredInRound, to ensure consistency with previous practices.

Update: Resolved RateBasedScalingPriceFeed and RsETHScalingPriceFeed in commit f242649 and EzETHExchangeRatePriceFeed in commit df7bab0.

Conclusion

The audited contracts add some new types of price feed contracts to the Comet codebase. Of these contracts EzETHExchangeRatePriceFeed and RsETHScalingPriceFeed would enable the usage of exchange rate oracles for their respective assets. RateBasedScalingPriceFeed adds support for the use of oracles that retrieves the price via the getRate() function. Lastly, ReverseMultiplicativePriceFeed will allow the ability to combine price feeds in ways previously not possible. No critical nor high issues were found. Only Minor suggestions were made to improve the code’s overall quality. Based on our evaluation, we are confident that these additional price feed contracts will seamlessly integrate with the Comet codebase.

3 Likes

Thanks OZ team for the work and speed!