Ejemplo n.º 1
0
def test_assets_user_metadata(ironBankAdapter, accounts, oracle):
    # sushi and cySuchi
    sushi = Contract(sushiAddress)
    cySushi = Contract(cySushiAddress)
    whale = accounts.at(sushiWhaleAddress, force=True)
    MAX_UINT256 = 2**256 - 1
    sushi.approve(cySushi, MAX_UINT256, {"from": whale})
    sushi_bal = sushi.balanceOf(whale)
    cySushi.mint(sushi_bal, {"from": whale})
    assert sushi.balanceOf(whale) == 0
    assert cySushi.balanceOf(whale) > 0

    # yfi and cyYfi
    yfi = Contract(yfiAddress)
    cyYfi = Contract(cyYfiAddress)
    whale = accounts.at(sushiWhaleAddress, force=True)
    MAX_UINT256 = 2**256 - 1
    yfi.approve(cyYfi, MAX_UINT256, {"from": whale})
    yfi_bal = yfi.balanceOf(whale)
    cyYfi.mint(yfi_bal, {"from": whale})
    assert yfi.balanceOf(whale) == 0
    assert cyYfi.balanceOf(whale) > 0

    comptroller = Contract(comptrollerAddress)
    _, sushiCollateralFactor, _ = comptroller.markets(cySushiAddress)
    _, yfiCollateralFactor, _ = comptroller.markets(cyYfiAddress)

    comptroller.enterMarkets([cySushi, cyYfi], {"from": whale})

    # sushi
    sushiTokenAddress = cySushi.underlying()
    sushiPriceUsdc = ironBankAdapter.assetUnderlyingTokenPriceUsdc(cySushi)
    sushiExchangeRate = cySushi.exchangeRateStored()
    sushiSupplyBalShares = cySushi.balanceOf(whale)
    sushiSupplyBalUnderlying = (sushiSupplyBalShares *
                                sushiExchangeRate) / 10**18
    sushiSupplyBalUsdc = oracle.getNormalizedValueUsdc(
        sushiTokenAddress, sushiSupplyBalUnderlying, sushiPriceUsdc)

    sushiBorrowBalShares = cySushi.borrowBalanceStored(whale)
    sushiBorrowBalUsdc = oracle.getNormalizedValueUsdc(sushiTokenAddress,
                                                       sushiBorrowBalShares,
                                                       sushiPriceUsdc)

    _, sushiCollateralBalShare, _, _ = cySushi.getAccountSnapshot(whale)
    sushiCollateralBalUnderlying = (sushiCollateralBalShare *
                                    sushiExchangeRate / 10**18)

    sushiCollateralBalUsdc = oracle.getNormalizedValueUsdc(
        sushiTokenAddress, sushiCollateralBalUnderlying, sushiPriceUsdc)

    sushiBorrowLimitUsdc = sushiCollateralBalUsdc * sushiCollateralFactor / 10**18

    # yfi
    yfiTokenAddress = ironBankAdapter.assetUnderlyingTokenAddress(cyYfi)
    yfiPriceUsdc = ironBankAdapter.assetUnderlyingTokenPriceUsdc(cyYfi)
    yfiExchangeRate = cyYfi.exchangeRateStored()
    yfiSupplyBalShares = cyYfi.balanceOf(whale)
    yfiSupplyBalUnderlying = (yfiSupplyBalShares * yfiExchangeRate) / 10**18
    yfiSupplyBalUsdc = oracle.getNormalizedValueUsdc(yfiTokenAddress,
                                                     yfiSupplyBalUnderlying,
                                                     yfiPriceUsdc)

    yfiBorrowBalShares = cyYfi.borrowBalanceStored(whale)
    yfiBorrowBalUsdc = oracle.getNormalizedValueUsdc(yfiTokenAddress,
                                                     yfiBorrowBalShares,
                                                     yfiPriceUsdc)

    _, yfiCollateralBalShare, _, _ = cyYfi.getAccountSnapshot(whale)
    yfiCollateralBalUnderlying = yfiCollateralBalShare * yfiExchangeRate / 10**18

    yfiCollateralBalUsdc = oracle.getNormalizedValueUsdc(
        yfiTokenAddress, yfiCollateralBalUnderlying, yfiPriceUsdc)

    yfiBorrowLimitUsdc = yfiCollateralBalUsdc * yfiCollateralFactor / 10**18

    asset_user_metadata = ironBankAdapter.assetsUserMetadata(
        whale, [cySushi, cyYfi])
    assert asset_user_metadata[0][0] == cySushi
    assert asset_user_metadata[0][1] == True
    assert asset_user_metadata[0][2] == sushiSupplyBalUsdc
    assert asset_user_metadata[0][3] == sushiBorrowBalUsdc
    assert asset_user_metadata[0][4] == sushiCollateralBalUsdc
    assert asset_user_metadata[0][5] == sushiBorrowLimitUsdc

    assert asset_user_metadata[1][0] == cyYfi
    assert asset_user_metadata[1][1] == True
    assert asset_user_metadata[1][2] == yfiSupplyBalUsdc
    assert asset_user_metadata[1][3] == yfiBorrowBalUsdc
    assert asset_user_metadata[1][4] == yfiCollateralBalUsdc
    assert asset_user_metadata[1][5] == yfiBorrowLimitUsdc
