Flight Plan Docs ← Back to the app

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.

How to use it

  1. Paste a wallet address to look (read-only), or connect the wallet that owns your locks to sign. Flight Plan finds the sAERO locks on chain.
  2. Read your split. The big number is what this window is expected to pay. Tap any pool for the detail behind it.
  3. Dry run. A free rehearsal on the chain from your address: it shows exactly what your votes would become. Nothing is signed or sent.
  4. Allocate (connected, window open, dry run passed): one signature per lock, an allocate call to the Aero Voter with 0 ETH. Or copy the split and vote in the Aero app.
  5. Sweep (optional): after you claim rewards in the Aero app, sell them for USDC in one swap.

Colors

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

How a window works

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.

How the split is made

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.

Picking how many pools

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 strategy dial

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.

The presets

SteadyBalancedAggressive
PoolsAuto (6 to 10)Auto (6 to 10)1 per lock
Fee memorylonger (about 20% last 12h)the fitted mix (40% last 12h)last 12h only, spikes trusted
Crowd caution1.4x1.0x (as measured)0.5x
Streamsin fullin fullfees 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 dials

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.

Why your split differs from someone else's

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.

A 1,000 AERO lockputs 5% here (50 AERO): 50 ÷ 200,050 of $100, about $0.025. Per AERO that's the pool's full rate, so small wallets happily use small, well-paid pools.
A 2,000,000 AERO walletcan put at most 10% of the pool here (20,000 AERO), 1% of the wallet: 20,000 ÷ 220,000 of $100, about $9.09. The rest has to go somewhere deeper.

Rank: your locks vs everyone

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.

By week, by day: you vs the average over time

Earnings

The sweep: rewards to USDC

  1. Claim your rewards in the Aero app first (Flight Plan never claims).
  2. Scan. The page lists every token in the wallet with a route to USDC through Aero's new pools (the block explorer's token list, the Aero token universe, and any extra addresses you add), quotes each route live through Aero's Metaquoter, and picks the best.
  3. Dust and slippage. Tokens under the dust floor are skipped by default (you can tick them back); the minimum received is the quote minus your slippage setting. Tokens under $0.25 are marked "may revert" so one failing dust swap can't block the rest.
  4. Dry run simulates the approvals and the swap from your address and shows the USDC you would get. Nothing is sent.
  5. Sign. An exact-amount 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.
  6. A red warning on the swap is expected. Wallets like Rabby preview a swap as one token in and one token out. The sweep sells several tokens in one swap, so the preview compares a single token with the whole USDC total and can flag a big "loss" or "slippage" in red. Check the balance change at the bottom of the wallet screen instead: every token you ticked goes out, and the USDC coming in should match the dry run. If the balance change doesn't match, reject it.
  7. The guard. Every call is checked against an allowlist before it reaches your wallet: only approve(Metarouter, exactly the balance) on a token the scan found, or execute() on the Metarouter.

When the crowd moves

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.

What actually wins

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.

What it signs, and never signs

Connecting shares only your address. With the owning wallet connected, Flight Plan can ask for exactly three kinds of signature:

  1. A vote. One 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.
  2. A sweep approval. approve on a reward token the scan found in your wallet, spender = Aero's Metarouter, amount = exactly your balance. Never unlimited.
  3. A sweep swap. One Metarouter execute that sells those tokens for USDC with the minimum you set, paid to your own address.

Never

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.

Check the address bar says flight-plan.app. A copy on another address can be anything. If any page claiming to be Flight Plan asks for a signature that doesn't match the three above, close it.

Never sign blind

  1. Dry run first, every time, so you know exactly what your votes (or the swap) should become.
  2. Network is Base, the To address is the Voter (a vote) or the Metarouter (a sweep) or a reward token (an approval), and the value is 0 ETH. The addresses are below; compare the start and the end.
  3. Your wallet's preview should show your sAERO lock re-allocated and no tokens moving (a vote), or minus the reward tokens and plus USDC (a sweep).
Reject anything that says "setApprovalForAll", "approve" on sAERO, "transfer", an amount larger than the row, or a value other than 0.

Hardware wallets

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.

Contract addresses (Base)

Tap to copy. Check them once against Aero's published deployment files.

Voter · where every vote goes0x49d7d4f17ec56ef8fa04e464af5d1a4942cc31e6
Metarouter · Aero's swap router (the sweep sells rewards through it)0x0fef9e88a7b76bcdbf451780c6774fe32965ee98
sAERO (your locks; never approve it)0xbf7977e1521e9a3032bf7243ee4712f311f13915
LeafVoter (Base)0x382409fad8503fbcdbb27a4211551fa03e884078
Multicall3 (batched reads)0xcA11bde05977b3631167028862bE2a173976CA11

Source: dromos-labs/metadex-public, deployment-addresses.

Locks voting on other networks

Aero 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.

When something fails

MessageMeaningDo
cooldown still runningthe 47 hours haven't passed for that lockwait for its ring to read OPEN
votes on another networkthe lock votes on OP, Arbitrum or another networkuse the Aero app for that lock
pick more poolsyour wallet is too big for that few poolspick a higher number or Auto
safety check / guard trippedthe call failed the checks a real vote must passreload and dry-run again; if it repeats, open an issue on the source
the plan changed since the dry runnew pool data or a new pool count arrived after the rehearsaldry-run again, then sign
not the connected walletthe lock belongs to another addressconnect the wallet that owns it
window opens …; not yetthe live re-check found the cooldown still runningwait for the open
sweep: dry run failed at the swapone token's route cannot fill at your minimumuntick it or raise slippage, dry-run again
reverted on chainthe transaction was mined but failed; only gas was spentdry-run again before retrying

A dry run never sends anything, failed or not. A failed send spends only the network fee.

Data and freshness

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.

Tips

Flight Plan is free and open source. If it earns you something, tips are welcome at this address (tap to copy):

Tip address · a plain wallet, any EVM network (Base preferred)0xbe46e9dD6f22b5578529385F2e0Ee25840110196

Send 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

copied