Teller

The Teller is responsible for allowing users to mint/redeem BoringVault shares. Note that in the first iteration of this architecture the Teller is responsible for both mint and redeem, but in the future this logic could be split into two more complex contracts.


User Entry

In order to mint shares users should call deposit or depositWithPermit. For both calls user specify:

  • depositAsset

    • The ERC20 asset to deposit into the BoringVault

  • depositAmount

    • The amount of depositAsset to deposit into the BoringVault

  • minimumMint

    • The minimum amount of shares to mint from the deposit

💡 The depositAsset must be supported by Teller, which can be checked by calling Teller.isSupported(depositAsset). Additionally, the Teller can not be paused which can be checked by calling Teller.isPaused().

💡 After a user enters using deposit or depositWithPermit all BoringVault shares they own (including ones owned prior to deposit) will become locked to their account for a share lock period. The share lock period can be queried by calling Teller.shareLockPeriod() and a user's share unlock time can be queried by calling Teller.shareUnlockTime(USER_ADDRESS).

💡 During a users share lock period, it is possible for a users deposit to be refunded. Where the user is sent back the exact amount of assets they sent in, and the shares are burned directly from their account. When this happens a special event is emitted Event DepositRefunded. This functionality exists as a safety mechanism to mitigate unfavorable entries into the vault.

function deposit(ERC20 depositAsset, uint256 depositAmount, uint256 minimumMint)
        public
        payable
        returns (uint256 shares);
 
function depositWithPermit(
        ERC20 depositAsset,
        uint256 depositAmount,
        uint256 minimumMint,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    )external returns (uint256 shares);

💡 For deposit calls users can use native ETH if it is supported. Additionally users can just transfer ETH to the Teller to deposit, however this is not advised as users can not set a minimum share amount.

💡 For ERC20 deposits using deposit or depositWithPermit, users must approve the BoringVault to spend their assets, not the Teller.


User Exit

User withdrawals are processed through the bulkWithdraw function through the Atomic Queue solver contract.


Bulk User Entry

The other way users can deposit is by utilizing the Atomic Queue. When users deposit this way, their shares are not locked to their address after the deposit.

Last updated