Documentation

Security Overview

Security audits do not eliminate risks completely. Users should read and agree to the legal disclaimer before using this website or interacting with the contract addresses shared here.

Audits

Multiple rounds of audits were conducted by both ChainSecurity and Sherlock: a technical design review by ChainSecurity, three code audits by ChainSecurity, and two audits by Sherlock's Blackthorn team. In addition, a three-week public audit contest hosted by Sherlock took place before launch.

All smart contracts are publicized on Github, and verified on block explorers. License information is available at the root of the Github repositories, as well as in the header of each smart contract file.

FirmScopeVersion auditedReport
ChainSecurityCoordination Layer (voting escrow, voters, minter, token, cross-chain messaging, migration)67dd984 to a6b463d, Jul 2 to Aug 25, 2026PDF
ChainSecurityApplication Layer (pools, fee modules, gauges, rewards, Metarouter)90c05dc to 23762e2, Jul 31 to Aug 20, 2026PDF
ChainSecuritySlipstream1733033 to 4d013ba, Jun 17 to Aug 10, 2026PDF
SherlockCore (voting escrow, voters, rewards, gauges)Aero ae1ee28, Slipstream d94d5b7; Jun 23 to Jul 14, 2026PDF
SherlockPools, Core (voting escrow, voters, rewards, gauges)Aero f91e162, Slipstream 00fc7d9; Jul 20 to Aug 17, 2026PDF
SherlockPublic audit contest (pre-launch)Aero b032bb7, Slipstream f9c5767; August to September 2026PDF

Bug Bounty

Aero runs an ongoing bug bounty program in collaboration with Sherlock, offering up to $500,000 in bounties for smart contract reports. The program covers the deployed contracts listed on this page, and only the versions that are live in production onchain; scope, severity classifications, and payout tiers are defined on the Sherlock program page. Bug reports should be submitted exclusively through Sherlock.

Contract addresses

Aero core

ContractChainsAddress
AERO token (Token)Base0x3f5bF3EdAc59d650D8fDf9657a71F2f904A3a4Ee
VotingEscrowBase0xBF7977E1521e9a3032bf7243Ee4712f311f13915
VeArtProxyBase0xa3681Bf451eb7E7B2a36FDC83c3E045Fd96324d5
VoterBase0x49d7d4f17Ec56Ef8fA04E464AF5D1A4942CC31e6
LeafVoterAll chains0x382409fad8503FbCdbB27A4211551fa03e884078
VoterPaymentsModuleBase0xBe8e5149Dc0fE28d124dE4222b7Fb332De99AA79
MinterBase0x59268A34ba897e82368feE39839FFC661D4f9C97
RootEmissionsHandlerBase0x8C37F30F3c8fd48bEddb14086fa5148291D422C3
LeafEmissionsHandlerLeaf chainsPer chain
SplitterBase0x9Beb95ccED809C0667bbb6577EE4066aC5cC1156
FactoryRegistryEach chainPer chain
StablePoolFactoryAll chains0x78589E876edcEbdce72ee3436ab3c9AD3a7cEF2D
VolatilePoolFactoryAll chains0x8E6a9FCd1d638CC760Ffba397605Fe3355dE76D2
StablePool implementationAll chains0xf525988f88B7D8b64631D86070FEC5BFDc50C174
VolatilePool implementationAll chains0x0526cF035C1156b5C598b0d3c2445e38af2e8bDE
PoolTapeAll chains0x34bdD64B19D8631F936c2D07F19AAa6B83515992
GaugeFactory (stable and volatile pools)Each chainPer chain
GaugeManagerAll chains0xbF234b32c5e58868243A4a14831626f3EdE7b183
GovernanceCreationModuleEach chainPer chain
V2Gauge implementation (stable and volatile pools)Each chainPer chain
CustomFeeModule (stable pools)All chains0x0195fC76Da986D66B2A468133a1be41E90893Da6
CustomFeeModule (volatile pools)All chains0x7949DE8d67E4F6b8509Bdbb43FF0503aF1247a7A
DiscountRegistryAll chains0xaA48AAef655FB7CD7Acc04717f66022a4771a345
TokenRegistryAll chains0x564665E023390097f46EA9662a6061a5d700A7E1
MetarouterAll chains0x0fEf9e88A7b76BCDBF451780C6774FE32965Ee98

