Skip to Content
Liquid veBTC

Liquid veBTC

Feasy’s second product turns veBTC and veMEZO into tokens you can hold, send and redeem. It runs the same four-week ladder the vault’s veBTC sleeve runs, and the same permanent veMEZO lock its booster runs, but open to anyone.

You bringYou getIt earnsYou leave
BTC, or a veBTC lock you already holdfveBTC, one for every BTCMezo’s gauge fees in MUSD and the BTC rebates, boosted by veMEZORedeem for BTC, at most four weeks, or send fveBTC to anyone
MEZO, or a veMEZO lock you already holdfveMEZO, one for every MEZOA share of everything fveBTC earns, for the boostHold or send fveMEZO, the MEZO stays locked for good

The contracts are BtcLocker, which is fveBTC, and MezoLocker, which is fveMEZO and is deployed by BtcLocker. Both share LockerRewards.

Why it exists

veBTC on Mezo earns fees and rebates, but a lock is stuck for up to 28 days and only earns its full share when someone also holds veMEZO to boost it. Most BTC holders hold no veMEZO, and most MEZO holders have no veBTC to boost. Every vote-escrow chain grew a liquid locker for this gap: Convex on Curve, Aura on Balancer, Penpie and Equilibria on Pendle. Mezo’s own roadmap asks for a veNFT market, vote delegation and simpler Earn onboarding, and this is all three in one contract.

The ladder

Every BTC that comes in joins the lock ending four Thursdays out, or tops it up if it already exists. So the pool holds at most four locks, one ending each of the next four Thursdays. Each lock votes all its weight for Mezo’s sMUSD savings gauge.

A veBTC lock you bring merges into the longest Feasy lock that ends with it or later, usually the one four Thursdays out. A lock about to end would add almost no voting weight, and merging it into the longest one makes it vote at full weight like any new BTC. Its BTC can then stay locked up to four weeks, but fveBTC redeems from whichever lock ends first, so that doesn’t change when you can leave. Mezo only merges a lock that votes nowhere, so reset its votes in Mezo first. A lock’s unpaid rebate is claimed into it first, and between the Thursday flip and Mezo’s weekly rebate update the deposit waits, so that rebate is never burned. Permanent veBTC locks can’t come in, since fveBTC has to redeem within four weeks.

The boost

MEZO that comes in goes into one permanent veMEZO lock. Once an epoch anyone can call boost(), which votes the whole lock for the boost gauges of the live rungs, each in proportion to its unboosted weight. It waits until the week’s roll has released the rung that ended and every live rung has its boost gauge, so nobody can spend the epoch’s one vote before the new rung is there. Mezo’s BoostVoter then multiplies each rung’s voting weight, up to five times:

boosti=min⁡(5, 1+4⋅Wwi⋅viV)\text{boost}_i = \min\left(5,\ 1 + 4 \cdot \frac{W}{w_i} \cdot \frac{v_i}{V}\right)

WW is all veBTC weight, wiw_i the rung’s, VV all veMEZO weight and viv_i what the lock votes for the rung. Giving each rung veMEZO in proportion to wiw_i gives every rung the same boost.

A rung with more weight takes a larger share of the gauge’s fees. fveMEZO holders are paid for that with boostBps of the ladder’s income, 15% at launch, but never more than the share of the ladder’s weight their boost really adds:

cut=min⁡(boostBps, 1−∑iwi∑iwi⋅boosti)\text{cut} = \min\left(\text{boostBps},\ 1 - \frac{\sum_i w_i}{\sum_i w_i \cdot \text{boost}_i}\right)

So a deposit of dust MEZO that boosts nothing earns nothing. MEZO bribes the rungs earn go into the same lock.

Mezo can’t merge a permanent veMEZO lock, and refuses to unlock one in the same block it moves. A permanent lock you bring has to be unlocked from permanent in Mezo first.

The weekly roll

