Balancer review is a hook-first test before supplying liquidity

Balancer review is a hook-first assessment of how a specific Balancer v3 pool changes fees and liquidity behavior. Record the pool, Vault, factory, and hook addresses; read enabled callbacks and role accounts; then model deposits and exits under the configured threshold, fee cap, and token-balance conditions.

Updated

Inspect the pool from chain record to exit quote

A useful Balancer hook review follows one chain-specific record from pool identification through fee simulation, deposit construction, receipt verification, and a rehearsed proportional exit path.

Decision checklist. Apply these five checks before any approval or add-liquidity transaction.

  1. Match the network and pool address, then record the Vault, factory, tokens, and BPT contract.
  2. Fetch the stored HooksConfig and confirm whether its single hook address is zero or nonzero.
  3. Decode all 10 flags, emphasizing dynamic fees, liquidity callbacks, and hook-adjusted amount handling.
  4. Read the static fee, dynamic threshold, fee cap, and three pool role accounts.
  5. Query a proportional deposit and exit with the same Balancer Router path intended for execution.

Build the transaction only after the quoted token amounts, minimum BPT output, and exit limits match the recorded configuration. After settlement, inspect the receipt, BPT balance, and underlying token changes. Rebuild the exit query from the post-deposit state, because a successful entry does not prove that an unbalanced removal will pass the hook.


Contract identity and factory lineage

Contract identity decides whether every later observation applies, so the Balancer v3 pool address, chain, Vault, factory, and hook address must match one deployment record, which is detailed in Balancer explained.

Ethereum mainnet uses chain ID 1, Gnosis uses 100, Base uses 8453, and Arbitrum uses 42161. Identical token symbols on those networks do not identify an identical pool. Factory lineage also matters: Balancer deployments include WeightedPoolFactory v2, StablePoolFactory v3, and StableSurgePoolFactory v3 revisions. Record the exact factory rather than inferring code from the pool name. One hook contract may serve several pools, while its threshold and fee cap remain separate per-pool values.


Hook execution and operational risk

Hook execution widens a pool's operational surface because each enabled callback introduces another condition that must succeed before the Balancer Vault settles the action completely.

Balancer stores 10 Boolean hook flags. Nine select call or compute points: before and after initialization, dynamic-fee calculation, before and after swaps, before and after additions, and before and after removals. The tenth, enableHookAdjustedAmounts, tells the Vault whether returned amount changes are honored. A false success value or a hook revert stops the surrounding operation. That behavior is deterministic, yet its trigger may depend on pool balances, gas fields, role-controlled parameters, or router identity. Each dependency belongs in the position record because it affects execution, not merely presentation.

A dynamic-fee callback changes the percentage before pool math runs. An after-swap callback sees updated balances and may return a modified calculated amount. Liquidity callbacks examine the operation kind, token amounts, balances, and optional user data.

Quotes therefore have a state boundary. A parameter update, balance shift, or different router changes the call context between inspection and execution. Set transaction limits from a fresh query.

Which hook flags change LP outcomes?

The Balancer hook flags that matter most to an LP are dynamic-fee computation, after-add, after-remove, after-swap, and hook-adjusted amount handling because they change quoted or settled quantities.

Beyond the basics, Balancer defines 2 swap kinds: exact-in and exact-out. It also defines 5 addition kinds and 4 removal kinds. A hook may treat proportional liquidity differently from unbalanced, single-token, donation, or custom operations. Before-callback flags decide whether an action proceeds. After-callback flags act after pool calculations, while enableHookAdjustedAmounts determines whether returned raw amounts affect settlement.

Use the Vault's stored HooksConfig as the runtime record. Reading a hook contract alone shows its code and getters, but the stored flags reveal which portions the Vault invokes for that pool.


Static and dynamic fees must be separated

The fee decision begins with the Balancer pool's static swap fee, then adds any dynamic hook output and separates the aggregate protocol and creator shares.

WeightedPool permits static swap fees from 0.001% through 10%. StablePool permits 0.0001% through 10%. Dynamic logic may return a percentage above that 10% static ceiling, subject to the Vault's fee-math limit. Balancer v3 represents aggregate fees with 24 bits and 0.00001% steps, while fee math is capped at 99.9999%. Those constants define the hard envelope; the effective percentage for a particular swap still comes from its pool state and hook parameters.

For an exact-in swap, apply the effective fee to the input before judging LP revenue. The protocol and pool-creator portions allocate part of that fee stream; they are not extra percentages added to the trader's effective fee. A Balancer review should record both the quoted percentage and its allocation settings.

StableSurgeHook turns imbalance into fee pressure

StableSurgeHook matters when a correlated-asset pool crosses its configured imbalance threshold, because the hook raises the swap fee only when the proposed action worsens balance.

StableSurgeHook compares the pool's old imbalance with an estimated post-action imbalance. Below the threshold, or when an action improves balance, the static fee remains. Above the threshold, a worsening swap moves the fee linearly toward the configured maximum as imbalance approaches 100%. The actual threshold and maximum live in per-pool storage. The same hook checks unbalanced liquidity after additions and removals. It accepts proportional operations, then blocks an unbalanced operation when it would worsen imbalance beyond the threshold. This ties deposit design and exit route to the same balance-state rule.

For a pool containing assets such as USDC and USDT, inspect the threshold, maximum fee, balances, and token rates together. A low displayed static fee says little about execution near the surge boundary.