Relay

ContractChainsAddress
RelayFactoryBase0xA972232e6C1860586E1d66aC690d30Dab843049d
RelayFactoryRegistryBase0x0dfBE7b949EAE4b826E33146F1df4C0c60c78f99
MaxiRelay implementationBase0x3dE62Ff7EAA843ACD85ba4Ee28a4981e890b1F4d
ProtocolRelay implementationBase0xB3F3B37fBBfF05D1Df12C4022705e9E8552adE9f
RelayToken implementationBase0xf0CccB93230D012226Ef21919143F201399dead1
RelayTokenVotes implementationBase0x1eF71Af6A8874a69CF98a7Db56C40D829e06407B
RelayVoteAdapterBase0xa3198c58eda8Ea74132A5e3c6E5E10C8FBa3e438
RelayTapeBase0x2d2B0Bed14477a15cE77181cA84f518e75628cb2
RelayLeafModuleDeployerLeaf chainsPer chain

Cross-chain messaging

ContractChainsAddress
RootMessageOrchestratorBase0x4F347Fec2aEb8fdB569045AF4D0806eE7f7F6194
LeafMessageOrchestratorAll chains0x7EA1079604af6dA2282B80f4cDc6Cea7b07914fe
HyperlaneAdapter (root side, one per leaf chain)BaseSee the table below
HyperlaneAdapter (leaf side)Leaf chainsPer chain
RootLocalAdapterBase0x8Daa7F020cfbA83D504763089334A572Bdd1eE90

Root-side adapters on Base

Aero Slipstream

ContractChainsAddress
CLFactoryEach chainPer chain
CLPool implementationAll chains0x1642634C8CB1C9f1B84c9a1a08534F8c3F4E89f8
CLGaugeFactoryAll chains0xf437f62053ACB121665b8fDBfeA8F214FB8E589d
CLGauge implementationAll chains0x89E91A960154b1ed6c093039a8F0725ab67D14E0
NonfungiblePositionManagerAll chains0x4857DB576eE0e45F10525eC59527BfD10beeC60b
NonfungibleTokenPositionDescriptorAll chains0xf17CD3e4fe528a8280e73acdcb03Cc56024123E7
SwapRouterAll chains0x9Ee35Bf1bd69a03c6F0393582030fCe8Bb93D418
MetaquoterAll chains0x1dDfeC5058180C207F55BB77D95AcDd0d8227868
DynamicSwapFeeHookAll chains0xC0ed888AfE87ed1AcF01D9f19bB850159e3ce434
CustomUnstakedFeeModuleAll chains0xcc421483cd131a8FD6b68c37E46f244dbec4F797
CLPoolTapeAll chains0x27D5EB73e7406675F6B0CbD037490ec3dba935a4
LpMigratorAll chains0x293Ba185d875B5c562B552082cfef630dab57baD

Migration

ContractChainAddress
AerodromeMigrationBase0x22a2F7340a3fB4C7C389D91eE954766B12476721
VelodromeMigrationOptimism0x6daE95FE833f190640dB1176F8C8a2e50C6a66c0
VelodromeMigrationEntrypointBase0x6daE95FE833f190640dB1176F8C8a2e50C6a66c0

Chain-specific addresses

Base

Optimism

Arbitrum

Ethereum, Ink and Robinhood

