Skip to main content
Pre-Release Documentation

This describes a pre-release version of LBAMM. Interfaces and behavior may change.

Verify the exact repository commit before building production integrations.

Token Hooks

Token hooks are the mechanism LBAMM uses to enforce token-level policy across all venues, pool types, and execution paths.

A token hook is a single contract configured per token. When enabled, LBAMM invokes the hook at well-defined points (swaps, liquidity operations, pool creation, flash loans, and transfer-handler order validation).

This page documents:

  • How token hooks are configured
  • Which hook functions can be invoked and when
  • What context token hooks receive
  • What token hooks are allowed to do (and what they are not)

For the exact invocation ordering relative to pool/position hooks, see the call-order reference.


Configuration: setTokenSettings

Token hooks are configured per token via:

setTokenSettings(address token, address tokenHook, uint32 packedSettings)

Authorization

setTokenSettings may only be called by an authorized party for the token:

  • The token owner
  • A role-based admin
  • An account holding LBAMM_TOKEN_SETTINGS_MANAGER_ROLE

Enabling and disabling

  • Tokens default to tokenHook = address(0) (no token hook).
  • A token hook may be removed by setting tokenHook = address(0).
  • When tokenHook is zero, packedSettings must be zero.

Flag negotiation: hookFlags()

A token hook declares its required and supported behavior via:

function hookFlags() external view returns (uint32 requiredFlags, uint32 supportedFlags);
  • requiredFlags are flags the token owner must enable for the hook to function correctly.
  • supportedFlags are flags the token owner may enable.
  • All required flags must be supported.

LBAMM validates the configuration at setTokenSettings time:

  • If the token owner enables an unsupported flag → the call reverts.
  • If the token owner fails to enable a required flag → the call reverts.

Only 10 bits of the 32-bit packedSettings value are currently consumed by LBAMM for hook gating. The remaining 22 bits are stored by core and may be used by hook developers for token-specific semantics.

The core stores packedSettings and makes it retrievable to hooks (e.g. via getTokenSettings(token)).


Hook gating flags

The protocol uses the following flag bits in packedSettings to determine which token hook functions are invoked:

BitConstantEnables
0TOKEN_SETTINGS_BEFORE_SWAP_HOOK_FLAGEnables beforeSwap hook validation
1TOKEN_SETTINGS_AFTER_SWAP_HOOK_FLAGEnables afterSwap hook validation
2TOKEN_SETTINGS_ADD_LIQUIDITY_HOOK_FLAGEnables hook validation during addLiquidity
3TOKEN_SETTINGS_REMOVE_LIQUIDITY_HOOK_FLAGEnables hook validation during removeLiquidity
4TOKEN_SETTINGS_COLLECT_FEES_HOOK_FLAGEnables hook validation during collectFees
5TOKEN_SETTINGS_POOL_CREATION_HOOK_FLAGEnables hook validation during createPool
6TOKEN_SETTINGS_HOOK_MANAGES_FEES_FLAGIndicates hook contract manages its own fee collection
7TOKEN_SETTINGS_FLASHLOANS_FLAGEnables flash loan operations for the token
8TOKEN_SETTINGS_FLASHLOANS_VALIDATE_FEE_FLAGEnables validation when flash loan fees are paid in a different token
9TOKEN_SETTINGS_HANDLER_ORDER_VALIDATE_FLAGEnables transfer handler order validation

These flags are evaluated by the core AMM before invoking the corresponding hook functions.


Token hook interface

A token hook implements ILimitBreakAMMTokenHook and may receive calls for the following operations:

  • Pool creation validation
  • Swap validation and per-swap fee assessment
  • Liquidity operation validation and per-operation fee assessment
  • Transfer-handler order validation
  • Flash loan validation and optional cross-token fee validation

The hook must revert to block an operation.


When token hooks run

Token hooks run for any token involved in the operation, subject to flags.

Pool creation

For pool creation, token hooks may be called for:

  • token0
  • token1

Hook function:

  • validatePoolCreation(...)

The hook receives:

  • creator (the account calling the AMM to create the pool)
  • hookForToken0 indicating whether the invocation is for the token0 or token1 side
  • PoolCreationDetails containing pool type, fee, token pair, pool hook, and pool params

Swaps (single, multi-hop, direct)

