[BIP-460] Enable rETH/WETH gauge [zkEVM]

PR with Payload

Proposal by Gyroscope


  • This is a proposal to enable a Balancer gauge for a rETH/WETH pool on Balancer Polygon zkEVM.
  • The pool is an Elliptic Concentrated Liquidity Pool (E-CLP). E-CLPs are custom pools from Gyroscope built on top of Balancer’s pool architecture. They enable trading along the curve of an ellipse. This pool type is ideally suited for liquid staking tokens, is typically more capital efficient and could thus generate significant trading volume.
  • The pool shall be a ‘Core’ pool with a swap fee of 1 basis points, i.e., 0.01% at pool inception. The fee split is as follows: 50% of all collected fees will go to liquidity providers, while the remaining 50% will go towards Balancer. At pool inception, no fees will go towards Gyroscope. As a Core pool it will be eligible for fee recycling.

References/Useful links

Protocol description

  • [When staking ETH with RocketPool] you will be given a token called rETH. rETH represents both how much ETH you deposited, and when you deposited it. The ratio includes rewards that Rocket Pool node operators earn from: The Beacon Chain itself, Priority fees from block proposals, and MEV rewards from block proposals. - RocketPool
  • WETH is a wrapper-token and an ERC-20 token representing ETH at a 1:1 ratio.
  • The E-CLP uses an internal conversion to avoid a unit drift of yield-accruing tokens.


We expect the E-CLP to improve capital efficiency significantly. The E-CLP’s efficiency gains are possible due to:

  • Customizable liquidity profiles: Using the curve of an ellipse enables highly customizable liquidity profiles. E-CLPs can be calibrated to approximate most trading curves that would be desired. E-CLP curves can be tailored to have certain regions of low price impact and other regions of high price impact.
  • Price bounds: The E-CLP concentrates liquidity within price-bounds that enable the E-CLP to be highly capital-efficient. Functionally, this works by enabling arbitrary truncation of liquidity profiles from a given trading curve. In effect, the capital efficiency comes from bounding the trading curve to an expected trading range of the assets.

For an overview of previously deployed E-CLPs view: https://dune.com/gyro_finance/gyroscope-e-clps

E-CLPs have been developed for stablecoin pools that include the upcoming Gyroscope stablecoin, GYD. However, they can find broader application, whenever the expected trading range of the included assets can be informed by external business logic (e.g. from arbitrage loops of mints/ redemptions in the case of LSTs).



The Gyroscope Protocol is in limited production live on Polygon. The Gyroscope Protocol will be governed by a DAO and relevant stakeholder with the full launch on Ethereum. For now, the FTL Labs multi-sig can pause the pool, change the swap fee and set the protocol fee. As a custom pool by Gyroscope, the E-CLP will be controlled by Gyroscope governance upon its launch.


  • rateProvider0 (for WETH): 0x00
  • rateProvider1 (for rETH): 0x60b39bec6af8206d1e6e8dfc63cea214a506d6c3
  • (allows to control for a price drift from accruing yield by using rate providers to first convert from yield accruing tokens to the underlying)


Audit reports by Nethermind, Trail of Bits, and Runtime Verification can be accessed here (the E-CLP is called the “CEMM” in these reports). In addition, the E-CLP code has been live in production on Polygon since November 2022.

Centralization vectors

No centralization vectors. The FTL Labs team’s multi-sig can - currently - pause the pool, change the swap fee and set the protocol fee.

Market History

C.f. contracts.


As per “Motivation”. Other zkEVM pools with these assets exist, but none of them feature asymmetrically concentrated liquidity. Asymmetric concentrated liquidity for these assets could become a substantial driver of trading volume and total value locked.



The Balancer Maxi LM Multisig eth:0xc38c5f97B34E175FFd35407fc91a937300E33860 will interact with the GaugeAdderv4 at 0x5DbAd78818D4c8958EfF2d5b95b28385A22113Cd and call the addGauge function with the following arguments:
gaugeType(string): PolygonZkEvm