Balancer V2 Pools
Reports an account's wallet-held (unstaked) Balancer V2 pool liquidity across any pool.
Last updated
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.
One leg per registered underlying pool token with a non-zero share:
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.
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.
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].
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
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
amount[i] = balances[i] * walletBpt / effectiveSupplyconstructor(address vault_, address navCalculator_)