Skip to main content

IBalancerVault

Git Source

Author: Balancer

Interface for the Balancer Vault contract

Functions

swap

Performs a swap with a single Pool. If the swap is 'given in' (the number of tokens to send to the Pool is known), it returns the amount of tokens taken from the Pool, which must be greater than or equal to limit. If the swap is 'given out' (the number of tokens to take from the Pool is known), it returns the amount of tokens sent to the Pool, which must be less than or equal to limit. Internal Balance usage and the recipient are determined by the funds struct. Emits a Swap event.

function swap(SingleSwap memory singleSwap, FundManagement memory funds, uint256 limit, uint256 deadline)
external
payable
returns (uint256);

Structs

SingleSwap

Data for a single swap executed by swap. amount is either amountIn or amountOut depending on the kind value. assetIn and assetOut are either token addresses, or the IAsset sentinel value for ETH (the zero address). Note that Pools never interact with ETH directly: it will be wrapped to or unwrapped from WETH by the Vault. The userData field is ignored by the Vault, but forwarded to the Pool in the onSwap hook, and may be used to extend swap behavior.

struct SingleSwap {
bytes32 poolId;
SwapKind kind;
address assetIn;
address assetOut;
uint256 amount;
bytes userData;
}

FundManagement

All tokens in a swap are either sent from the sender account to the Vault, or from the Vault to the recipient account. If the caller is not sender, it must be an authorized relayer for them. If fromInternalBalance is true, the sender's Internal Balance will be preferred, performing an ERC20 transfer for the difference between the requested amount and the User's Internal Balance (if any). The sender must have allowed the Vault to use their tokens via IERC20.approve(). This matches the behavior of joinPool. If toInternalBalance is true, tokens will be deposited to recipient's internal balance instead of transferred. This matches the behavior of exitPool. Note that ETH cannot be deposited to or withdrawn from Internal Balance: attempting to do so will trigger a revert.

struct FundManagement {
address sender;
bool fromInternalBalance;
address payable recipient;
bool toInternalBalance;
}

Enums

SwapKind

enum SwapKind {
GIVEN_IN,
GIVEN_OUT
}