Documentation
How it works, in full.
Every number here is the one the contracts use. Where something is not deployed, it says so instead of describing a plan in the present tense.
0xc6b585bb22cd400a8763b0c30b4c9ebb8c2a758801 · What Lattice is
A ve(3,3) liquidity layer for the pools that come out of Pons, on Robinhood Chain.
A token that launches on Pons lands in a Uniswap v3 pool paired against WETH, at the 1% fee tier, and Pons locks that position in the same transaction. The liquidity is real and it is never coming out. It is also standing on one band of ticks, at the price it launched at, and nothing arrives after it.
Two ticks out the book is empty, and every trade past that point pays for the gap. Nobody fixes it, because the fees of the locked position do not belong to whoever shows up with more liquidity.
Lattice puts a gauge on that pool and pays the people who fill the ticks either side of it, in a token whose holders decide — every three days — which pool is worth filling.
- Chain
- Robinhood Chain · 4663
- Pool fee tier
- 1%
- Round
- 3 days
02 · The vault
One shared position, held for everybody.
Every gauged pool has one vault. You deposit either token, or both: the vault sells the side the band cannot use — through the pool itself, at the ratio the band implies — mints a single shared Uniswap v3 position around the live price, and hands you a plain ERC-20 share. There is no NFT to look after and no tick to pick.
What the range could not take comes straight back to you. The split is an estimate, because the swap moves the price, and it does not need to be exact: the mint uses the balances that actually arrived.
While the price is inside the band the position quotes, earns fees and accrues emissions. Outside it, it quotes nothing and earns nothing — which is not a rule anybody enforces, but what a concentrated position is.
- Share token
- ERC-20, transferable
- Deposit
- One side or both
- Withdraw
- Any time, rewards included
03 · The keeper
Anyone can re-centre a vault, and is paid for it.
When the price leaves the band, the vault has to be re-centred or it earns nothing. That call is permissionless: whoever makes it keeps a fixed cut of the vault for the trouble, and the people who need it done are the ones holding the shares.
Because a stranger can call it, it has to be safe to hand to a stranger who has just moved the price. Every path that moves the vault’s money reads a five-minute average from the pool’s own observations and refuses to act if spot has strayed more than about 5% from it, and the swap that reaches the band’s ratio is bounded to 1% from spot rather than running to the end of the book.
- Keeper fee
- 0.05% of the vault
- Trigger
- 30% of the half-band
- Price guard
- 5-minute average, 5% drift
04 · The lock
$LATTICE locks for three days to a year and returns a veNFT.
Weight is the amount times the fraction of the year still to run, so it decays every second. Extend it whenever you like, or freeze it permanently at full weight and unfreeze to start the year counting down again.
Locking pays nothing by itself. The veNFT is the ticket: it is what lets you vote, and voting is what pays.
- Minimum
- 3 days
- Maximum
- 1 year
- Permanent
- Full weight, no decay
05 · The round
Every three days, weight decides where the emissions go.
Point your weight at the vaults you want funded and the next round’s emissions follow the votes in proportion. Voting again in the same round replaces the ballot; the weight is re-read each time, so a decaying lock that votes late votes with less.
You take 80% of the fees of the vaults you backed, paid in those pools’ own assets, plus every incentive left on them. The other 20% goes to the treasury.
A pool with no volume pays its voters nothing, so voting a dead pool to farm an incentive costs you the fees you did not earn on a live one. That is what keeps the ballot honest without a rule policing it.
Nothing is claimable while the round is open: until it closes a vote can still be moved, and weight that could be paid twice is not weight.
- Fees to voters
- 80%
- Fees to treasury
- 20%
- Max vaults per ballot
- 20
06 · The boost
The same position earns more with a lock behind it.
Emissions are paid on a derived balance rather than on the shares themselves: 40% of your shares, plus 60% of the whole gauge scaled by your share of the weight cast that round, capped at the shares you actually hold.
With no weight behind it a stake earns 40% of the rate — 1×. Weight matched to your share of the gauge takes it to the whole 100%, which is 2.5× the unboosted rate, and no further: past that you would be paid for liquidity you did not provide.
Votes move without touching the gauge, so a stake’s boost goes stale on its own. Anyone may call poke to bring one up to date.
- Floor
- 1× — 40% of the rate
- Ceiling
- 2.5× — the whole rate
- Measured against
- Weight cast this round
07 · The trade
Your fees for the emissions, and only while you are staked.
While your share is in the gauge, the fees it earns are not yours: 80% go to that round’s voters and 20% to the treasury, and you take $LATTICE instead. An unstaked share keeps its fees and earns no emissions. Neither side subsidises the other.
The vault splits fees by how much of it is staked, so an unstaked holder’s share is compounded back into the position rather than routed anywhere.
08 · Emissions
A fixed pot, bought at launch. Nothing is minted.
Each round pays out 0.64% of whatever is left in the pot, so the stream decays and never reaches zero. $LATTICE has no mint function in either direction, so every token paid out was bought at the price everyone else paid.
There is no rebase, because there is no inflation for a locker to be compensated for.
- Per round
- 0.64% of the remainder
- Source
- A pot bought at launch
- Minting
- None, in either direction
09 · Incentives
Two ways to pay voters, and one of them is a market.
A flat pot is split pro rata among the round’s voters, and the maker is guessing what the split will be.
An offer is priced per unit of weight with a ceiling: the voter reads a rate they can compare between gauges, and the maker only pays for the weight that actually turned up. Whatever the weight did not fill is returned when the round settles.
An incentive can be any token, so the books credit what actually arrived rather than what the sender said they were sending, and every path that moves money takes a mutex.
10 · Claiming
One call for a whole round.
claimAll walks the gauges your lock voted for, both books of each — fees and incentives — and every asset either of them was paid in, and sends it to the lock’s owner.
The ballot is already on-chain, so you do not have to bring it, or the token list, or one transaction per pool.
11 · Auto-vote
An approval, not a transfer.
Most people who lock will never vote three times a week, and idle weight hands the outcome to the few who turn up. Enrol a lock and it votes with everyone else’s.
The veNFT never leaves your wallet. It votes through the approval you granted, you claim your own rewards exactly as if you had voted by hand, and revoking that approval opts you out with no transaction at all. A strategist picks the target: the worst it can do is waste your round — it cannot move your lock, take your rewards, or stop you leaving.
12 · The contracts
Written, tested, and not deployed.
The ve(3,3) core runs against an in-process EVM. The vault runs against the real runtime bytecode of the Uniswap v3 factory deployed on Robinhood Chain, trading through a pool that factory deployed — not a mock. 79 checks, green.
Nothing is deployed. The $LATTICE token exists; the protocol contracts do not, and there is no audit. Read them as a working reference implementation rather than as production code.
- Core suite
- 48 checks
- Vault suite
- 31 checks
- Audit
- None
Reading the source
The contracts and both test suites are in the repository, with a README that explains the two decisions worth arguing about: why the boost is measured against the weight cast in the round rather than every token locked, and why nothing settles while a round is open.