Ejemplo n.º 2
0
def test_asset_positions_of(ironBankAdapter, accounts):

    weth = Contract(wethAddress)
    cyWeth = Contract(cyWethAddress)
    user = accounts.at(userAddress, force=True)
    MAX_UINT256 = 2**256 - 1
    weth.approve(cyWeth, MAX_UINT256, {"from": user})
    weth_bal = weth.balanceOf(userAddress)
    cyWeth.mint(weth_bal, {"from": user})

    comptroller = Contract(comptrollerAddress)

    comptroller.enterMarkets([cyWeth], {"from": user})

    cyWeth = Contract(cyWethAddress)
    cyWethTokenAddress = ironBankAdapter.assetUnderlyingTokenAddress(
        cyWethAddress)
    cyWethTokenPrice = ironBankAdapter.assetUnderlyingTokenPriceUsdc(
        cyWethAddress)
    decimal = cyWeth.decimals()

    userSupplyBalanceShares = cyWeth.balanceOf(userAddress)
    userBorrowBalanceShares = cyWeth.borrowBalanceStored(userAddress)
    assert userSupplyBalanceShares > 0
    assert userBorrowBalanceShares > 0

    exchangeRate = cyWeth.exchangeRateStored()

    userSupplyBalanceUnderlying = userSupplyBalanceShares * exchangeRate / 10**18

    positions = ironBankAdapter.assetPositionsOf(userAddress, cyWethAddress)
    assert userSupplyBalanceUnderlying > 0
    # print(positions)
    supplyPosition = positions[0]

    # basic info test
    assetId = supplyPosition[0]
    tokenId = supplyPosition[1]
    typeId = supplyPosition[2]
    balance = supplyPosition[3]
    # print(assetId, tokenId, typeId, balance)
    assert assetId == cyWethAddress
    assert tokenId == cyWethTokenAddress
    assert typeId == "LEND"
    assert balance == userSupplyBalanceShares

    # Test token allowances
    tokenAllowances = supplyPosition[5]
    owner = tokenAllowances[0][0]
    spender = tokenAllowances[0][1]
    allowance = tokenAllowances[0][2]
    assert owner == userAddress
    assert spender == cyWethAddress
    assert allowance > 0

    # Test account borrow balance
    userBorrowedCyTokenBalance = userBorrowBalanceShares * 10**18 / exchangeRate

    borrowPosition = positions[1]

    # basic info test
    assetId = borrowPosition[0]
    tokenId = borrowPosition[1]
    typeId = borrowPosition[2]
    balance = borrowPosition[3]
    # print(assetId, tokenId, typeId, balance)
    assert assetId == cyWethAddress
    assert tokenId == cyWethTokenAddress
    assert typeId == "BORROW"
    assert balance == userBorrowedCyTokenBalance

    # Test token allowances
    tokenAllowances = borrowPosition[5]
    owner = tokenAllowances[0][0]
    spender = tokenAllowances[0][1]
    allowance = tokenAllowances[0][2]
    assert owner == userAddress
    assert spender == cyWethAddress
    assert allowance > 0