Balancer Protocol Overview Balancer is a generalized AMM allowing pools with 2–8 tokens at arbitrary weights. The key innovation is a single Vault contract that holds all token balances; pool contracts contain only pricing logic.
V2 has been deployed on Gnosis Chain since 2021 ; V3 launched in 2024 with further architectural improvements.
Contracts on Gnosis Chain Version Contract Address V2 Vault 0xBA12222222228d8Ba445958a75a0704d566BF2C8 V2 Authorizer Governance contract V3 Vault 0xba1333333333a1ba1108e8412f11850a5c319ba9
dbt Models contracts_BalancerV2_Vault_events — all Vault events, start 2021-01-01 , monthly batches contracts_BalancerV3_Vault_events — all V3 Vault events, start 2024-01-01 Architecture: The Vault All tokens for all pools live in the single Vault address Pools register with the Vault and receive a unique poolId (bytes32) poolId = first 20 bytes are the pool contract address + 2 bytes specialization + 10 bytes nonce Swaps route through the Vault which handles token custody; pools only compute prices Gas savings: "internal balances" — the Vault can net token transfers across multiple pools in one transaction Pool Types (V2) Type Invariant Use Case Weighted \(\prod B_i^{w_i} = k\) General multi-token pools (e.g., 80/20 GNO/WETH) Composable Stable StableSwap invariant Stablecoins, correlated assets (e.g., USDC/USDT/DAI) Boosted Wraps yield-bearing tokens USDC → Aave aUSDC internally for yield LBP (Liquidity Bootstrapping) Time-varying weights Token launches with decreasing sell pressure Managed Owner-controlled weights Portfolio management
Key Events and decoded_params (V2) PoolRegistered decoded_params key Description poolId Unique pool identifier (bytes32) poolAddress Pool contract address specialization Pool type enum (0=GENERAL, 1=MINIMAL_SWAP_INFO, 2=TWO_TOKEN)
TokensRegistered decoded_params key Description poolId Pool identifier tokens Array of token addresses assetManagers Array of asset manager addresses
Swap decoded_params key Type Description poolId bytes32 Pool where swap occurred tokenIn address Token sold to pool tokenOut address Token bought from pool amountIn uint256 Amount of tokenIn amountOut uint256 Amount of tokenOut
PoolBalanceChanged (add/remove liquidity) decoded_params key Type Description poolId bytes32 Pool identifier liquidityProvider address LP address tokens address[] Token addresses deltas int256[] Token amount changes (positive = deposit, negative = withdrawal) protocolFeeAmounts uint256[] Fee taken by protocol
Example Query: Swap Volume Per Pool (V2) SELECT
decoded_params [ 'poolId' ] AS pool_id ,
decoded_params [ 'tokenIn' ] AS token_in ,
decoded_params [ 'tokenOut' ] AS token_out ,
count () AS swap_count ,
sum ( toUInt256OrZero ( decoded_params [ 'amountIn' ])) AS total_amount_in
FROM contracts_BalancerV2_Vault_events
WHERE event_name = 'Swap'
AND block_timestamp >= now () - INTERVAL 30 DAY
GROUP BY pool_id , token_in , token_out
ORDER BY swap_count DESC
LIMIT 20
See Also