roll() is open to anyone. For each rung it claims the gauge fees, the bribes and the BTC rebate, each on its own gas budget, the way the vault’s sleeve does. A rung that ended is reset and withdrawn. Its BTC pays the redemption line first, and the rest locks again four weeks out.

Everything the roll collects above what the contract already owes is income:

income=balance−owed−principal held\text{income} = \text{balance} - \text{owed} - \text{principal held}
ShareGoes toAt launch
boostBpsfveMEZO holders15%, at most 30%, capped by the boost delivered
feeBpsFeasy’s treasury5%, at most 10%
The restfveBTC holders80%

Rewards stream over a week

fveBTC and fveMEZO pay their holders in BTC and MUSD just for holding. A week’s income doesn’t land at once. It streams out over the seven days after it arrives, so buying in just before a roll earns a seventh a day, not the whole week. Every transfer settles both streams first, so rewards follow the token. A stream nobody holds goes back to income and streams again at the next harvest, without a second fee. Income under a tenth of what a stream still owes joins it without moving its end, so tiny donations can’t stretch a payout out.

Bribes in a token the streams don’t carry, anything but BTC, MUSD and MEZO, are claimed too and anyone can send them on to the treasury with sweep, rather than letting them burn with the lock.

Redeeming

Redeeming burns fveBTC and puts the BTC in line. Every Thursday the rung that ends pays the line first, before anything locks again. Every BTC sits in a rung that ends within four weeks, so a request waits four weeks at most, and usually less. A filled request is claimed with claimRedeem, which anyone may call and which only ever pays its owner. While locking is paused, released BTC stays liquid and pays a request at once.

Roles

RoleCanCan’t
OwnerSet boostBps, feeBps and the treasury within their caps, resume depositsMove principal, rewards or locks
GuardianPause depositsResume them
AnyoneRoll, open a rung’s boost gauge, boost, harvest, sweep other bribe tokens, push out a filled request

Redemptions, claims and rolls never pause. Deposits also stop on their own when Mezo Earn’s wiring changes, the same live() check the vault’s sleeve runs. A relock Mezo refuses leaves the BTC idle and paying exits, without undoing the rest of the roll.

An independent review before launch found ten issues. Every one is fixed in the deployed code and covered by a test in Locker.t.sol, 32 tests on Mezo’s own verified Earn contracts. The Testing page explains that suite.

Live on testnet

ContractAddress
BtcLocker, fveBTC0x8576C2ea77dbae1D6897d4D5834B1ae247e9032F
MezoLocker, fveMEZO, veMEZO lock 9490xaE45e8B6f79Ed678dC3986EbA0871eF85cc8D385

Every path ran on Mezo’s own testnet contracts on Nov 12:

What happenedTransactions
Deployed, BtcLocker deploying MezoLocker0xfcd0…8b78
BTC locked, opening veBTC lock 1740 ending Dec 10 and voting for the sMUSD gauge0x968e…f060
A veBTC lock someone held, 1741, merged into lock 1740 for fveBTC0x5f7e…451c
MEZO locked into a new permanent veMEZO lock for fveMEZO0xa7a3…7f13
A veMEZO lock someone held, 950, merged into it0x0699…1903
Lock 1740’s boost gauge opened, then the veMEZO voted for it, a 1.04× boost0xed23…3e93, 0x37b3…e961
A second wallet locked BTC and asked to redeem part of it, paid when lock 1740 ends0x5f15…3e01, 0xb3dd…1eb7
A roll0xc141…7863

The 1.04× boost comes from 52.6 MEZO against testnet’s 117 million veMEZO. That boost adds 4.1% of the ladder’s weight, so fveMEZO’s cut is 4.1% for now, not the 15% cap.

The locker is an unaudited MVP on Mezo testnet. Its rewards are real testnet fees and rebates, its owner is still the deployer, and it moves under the 24-hour timelock before any mainnet use.