For the complete documentation index, see llms.txt. This page is also available as Markdown.

Balancer V2 Pools

Reports an account's wallet-held (unstaked) Balancer V2 pool liquidity across any pool.

Reports an account's wallet-held (unstaked) Balancer V2 pool liquidity across any pool. It decomposes the account's BPT balance pro-rata into the pool's underlying tokens by reading the Balancer V2 Vault's live balances — the AMM-supplied LP only. Gauge-staked LP and rewards are the separate Balancer V2 Gauges adapter.

  • Type: Meta-adapter

  • protocolSubId: keccak256("balancer-v2-pools")

  • Instance key: the pool's raw bytes32 poolId (used directly, not an address). The BPT (ERC20) address is the top 160 bits of the poolId.

  • Source: BalancerV2PoolsMetaBalanceAdapter.sol


Positions returned

One leg per registered underlying pool token with a non-zero share:

Leg
PositionKind
isDebt
Description

Supply

Supplied

false

Pro-rata share of one underlying pool token, from the account's wallet BPT

The pool's own pre-minted BPT (composable-stable pools) is excluded from the token list. Unregistered, zero-amount, and asset-filtered tokens are skipped.


Balance calculation

Flowchart of the Balancer V2 Pools balance adapter: read calls derive position legs into PositionBalance entries.
Balancer V2 Pools adapter — how the underlying balances reported to the NAV Calculator are derived.

Balancer V2 holds every pool's tokens in a single Vault. For BPT balance walletBpt = BPT.balanceOf(account) (returns nothing if zero), BalancerV2PoolLib.shares reads the Vault's getPoolTokens(poolId) balances and computes each token's pro-rata amount:

effectiveSupply is getActualSupply() when the pool exposes it (composable-stable: excludes pre-minted BPT, includes due protocol fees) and falls back to totalSupply() for legacy weighted/stable pools.


Identity

  • positionId: abi.encode(bytes32 poolId)

  • positionKind: Supplied

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


Constructor

Parameter
Description

vault_

Balancer V2 Vault address (must be a contract); the chain-level singleton that custodies every pool's tokens

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, instances), with the instance set adjusted by addMetaInstances / removeMetaInstances. Instance coordinates are passed as bytes32 and stored as-is — for Balancer V2 each coordinate is the raw bytes32 poolId (not an address widened to bytes32, as most meta-adapters use). The adapter recovers the BPT from the poolId's top 160 bits when it needs the ERC-20.

Last updated