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.
| Firm | Scope | Version audited | Report |
|---|---|---|---|
| ChainSecurity | Coordination Layer (voting escrow, voters, minter, token, cross-chain messaging, migration) | 67dd984 to a6b463d, Jul 2 to Aug 25, 2026 | |
| ChainSecurity | Application Layer (pools, fee modules, gauges, rewards, Metarouter) | 90c05dc to 23762e2, Jul 31 to Aug 20, 2026 | |
| ChainSecurity | Slipstream | 1733033 to 4d013ba, Jun 17 to Aug 10, 2026 | |
| Sherlock | Core (voting escrow, voters, rewards, gauges) | Aero ae1ee28, Slipstream d94d5b7; Jun 23 to Jul 14, 2026 | |
| Sherlock | Pools, Core (voting escrow, voters, rewards, gauges) | Aero f91e162, Slipstream 00fc7d9; Jul 20 to Aug 17, 2026 | |
| Sherlock | Public audit contest (pre-launch) | Aero b032bb7, Slipstream f9c5767; August to September 2026 |
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
Relay
| Contract | Chains | Address |
|---|---|---|
| RelayFactory | Base | 0xA972232e6C1860586E1d66aC690d30Dab843049d |
| RelayFactoryRegistry | Base | 0x0dfBE7b949EAE4b826E33146F1df4C0c60c78f99 |
| MaxiRelay implementation | Base | 0x3dE62Ff7EAA843ACD85ba4Ee28a4981e890b1F4d |
| ProtocolRelay implementation | Base | 0xB3F3B37fBBfF05D1Df12C4022705e9E8552adE9f |
| RelayToken implementation | Base | 0xf0CccB93230D012226Ef21919143F201399dead1 |
| RelayTokenVotes implementation | Base | 0x1eF71Af6A8874a69CF98a7Db56C40D829e06407B |
| RelayVoteAdapter | Base | 0xa3198c58eda8Ea74132A5e3c6E5E10C8FBa3e438 |
| RelayTape | Base | 0x2d2B0Bed14477a15cE77181cA84f518e75628cb2 |
| RelayLeafModuleDeployer | Leaf chains | Per chain |
Cross-chain messaging
| Contract | Chains | Address |
|---|---|---|
| RootMessageOrchestrator | Base | 0x4F347Fec2aEb8fdB569045AF4D0806eE7f7F6194 |
| LeafMessageOrchestrator | All chains | 0x7EA1079604af6dA2282B80f4cDc6Cea7b07914fe |
| HyperlaneAdapter (root side, one per leaf chain) | Base | See the table below |
| HyperlaneAdapter (leaf side) | Leaf chains | Per chain |
| RootLocalAdapter | Base | 0x8Daa7F020cfbA83D504763089334A572Bdd1eE90 |
Root-side adapters on Base
| Leaf chain | HyperlaneAdapter on Base |
|---|---|
| Optimism | 0xE82457ff1049F1f63E51d634d2C96993b841B1Cb |
| Ethereum | 0x0C54028e2aEFDF6E740513655dCe88Ae63Df96c9 |
| Arbitrum | 0xa365AdDAa935FD97C0815D41a6375dbB483D5C67 |
| Ink | 0x5aD9a3920a25CAA5ABD36CD35F1C57B48793FD03 |
| Robinhood | 0xD9DC65A40e70517dA5F4F5cB1F9E5D4b59AA2910 |
| Arc | 0x247c86a3bBd88059aeF2E9D3AF0e90D2F3F5C8bf |
Aero Slipstream
| Contract | Chains | Address |
|---|---|---|
| CLFactory | Each chain | Per chain |
| CLPool implementation | All chains | 0x1642634C8CB1C9f1B84c9a1a08534F8c3F4E89f8 |
| CLGaugeFactory | All chains | 0xf437f62053ACB121665b8fDBfeA8F214FB8E589d |
| CLGauge implementation | All chains | 0x89E91A960154b1ed6c093039a8F0725ab67D14E0 |
| NonfungiblePositionManager | All chains | 0x4857DB576eE0e45F10525eC59527BfD10beeC60b |
| NonfungibleTokenPositionDescriptor | All chains | 0xf17CD3e4fe528a8280e73acdcb03Cc56024123E7 |
| SwapRouter | All chains | 0x9Ee35Bf1bd69a03c6F0393582030fCe8Bb93D418 |
| Metaquoter | All chains | 0x1dDfeC5058180C207F55BB77D95AcDd0d8227868 |
| DynamicSwapFeeHook | All chains | 0xC0ed888AfE87ed1AcF01D9f19bB850159e3ce434 |
| CustomUnstakedFeeModule | All chains | 0xcc421483cd131a8FD6b68c37E46f244dbec4F797 |
| CLPoolTape | All chains | 0x27D5EB73e7406675F6B0CbD037490ec3dba935a4 |
| LpMigrator | All chains | 0x293Ba185d875B5c562B552082cfef630dab57baD |
Migration
| Contract | Chain | Address |
|---|---|---|
| AerodromeMigration | Base | 0x22a2F7340a3fB4C7C389D91eE954766B12476721 |
| VelodromeMigration | Optimism | 0x6daE95FE833f190640dB1176F8C8a2e50C6a66c0 |
| VelodromeMigrationEntrypoint | Base | 0x6daE95FE833f190640dB1176F8C8a2e50C6a66c0 |
Chain-specific addresses
Base
| Contract | Address |
|---|---|
| FactoryRegistry | 0x7b2A2c12dC5Ea2a31455952a05031C3E4BB28F3E |
| GaugeFactory (stable pools) | 0x1e0f776E88649285f99e65Fa599aD6e0f9D97800 |
| GaugeFactory (volatile pools) | 0x9FBCf2Df0DC553ce40Ef63963Bff465b76792B7E |
| V2Gauge implementation (stable pools) | 0x1Be83b2a6B5a967DD9080D4202DC88B068aD4684 |
| V2Gauge implementation (volatile pools) | 0xbCE3a68F9c22d18ddFff308Eb77Ce32C31853b03 |
| GovernanceCreationModule | 0xD035217F89511eAE97daC11bF9604406EF431D17 |
| CLFactory | 0x9CB220581b91b0C83223012FE69688b92aD07a76 |
xAERO (ReceiptToken) | 0x6CdDa0E730744DC6fF67654B35350Adad05EceE7 |
Optimism
| Contract | Address |
|---|---|
| FactoryRegistry | 0xb6F9705A631CC1C0E8570FFde48882C95E2Df408 |
| LeafEmissionsHandler | 0x1AE1793aa67bB8A234A39ed1071d43B785B001ce |
| HyperlaneAdapter (leaf side) | 0x314BdC685aD3426d586860cf909e4D4f0279bF77 |
| GaugeFactory (stable pools) | 0x3924b18EDd37267dab6eDd99a3Bb339bf2b668fD |
| GaugeFactory (volatile pools) | 0x1B5D13975371806D699dC616A96D15B8eD26e5Ca |
| V2Gauge implementation (stable pools) | 0x92602E333C8869A583f7983597dE24092ff7d8C7 |
| V2Gauge implementation (volatile pools) | 0x8F53554044f01608c61cF3bB84523c253462f08E |
| GovernanceCreationModule | 0x97aBFe52c819AB175F6426eC30BBF2dF29f9E94b |
| CLFactory | 0xfeaB42D90055db3a0616249f76B6002D72266778 |
xAERO (ReceiptToken) | 0xbdEaeA5205d16f34Cb40038052d91235D87B4C54 |
| RelayLeafModuleDeployer | 0x1d52180B9049cb16f7db490bF1bB0ABEb992593d |
Arbitrum
| Contract | Address |
|---|---|
| FactoryRegistry | 0x9E635b2c689fC52201DF7eF1C9FA607c2F58f666 |
| LeafEmissionsHandler | 0x3e8C5273795AaEdAb5C638a19D24EA245968bD3a |
| HyperlaneAdapter (leaf side) | 0xe7eB27bf93a7a3cAa8B483Ec5f5EE6588bfD3886 |
| GaugeFactory (stable pools) | 0x94AF9F874e92F05F42aE55FfC793b9F4f5FFc135 |
| GaugeFactory (volatile pools) | 0xBbdDdd5ac17a672B360D2dBAa996468aDBEF8692 |
| V2Gauge implementation (stable pools) | 0xe3557CD2De1B87dAaE2118401fCB4F635053BBC6 |
| V2Gauge implementation (volatile pools) | 0x6E3b800DCC9a7e6b91239FEf0f8141F430EBCf84 |
| GovernanceCreationModule | 0xb6F9705A631CC1C0E8570FFde48882C95E2Df408 |
| CLFactory | 0x88a60ee77392577c355C0acb2A8d476D5a4EC03a |
xAERO (ReceiptToken) | 0x436a085B2751cB87db270FFa66f8d698F87bEC82 |
| RelayLeafModuleDeployer | 0xCD4d7D9475Ed44ac3Bf61f9EdD9dC9928D69Ea7d |
Ethereum, Ink and Robinhood
| Contract | Address |
|---|---|
| FactoryRegistry | 0xdd1705e23762F4D6e44D8C31BD8Ea80c54612239 (Ethereum, Ink, Robinhood) |
| LeafEmissionsHandler | 0xfc6ad3A6512d5D4906525E55c618da8dfFd837E8 (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) |
| GovernanceCreationModule | 0xE14c7d02e02A177bF4693Dbb481a2Fd1E070efD4 (Ethereum) |
| GovernanceCreationModule | 0x2419270B247f1837f92e511d10b6A87A7b49637E (Ink) |
| GovernanceCreationModule | 0x2f1ea2c2dEf80FCa460c0dcF205C281a8116834b (Robinhood) |
| CLFactory | 0xF4Fd2E6c5B60c5b365cd1B96DD6245E6D60414c2 (Ethereum) |
| CLFactory | 0x7660BF2aDefC687C22906112ca323d60A00358cF (Ink) |
| CLFactory | 0xc63d7338c178e805c544B8f897066bD3BBcBE136 (Robinhood) |
xAERO (ReceiptToken) | 0x9e148C5716b5aAdCFD3B71cEAE9EE7a9e22C29E2 (Ethereum, Ink, Robinhood) |
| RelayLeafModuleDeployer | 0xBDcB4929b19EBcfEE5eFE100B829c9B35C16d8F8 (Ethereum, Ink, Robinhood) |
Arc
| Contract | Address |
|---|---|
| FactoryRegistry | 0xCe44907DC45D3BFa3f5f6035B0e6E8B22D780A42 |
| LeafEmissionsHandler | 0x6BF28FdC8CDf34C59235B55DD6fA4d082F76B0fC |
| HyperlaneAdapter (leaf side) | 0x56632394f866761Fd86873E96A567720cE865682 |
| GaugeFactory (stable pools) | 0x9520C671C767B170c9f04e523B4e68c5d537779b |
| GaugeFactory (volatile pools) | 0xBDcB4929b19EBcfEE5eFE100B829c9B35C16d8F8 |
| V2Gauge implementation (stable pools) | 0x1e32799435b68C05240F946921a916B1a5BfAA94 |
| V2Gauge implementation (volatile pools) | 0xEa9eB1e343f4C29649D4DfA0C115Fd62a5919ED0 |
| GovernanceCreationModule | 0xc00641CEc5c33E5Cc8A9CfE1876e52c07e09e2e9 |
| CLFactory | 0x7F83235643181E440433400a027618Cd50879751 |
xAERO (ReceiptToken) | 0x20077cC0d5E385A0Fe9C91bbC7DC744f51559307 |
| RelayLeafModuleDeployer | 0x9E635b2c689fC52201DF7eF1C9FA607c2F58f666 |
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)
| Role | Controls |
|---|---|
GOVERNANCE_ROLE | Top-level governance authority |
CONFIG_ADMIN_ROLE | Administers the configuration roles below |
VOTER_CONFIG_ROLE | Voter parameters: allocation cooldowns, max gauges, local voting |
CHAIN_CONFIG_ROLE | Leaf-chain registration and configuration |
CHAIN_STATUS_ROLE | Chain status (activating or halting a chain) |
ADAPTER_CONFIG_ROLE | Cross-chain messaging adapter configuration |
SPLITTER_CONFIG_ROLE | Splitter recipient list (team-share emissions) |
TOKEN_WHITELIST_ROLE | Per-veNFT allowances (e.g. voting for zero-cap gauges) |
EMERGENCY_COUNCIL_ROLE | Emergency interventions |
FACTORY_REGISTRY_ADMIN_ROLE | Factory registry administration |
MODULE_ADMIN_ROLE | Module registration (gauge creation, payments) |
RELAY_DEPLOYER_ROLE | Relay creation on the RelayFactory |
GAS_CONFIGURER_ROLE | Cross-chain gas settings |
NATIVE_WITHDRAWER_ROLE | Withdrawal of native token held for message gas |
SEIZER_ROLE | Seizing token metadata NFTs on the TokenNFT |
Manager addresses (Slipstream)
| Role | Controls | Holder |
|---|---|---|
| Owner | CLFactory administration: new fee tiers (tick spacings), ownership transfer | Protocol governance multisig |
| Swap Fee Manager | Default and per-pool swap hooks, which set the swap fee | Protocol governance multisig |
| Unstaked Fee Manager | Unstaked fee module and default unstaked fee | Protocol governance multisig |
| Discount Registry Manager | Discount registry wiring | Protocol governance multisig |
| Pool Tape Manager | Pool tape configuration | Protocol governance multisig |
Cap admin (CAP_ADMIN_ROLE) | Gauge emission caps, including deactivation (cap zero) and reactivation | Protocol governance multisig |
Cap operator (CAP_OPERATOR_ROLE) | Cap changes within the operator range, only on gauges with a non-zero cap | Operator multisig |