ContractAddress
FactoryRegistry0xdd1705e23762F4D6e44D8C31BD8Ea80c54612239 (Ethereum, Ink, Robinhood)
LeafEmissionsHandler0xfc6ad3A6512d5D4906525E55c618da8dfFd837E8 (Ethereum, Ink, Robinhood)
HyperlaneAdapter (leaf side)0x4AaFf8CFB43e2cefBbBF4c133c934DB6BA7E4C14 (Ethereum, Ink, Robinhood)
GaugeFactory (stable pools)0xCCe24256a8a6070A9E308f23E044C87C343F98Cd (Ethereum)
GaugeFactory (stable pools)0xd9eF1acdca62010e93370f5932E3deD127E65396 (Ink)
GaugeFactory (stable pools)0x1733cD126a227066963E9B636Ad49898d1224741 (Robinhood)
GaugeFactory (volatile pools)0x7F83235643181E440433400a027618Cd50879751 (Ethereum)
GaugeFactory (volatile pools)0x1733cD126a227066963E9B636Ad49898d1224741 (Ink)
GaugeFactory (volatile pools)0xCCe24256a8a6070A9E308f23E044C87C343F98Cd (Robinhood)
V2Gauge implementation (stable pools)0xC3b16c3F4ACE88FBFa2f5243f2b820b8C48AF215 (Ethereum)
V2Gauge implementation (stable pools)0xeB09a6FeFe757D3da3D4a3F4C0C7410D115255B6 (Ink)
V2Gauge implementation (stable pools)0x2Ef99BB2EA373ab11832cc5644FB1d24683A1B13 (Robinhood)
V2Gauge implementation (volatile pools)0x0FD6cc0e3D1a15f39a197E075b92a3E589EE3FCc (Ethereum)
V2Gauge implementation (volatile pools)0x2Ef99BB2EA373ab11832cc5644FB1d24683A1B13 (Ink)
V2Gauge implementation (volatile pools)0xC3b16c3F4ACE88FBFa2f5243f2b820b8C48AF215 (Robinhood)
GovernanceCreationModule0xE14c7d02e02A177bF4693Dbb481a2Fd1E070efD4 (Ethereum)
GovernanceCreationModule0x2419270B247f1837f92e511d10b6A87A7b49637E (Ink)
GovernanceCreationModule0x2f1ea2c2dEf80FCa460c0dcF205C281a8116834b (Robinhood)
CLFactory0xF4Fd2E6c5B60c5b365cd1B96DD6245E6D60414c2 (Ethereum)
CLFactory0x7660BF2aDefC687C22906112ca323d60A00358cF (Ink)
CLFactory0xc63d7338c178e805c544B8f897066bD3BBcBE136 (Robinhood)
xAERO (ReceiptToken)0x9e148C5716b5aAdCFD3B71cEAE9EE7a9e22C29E2 (Ethereum, Ink, Robinhood)
RelayLeafModuleDeployer0xBDcB4929b19EBcfEE5eFE100B829c9B35C16d8F8 (Ethereum, Ink, Robinhood)

Arc

Emergency Council

The Emergency Council multisig can be called upon by passing a governance proposal or in emergency situations, and can do the following:

  • set a new emergencyCouncil
  • deactivate and activate the gauges (set caps to zero or non-zero)
  • pause the migration contracts

Additional privileged functions are gated in the following way:

Access-control roles (Aero core)

RoleControls
GOVERNANCE_ROLETop-level governance authority
CONFIG_ADMIN_ROLEAdministers the configuration roles below
VOTER_CONFIG_ROLEVoter parameters: allocation cooldowns, max gauges, local voting
CHAIN_CONFIG_ROLELeaf-chain registration and configuration
CHAIN_STATUS_ROLEChain status (activating or halting a chain)
ADAPTER_CONFIG_ROLECross-chain messaging adapter configuration
SPLITTER_CONFIG_ROLESplitter recipient list (team-share emissions)
TOKEN_WHITELIST_ROLEPer-veNFT allowances (e.g. voting for zero-cap gauges)
EMERGENCY_COUNCIL_ROLEEmergency interventions
FACTORY_REGISTRY_ADMIN_ROLEFactory registry administration
MODULE_ADMIN_ROLEModule registration (gauge creation, payments)
RELAY_DEPLOYER_ROLERelay creation on the RelayFactory
GAS_CONFIGURER_ROLECross-chain gas settings
NATIVE_WITHDRAWER_ROLEWithdrawal of native token held for message gas
SEIZER_ROLESeizing token metadata NFTs on the TokenNFT

Manager addresses (Slipstream)

RoleControlsHolder
OwnerCLFactory administration: new fee tiers (tick spacings), ownership transferProtocol governance multisig
Swap Fee ManagerDefault and per-pool swap hooks, which set the swap feeProtocol governance multisig
Unstaked Fee ManagerUnstaked fee module and default unstaked feeProtocol governance multisig
Discount Registry ManagerDiscount registry wiringProtocol governance multisig
Pool Tape ManagerPool tape configurationProtocol governance multisig
Cap admin (CAP_ADMIN_ROLE)Gauge emission caps, including deactivation (cap zero) and reactivationProtocol governance multisig
Cap operator (CAP_OPERATOR_ROLE)Cap changes within the operator range, only on gauges with a non-zero capOperator multisig