Balancer
Search…
Error Codes
Vault exceptions will revert with "BAL#" instead of text; see below for the interpretation of the number.
All error codes for the Balancer V2 core contracts are defined in the BalancerErrors contract.
Note that these text mappings correspond to the latest source code, so some error codes may differ from the deployed versions.

Math

Code
Error
Comment
0
ADD_OVERFLOW
1
SUB_OVERFLOW
2
SUB_UNDERFLOW
3
MUL_OVERFLOW
4
ZERO_DIVISION
5
DIV_INTERNAL
Multiplication overflow during FixedPoint Division
6
X_OUT_OF_BOUNDS
Invalid x in ExpMath.pow(x, y)
7
Y_OUT_OF_BOUNDS
Invalid y in ExpMath.pow(x, y)
8
PRODUCT_OUT_OF_BOUNDS
In LogExpMath.pow(x, y), error computing x^y as exp(y * ln(x))
9
INVALID_EXPONENT
In LogExpMath.exp(x) = e^x; x out of bounds

Input

Code
Error
Comment
100
OUT_OF_BOUNDS
101
UNSORTED_ARRAY
See UNSORTED_TOKENS
102
UNSORTED_TOKENS
Tokens must be sorted in address order on pool registration
103
INPUT_LENGTH_MISMATCH
Used to ensure array inputs intended to be parallel have the same length
104
ZERO_TOKEN
Address to be interpreted as a token cannot be 0

Shared pools

Code
Error
Comment
200
MIN_TOKENS
All pools must contain at least two tokens
201
MAX_TOKENS
Token count exceeds the maximum for a given pool type
202
MAX_SWAP_FEE_PERCENTAGE
203
MIN_SWAP_FEE_PERCENTAGE
204
MINIMUM_BPT
On pool initialization, a small amount of BPT is minted to the zero address (keeps math well behaved). If initial balances are too small, initialization can fail
205
CALLER_NOT_VAULT
Certain pool callbacks need to be external, but could be exploited if called by anyone but the Vault
206
UNINITIALIZED
Pools must be initialized with a special "Init" join, before they can be joined by LPs
207
BPT_IN_MAX_AMOUNT
Slippage/front-running protection check failed on a pool exit
208
BPT_OUT_MIN_AMOUNT
Slippage/front-running protection check failed on a pool join
209
EXPIRED_PERMIT
210
NOT_TWO_TOKENS
Pools with oracles are limited to two tokens (e.g., WeightedPool2Tokens and MetastablePools). A pool with the TWO_TOKEN specialization must have exactly two tokens

Pools

Code
Error
Comment
300
MIN_AMP
Amplification factor out of range (Stable/Metastable pools)
301
MAX_AMP
302
MIN_WEIGHT
Weighted Pool minimum weight
303
MAX_STABLE_TOKENS
304
MAX_IN_RATIO
Token in unbalanced the pool too much on a swap
305
MAX_OUT_RATIO
Token out unbalanced the pool too much on a swap
306
MIN_BPT_IN_FOR_TOKEN_OUT
Disproportionate exit unbalanced the pool too much
307
MAX_OUT_BPT_FOR_TOKEN_IN
Disproportionate join unbalanced the pool too much
308
NORMALIZED_WEIGHT_INVARIANT
Weighted Pool normalized weights must add to 1.0
309
INVALID_TOKEN
310
UNHANDLED_JOIN_KIND
Some joins are pool type-specific
311
ZERO_INVARIANT
Pool balances must be > 0
312
ORACLE_INVALID_SECONDS_QUERY
The "ago" timestamp when querying the oracle must be in the past
313
ORACLE_NOT_INITIALIZED
Cannot query an oracle with no data
314
ORACLE_QUERY_TOO_OLD
Cannot query before the oracle's earliest data sample
315
ORACLE_INVALID_INDEX
Cannot query a sample outside the buffer (1024)
316
ORACLE_BAD_SECS
Oracle query window must have non-zero duration
317
AMP_END_TIME_TOO_CLOSE
Amplification parameter change has less than the minimum duration
318
AMP_ONGOING_UPDATE
Cannot start an amplification parameter update if one is already ongoing
319
AMP_RATE_TOO_HIGH
The requested amplification parameter change is too fast (cannot halve or double over less than a day)
320
AMP_NO_ONGOING_UPDATE
Cannot cancel an update if there isn't one
321
STABLE_INVARIANT_DIDNT_CONVERGE
322
STABLE_GET_BALANCE_DIDNT_CONVERGE
323
RELAYER_NOT_CONTRACT
324
BASE_POOL_RELAYER_NOT_CALLED
325
REBALANCING_RELAYER_REENTERED
326
GRADUAL_UPDATE_TIME_TRAVEL
start > end time in a gradual weights update
327
SWAPS_DISABLED
328
CALLER_IS_NOT_LBP_OWNER
329
PRICE_RATE_OVERFLOW
Rate returned from a rateProvider must fit in 128 bits
330
INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED
Investment pools only allow proportional joins and exits when swaps are disabled (to prevent unbalancing the pool)
331
WEIGHT_CHANGE_TOO_FAST
Gradual weight update duration too short (minimum 1 day)
332
LOWER_GREATER_THAN_UPPER_TARGET
Invalid Linear Pool operating range
333
UPPER_TARGET_TOO_HIGH
Linear Pool max balance must fit in 112 bits
334
UNHANDLED_BY_LINEAR_POOL
Some joins/exits are pool type-specific
335
OUT_OF_TARGET_RANGE
Cannot reset Linear Pool targets if pool is unbalanced
336
UNHANDLED_EXIT_KIND
Some exits are pool type-specific
337
UNAUTHORIZED_EXIT
Management fees can only be collected by the pool owner
338
MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE
339
UNHANDLED_BY_INVESTMENT_POOL
Some joins/exits are pool type-specific