For each hop of a swap, token hooks may be called for:

  • the hop’s input token
  • the hop’s output token

Hook functions:

  • beforeSwap(...) (if enabled)
  • afterSwap(...) (if enabled)

Both hooks return a fee amount assessed by the AMM. The fee denomination depends on swap direction and whether the hook is executed before or after the swap.

Liquidity operations

For liquidity operations, token hooks may be called for:

  • token0
  • token1

Hook functions:

  • validateAddLiquidity(...)
  • validateRemoveLiquidity(...)
  • validateCollectFees(...)

These validation functions may return hookFee0 and hookFee1, allowing a hook to charge fees in either or both pool tokens.

Transfer-handler orders

Token hooks may validate transfer-handler orders via:

  • validateHandlerOrder(...)

This hook is not called by the AMM core directly. It is invoked by transfer handlers during order creation.

Flash loans

Flash loans involve two possible token-hook interactions:

  • beforeFlashloan(...) on the loan token (gated by TOKEN_SETTINGS_FLASHLOANS_FLAG)

    • Authorizes the loan
    • Returns (feeToken, feeAmount)
  • validateFlashloanFee(...) on the fee token when a different token is used to pay the fee (gated by TOKEN_SETTINGS_FLASHLOANS_VALIDATE_FEE_FLAG)

    • Validates whether the fee token may be used

Context available to token hooks

Token hooks receive rich, non-spoofable context from the AMM core.

Swap context

Swap hooks receive:

  • SwapContext (who is executing, who receives output, fee recipients, transfer handler, and swap token pair)
  • HookSwapParams (swap direction, hop index, poolId, amounts, and whether this call is for tokenIn vs tokenOut)

Key points:

  • Executor is the authoritative identity (msg.sender of the AMM call). There is no tx.origin/initiator field.
  • Recipient may differ from executor and is intentionally surfaced so hooks can restrict executor→recipient flows.
  • Hop index is zero-based; for multiSwap it increments monotonically per hop (and will be zero for a single-hop swap).
  • transferHandler may be present to settle a swap.

Liquidity context

Liquidity hooks receive:

  • LiquidityContext including provider, the pool token pair, and the resolved positionId

Token hooks also observe the liquidity hook address via:

  • LiquidityModificationParams.liquidityHook
  • LiquidityCollectFeesParams.liquidityHook

This allows token hooks to validate which position hook is being used.


What token hooks can do

Token hooks are designed to express policy and dynamic behavior.

Enforce policy by reverting

All token hook validation functions must revert to block an operation.

Common uses include:

  • Permissioning (who may trade, provide liquidity, or receive tokens)
  • Execution-path restrictions (e.g., only certain executors)
  • Slippage and parameter validation
  • KYC/AML enforcement

Assess hook fees

Token hooks may assess additional fees:

  • beforeSwap / afterSwap return a fee amount for swap flows
  • Liquidity validation functions may return hookFee0 / hookFee1

Fee allocation depends on token settings. In particular, TOKEN_SETTINGS_HOOK_MANAGES_FEES_FLAG indicates that the hook contract manages its own fee collection.

Request fee transfers (queued)

Token hooks may call into the AMM during hook execution to request fee transfers via:

  • collectHookFeesByHook

Fee transfer requests are:

  • queued during execution
  • settled after the primary operation finalizes
  • processed in FIFO order

This prevents fee settlement from interfering with swap or liquidity finalization.


What token hooks cannot do

Token hooks are not a substitute for core accounting.

Token hooks must not assume they can:

  • Perform or override token transfers performed by the AMM
  • Modify pool reserves or fee balances directly
  • Change swap parameters (path, recipient, amounts)
  • Partially commit execution (all-or-nothing execution still applies)

Hooks can run arbitrary logic within the EVM (including interacting with other contracts), but transfer and accounting semantics remain controlled by the AMM core.


Failure semantics

Token hook calls are atomic with execution:

  • If any token hook reverts, the entire operation reverts.

This is true for swaps, pool creation, liquidity operations, and flash loans.


  • Hook call ordering and execution context (reference)
  • Hook economics (fees, settlement, and accounting)
  • Pool hooks
  • Position hooks

Limit Break

TwitterLimitBreak.comMedium

© 2026 Limit Break International, Inc. All rights reserved.

Privacy PolicyTerms of ServiceCookie PolicyDo Not Sell My Info