Not yet available on Robinhood testnet (chain 46630), Sherwood’s current deployment target. This strategy will come online as Sherwood expands to more chains.
AerodromeLPStrategy provides liquidity to an Aerodrome pool and optionally stakes the LP tokens in a gauge to earn AERO rewards. On settlement, it unstakes, claims rewards, removes liquidity, and pushes all tokens back to the vault.
Architecture
Stable vs Volatile Pools
Stable Pool
For correlated assets (e.g., USDC/USDbC). Uses the
stable = true flag. Lower fees, tighter curve.Volatile Pool
For uncorrelated assets (e.g., USDC/WETH). Uses
stable = false. Standard AMM curve.Lifecycle
| Phase | What happens | Who calls |
|---|---|---|
| Execute | Pull tokenA + tokenB → addLiquidity → stake LP in gauge | Governor (proposal execution) |
| Executed | LP earns trading fees; gauge earns AERO rewards | — |
| Settle | Unstake LP → claim AERO → removeLiquidity → push all to vault | Governor (proposal settlement) |
Any dust (unused tokens from addLiquidity) is returned to the vault immediately during execution.
Batch Calls
Execute
Settle
Gauge Staking
Gauge staking is optional. Pass--gauge <address> to enable it.
- If a gauge is set, the strategy stakes all LP tokens after adding liquidity
- On settlement, LP is withdrawn from the gauge and AERO rewards are claimed
- The gauge’s
stakingTokenmust match thelpTokenaddress (validated at initialization) - If no gauge is set, LP tokens sit in the strategy clone (earning trading fees only)
InitParams
CLI Usage
| Flag | Description | Default |
|---|---|---|
--token-a <address> | Token A address | required |
--token-b <address> | Token B address | required |
--amount-a <n> | Token A amount | required |
--amount-b <n> | Token B amount | required |
--stable | Stable pool (correlated assets) | false |
--gauge <address> | Gauge for AERO rewards | none |
--lp-token <address> | LP token address | required |
--min-a-out <n> | Min token A on settle (slippage) | at least one of the pair required |
--min-b-out <n> | Min token B on settle (slippage) | at least one of the pair required |
Tunable Parameters
While inExecuted state, the proposer can update settlement slippage:
| Parameter | Description |
|---|---|
minAmountAOut | Minimum tokenA on removeLiquidity |
minAmountBOut | Minimum tokenB on removeLiquidity |
Live NAV
The strategy never self-reports a value. It reports one position of kindAERODROME_LP (venue + kind + locator) via positions(), and an AerodromeLPAdapter — pricing the LP via the pool’s native quote() TWAP with a recency check and a spot/TWAP deviation guard — is built and tested for the governance-owned PriceRouter.
However, Lane A is not yet enabled for AERODROME_LP (laneAEnabled[AERODROME_LP] = false, pending audit). Until governance enables it, this strategy is Lane B only: while an Aerodrome proposal is active, LP entry / exit goes through the async queue (VaultWithdrawalQueue) and settles at the frozen per-proposal price. Once the kind is enabled, instant Lane A pricing applies.
See Deposits & Withdrawals for the full two-lane mechanics.
Addresses (Base reference)
| Contract | Address |
|---|---|
| AerodromeLPStrategy template | 0x6fba9a6D3F40AA1848Ad196564B27a430D29FdB0 |
| Aerodrome Router | 0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43 |
| Aerodrome Default Factory | 0x420DD381b31aEf6683db6B902084cB0FFECe40Da |
| AERO Token | 0x940181a94A35A4569E4529A3CDfB74e38FD98631 |