Lib

Code
Error
Comment
400
REENTRANCY
401
SENDER_NOT_ALLOWED
402
PAUSED
403
PAUSE_WINDOW_EXPIRED
404
MAX_PAUSE_WINDOW_DURATION
405
MAX_BUFFER_PERIOD_DURATION
406
INSUFFICIENT_BALANCE
407
INSUFFICIENT_ALLOWANCE
408
ERC20_TRANSFER_FROM_ZERO_ADDRESS
409
ERC20_TRANSFER_TO_ZERO_ADDRESS
410
ERC20_MINT_TO_ZERO_ADDRESS
411
ERC20_BURN_FROM_ZERO_ADDRESS
412
ERC20_APPROVE_FROM_ZERO_ADDRESS
413
ERC20_APPROVE_TO_ZERO_ADDRESS
414
ERC20_TRANSFER_EXCEEDS_ALLOWANCE
415
ERC20_DECREASED_ALLOWANCE_BELOW_ZERO
416
ERC20_TRANSFER_EXCEEDS_BALANCE
417
ERC20_BURN_EXCEEDS_ALLOWANCE
418
SAFE_ERC20_CALL_FAILED
419
ADDRESS_INSUFFICIENT_BALANCE
420
ADDRESS_CANNOT_SEND_VALUE
421
SAFE_CAST_VALUE_CANT_FIT_INT256
422
GRANT_SENDER_NOT_ADMIN
In AccessControl, the caller of grantRole must be an admin
423
REVOKE_SENDER_NOT_ADMIN
In AccessControl, the caller of revokeRole must be an admin
424
RENOUNCE_SENDER_NOT_ALLOWED
In AccessControl, callers can onlyrenounceRole for their own account
425
BUFFER_PERIOD_EXPIRED
426
CALLER_IS_NOT_OWNER
427
NEW_OWNER_IS_ZERO
428
CODE_DEPLOYMENT_FAILED
429
CALL_TO_NON_CONTRACT
430
LOW_LEVEL_CALL_FAILED

Vault

Code
Error
Comment
500
INVALID_POOL_ID
501
CALLER_NOT_POOL
Some Vault hooks can only be called by the pool (e.g., register tokens)
502
SENDER_NOT_ASSET_MANAGER
503
USER_DOESNT_ALLOW_RELAYER
Relayers must be allowed by both governance and the user account
504
INVALID_SIGNATURE
505
EXIT_BELOW_MIN
Exit would yield fewer than the user-supplied minimum tokens out
506
JOIN_ABOVE_MAX
Join would cost more than the user-supplied maximum tokens in
507
SWAP_LIMIT
Swap violates user-supplied limits (min out or max in)
508
SWAP_DEADLINE
Swap transaction not mined within the specified deadline
509
CANNOT_SWAP_SAME_TOKEN
510
UNKNOWN_AMOUNT_IN_FIRST_SWAP
A batch swap must start with a non-zero amount in
511
MALCONSTRUCTED_MULTIHOP_SWAP
512
INTERNAL_BALANCE_OVERFLOW
Unused in current code
513
INSUFFICIENT_INTERNAL_BALANCE
514
INVALID_ETH_INTERNAL_BALANCE
Cannot transfer native ETH to/from internal balance
515
INVALID_POST_LOAN_BALANCE
Flashloan transactions must repay the loan in the same transaction
516
INSUFFICIENT_ETH
517
UNALLOCATED_ETH
Unused in current code
518
ETH_TRANSFER
Relayers cannot receive ETH directly (only through the Vault)
519
CANNOT_USE_ETH_SENTINEL
Internal Balance transfers cannot use ETH
520
TOKENS_MISMATCH
521
TOKEN_NOT_REGISTERED
522
TOKEN_ALREADY_REGISTERED
523
TOKENS_ALREADY_SET
524
TOKENS_LENGTH_MUST_BE_2
525
NONZERO_TOKEN_BALANCE
526
BALANCE_TOTAL_OVERFLOW
527
POOL_NO_TOKENS
528
INSUFFICIENT_FLASH_LOAN_BALANCE

Fees

Code
Error
Comment
600
SWAP_FEE_PERCENTAGE_TOO_HIGH
601
FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH
602
INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT
Last modified 1mo ago