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

function ASSET_DECIMAL_POINTS() external view returns (uint256)

Returns

Name
Type
Description

_0

uint256

undefined

VERSION

function VERSION() external view returns (uint256)

It tells us which SiloRepository.siloFactory(version) created this Silo

Returns

Name
Type
Description

_0

uint256

undefined

accrueInterest

Function to update interests for _asset token since the last saved state

Parameters

Name
Type
Description

_asset

address

The address of the token to be updated

allSiloAssets

Parameters

Name
Type
Description

_0

uint256

undefined

Returns

Name
Type
Description

_0

address

undefined

assetInterestData

Parameters

Name
Type
Description

_0

address

undefined

Returns

Name
Type
Description

harvestedProtocolFees

uint256

undefined

protocolFees

uint256

undefined

interestRateTimestamp

uint64

undefined

status

enum IBaseSilo.AssetStatus

undefined

assetStorage

Get asset storage data

Parameters

Name
Type
Description

_asset

address

asset address

Returns

Name
Type
Description

_0

IBaseSilo.AssetStorage

AssetStorage struct

borrow

Borrow _amount of _asset tokens from the Silo to msg.sender

Parameters

Name
Type
Description

_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

Name
Type
Description

_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

Name
Type
Description

_asset

address

asset we want to deposit

_borrower

address

borrower address

Returns

Name
Type
Description

_0

bool

true if asset can be borrowed by borrower

deposit

Deposit _amount of _asset tokens from msg.sender to the Silo

Parameters

Name
Type
Description

_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

Name
Type
Description

_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

Name
Type
Description

_asset

address

asset we want to deposit

_depositor

address

depositor address

Returns

Name
Type
Description

_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

Name
Type
Description

_users

address[]

array of users to liquidate

_flashReceiverData

bytes

this data will be forward to msg.sender on notification

Returns

Name
Type
Description

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

Name
Type
Description

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

Name
Type
Description

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

Name
Type
Description

_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

Name
Type
Description

_asset

address

asset address

Returns

Name
Type
Description

_0

IBaseSilo.AssetInterestData

AssetInterestData struct

isSolvent

Calculates solvency of an account

Parameters

Name
Type
Description

_user

address

wallet address for which solvency is calculated

Returns

Name
Type
Description

_0

bool

true if solvent, false otherwise

repay

Repay _amount of _asset tokens from msg.sender to the Silo

Parameters

Name
Type
Description

_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

Name
Type
Description

_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

Name
Type
Description

_0

address

undefined

siloRepository

Get Silo Repository contract address

Returns

Name
Type
Description

_0

contract ISiloRepository

undefined

state

Parameters

Name
Type
Description

_0

address

undefined

Returns

Name
Type
Description

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

Name
Type
Description

_asset

address

undefined

Returns

Name
Type
Description

data

IBaseSilo.UtilizationData

undefined

withdraw

Withdraw _amount of _asset tokens from the Silo to msg.sender

Parameters

Name
Type
Description

_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

Name
Type
Description

_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

Name
Type
Description

asset indexed

address

undefined

user indexed

address

undefined

amount

uint256

undefined

Deposit

Emitted when deposit is made

Parameters

Name
Type
Description

asset indexed

address

undefined

depositor indexed

address

undefined

amount

uint256

undefined

collateralOnly

bool

undefined

Liquidate

Emitted on user liquidation

Parameters

Name
Type
Description

asset indexed

address

undefined

user indexed

address

undefined

shareAmountRepaid

uint256

undefined

seizedCollateral

uint256

undefined

Repay

Emitted on asset repay

Parameters

Name
Type
Description

asset indexed

address

undefined

user indexed

address

undefined

amount

uint256

undefined

Withdraw

Emitted when withdraw is made

Parameters

Name
Type
Description

asset indexed

address

undefined

depositor indexed

address

undefined

receiver indexed

address

undefined

amount

uint256

undefined

collateralOnly

bool

undefined

Errors

IncorrectDataLength

Last updated