SiloLens
SiloLens
Utility contract that simplifies reading data from Silo protocol contracts
function balanceOfUnderlying(uint256 _assetTotalDeposits, contract IShareToken _shareToken, address _user) external view returns (uint256)
Get underlying balance of collateral or debt token
You can think about debt and collateral tokens as cToken in compound. They represent ownership of debt or collateral in given Silo. This method converts that ownership to exact amount of underlying token.
Name | Type | Description |
---|---|---|
_assetTotalDeposits | uint256 | Total amount of assets that has been deposited or borrowed. For collateral token, use totalDeposits to get this value. For debt token, use totalBorrowAmount to get this value. |
_shareToken | contract IShareToken | share token address. It's the collateral and debt share token address. You can find these addresses in: - ISilo.AssetStorage.collateralToken - ISilo.AssetStorage.collateralOnlyToken - ISilo.AssetStorage.debtToken |
_user | address | wallet address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | balance of underlying token deposited or borrowed of given user |
function borrowAPY(contract ISilo _silo, address _asset) external view returns (uint256)
Yearly interest rate for borrowing asset token, dynamically calculated for current block timestamp
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address |
Name | Type | Description |
---|---|---|
_0 | uint256 | APY with 18 decimals |
function borrowShare(contract ISilo _silo, address _asset, address _user) external view returns (uint256)
Get debt token balance of a user
Debt token represents a share in total debt of given asset. This method calls balanceOf(_user) on that token.
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address for which to read data |
_user | address | wallet address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | balance of debt token of given user |
function calcFee(uint256 _amount) external view returns (uint256)
Calculate amount of entry fee for given amount
Name | Type | Description |
---|---|---|
_amount | uint256 | amount for which to calculate fee |
Name | Type | Description |
---|---|---|
_0 | uint256 | Amount of token fee to be paid |
function calculateBorrowValue(contract ISilo _silo, address _user, address _asset, uint256, uint256) external view returns (uint256)
Calculate value of borrowed asset by user
It dynamically adds interest earned to borrowed amount
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_user | address | account for which calculation are done |
_asset | address | token address for which calculation are done |
_3 | uint256 | undefined |
_4 | uint256 | undefined |
Name | Type | Description |
---|---|---|
_0 | uint256 | value of debt denominated in ETH with 18 decimal |
function calculateCollateralValue(contract ISilo _silo, address _user, address _asset) external view returns (uint256)
Calculate value of collateral asset for user
It dynamically adds interest earned. Takes for account collateral only deposits as well.
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_user | address | account for which calculation are done |
_asset | address | token address for which calculation are done |
Name | Type | Description |
---|---|---|
_0 | uint256 | value of collateral denominated in ETH with 18 decimal |
function collateralBalanceOfUnderlying(contract ISilo _silo, address _asset, address _user) external view returns (uint256)
Get underlying balance of all deposits of given token of given user including "collateralOnly" deposits
It reads directly from storage so interest generated between last update and now is not taken for account
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address for which to read data |
_user | address | wallet address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | balance of debt token of given user |
function collateralOnlyDeposits(contract ISilo _silo, address _asset) external view returns (uint256)
Get amount of asset token that has been deposited to Silo with option "collateralOnly"
It reads directly from storage so interest generated between last update and now is not taken for account
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | amount of all "collateralOnly" deposits made for given asset |
function debtBalanceOfUnderlying(contract ISilo _silo, address _asset, address _user) external view returns (uint256)
Get amount of debt of underlying token for given user
It reads directly from storage so interest generated between last update and now is not taken for account
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address for which to read data |
_user | address | wallet address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | balance of underlying token owed |
function depositAPY(contract ISilo _silo, address _asset) external view returns (uint256)
Yearly interest rate for depositing asset token, dynamically calculated for current block timestamp
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address |
Name | Type | Description |
---|---|---|
_0 | uint256 | APY with 18 decimals |
function getBorrowAmount(contract ISilo _silo, address _asset, address _user, uint256 _timestamp) external view returns (uint256)
Calculates current borrow amount for user with interest
Interest is calculated based on the provided timestamp with is expected to be current time.
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | token address for which calculation are done |
_user | address | account for which calculation are done |
_timestamp | uint256 | timestamp used for interest calculations |
Name | Type | Description |
---|---|---|
_0 | uint256 | total amount of asset user needs to repay at provided timestamp |
function getModel(contract ISilo _silo, address _asset) external view returns (contract IInterestRateModel)
gets interest rates model object
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset for which to calculate interest rate |
Name | Type | Description |
---|---|---|
_0 | contract IInterestRateModel | IInterestRateModel interest rates model object |
function getUserLTV(contract ISilo _silo, address _user) external view returns (uint256 userLTV)
Returns Loan-To-Value for an account
Each Silo has multiple asset markets (bridge assets + unique asset). This function calculates a sum of all deposits and all borrows denominated in ETH. Returns fraction between borrow value and deposit value with 18 decimals.
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_user | address | wallet address for which LTV is calculated |
Name | Type | Description |
---|---|---|
userLTV | uint256 | user current LTV with 18 decimals |
function getUserLiquidationThreshold(contract ISilo _silo, address _user) external view returns (uint256 liquidationThreshold)
Get combined liquidation threshold for a user
Methodology for calculating liquidation threshold is as follows. Each Silo is combined form multiple assets (bridge assets + unique asset). Each of these assets may have different liquidation threshold. That means effective liquidation threshold must be calculated per asset based on current deposits and borrows of given account.
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_user | address | wallet address for which to read data |
Name | Type | Description |
---|---|---|
liquidationThreshold | uint256 | liquidation threshold of given user |
function getUserMaximumLTV(contract ISilo _silo, address _user) external view returns (uint256 maximumLTV)
Get combined maximum Loan-To-Value for a user
Methodology for calculating maximum LTV is as follows. Each Silo is combined form multiple assets (bridge assets + unique asset). Each of these assets may have different maximum Loan-To-Value for opening borrow position. That means effective maximum LTV must be calculated per asset based on current deposits and borrows of given account.
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_user | address | wallet address for which to read data |
Name | Type | Description |
---|---|---|
maximumLTV | uint256 | Maximum Loan-To-Value of given user |
function getUtilization(contract ISilo _silo, address _asset) external view returns (uint256)
Calculates fraction between borrowed and deposited amount of tokens for given asset denominated in percentage
Utilization is calculated current values in storage so it does not take for account earned interest and ever-increasing total borrow amount. It assumes 1e18 = 100%.
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address |
Name | Type | Description |
---|---|---|
_0 | uint256 | utilization value |
function inDebt(contract ISilo _silo, address _user) external view returns (bool)
Check if user is in debt
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_user | address | wallet address for which to read data |
Name | Type | Description |
---|---|---|
_0 | bool | TRUE if user borrowed any amount of any asset, otherwise FALSE |
function lensPing() external pure returns (bool)
Method for sanity check
Name | Type | Description |
---|---|---|
_0 | bool | always true |
function liquidity(contract ISilo _silo, address _asset) external view returns (uint256)
Amount of token that is available for borrowing.
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | Silo liquidity |
function protocolFees(contract ISilo _silo, address _asset) external view returns (uint256)
Get amount of fees earned by protocol to date
It reads directly from storage so interest generated between last update and now is not taken for account
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | amount of fees earned by protocol to date |
function siloRepository() external view returns (contract ISiloRepository)
Name | Type | Description |
---|---|---|
_0 | contract ISiloRepository | undefined |
function totalBorrowAmount(contract ISilo _silo, address _asset) external view returns (uint256)
Get amount of asset that has been borrowed
It reads directly from storage so interest generated between last update and now is not taken for account
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | amount of asset that has been borrowed |
function totalBorrowAmountWithInterest(contract ISilo _silo, address _asset) external view returns (uint256 _totalBorrowAmount)
returns total borrow amount with interest dynamically calculated at current block timestamp
Name | Type | Description |
---|---|---|
_silo | contract ISilo | undefined |
_asset | address | asset address |
Name | Type | Description |
---|---|---|
_totalBorrowAmount | uint256 | total deposits amount with interest |
function totalBorrowShare(contract ISilo _silo, address _asset) external view returns (uint256)
Get totalSupply of debt token
Debt token represents a share in total debt of given asset
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | totalSupply of debt token |
function totalDeposits(contract ISilo _silo, address _asset) external view returns (uint256)
Get amount of asset token that has been deposited to Silo
It reads directly from storage so interest generated between last update and now is not taken for account
Name | Type | Description |
---|---|---|
_silo | contract ISilo | Silo address from which to read data |
_asset | address | asset address for which to read data |
Name | Type | Description |
---|---|---|
_0 | uint256 | amount of all deposits made for given asset |
function totalDepositsWithInterest(contract ISilo _silo, address _asset) external view returns (uint256 _totalDeposits)
returns total deposits with interest dynamically calculated at current block timestamp
Name | Type | Description |
---|---|---|
_silo | contract ISilo | undefined |
_asset | address | asset address |
Name | Type | Description |
---|---|---|
_totalDeposits | uint256 | total deposits amount with interest |