SiloLens

SiloLens

Utility contract that simplifies reading data from Silo protocol contracts

Methods

balanceOfUnderlying

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.

Parameters

NameTypeDescription

_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

Returns

NameTypeDescription

_0

uint256

balance of underlying token deposited or borrowed of given user

borrowAPY

function borrowAPY(contract ISilo _silo, address _asset) external view returns (uint256)

Yearly interest rate for borrowing asset token, dynamically calculated for current block timestamp

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset address

Returns

NameTypeDescription

_0

uint256

APY with 18 decimals

borrowShare

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.

Parameters

NameTypeDescription

_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

Returns

NameTypeDescription

_0

uint256

balance of debt token of given user

calcFee

function calcFee(uint256 _amount) external view returns (uint256)

Calculate amount of entry fee for given amount

Parameters

NameTypeDescription

_amount

uint256

amount for which to calculate fee

Returns

NameTypeDescription

_0

uint256

Amount of token fee to be paid

calculateBorrowValue

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

Parameters

NameTypeDescription

_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

Returns

NameTypeDescription

_0

uint256

value of debt denominated in ETH with 18 decimal

calculateCollateralValue

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.

Parameters

NameTypeDescription

_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

Returns

NameTypeDescription

_0

uint256

value of collateral denominated in ETH with 18 decimal

collateralBalanceOfUnderlying

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

Parameters

NameTypeDescription

_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

Returns

NameTypeDescription

_0

uint256

balance of debt token of given user

collateralOnlyDeposits

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

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset address for which to read data

Returns

NameTypeDescription

_0

uint256

amount of all "collateralOnly" deposits made for given asset

debtBalanceOfUnderlying

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

Parameters

NameTypeDescription

_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

Returns

NameTypeDescription

_0

uint256

balance of underlying token owed

depositAPY

function depositAPY(contract ISilo _silo, address _asset) external view returns (uint256)

Yearly interest rate for depositing asset token, dynamically calculated for current block timestamp

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset address

Returns

NameTypeDescription

_0

uint256

APY with 18 decimals

getBorrowAmount

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.

Parameters

NameTypeDescription

_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

Returns

NameTypeDescription

_0

uint256

total amount of asset user needs to repay at provided timestamp

getModel

function getModel(contract ISilo _silo, address _asset) external view returns (contract IInterestRateModel)

gets interest rates model object

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset for which to calculate interest rate

Returns

NameTypeDescription

_0

contract IInterestRateModel

IInterestRateModel interest rates model object

getUserLTV

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.

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_user

address

wallet address for which LTV is calculated

Returns

NameTypeDescription

userLTV

uint256

user current LTV with 18 decimals

getUserLiquidationThreshold

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.

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_user

address

wallet address for which to read data

Returns

NameTypeDescription

liquidationThreshold

uint256

liquidation threshold of given user

getUserMaximumLTV

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.

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_user

address

wallet address for which to read data

Returns

NameTypeDescription

maximumLTV

uint256

Maximum Loan-To-Value of given user

getUtilization

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

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset address

Returns

NameTypeDescription

_0

uint256

utilization value

inDebt

function inDebt(contract ISilo _silo, address _user) external view returns (bool)

Check if user is in debt

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_user

address

wallet address for which to read data

Returns

NameTypeDescription

_0

bool

TRUE if user borrowed any amount of any asset, otherwise FALSE

lensPing

function lensPing() external pure returns (bool)

Method for sanity check

Returns

NameTypeDescription

_0

bool

always true

liquidity

function liquidity(contract ISilo _silo, address _asset) external view returns (uint256)

Amount of token that is available for borrowing.

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset address for which to read data

Returns

NameTypeDescription

_0

uint256

Silo liquidity

protocolFees

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

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset address for which to read data

Returns

NameTypeDescription

_0

uint256

amount of fees earned by protocol to date

siloRepository

function siloRepository() external view returns (contract ISiloRepository)

Returns

NameTypeDescription

_0

contract ISiloRepository

undefined

totalBorrowAmount

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

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset address for which to read data

Returns

NameTypeDescription

_0

uint256

amount of asset that has been borrowed

totalBorrowAmountWithInterest

function totalBorrowAmountWithInterest(contract ISilo _silo, address _asset) external view returns (uint256 _totalBorrowAmount)

returns total borrow amount with interest dynamically calculated at current block timestamp

Parameters

NameTypeDescription

_silo

contract ISilo

undefined

_asset

address

asset address

Returns

NameTypeDescription

_totalBorrowAmount

uint256

total deposits amount with interest

totalBorrowShare

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

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset address for which to read data

Returns

NameTypeDescription

_0

uint256

totalSupply of debt token

totalDeposits

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

Parameters

NameTypeDescription

_silo

contract ISilo

Silo address from which to read data

_asset

address

asset address for which to read data

Returns

NameTypeDescription

_0

uint256

amount of all deposits made for given asset

totalDepositsWithInterest

function totalDepositsWithInterest(contract ISilo _silo, address _asset) external view returns (uint256 _totalDeposits)

returns total deposits with interest dynamically calculated at current block timestamp

Parameters

NameTypeDescription

_silo

contract ISilo

undefined

_asset

address

asset address

Returns

NameTypeDescription

_totalDeposits

uint256

total deposits amount with interest

Errors

IncorrectDataLength

error IncorrectDataLength()

Last updated