VaultZapper
Inherits: Ownable2Step, Pausable
State Variables
authorizedVaults
The authorizedVaults
mapping is used to check if a vault is authorized to interact with the VaultZapper
contract.
The SafeERC20
lib is only used for safeTransfer
, safeTransferFrom
and forceApprove
operations.
The Address
lib is only used for sendValue
operations.
mapping(IERC4626 vault => bool isAuthorized) public authorizedVaults;
authorizedRouters
The authorizedRouters
mapping is used to check if a router is authorized to interact with the VaultZapper
contract.
mapping(address routerAddress => bool isAuthorized) public authorizedRouters;
Functions
onlyAllowedRouter
The onlyAllowedRouter
modifier is used to check if a router is authorized to interact with the VaultZapper
contract.
modifier onlyAllowedRouter(address router);
onlyAllowedVault
The onlyAllowedVault
modifier is used to check if a vault is authorized to interact with the VaultZapper
contract.
modifier onlyAllowedVault(IERC4626 vault);
constructor
constructor() Ownable(_msgSender());
withdrawToken
The withdrawToken
function is used to withdraw tokens from the VaultZapper
contract.
function withdrawToken(IERC20 token) external onlyOwner;
withdrawNativeToken
The withdrawNativeToken
function is used to withdraw native tokens from the VaultZapper
contract.
function withdrawNativeToken() external onlyOwner;
pause
The pause
function is used to pause the VaultZapper
contract.
function pause() external onlyOwner;
unpause
The unpause
function is used to unpause the VaultZapper
contract.
function unpause() external onlyOwner;
approveTokenForRouter
The approveTokenForRouter
function is used to approve a token for a router.
function approveTokenForRouter(
IERC20 token,
address router
)
public
onlyOwner
onlyAllowedRouter(router);
toggleRouterAuthorization
The toggleRouterAuthorization
function is used to toggle the authorization of a router.
function toggleRouterAuthorization(address router) public onlyOwner;
toggleVaultAuthorization
The toggleVaultAuthorization
function is used to toggle the authorization of a vault.
function toggleVaultAuthorization(IERC7540 vault) public onlyOwner;
_zapIn
The _zapIn
function is used to zap in assets into a vault.
function _zapIn(
IERC20 tokenIn,
address router,
uint256 amount,
bytes calldata data
)
internal;
_transferTokenInAndApprove
The _transferTokenInAndApprove
function is used to transfer tokens into the VaultZapper
contract and approve them for a router.
function _transferTokenInAndApprove(
address router,
IERC20 tokenIn,
uint256 amount
)
internal;
zapAndDeposit
The zapAndDeposit
function is used to zap in and deposit assets into a vault.
function zapAndDeposit(
IERC20 tokenIn,
IERC4626 vault,
address router,
uint256 amount,
bytes calldata data
)
public
payable
onlyAllowedRouter(router)
onlyAllowedVault(vault)
whenNotPaused
returns (uint256);
zapAndRequestDeposit
The zapAndRequestDeposit
function is used to zap in and request a deposit of assets into a vault.
function zapAndRequestDeposit(
IERC20 tokenIn,
IERC7540 vault,
address router,
uint256 amountIn,
bytes calldata data,
bytes calldata swapData
)
public
payable
onlyAllowedRouter(router)
onlyAllowedVault(vault)
whenNotPaused;
zapAndClaimAndRequestDeposit
The zapAndClaimAndRequestDeposit
function is used to zap in, claim and request a deposit of assets into a vault.
function zapAndClaimAndRequestDeposit(
IERC20 tokenIn,
AsyncSynthVault vault,
address router,
uint256 amountIn,
bytes calldata data,
bytes calldata swapData
)
public
payable
onlyAllowedRouter(router)
onlyAllowedVault(vault)
whenNotPaused;
zapAndDepositWithPermit
The zapAndDepositWithPermit
function is used to zap in and deposit assets into a vault with a permit.
function zapAndDepositWithPermit(
IERC20 tokenIn,
IERC4626 vault,
address router,
uint256 amount,
bytes calldata swapData,
PermitParams calldata permitParams
)
public
returns (uint256);
zapAndRequestDepositWithPermit
The zapAndRequestDepositWithPermit
function is used to zap in and request a deposit of assets into a vault with a permit.
function zapAndRequestDepositWithPermit(
IERC20 tokenIn,
IERC7540 vault,
address router,
uint256 amount,
bytes calldata data,
bytes calldata swapData,
PermitParams calldata permitParams
)
public;
zapAndClaimAndRequestDepositWithPermit
The zapAndClaimAndRequestDepositWithPermit
function is used to zap in, claim and request a deposit of assets into a vault with a permit.
function zapAndClaimAndRequestDepositWithPermit(
IERC20 tokenIn,
AsyncSynthVault vault,
address router,
uint256 amount,
bytes calldata data,
bytes calldata swapData,
PermitParams calldata permitParams
)
public;
_executeZap
The _executeZap
function is used to execute a zap.
function _executeZap(
address target,
bytes memory data
)
internal
returns (bytes memory response);
_executePermit
The _executePermit
function is used to execute a permit.
function _executePermit(
IERC20 token,
address owner,
address spender,
PermitParams calldata permitParams
)
internal;
Events
ZapAndRequestDeposit
The ZapAndDeposit
event is emitted when a user zaps in and deposits assets into a vault.
event ZapAndRequestDeposit(
IERC7540 indexed vault,
address indexed router,
IERC20 tokenIn,
uint256 amount
);
ZapAndDeposit
The ZapAndDeposit
event is emitted when a user zaps in and deposits assets into a vault.
event ZapAndDeposit(
IERC4626 indexed vault,
address indexed router,
IERC20 tokenIn,
uint256 amount,
uint256 shares
);
ClaimRedeemAndZap
The ClaimRedeemAndZap
event is emitted when a user claims, redeems and zaps assets into a vault.
event ClaimRedeemAndZap(
IERC7540 indexed vault,
address indexed router,
uint256 shares,
uint256 assets
);
RouterApproved
The RouterApproved
event is emitted when a router is approved to interact with a token.
event RouterApproved(address indexed router, IERC20 indexed token);
RouterAuthorized
The RouterAuthorized
event is emitted when a router is authorized to interact with the VaultZapper
contract.
event RouterAuthorized(address indexed router, bool allowed);
VaultAuthorized
The VaultAuthorized
event is emitted when a vault is authorized to interact with the VaultZapper
contract.
event VaultAuthorized(IERC4626 indexed vault, bool allowed);
Errors
NotRouter
The NotRouter
error is emitted when a router is not authorized to interact with the VaultZapper
contract.
error NotRouter(address router);
NotVault
The NotVault
error is emitted when a vault is not authorized to interact with the VaultZapper
contract.
error NotVault(IERC4626 vault);
SwapFailed
The SwapFailed
error is emitted when a swap fails.
error SwapFailed(string reason);
InconsistantSwapData
The InconsistantSwapData
error is emitted when the swap data is inconsistant.
error InconsistantSwapData(
uint256 expectedTokenInBalance, uint256 actualTokenInBalance
);
NotEnoughSharesMinted
The NotEnoughSharesMinted
error is emitted when the amount of shares minted is not enough.
error NotEnoughSharesMinted(uint256 sharesMinted, uint256 minSharesMinted);
NotEnoughUnderlying
The NotEnoughUnderlying
error is emitted when the amount of underlying assets is not enough.
error NotEnoughUnderlying(
uint256 previewedUnderlying, uint256 withdrawedUnderlying
);
NullMinShares
The NullMinShares
error is emitted when the minimum amount of shares to mint is null.
error NullMinShares();