SiloRepository

SiloRepository

SiloRepository handles the creation and configuration of Silos.

Stores configuration for each asset in each silo. Each asset in each Silo starts with a default config can later be changed by the contract owner. Stores registry of Factory contracts that deploy different versions of Silos. It is possible to have multiple versions/implementations of Silo and use different versions for different tokens. For example, one version can be used for UNI (ERC20) and the other can be used for UniV3LP tokens (ERC721). Manages bridge assets. Each Silo can have 1 or more bridge assets. New Silos are created with all currently active bridge assets. Silos that are already developed must synchronize bridge assets. Sync can be done by anyone, function has public access. Is a single source of truth for other contract addresses.

Methods

acceptOwnership

function acceptOwnership() external nonpayable

Transfers ownership of the contract to a pending owner Can only be called by the pending owner.

addBridgeAsset

function addBridgeAsset(address _newBridgeAsset) external nonpayable

Adds new bridge asset

New bridge asset must be unique. Duplicates in bridge assets are not allowed. It's possible to add bridge asset that has been removed in the past. Note that all Silos must be synced manually. Callable only by owner.

Parameters

Name
Type
Description

_newBridgeAsset

address

bridge asset address

assetConfigs

maps silo => asset => config

Parameters

Name
Type
Description

_0

address

undefined

_1

address

undefined

Returns

Name
Type
Description

maxLoanToValue

uint64

undefined

liquidationThreshold

uint64

undefined

interestRateModel

contract IInterestRateModel

undefined

bridgePool

Silo for bridge asset. We can have only one bridge pool

Returns

Name
Type
Description

_0

address

undefined

defaultAssetConfig

Default values for AssetConfig. Used if values are not configured manually.

Returns

Name
Type
Description

maxLoanToValue

uint64

undefined

liquidationThreshold

uint64

undefined

interestRateModel

contract IInterestRateModel

undefined

ensureCanCreateSiloFor

checks all conditions for new silo creation and throws when not possible to create

Parameters

Name
Type
Description

_asset

address

address of asset for which you want to create silo

_assetIsABridge

bool

bool TRUE when _asset is bridge asset, FALSE when it is not

entryFee

Get protocol fee for opening a borrow position

Returns

Name
Type
Description

_0

uint256

fee in precision points (BaseSilo.PRECISION_DECIMALS() == 100%)

fees

Returns

Name
Type
Description

entryFee

uint64

undefined

protocolShareFee

uint64

undefined

protocolLiquidationFee

uint64

undefined

getBridgeAssets

Get current bridge assets

Keep in mind that not all Silos may be synced with current bridge assets so it's possbile that some assets in that list are not part of given Silo.

Returns

Name
Type
Description

_0

address[]

address array of bridge assets

getInterestRateModel

Get Interest Rate Model address for asset in given Silo

If dedicated config is not set, method returns default config

Parameters

Name
Type
Description

_silo

address

address of Silo

_asset

address

address of an asset

Returns

Name
Type
Description

model

contract IInterestRateModel

address of interest rate model

getLiquidationThreshold

Get liquidation threshold for asset in given Silo

If dedicated config is not set, method returns default config

Parameters

Name
Type
Description

_silo

address

address of Silo

_asset

address

address of an asset

Returns

Name
Type
Description

_0

uint256

liquidation threshold in precision points (BaseSilo.PRECISION_DECIMALS())

getMaxSiloDeposits

Gets deposit limit for Silo

Parameters

Name
Type
Description

_silo

address

Silo address for which to set limit

_asset

address

Silo asset for which to set limit

Returns

Name
Type
Description

_0

uint256

deposit limit for Silo

getMaximumLTV

Get maximum LTV for asset in given Silo

If dedicated config is not set, method returns default config

Parameters

Name
Type
Description

_silo

address

address of Silo

_asset

address

address of an asset

Returns

Name
Type
Description

_0

uint256

maximum LTV in precision points (BaseSilo.PRECISION_DECIMALS())

getNotificationReceiver

Maps Silo address to incentive contract that will distribute rewards for that Silo

Parameters

Name
Type
Description

_0

address

undefined

Returns

Name
Type
Description