MevCaptureHook ties fees to priority gas

MevCaptureHook changes the review target from token imbalance to transaction ordering, using the priority gas price above a configured threshold to calculate a fee increment.

The hook derives priority gas price from 2 on-chain values: tx.gasprice minus block.basefee. Above the pool threshold, it multiplies the excess by a configured multiplier, divides the fixed-point result by 10 18 , adds the static fee, and applies the configured maximum. When enabled, it also checks unbalanced additions and removals against the priority threshold. Proportional operations remain eligible. On Base, Arbitrum, and other EVM rollups, transaction construction therefore belongs in the liquidity review, not only the swap review.


Pool math sets the exposure beneath the hook

Underlying pool math determines whether a hook is addressing the dominant LP exposure, so review Balancer's invariant limits before giving fee logic too much weight.

A WeightedPool admits between 2 and 8 tokens under Vault constraints, and every normalized weight is at least 1%. A single swap cannot add or remove more than 30% of the relevant token balance. One liquidity operation keeps the weighted invariant between 70% and 300% of its starting value. Those constants bound transaction size even when a hook approves the call. Weighted math spans the full price range, so dynamic fees change compensation without changing the underlying inventory path. That path remains the principal source of rebalancing exposure.

A StablePool contains between 2 and 5 tokens. Its amplification parameter ranges from 1 through 50,000, and an update must take at least 1 day. The parameter cannot move by more than a factor of 2 per day. Stable liquidity operations keep the invariant between 60% and 500% of its prior value. These boundaries operate independently of StableSurgeHook.

Gyro 2-CLP uses a 2-token concentrated curve, while Gyro E-CLP uses elliptical geometry. Across these types, BPT uses 18 decimals, and initialization permanently removes 1,000,000 BPT base units from circulation.

Permissions determine ongoing maintenance

Role accounts determine who maintains a Balancer pool's changing parameters, making the pause manager, swap-fee manager, pool creator, and governance permissions central to ongoing review.

PoolRoleAccounts contains 3 addresses: pauseManager, swapFeeManager, and poolCreator. The swap-fee manager sets the static fee and, for surge hooks, may set the threshold and maximum. The pool creator controls creator-fee percentages when that role exists. Protocol controls remain separate. The controller caps protocol swap and yield fee percentages at 50%, while the pool-creator fee percentage is capped at 99.999%. These allocation limits do not define the dynamic fee charged to a swap.

Maintain a configuration snapshot with the deposit transaction. Refresh it after fee, threshold, role, or pause events. This creates an observable reason for any changed quote or blocked operation.


Can a proportional exit avoid surge restrictions?

A proportional exit avoids the surge-specific imbalance restriction because StableSurgeHook and MevCaptureHook explicitly accept proportional removal, although the remaining Vault and token conditions still apply.

Proportional removal is 1 of the 4 Balancer removal kinds. StableSurgeHook returns the original raw amounts for that route, and MevCaptureHook permits it even when priority gas exceeds its threshold. The transaction must still satisfy minimum output amounts, BPT balance, token transfer behavior, and the selected Router call. Query the proportional route before depositing and again before removal.

The LPs who benefit most from hook-first review

Hook-first review is most valuable when a Balancer position is large enough for fee variability, parameter control, and exit behavior to outweigh a simple headline yield.

The method fits pools with a nonzero hook address, enabled dynamic-fee computation, or role-controlled hook parameters. It also fits operators who maintain allocations across several EVM networks and need reproducible configuration records. A zero hook address narrows the task to pool math, token behavior, fee allocation, and Router limits. The same Balancer review discipline still applies, but fewer execution branches require monitoring.

The inspection target changes across programmable AMMs. Uniswap v4 attaches one hook to a pool through PoolManager and lets dynamic-fee pools update per swap. Curve StableSwap-NG places off-peg fee behavior inside the pool implementation rather than a Balancer HooksConfig. CoW AMM sends liquidity through CoW Protocol's batch auctions, making solver competition and order validity central. Reuse the questions across these systems, but read each protocol's native control surface.

Balancer review: reader questions

Does a Balancer hook change the ERC-20 status of BPT?

A hook does not change BPT's ERC-20 interface or its fixed 18-decimal precision. BPT still represents a claim on the pool's assets. The hook affects operations surrounding minting, burning, swapping, or settlement. Review the BPT contract and the pool's HooksConfig separately because they describe different layers of the position.

Can one hook contract serve several Balancer pools?

One hook contract can serve several Balancer pools, while each pool stores a single hook address. Shared hook code commonly keeps thresholds, fee caps, or multipliers in mappings keyed by pool address. Record the pool and hook together. Reading another pool's values from the same contract does not establish the configuration of the pool under review.

What happens if a hook parameter changes after my quote?

A quote created before a hook update represents the earlier contract state and should be rebuilt. The effective fee and operation checks are evaluated during execution. If the new output falls outside the transaction's minimum BPT or token limits, the operation reverts. Fresh queries keep the submitted limits aligned with the updated threshold, cap, and balances.

Can ERC-4626 tokens be used in a hook-enabled Balancer v3 pool?

ERC-4626 vault tokens can appear in a hook-enabled Balancer v3 pool when registered through the supported WITH_RATE token configuration. The registration includes a rate provider, and the token must use no more than 18 decimals. Balancer buffers may support wrapping and unwrapping, while the hook remains a separate execution layer around pool operations.