Flight Plan is an unofficial, open-source helper for sAERO voters on Aero. It reads the chain, suggests a split sized to your locks, shows how you rank, rehearses every signature for free, and (when you connect the wallet that owns the locks) signs one vote per lock and one sweep of your rewards into USDC. Nothing you enter reaches a server: the page is static files plus public chain reads.
allocate call to the Aero Voter with 0 ETH. Or copy the split and vote in the Aero app.Deep fee · big pools paid mainly by trading fees
Stream · paid mainly by incentives, which end on a date
Stock · tokenized-stock pools (quiet on weekends)
Thin token · smaller-token pools paid mainly by fees
Each sAERO lock votes for pools. After a vote the lock waits 47 hours; then its window opens and it can move again. A vote keeps earning until you change it, so there's no rush the moment a window opens.
Locks earn two things from the pools they vote for: fees (a share of trading fees) and streams (incentives paid to voters for a set time). Both are split among everyone voting for that pool, so a well-paid but crowded pool can pay less per AERO than a quiet one.
A scanner reads every Aero pool on Base every hour and estimates what each pays voters over a 47-hour window:
Then it spreads 100% in 5% steps, each step going where it adds the most expected dollars, under these rules: 6 to 10 pools · at most 25% in one pool · at most 40% in one pool type · at least a third in fee-led pools · your slice at most 10% of any pool · small pools (under 250k votes) at most 10% each · no tokenized stocks when 30% or more of the window is a weekend · any pool whose votes doubled since the last scan is skipped.
"Expected" is the middle case; the low case assumes a heavier pile-on. APR = the window's expected dollars on your AERO, annualized. The split is valued for a window starting at the later of now and your first lock's open.
Auto uses the rules above (6 to 10 pools). Pick 1 to 10 for exactly that many: each pool may then take up to 100 ÷ N percent (rounded up to 5%), and with 3 or fewer the per-type cap is dropped. The 10%-of-a-pool cap always stays, so a big wallet asking for one pool gets a "pick more pools" note instead of a bad bet. Fewer pools can pay more, and can also be hit harder if the crowd follows you in.
The split comes from four dials the model already measures. Three presets set them for you; drag any slider and the preset becomes Custom, the split recalculates at once, and your dials are remembered on this device. Under each slider the page says in words what the setting does and, when it differs, what Balanced would do.
| Steady | Balanced | Aggressive | |
|---|---|---|---|
| Pools | Auto (6 to 10) | Auto (6 to 10) | 1 per lock |
| Fee memory | longer (about 20% last 12h) | the fitted mix (40% last 12h) | last 12h only, spikes trusted |
| Crowd caution | 1.4x | 1.0x (as measured) | 0.5x |
| Streams | in full | in full | fees only |
Balanced is the scanner's own model, the same split its auto plan uses. Aggressive is the fee-chaser's method: one pool per lock, the pool with the biggest fee rate over the last 12 hours, incentives ignored. With several locks each lock takes the next best pool, biggest lock first, so a wallet isn't all in one bet. Its expected number is usually higher and so are the swings: a pool whose fees spiked today can fade tomorrow, and the model's own low case shows that.
The caps that protect you never move with the dial: your slice stays at most 10% of any pool, small pools stay capped, a pool whose votes doubled since the last scan stays out, and the dry run and the signing guard are the same for every preset.
The split is sized to your locks. Your own AERO dilutes the pool and the caps scale with your size.
Example: a small pool has 200,000 AERO voting for it and will pay voters $100 this window.
Earnings are read on chain for every lock (fees and incentives, claims bridged, every network) and valued at current prices. Rank data refreshes about every 3 hours.
approve to the Metarouter for each token that needs one, then one Metarouter execute that sells them all, with the USDC paid to your own wallet. A wallet that supports batching signs it once; otherwise one signature per call.Every sAERO vote since launch is read from the chain. The chart shows sAERO moved per 2 hours over the last 72 hours, sAERO coming off its 47-hour cooldown over the next 72 hours, and how much of it is likely to move (from how quickly locks have historically moved after their window opened). The shaded band is when the Aero team's incentive batch usually lands; your own lock windows are pinned with a dashed line.
The edge: a vote keeps earning past its window until you change it, so waiting for a big wave to move (its dilution is then known) and for the team's batch to land is free.
Flight Plan collects nothing from the people who use it: there is no server. It doesn't need to. Every sAERO vote and every lock's earnings are on the chain, and the scanner reads all of them every 3 hours. So instead of learning from a few users, the page learns from every lock.
Counts and averages only are published: nothing per lock or per wallet leaves the scanner.
Connecting shares only your address. With the owning wallet connected, Flight Plan can ask for exactly three kinds of signature:
allocate call to the Aero Voter for a lock your wallet owns, 0 ETH. The guard checks, before every send: the To address is the Voter; the call is allocate; the lock id is the one shown and your account owns it; the refund address is you; every dispatch is Base-only with zero value and zero gas limit; the gauges are exactly the plan's; the amounts add up to the whole stake. It is rebuilt from the plan and checked again against a fresh chain read (owner, window, booked amount) right before your wallet opens.approve on a reward token the scan found in your wallet, spender = Aero's Metarouter, amount = exactly your balance. Never unlimited.execute that sells those tokens for USDC with the minimum you set, paid to your own address.setApprovalForAll on anything. Your locks cannot be moved by this page: allocate moves votes, not tokens, and there is no code path that approves the escrow.personal_sign / typed data), or any value other than 0 ETH.Worst case, if you ignore every check: a swap that fills at your slippage limit, or a poor pool pick for one 47-hour window. No lock can be lost.
A Keystone, Ledger or similar device shows allocate and execute as raw data: it cannot decode them, so the device screen alone can't tell you what the call does. What you can check on the device: the network (Base), the To address (compare its start and end with the addresses below), the method selector (0xf02e634e for allocate), and 0 ETH. What tells you the content is right: the dry run on this page (the chain's own answer), the "What you will sign" list under each dry run, and your software wallet's simulation (Rabby shows the lock re-allocated and no token moves). Approvals decode normally: check the spender is the Metarouter and the amount is your balance.
Tap to copy. Check them once against Aero's published deployment files.
0x49d7d4f17ec56ef8fa04e464af5d1a4942cc31e60x0fef9e88a7b76bcdbf451780c6774fe32965ee980xbf7977e1521e9a3032bf7243ee4712f311f139150x382409fad8503fbcdbb27a4211551fa03e8840780xcA11bde05977b3631167028862bE2a173976CA11Aero runs on several networks (OP, Arbitrum, Ethereum, Ink, Robinhood, Arc) and a lock can vote on any of them. Flight Plan plans, rehearses and signs Base votes only. If a lock's votes sit on another network, its card says so and the dry run and Allocate are skipped; you can still use the suggested percentages for it in the Aero app.
| Message | Meaning | Do |
|---|---|---|
| cooldown still running | the 47 hours haven't passed for that lock | wait for its ring to read OPEN |
| votes on another network | the lock votes on OP, Arbitrum or another network | use the Aero app for that lock |
| pick more pools | your wallet is too big for that few pools | pick a higher number or Auto |
| safety check / guard tripped | the call failed the checks a real vote must pass | reload and dry-run again; if it repeats, open an issue on the source |
| the plan changed since the dry run | new pool data or a new pool count arrived after the rehearsal | dry-run again, then sign |
| not the connected wallet | the lock belongs to another address | connect the wallet that owns it |
| window opens …; not yet | the live re-check found the cooldown still running | wait for the open |
| sweep: dry run failed at the swap | one token's route cannot fill at your minimum | untick it or raise slippage, dry-run again |
| reverted on chain | the transaction was mined but failed; only gas was spent | dry-run again before retrying |
A dry run never sends anything, failed or not. A failed send spends only the network fee.
Pool estimates are published every hour; ranks, history and earnings every 3 hours; the crowd chart every hour. How many votes each pool has is read live when you open the page. The footer shows how old the pool data is, and the page warns when it's more than 3 hours old.
Open source under the MIT license. The planning math runs in your browser (planner.js); the vote call is built and checked by allocate-lib.js; sweep routes come from sweep-routes.js and are re-quoted live. Prices from DefiLlama. Not financial advice: estimates can be wrong, and pools can change fast.
Flight Plan is free and open source. If it earns you something, tips are welcome at this address (tap to copy):
0xbe46e9dD6f22b5578529385F2e0Ee25840110196Send it from your own wallet. Flight Plan never asks you to sign or send a tip: a tip request on this page would be a fourth kind of signature, and there are only three.
Unofficial. Not affiliated with Aerodrome. ← Back to the app