Silo
ISilo
Silo is the main component of the protocol. It implements lending logic, manages and isolates risk, acts as a vault for assets, and performs liquidations. Each Silo is composed of the unique asset for which it was created (ie. UNI) and bridge assets (ie. ETH and SiloDollar). There may be multiple bridge assets at any given time.
Main Silo contact that inherits from Base contract. It implements all user/UI facing methods.
Methods
ASSET_DECIMAL_POINTS
Returns
_0
uint256
undefined
VERSION
It tells us which SiloRepository.siloFactory(version)
created this Silo
Returns
_0
uint256
undefined
accrueInterest
Function to update interests for _asset
token since the last saved state
Parameters
_asset
address
The address of the token to be updated
allSiloAssets
Parameters
_0
uint256
undefined
Returns
_0
address
undefined
assetInterestData
Parameters
_0
address
undefined
Returns
harvestedProtocolFees
uint256
undefined
protocolFees
uint256
undefined
interestRateTimestamp
uint64
undefined
status
enum IBaseSilo.AssetStatus
undefined
assetStorage
Get asset storage data
Parameters
_asset
address
asset address
Returns
_0
IBaseSilo.AssetStorage
AssetStorage struct
borrow
Borrow _amount
of _asset
tokens from the Silo to msg.sender
Parameters
_asset
address
The address of the token to borrow
_amount
uint256
The amount of the token to borrow
borrowFor
Router function to borrow _amount
of _asset
tokens from the Silo for the _receiver
Parameters
_asset
address
The address of the token to borrow
_borrower
address
The address of the debt tokens receiver
_receiver
address
The address of the asset receiver
_amount
uint256
The amount of the token to borrow
borrowPossible
Check if borrowing an asset for given account is possible
Borrowing an asset that has been already deposited (and vice versa) is disallowed
Parameters
_asset
address
asset we want to deposit
_borrower
address
borrower address
Returns
_0
bool
true if asset can be borrowed by borrower
deposit
Deposit _amount
of _asset
tokens from msg.sender
to the Silo
Parameters
_asset
address
The address of the token to deposit
_amount
uint256
The amount of the token to deposit
_collateralOnly
bool
True if depositing collateral only
depositFor
Router function to deposit _amount
of _asset
tokens to the Silo for the _depositor
Parameters
_asset
address
The address of the token to deposit
_depositor
address
The address of the recipient of collateral tokens
_amount
uint256
The amount of the token to deposit
_collateralOnly
bool
True if depositing collateral only
depositPossible
Check if depositing an asset for given account is possible
Depositing an asset that has been already borrowed (and vice versa) is disallowed
Parameters
_asset
address
asset we want to deposit
_depositor
address
depositor address
Returns
_0
bool
true if asset can be deposited by depositor
flashLiquidate
this methods does not requires to have tokens in order to liquidate user
during liquidation process, msg.sender will be notified once all collateral will be send to him msg.sender needs to be IFlashLiquidationReceiver
Parameters
_users
address[]
array of users to liquidate
_flashReceiverData
bytes
this data will be forward to msg.sender on notification
Returns
assets
address[]
array of all processed assets (collateral + debt, including removed)
receivedCollaterals
uint256[][]
seizedCollaterals[userId][assetId] => amount amounts of collaterals send to _flashReceiver
shareAmountsToRepay
uint256[][]
shareAmountsToRepaid[userId][assetId] => amount required amounts of debt to be repaid
getAssets
Returns all initialized (synced) assets of Silo including current and removed bridge assets
Returns
assets
address[]
array of initialized assets of Silo
getAssetsWithState
Returns all initialized (synced) assets of Silo including current and removed bridge assets with corresponding state
Returns
assets
address[]
array of initialized assets of Silo
assetsStorage
IBaseSilo.AssetStorage[]
array of assets state corresponding to assets
array
harvestProtocolFees
harvest protocol fees from an array of assets
Parameters
_assets
address[]
array of assets we want to harvest fees from
initAssetsTokens
this is exposed only for test purposes, but it is safe to leave it like that
interestData
Get asset interest data
Parameters
_asset
address
asset address
Returns
_0
IBaseSilo.AssetInterestData
AssetInterestData struct
isSolvent
Calculates solvency of an account
Parameters
_user
address
wallet address for which solvency is calculated
Returns
_0
bool
true if solvent, false otherwise
repay
Repay _amount
of _asset
tokens from msg.sender
to the Silo
Parameters
_asset
address
The address of the token to repay
_amount
uint256
amount of asset to repay, includes interests
repayFor
Allows to repay in behalf of borrower to execute liquidation
Parameters
_asset
address
The address of the token to repay
_borrower
address
The address of the user to have debt tokens burned
_amount
uint256
amount of asset to repay, includes interests
siloAsset
Returns
_0
address
undefined
siloRepository
Get Silo Repository contract address
Returns
_0
contract ISiloRepository
undefined
state
Parameters
_0
address
undefined
Returns
collateralToken
contract IShareToken
undefined
collateralOnlyToken
contract IShareToken
undefined
debtToken
contract IShareToken
undefined
totalDeposits
uint256
undefined
collateralOnlyDeposits
uint256
undefined
totalBorrowAmount
uint256
undefined
syncBridgeAssets
Synchronize current bridge assets with Silo
This function needs to be called on Silo deployment to setup all assets for Silo. It needs to be called every time a bridged asset is added or removed. When bridge asset is removed, depositing and borrowing should be disabled during asset sync.
utilizationData
helper method for InterestRateModel calculations
Parameters
_asset
address
undefined
Returns
data
IBaseSilo.UtilizationData
undefined
withdraw
Withdraw _amount
of _asset
tokens from the Silo to msg.sender
Parameters
_asset
address
The address of the token to withdraw
_amount
uint256
The amount of the token to withdraw
_collateralOnly
bool
True if withdrawing collateral only deposit
withdrawFor
Router function to withdraw _amount
of _asset
tokens from the Silo for the _depositor
Parameters
_asset
address
The address of the token to withdraw
_depositor
address
The address of the collateral tokens source account
_receiver
address
The address of the asset receiver
_amount
uint256
The amount of the token to withdraw
_collateralOnly
bool
True if withdrawing collateral only deposit
Events
Borrow
Emitted on asset borrow
Parameters
asset indexed
address
undefined
user indexed
address
undefined
amount
uint256
undefined
Deposit
Emitted when deposit is made
Parameters
asset indexed
address
undefined
depositor indexed
address
undefined
amount
uint256
undefined
collateralOnly
bool
undefined
Liquidate
Emitted on user liquidation
Parameters
asset indexed
address
undefined
user indexed
address
undefined
shareAmountRepaid
uint256
undefined
seizedCollateral
uint256
undefined
Repay
Emitted on asset repay
Parameters
asset indexed
address
undefined
user indexed
address
undefined
amount
uint256
undefined
Withdraw
Emitted when withdraw is made
Parameters
asset indexed
address
undefined
depositor indexed
address
undefined
receiver indexed
address
undefined
amount
uint256
undefined
collateralOnly
bool
undefined
Errors
IncorrectDataLength
Last updated