Exploring how the deposit function works


Using IbAlluoUSD as an example, users can call the deposit function using one of the stablecoins in the list of supported tokens.

function getListSupportedTokens() public view returns (address[] memory) {
    return supportedTokens.values();

function deposit(address _token, uint256 _amount) external {
    if (supportedTokens.contains(_token) == false) {
        ///Case 2, read below
        IERC20Upgradeable(_token).safeTransferFrom(_msgSender(), address(this), _amount);
        (, address primaryToken) = ILiquidityHandler(liquidityHandler).getAdapterCoreTokensFromIbAlluo(address(this));
        IERC20Upgradeable(_token).safeIncreaseAllowance(exchangeAddress, _amount);
        _amount = IExchange(exchangeAddress).exchange(_token, primaryToken, _amount, 0);
        _token = primaryToken;
        IERC20Upgradeable(primaryToken).safeTransfer(address(liquidityHandler), _amount);
    } else {
        /// Case 1, read below
    ILiquidityHandler(liquidityHandler).deposit(_token, _amount);
    uint256 amountIn18 = _amount * 10**(18 - AlluoERC20Upgradable(_token).decimals());
    uint256 adjustedAmount = (amountIn18 * multiplier) / growingRatio;
    _mint(_msgSender(), adjustedAmount);
    emit TransferAssetValue(address(0), _msgSender(), adjustedAmount, amountIn18, growingRatio);
    emit Deposited(_msgSender(), _token, _amount);

Case 1: If you deposit a token that is a 'supported' token:

If you deposit a supported token, it is sent to our liquidity handler and then the correct amount of IbAlluos are minted to the caller.

Case 2: If you deposit a token that is NOT a 'supported' token:

If you deposit a non-supported token, it is exchanged for the primaryToken for the IbAlluo through the Alluo Exchange and then the rest of the deposit process is completed.

Case 3: If you deposit a non-supported token and it is not supported by the Alluo Exchange:

If the deposit token is not supported and it is not added to the Alluo Exchange, the function call will revert.

Last updated