/pufETH

Primary LanguageSolidityGNU General Public License v3.0GPL-3.0

Puffer Vault

Website Docs Discord X Foundry

Overview

Stakers can deposit ETH and mint the pufETH nLRT via the PufferVault contract, which serves as a redeemable receipt for their restaked ETH. If sufficient exit liquidity is available, stakers can reclaim their ETH from the PufferVault. Over time, the redeemable amount is expected to increase from validator tickets and restaking rewards.

In contrast with conventional liquid staking tokens (LSTs), pufETH can provide strictly more rewards for its holders. Not only does pufETH encompass PoS rewards and restaking rewards, but its value can accelerate quickly due to validator ticket sales. Furthermore, the PoS rewards for stakers are decoupled from the protocol validators' performance.

pufETH

pufETH is implemented as a reward-bearing ERC20 token, following ERC4626 standard and inspired by Compound's cToken design for optimal DeFi compatibility. It represents a novel approach in the liquid staking domain, introducing several features that enhance stakers' rewards and interaction with DeFi protocols.

Read more about pufETH and native Liquid Restaking Tokens (nLRTs) in the Puffer Docs website.

How pufETH Works

Stakers deposit ETH to the PufferVault contract to mint the pufETH nLRT. At the protocol's inception, pufETH's conversion rate is one-to-one, but is expected to increase over time. Assuming the protocol performs well, i.e., accrues more rewards than penalties, the amount of ETH reedamable for pufETH will increase.

Calculating the Conversion Rate

The conversion rate can be calculated simply as:

conversion rate = (deposits + rewards - penalties) / pufETH supply

Where:

  • deposits and pufETH supply increase proportionally as stakers deposit ETH to mint pufETH, leaving the conversion rate unaffected.

  • rewards increase as restaking operators run AVSs and whenever validator tickets are minted.

  • penalties accrue if validators are slashed on PoS for more than their 1 ETH collateral, which is disincentivized behavior and mitigated through anti-slashing technology. Penalties can also accrue if the restaking operator is slashed running AVSs, which is why Puffer is restricting restaking operator participation during its nascent stages.

Contract addresses

  • PufferVault (pufETH token): 0xD9A442856C234a39a81a089C06451EBAa4306a72
  • PufferDepositor: 0x4aA799C5dfc01ee7d790e3bf1a7C2257CE1DcefF
  • AccessManager: 0x8c1686069474410E6243425f4a10177a94EBEE11
  • Timelock: 0x3C28B7c7Ba1A1f55c9Ce66b263B33B204f2126eA

For more detailed information on the contract deployments (Mainnet, Holesky, etc) and the ABIs, please check the Deployments and ACL repository.

Audits

  • BlockSec: v1, v2
  • SlowMist: v1, v2
  • Quantstamp: v1
  • Immunefi Boost: v1
  • Trail of Bits: v2
  • Nethermind: v2
  • Creed: v2

Tests

Make sure you have access to a valid archive node RPC for ETH Mainnet (e.g. Infura)

Installing dependencies and running tests can be executed running:

ETH_RPC_URL=https://mainnet.infura.io/v3/YOUR_KEY forge test -vvvv

Echidna

To install Echidna, see the instructions here. To use Echidna, run the following command from the project's root:

forge install crytic/properties --no-commit
echidna . --contract EchidnaPufferVaultV2 --config src/echidna/config.yaml

For more information see the properties README.