_0

contract INotificationReceiver

undefined

getRemovedBridgeAssets

Get removed bridge assets

Keep in mind that not all Silos may be synced with bridge assets so it's possbile that some assets in that list are still part of given Silo.

Returns

Name
Type
Description

_0

address[]

address array of bridge assets

getSilo

maps token address to silo address, asset => silo

Parameters

Name
Type
Description

_0

address

undefined

Returns

Name
Type
Description

_0

address

undefined

isPaused

Returns

Name
Type
Description

globalPause

bool

undefined

isSilo

Check if contract address is a Silo deployment

Parameters

Name
Type
Description

_silo

address

address of expected Silo

Returns

Name
Type
Description

_0

bool

true if address is Silo deployment, otherwise false

isSiloPaused

Check given asset in a Silo is paused

Parameters

Name
Type
Description

_silo

address

address of Silo

_asset

address

address of an asset

Returns

Name
Type
Description

_0

bool

true if given asset in a Silo is paused, otherwise false

maxLiquidity

Returns

Name
Type
Description

globalToggle

bool

undefined

defaultMaxLiquidity

uint256

undefined

newSilo

use this method only when off-chain verification is OFF

Silo does NOT support rebase and deflationary tokens

Parameters

Name
Type
Description

_siloAsset

address

silo asset

_siloVersion

uint128

version of silo implementation

_siloData

bytes

(optional) data that may be needed during silo creation

owner

Get owner role address of Repository

Returns

Name
Type
Description

_0

address

owner role address

pendingOwner

Returns the address of the pending owner.

Returns

Name
Type
Description

_0

address

undefined

priceProvidersRepository

PriceProvidersRepository contract that manages ProceProviders implementations and is an entry point for reading prices for Silos.

Returns

Name
Type
Description

_0

contract IPriceProvidersRepository

undefined

protocolLiquidationFee

Get protocol liquidation fee

Returns

Name
Type
Description

_0

uint256

protocol liquidation fee in precision points (BaseSilo.PRECISION_DECIMALS() == 100%)

protocolShareFee

Get protocol share fee

Returns

Name
Type
Description

_0

uint256

protocol share fee in precision points (BaseSilo.PRECISION_DECIMALS() == 100%)

registerSiloVersion

Registers new Silo version

User can choose which Silo version he wants to deploy. It's possible to have multiple versions of Silo. Callable only by owner.

Parameters

Name
Type
Description

_factory

contract ISiloFactory

factory contract that deploys new version of Silo

_isDefault

bool

true if this version should be used as default

removeBridgeAsset

Removes bridge asset

Note that all Silos must be synced manually. Callable only by owner.

Parameters

Name
Type
Description

_bridgeAssetToRemove

address

bridge asset address to be removed

renounceOwnership

Leaves the contract without owner. It will not be possible to call onlyOwner functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.

replaceSilo

use this method to deploy new version of Silo for an asset that already has Silo deployed. Only owner (DAO) can replace.

Silo does NOT support rebase and deflationary tokens

Parameters

Name
Type
Description

_siloAsset

address

silo asset

_siloVersion

uint128

version of silo implementation. Use 0 for default version which is fine for 99% of cases.

_siloData

bytes

(optional) data that may be needed during silo creation

router

SiloRouter utility contract that combines number of actions (Deposit, Withdraw, Borrow, Repay) for batch execution in single transaction.

Returns

Name
Type
Description

_0

address

undefined

setAssetConfig

Set configuration for given asset in given Silo

Callable only by owner

Parameters

Name
Type
Description

_silo

address

Silo address for which config applies

_asset

address

asset address for which config applies

_assetConfig

ISiloRepository.AssetConfig

: - _maxLoanToValue maximum Loan-to-Value, for detailes see Repository.AssetConfig.maxLoanToValue - _liquidationThreshold liquidation threshold, for detailes see Repository.AssetConfig.maxLoanToValue - _interestRateModel interest rate model address, for detailes see Repository.AssetConfig.interestRateModel

setDefaultInterestRateModel

Set default interest rate model

Callable only by owner

Parameters

Name
Type
Description

_defaultInterestRateModel

contract IInterestRateModel

