Lido V3 Vault Solvency Guarantee

A vault is required to lock more ETH than the stETH minted against it.

Lido V3 introduced StakingVaults, which allow stETH to be minted against ETH held in isolated vaults and used for validator operations. The VaultHub contract enforces overcollateralization by requiring that part of the vault's value remains locked, covering both the outstanding liability and an additional reserve providing a buffer against losses such as slashing.

Why this matters

Why this is difficult

The _locked() function uses non-linear uint256 arithmetic: multiplications, ceiling division via Math256.ceilDiv, and a max() over the reserve and a minimum floor, all within 2256 bounds.

This property was flagged as unproven (finding F-01) in Certora's formal verification report. Standard SMT-based tools typically cannot handle non-linear integer reasoning with division.

Why you can trust this

The proof was generated automatically and checked by the Lean 4 theorem prover. Every logical step is verified deterministically by Lean's kernel, a small, well-audited program that accepts or rejects proofs.

If the proof were incorrect, it would not compile.

You do not need to trust the proof generator.

Verify it yourself

git clone https://github.com/lfglabs-dev/verity-benchmark
cd verity-benchmark
./scripts/run_default_agent.sh lido/vaulthub_locked/locked_funds_solvency

If the build succeeds, the proof is correct. No other check is needed.

Trust model

To trust this result, you only need to trust:

  • The Lean proof checker (open source, widely used)
  • The stated assumptions (listed below)

You do not need to trust:

  • The AI that generated the proof
  • The authors of this page

Assumptions

The proof holds under explicit preconditions, each enforced by VaultHub's connection and minting logic.

View full specification →

What was proven

Five theorems, from the core solvency result to supporting lemmas:

Learn more

What is a formal proof? A short explanation for non-specialists.