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
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