default interest rate model

setDefaultLiquidationThreshold

Set default liquidation threshold

Callable only by owner

Parameters

Name
Type
Description

_defaultLiquidationThreshold

uint64

default liquidation threshold in precision points (BaseSilo.PRECISION_DECIMALS())

setDefaultMaximumLTV

Set default maximum LTV

Callable only by owner

Parameters

Name
Type
Description

_defaultMaxLTV

uint64

default maximum LTV in precision points (BaseSilo.PRECISION_DECIMALS())

setDefaultSiloMaxDepositsLimit

Sets default deposit limit for all Silos

Parameters

Name
Type
Description

_maxDeposits

uint256

deposit limit amount in ETH

setDefaultSiloVersion

Set default Silo version

Callable only by owner.

Parameters

Name
Type
Description

_defaultVersion

uint128

Silo version to be set as default

setFees

Set default fees

Callable only by owner

Parameters

Name
Type
Description

_fees

ISiloRepository.Fees

: - _entryFee one time protocol fee for opening a borrow position in precision points (BaseSilo.PRECISION_DECIMALS()) - _protocolShareFee protocol revenue share in interest paid in precision points (BaseSilo.PRECISION_DECIMALS()) - _protocolLiquidationFee protocol share in liquidation profit in precision points (BaseSilo.PRECISION_DECIMALS()). It's calculated from total collateral amount to be transferred to liquidator.

setGlobalPause

Pause all Silos

Callable only by owner.

Parameters

Name
Type
Description

_globalPause

bool

true to pause all Silos, otherwise false

setNotificationReceiver

Set NotificationReceiver contract

Callable only by owner

Parameters

Name
Type
Description

_silo

address

silo address for which to set _notificationReceiver

_newNotificationReceiver

contract INotificationReceiver

undefined

setPriceProvidersRepository

Set price provider repository

Callable only by owner

Parameters

Name
Type
Description

_repository

address

price provider repository address

setRouter

Set router contract

Callable only by owner

Parameters

Name
Type
Description

_router

address

router address

setSiloMaxDepositsLimit

Sets deposit limit for Silo

Parameters

Name
Type
Description

_silo

address

Silo address for which to set limit

_asset

address

Silo asset for which to set limit

_maxDeposits

uint256

deposit limit amount in ETH

setSiloPause

Pause single asset in a single Silo

Callable only by owner.

Parameters

Name
Type
Description

_silo

address

address of Silo in which _asset is being paused

_asset

address

address of an asset that is being paused

_pauseValue

bool

true to pause, false to unpause

setTokensFactory

Set factory contract for debt and collateral tokens for each Silo asset

Callable only by owner

Parameters

Name
Type
Description

_tokensFactory

address

address of TokensFactory contract that deploys debt and collateral tokens

siloFactory

Maps version => ISiloFactory. Versions start at 1 and are incremented by 1.

Parameters

Name
Type
Description

_0

uint256

undefined

Returns

Name
Type
Description

_0

contract ISiloFactory

undefined

siloRepositoryPing

Returns

Name
Type
Description

_0

bool

undefined

siloReverse

maps silo address to token address, silo => asset

Parameters

Name
Type
Description

_0

address

undefined

Returns

Name
Type
Description

_0

address

undefined

siloVersion

Returns

Name
Type
Description

byDefault

uint128

undefined

latest

uint128

undefined

toggleLimitedMaxLiquidity

Switch to turn on and off limited liquidity

tokensFactory

Factory contracts that deploys debt and collateral tokens for each asset in Silo

Returns

Name
Type
Description

_0

contract ITokensFactory

undefined

transferOwnership

Transfers ownership of the contract to a new account (newOwner). Can only be called by the current owner.

Parameters

Name
Type
Description

newOwner

address

undefined

transferPendingOwnership

Transfers pending ownership of the contract to a new account (newPendingOwner). Can only be called by the current owner.

Parameters

Name
Type
Description

newPendingOwner

address

undefined

unregisterSiloVersion

Unregisters Silo version

Callable only by owner.

Parameters

Name
Type
Description

_siloVersion

uint128

Silo version to be unregistered

Events

