Pareto Redemption Backing Guard
If the source reserve require and checked arithmetic succeed, the modeled post-state leaves closed redemption claims covered.
Pareto USP groups redemption requests by epoch. When a user requests redemption, USP is burned and the queue records a claim. This proof checks the modeled post-condition of depositFunds: when the source reserve require and checked arithmetic succeed, the modeled post-state satisfies the closed-epoch reserve guard. The full Lean guard also records the current-pending and no-overflow side conditions needed to make that subtraction and sum well-defined.
Why It Matters
A redemption request burns USP before the user receives collateral. The queue must then preserve enough recognized value for already closed epochs while managers continue moving idle funds into yield sources. If that local guard were wrong, a manager action could make an older redemption epoch look processable while the queue no longer accounts for enough backing value.
The unit at risk is 18-decimal USP redemption value. The users affected are redeemers whose claims have already left the open current epoch. This proof does not show that every redemption is live or that Credit Vault prices are correct. It shows that the modeled successful depositFunds post-state satisfies the guard when the source reserve require and checked-arithmetic side conditions succeed.
How This Was Modeled and Proven
The Verity model focuses on the queue accounting slice around depositFunds. External ERC20 balances, yield-source calls, and Credit Vault pricing are represented by scaled ghost totals because the theorem targets the reserve check after those successful calls have returned.
The model is in Contract.lean. The closed-epoch reserve guard is in Specs.lean, and the reference proof is in Proofs.lean.
Scope
The proof covers the modeled successful path of depositFunds. The scalar depositedScaled summarizes the successful post-loop decrease in getUnlentBalanceScaled().
The proof does not cover global redemption solvency, every queue transition, Credit Vault valuation correctness, token transfer honesty, or claim liveness.
| Function | Theorem | Status |
|---|---|---|
| depositFunds | depositFunds_preserves_closed_epoch_reserve_guard | proved under source reserve require |
Verify it yourself
git clone https://github.com/lfglabs-dev/ethereum-verification-benchmark cd ethereum-verification-benchmark git checkout pareto-redemption-backing lake build Benchmark.Cases.Pareto.RedemptionBacking.Proofs
If the build succeeds, the reference proof in ethereum-verification-benchmark checks under the pinned Lean and Verity dependencies.
Assumptions
These assumptions are part of the theorem scope. They are not hidden protocol guarantees.
hCollateralizedcollateralized-mode gate succeedsParetoDollarQueue.depositFunds
The modeled successful path starts after the queue passes its collateralization check.
hDepositLeIdledeposit does not exceed idle collateralParetoDollarQueue.depositFunds
The scaled deposit amount is no larger than the modeled idle collateral available before the manager deposit.
hCurrentLeReservedcurrent pending does not exceed reservedParetoDollarQueue.depositFunds
The open current epoch's pending amount is no larger than total reserved withdrawals, so closed claims can be computed as total reserved minus current pending.
hReserveGuardpost-deposit reserve guard holdsParetoDollarQueue.depositFunds
The Solidity check at the end of
depositFundssucceeds: closed-epoch reserved withdrawals are no larger than idle collateral plus requested Credit Vault withdrawal value.hAddNoOverflowidle plus requested value does not overflowUint256 arithmetic
The modeled sum of post-deposit idle collateral and requested Credit Vault value stays within
Uint256.external valuationCredit Vault values are trusted inputsmodel boundary
The proof assumes the scaled Credit Vault requested-withdrawal value is a valid accounting input. It does not prove
virtualPricecorrectness.manager action scopedeposit-mode calls do not request Credit Vault withdrawalsmodel boundary
The modeled deposit path excludes manager actions that request Credit Vault withdrawals through the shared external-call helper. Those actions can mutate requested Credit Vault value and belong to a different queue transition.
token framescaled idle collateral matches token balancesmodel boundary
ERC20 balances and successful yield-source calls are summarized by
idleCollateralScaledanddepositedScaled.