.claude/skills/aerodrome-architecture/SKILL.md
This skill should be used when the user asks about "Aerodrome", "ve(3,3)", "Solidly", "Velodrome", "protocol overview", or needs to understand Aerodrome's architecture and tokenomics.
npx skillsauth add cyotee/crane Aerodrome ArchitectureInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Aerodrome is a ve(3,3) AMM on Base, inspired by Solidly. It combines vote-escrowed tokenomics with an automated market maker to align incentives between liquidity providers, voters, and token holders.
┌──────────────────────────────────────────────────────────────┐
│ AERODROME PROTOCOL │
├──────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ AERO │ │ VotingEscrow│ │ Voter │ │
│ │ Token │───►│ (veAERO) │───►│ │ │
│ └─────────────┘ └─────────────┘ └──────┬──────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Minter │ │ Rewards │ │ Gauges │ │
│ │ (Emissions) │ │ Distributor │ │ │ │
│ └─────────────┘ └─────────────┘ └──────┬──────┘ │
│ │ │
│ ┌───────────────────┤ │
│ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Pools │ │ Rewards │ │
│ │(sAMM/vAMM) │ │(Fees/Bribes)│ │
│ └─────────────┘ └─────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
| Contract | Description |
|----------|-------------|
| Aero.sol | ERC20 token - the native protocol token |
| VotingEscrow.sol | Vote-escrowed NFT (veAERO) for locking AERO |
| Voter.sol | Manages votes, gauge creation, emission distribution |
| Pool.sol | AMM pools (stable and volatile) |
| Router.sol | Swap and liquidity operations |
| Gauge.sol | Distributes emissions to LP stakers |
| Minter.sol | Controls emission schedule and rebases |
| RewardsDistributor.sol | Distributes rebases to veNFT holders |
┌──────────────────────────────────────────────────────────────┐
│ ve(3,3) FLYWHEEL │
├──────────────────────────────────────────────────────────────┤
│ │
│ 1. Lock AERO ──► Receive veAERO NFT │
│ │ │
│ ▼ │
│ 2. Vote for Pools ──► Earn fees + bribes from those pools │
│ │ │
│ ▼ │
│ 3. Pools with votes ──► Receive emissions to their gauges │
│ │ │
│ ▼ │
│ 4. LPs stake in gauges ──► Earn AERO emissions │
│ │ │
│ ▼ │
│ 5. More LP activity ──► More fees for voters │
│ │ │
│ └──────────► Back to step 1 (positive feedback loop) │
│ │
└──────────────────────────────────────────────────────────────┘
Aerodrome operates on weekly epochs:
library ProtocolTimeLibrary {
uint256 internal constant WEEK = 7 days;
function epochStart(uint256 timestamp) internal pure returns (uint256) {
return (timestamp / WEEK) * WEEK;
}
function epochNext(uint256 timestamp) internal pure returns (uint256) {
return epochStart(timestamp) + WEEK;
}
}
Standard ERC20 token minted by the Minter contract:
contract Aero is IAero {
// Only Minter can mint new tokens
function mint(address account, uint256 amount) external {
if (msg.sender != minter) revert NotMinter();
_mint(account, amount);
}
}
┌──────────────────────────────────────────────────────────────┐
│ veNFT STATES │
├──────────────────────────────────────────────────────────────┤
│ │
│ NORMAL ────────────► Regular veNFT with decaying power │
│ │ Can: vote, merge, split, withdraw │
│ │ │
│ ▼ │
│ NORMAL_PERMANENT ──► Permanently locked, no decay │
│ │ Can: vote, delegate, split │
│ │ │
│ ▼ │
│ MANAGED ──────────► Special NFT for aggregated voting │
│ │ Created by governance, always permanent │
│ │ │
│ ▼ │
│ LOCKED ───────────► Normal NFT deposited into Managed │
│ Restricted functionality, earning │
│ rewards through the managed NFT │
│ │
└──────────────────────────────────────────────────────────────┘
| Type | Formula | Use Case |
|------|---------|----------|
| Volatile (vAMM) | x * y = k | Uncorrelated assets (ETH/USDC) |
| Stable (sAMM) | x³y + y³x = k | Correlated assets (USDC/DAI) |
function _k(uint256 x, uint256 y) internal view returns (uint256) {
if (stable) {
// Stable pool curve: x³y + y³x
uint256 _x = (x * 1e18) / decimals0;
uint256 _y = (y * 1e18) / decimals1;
uint256 _a = (_x * _y) / 1e18;
uint256 _b = ((_x * _x) / 1e18 + (_y * _y) / 1e18);
return (_a * _b) / 1e18;
} else {
// Volatile pool: x * y
return x * y;
}
}
┌──────────────────────────────────────────────────────────────┐
│ EMISSION SCHEDULE │
├──────────────────────────────────────────────────────────────┤
│ │
│ Phase 1 (First 14 epochs): │
│ • Weekly growth: 3% per epoch │
│ • Starting: 10M AERO/week │
│ │
│ Phase 2 (Epoch 15+): │
│ • Weekly decay: 1% per epoch │
│ • Continues until tail emissions │
│ │
│ Tail Emissions (when weekly < 8.97M): │
│ • Switch to % of total supply │
│ • Rate adjustable via EpochGovernor (0.01% - 1%) │
│ • Default: 0.67% of supply │
│ │
└──────────────────────────────────────────────────────────────┘
| Role | Permissions | |------|-------------| | Team | Set team rate, manage managed NFTs | | Governor | Whitelist tokens, set max voting num | | EpochGovernor | Nudge tail emission rate | | EmergencyCouncil | Kill/revive gauges, modify pool names |
| Feature | Uniswap V2 | Aerodrome | |---------|------------|-----------| | Fees | Go to LPs | Go to voters (via gauges) | | Incentives | None | AERO emissions to LPs | | Governance | External | veAERO voting | | Pool Types | Volatile only | Stable + Volatile | | Bribes | None | External rewards for voters |
| Contract | Address |
|----------|---------|
| AERO | 0x940181a94A35A4569E4529A3CDfB74e38FD98631 |
| VotingEscrow | 0xeBf418Fe2512e7E6bd9b87a8F0f294aCDC67e6B4 |
| Voter | 0x16613524e02ad97eDfeF371bC883F2F5d6C480A5 |
| Router | 0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43 |
| PoolFactory | 0x420DD381b31aEf6683db6B902084cB0FFECe40Da |
| Minter | 0xeB018363F0a9Af8f91F06FEe6613a751b2A33FE5 |
| RewardsDistributor | 0x227f65131A261548b057215bB1D5Ab2997964C7d |
contracts/Aero.sol - Protocol tokencontracts/VotingEscrow.sol - Vote escrow NFTcontracts/Voter.sol - Voting and gauge managementcontracts/Pool.sol - AMM implementationcontracts/Router.sol - Swap and liquidity routercontracts/Minter.sol - Emission controllerSPECIFICATION.md - Full protocol specificationdevelopment
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
documentation
Write to contracts and send transactions. Use when executing state-changing contract functions.
development
HTTP and WebSocket transports for blockchain connectivity. Use when configuring network connections.
data-ai
Read contract data with type-safe ABI. Use when querying smart contract view/pure functions.