BridgeAssetAdded

Emitted on new bridge asset

Parameters

Name
Type
Description

newBridgeAsset

address

undefined

BridgeAssetRemoved

Emitted on removed bridge asset

Parameters

Name
Type
Description

bridgeAssetRemoved

address

undefined

BridgePool

Emitted when new Silo (or existing one) becomes a bridge pool (pool with only bridge tokens).

Parameters

Name
Type
Description

pool indexed

address

undefined

DefaultSiloMaxDepositsLimitUpdate

Emitted when default max liquidity limit is changed

Parameters

Name
Type
Description

newMaxDeposits

uint256

undefined

FeeUpdate

Emitted when default fee is updated

Parameters

Name
Type
Description

newEntryFee

uint64

undefined

newProtocolShareFee

uint64

undefined

newProtocolLiquidationFee

uint64

undefined

GlobalPause

Emitted when all Silos are paused or unpaused

Parameters

Name
Type
Description

globalPause

bool

undefined

InterestRateModel

Emitted when default interest rate model is changed

Parameters

Name
Type
Description

newModel

contract IInterestRateModel

undefined

LimitedMaxLiquidityToggled

Emitted when max liquidity toggle is switched

Parameters

Name
Type
Description

newLimitedMaxLiquidityState

bool

undefined

NewDefaultLiquidationThreshold

Parameters

Name
Type
Description

defaultLiquidationThreshold

uint64

undefined

NewDefaultMaximumLTV

Parameters

Name
Type
Description

defaultMaximumLTV

uint64

undefined

NewSilo

Emitted on new Silo creation

Parameters

Name
Type
Description

silo indexed

address

undefined

asset indexed

address

undefined

siloVersion

uint128

undefined

NotificationReceiverUpdate

Emitted on INotificationReceiver address update

Parameters

Name
Type
Description

newIncentiveContract

contract INotificationReceiver

undefined

OwnershipPending

Emitted when ownership transfer is proposed, aka pending owner is set

Parameters

Name
Type
Description

previousOwner indexed

address

undefined

newOwner indexed

address

undefined

OwnershipTransferred

Emitted when ownership is transferred on transferOwnership and acceptOwnership

Parameters

Name
Type
Description

previousOwner indexed

address

undefined

newOwner indexed

address

undefined

PriceProvidersRepositoryUpdate

Emitted on price provider repository address update

Parameters

Name
Type
Description

oldProvider

contract IPriceProvidersRepository

undefined

newProvider

contract IPriceProvidersRepository

undefined

RegisterSiloVersion

Emitted when new Silo version is registered

Parameters

Name
Type
Description

factory

address

undefined

siloLatestVersion

uint128

undefined

siloDefaultVersion

uint128

undefined

RouterUpdate

Emitted on router address update

Parameters

Name
Type
Description

oldRouter

address

undefined

newRouter

address

undefined

SiloDefaultVersion

Emitted when default Silo version is updated

Parameters

Name
Type
Description

oldDefaultVersion

uint128

undefined

newDefaultVersion

uint128

undefined

SiloMaxDepositsLimitsUpdate

Emitted when deposit liquidity limit is changed for Silo and asset

Parameters

Name
Type
Description

silo indexed

address

undefined

asset indexed

address

undefined

newMaxDeposits

uint256

undefined

SiloPause

Emitted when asingle Silo or single asset in a Silo is paused or unpaused

Parameters

Name
Type
Description

silo

address

undefined

asset

address

undefined

pauseValue

bool

undefined

TokensFactoryUpdate

Emitted on token factory address update

Parameters

Name
Type
Description

oldTokensFactory

address

undefined

newTokensFactory

address

undefined

UnregisterSiloVersion

Emitted when Silo version is unregistered

Parameters

Name
Type
Description

factory

address

undefined

siloVersion

uint128

undefined

Errors

AddressZeroAsInput

AssetIsNotABridge

CanNotRemoveLastBridgeAssets

InvalidTokenAddress

NoPriceProviderForAsset

SiloAlreadyExistsForAsset

SiloForBridgeAssetsAlreadyExists

SiloNotAllowedForBridgeAsset

SiloNotExists

Last updated