> For the complete documentation index, see [llms.txt](https://docs.kpk.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kpk.io/funds/infrastructure/onchain-accounting/meta-balance-adapters/balancer-v2-gauges.md).

# Balancer V2 Gauges

Reports an account's **gauge-staked** Balancer V2 LP plus claimable rewards across any gauge. The staked LP is decomposed pro-rata into the pool's underlying tokens via the Vault's pool balances, and BAL plus the gauge's extra reward tokens are reported as accrued rewards. Wallet-held (unstaked) LP is the separate [Balancer V2 Pools](/funds/infrastructure/onchain-accounting/meta-balance-adapters/balancer-v2-pools.md) adapter.

* **Type:** Meta-adapter
* **protocolSubId:** `keccak256("balancer-v2-gauges")`
* **Instance key:** the gauge address, widened to bytes32.
* **Source:** [`BalancerV2GaugesMetaBalanceAdapter.sol`](https://github.com/karpatkey/onchain-accounting/blob/main/src/balances/MetaBalanceAdapters/balancer/BalancerV2GaugesMetaBalanceAdapter.sol)

***

## Positions returned

| Leg             | PositionKind | isDebt  | Description                                                                     |
| --------------- | ------------ | ------- | ------------------------------------------------------------------------------- |
| Staking         | `Staking`    | `false` | Pro-rata share of one underlying pool token, from the account's gauge-staked LP |
| Rewards (BAL)   | `Rewards`    | `false` | Claimable BAL, minted via the Balancer Minter                                   |
| Rewards (extra) | `Rewards`    | `false` | Claimable amount of each extra gauge reward token                               |

Unregistered, zero-amount, and asset-filtered tokens are skipped.

***

## Balance calculation

<figure><img src="/files/JCApgddkhKAFelBD08eJ" alt="Flowchart of the Balancer V2 Gauges balance adapter: read calls derive position legs into PositionBalance entries."><figcaption><p>Balancer V2 Gauges adapter — how the underlying balances reported to the NAV Calculator are derived.</p></figcaption></figure>

**Staking legs** use `staked = gauge.balanceOf(account)`. The gauge's `lp_token` BPT resolves its `getPoolId()`, and `BalancerV2PoolLib.shares` reads the Vault balances to compute each token's pro-rata amount:

```
amount[i] = balances[i] * staked / effectiveSupply
```

where `effectiveSupply` is `getActualSupply()` (composable-stable) or `totalSupply()` (legacy). The poolId read is skipped entirely when stake is zero.

**BAL rewards** and **extra rewards** use the exact same logic as the [Balancer V3 Gauges](/funds/infrastructure/onchain-accounting/meta-balance-adapters/balancer-v3-gauges.md) adapter — V2 and V3 gauges share the BalancerMinter inflation design:

```
claimableBAL = max(integrateFraction(account) - minter.minted(account, gauge), 0)
```

`integrateFraction` is recomputed off-chain by walking weekly boundaries (`WEEK = 7 * 86400`) accumulating `integrate_inv_supply`, trying the mainnet model (up to 500 weeks, future-epoch rate switch via the token admin) and falling back to the L2 per-week-rate model (up to 256 weeks); a killed gauge zeroes the rate. Extra rewards come from `claimable_reward(account, token)` per `reward_tokens(i)` (BAL excluded).

***

## Identity

* **positionId:** `abi.encode(address gauge)`
* **positionKind:** `Staking` · `Rewards`

There is no `labels` field on the position. The adapter implements `positionLabels(positionId)`, which returns `["Staking Gauge", "<sym0>/<sym1>/…"]` from the staked pool's underlying token symbols — surfaced only by the verbose reads (`getAccountPositionsVerbose` / `getAccountNavVerbose`); the full breadcrumb is `[protocolName, ...labels]`.

***

## Constructor

```solidity
constructor(address vault_, address balancerMinter_, address navCalculator_)
```

| Parameter         | Description                                                                                            |
| ----------------- | ------------------------------------------------------------------------------------------------------ |
| `vault_`          | Balancer V2 Vault address (must be a contract); the chain-level singleton holding pool balances        |
| `balancerMinter_` | Balancer Minter contract (must be a contract); resolves the BAL token, token admin, and minted amounts |
| `navCalculator_`  | NAVCalculator address (must be a contract); source of the asset registry and the instance set          |

***

## Registration

Registered as a meta-adapter via `addMetaBalanceAdapter(adapter)`, then per-gauge instances are added with `addMetaInstances`. Each instance coordinate is the gauge address widened to bytes32.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.kpk.io/funds/infrastructure/onchain-accounting/meta-balance-adapters/balancer-v2-gauges.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
