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

VERSION

function VERSION() external view returns (uint256)

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

Returns

accrueInterest

function accrueInterest(address _asset) external nonpayable

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

Parameters

allSiloAssets

function allSiloAssets(uint256) external view returns (address)

Parameters

Returns

assetInterestData

function assetInterestData(address) external view returns (uint256 harvestedProtocolFees, uint256 protocolFees, uint64 interestRateTimestamp, enum IBaseSilo.AssetStatus status)

Parameters

Returns

assetStorage

function assetStorage(address _asset) external view returns (struct IBaseSilo.AssetStorage)

Get asset storage data

Parameters

Returns

borrow

function borrow(address _asset, uint256 _amount) external nonpayable

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

Parameters

borrowFor

function borrowFor(address _asset, address _borrower, address _receiver, uint256 _amount) external nonpayable

Router function to borrow _amount of _asset tokens from the Silo for the _receiver

Parameters

borrowPossible

function borrowPossible(address _asset, address _borrower) external view returns (bool)

Check if borrowing an asset for given account is possible

Borrowing an asset that has been already deposited (and vice versa) is disallowed

Parameters

Returns

deposit

function deposit(address _asset, uint256 _amount, bool _collateralOnly) external nonpayable

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

Parameters

depositFor

function depositFor(address _asset, address _depositor, uint256 _amount, bool _collateralOnly) external nonpayable

Router function to deposit _amount of _asset tokens to the Silo for the _depositor

Parameters

depositPossible

function depositPossible(address _asset, address _depositor) external view returns (bool)

Check if depositing an asset for given account is possible

Depositing an asset that has been already borrowed (and vice versa) is disallowed

Parameters

Returns

flashLiquidate

function flashLiquidate(address[] _users, bytes _flashReceiverData) external nonpayable returns (address[] assets, uint256[][] receivedCollaterals, uint256[][] shareAmountsToRepay)

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

Returns

getAssets

function getAssets() external view returns (address[] assets)

Returns all initialized (synced) assets of Silo including current and removed bridge assets

Returns

getAssetsWithState

function getAssetsWithState() external view returns (address[] assets, struct IBaseSilo.AssetStorage[] assetsStorage)

Returns all initialized (synced) assets of Silo including current and removed bridge assets with corresponding state

Returns

harvestProtocolFees

function harvestProtocolFees(address[] _assets) external nonpayable

harvest protocol fees from an array of assets

Parameters

initAssetsTokens

function initAssetsTokens() external nonpayable

this is exposed only for test purposes, but it is safe to leave it like that

interestData

function interestData(address _asset) external view returns (struct IBaseSilo.AssetInterestData)

Get asset interest data

Parameters

Returns

isSolvent

function isSolvent(address _user) external view returns (bool)

Calculates solvency of an account

Parameters

Returns

repay

function repay(address _asset, uint256 _amount) external nonpayable

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

Parameters

repayFor

function repayFor(address _asset, address _borrower, uint256 _amount) external nonpayable

Allows to repay in behalf of borrower to execute liquidation

Parameters

siloAsset

function siloAsset() external view returns (address)

Returns

siloRepository

function siloRepository() external view returns (contract ISiloRepository)

Get Silo Repository contract address

Returns

state

function state(address) external view returns (contract IShareToken collateralToken, contract IShareToken collateralOnlyToken, contract IShareToken debtToken, uint256 totalDeposits, uint256 collateralOnlyDeposits, uint256 totalBorrowAmount)

Parameters

Returns

syncBridgeAssets

function syncBridgeAssets() external nonpayable

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

function utilizationData(address _asset) external view returns (struct IBaseSilo.UtilizationData data)

helper method for InterestRateModel calculations

Parameters

Returns

withdraw

function withdraw(address _asset, uint256 _amount, bool _collateralOnly) external nonpayable

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

Parameters

withdrawFor

function withdrawFor(address _asset, address _depositor, address _receiver, uint256 _amount, bool _collateralOnly) external nonpayable

Router function to withdraw _amount of _asset tokens from the Silo for the _depositor

Parameters

Events

Borrow

event Borrow(address indexed asset, address indexed user, uint256 amount)

Emitted on asset borrow

Parameters

Deposit

event Deposit(address indexed asset, address indexed depositor, uint256 amount, bool collateralOnly)

Emitted when deposit is made

Parameters

Liquidate

event Liquidate(address indexed asset, address indexed user, uint256 shareAmountRepaid, uint256 seizedCollateral)

Emitted on user liquidation

Parameters

Repay

event Repay(address indexed asset, address indexed user, uint256 amount)

Emitted on asset repay

Parameters

Withdraw

event Withdraw(address indexed asset, address indexed depositor, address indexed receiver, uint256 amount, bool collateralOnly)

Emitted when withdraw is made

Parameters

Errors

IncorrectDataLength

error IncorrectDataLength()

Last updated