> For the complete documentation index, see [llms.txt](https://docs.reflect.now/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.reflect.now/launcher/locker-and-beneficiary.md).

# Locker & Beneficiary

Liquidity locking is handled entirely through Aerodrome's native Locker contracts. No third-party lock services.

How Locking Works

When the Launcher creates liquidity, the resulting LP position (ERC-20 token for vAMM, NFT for CL) is sent directly to Aerodrome's Locker contract with three parameters:

| Parameter         | Description                                                                |
| ----------------- | -------------------------------------------------------------------------- |
| **Lock duration** | How long the LP is locked. Permanent locks use max.                        |
| **Beneficiary**   | The address authorized to claim fees and rewards from the locked position. |
| **Fee share**     | The platform fee split (15% to Reflect treasury, 85% to beneficiary).      |

The beneficiary cannot withdraw the LP. They can only claim the fees and rewards it generates.

V2 Locker vs CL Locker

| Feature               | V2 Locker                                            | CL Locker                                            |
| --------------------- | ---------------------------------------------------- | ---------------------------------------------------- |
| **Launcher contract** | `..`                                                 | `..`                                                 |
| **LP type locked**    | ERC-20 LP token                                      | NFT position (Non-Fungible Position Manager)         |
| **Gauge staking**     | `stake()` / `unstake()` on the Locker                | Managed through the NFT position                     |
| **Fee claiming**      | `claimFees(recipient)` returns Token0 + Token1       | `claimFees(recipient)` returns Token0 + Token1       |
| **Reward claiming**   | `claimRewards(recipient)` returns AERO (when staked) | `claimRewards(recipient)` returns AERO (when staked) |

Beneficiary System

The beneficiary address is the only wallet authorized to:

* **Claim trading fees** - accumulated swap fees in both pool tokens.
* **Claim AERO rewards** - emissions directed by veAERO voters (requires gauge staking).
* **Stake / Unstake** - move the locked LP into or out of an Aerodrome gauge.
* **Transfer beneficiary** - transfer the beneficiary role to another address.

The beneficiary is set at launch time and can be transferred later via `transferBeneficiary()` on the Locker contract.

Claiming Fees

Fees must be claimed from the unstaked position. If the LP is currently staked in a gauge:

1. Unstake from the gauge.
2. Claim fees (`claimFees` returns Token0 + Token1 amounts).
3. Re-stake into the gauge to continue earning AERO emissions.

AERO rewards can only be claimed while the position is **staked** in a gauge, and so graduate to a gauge first.&#x20;
