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

assetConfigs

function assetConfigs(address, address) external view returns (uint64 maxLoanToValue, uint64 liquidationThreshold, contract IInterestRateModel interestRateModel)

maps silo => asset => config

Parameters

Returns

bridgePool

function bridgePool() external view returns (address)

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

Returns

defaultAssetConfig

function defaultAssetConfig() external view returns (uint64 maxLoanToValue, uint64 liquidationThreshold, contract IInterestRateModel interestRateModel)

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

Returns

ensureCanCreateSiloFor

function ensureCanCreateSiloFor(address _asset, bool _assetIsABridge) external view

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

Parameters

entryFee

function entryFee() external view returns (uint256)

Get protocol fee for opening a borrow position

Returns

fees

function fees() external view returns (uint64 entryFee, uint64 protocolShareFee, uint64 protocolLiquidationFee)

Returns

getBridgeAssets

function getBridgeAssets() external view returns (address[])

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

getInterestRateModel

function getInterestRateModel(address _silo, address _asset) external view returns (contract IInterestRateModel model)

Get Interest Rate Model address for asset in given Silo

If dedicated config is not set, method returns default config

Parameters

Returns

getLiquidationThreshold

function getLiquidationThreshold(address _silo, address _asset) external view returns (uint256)

Get liquidation threshold for asset in given Silo

If dedicated config is not set, method returns default config

Parameters

Returns

getMaxSiloDeposits

function getMaxSiloDeposits(address _silo, address _asset) external view returns (uint256)

Gets deposit limit for Silo

Parameters

Returns

getMaximumLTV

function getMaximumLTV(address _silo, address _asset) external view returns (uint256)

Get maximum LTV for asset in given Silo

If dedicated config is not set, method returns default config

Parameters

Returns

getNotificationReceiver

function getNotificationReceiver(address) external view returns (contract INotificationReceiver)

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

Parameters

Returns

getRemovedBridgeAssets

function getRemovedBridgeAssets() external view returns (address[])

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

getSilo

function getSilo(address) external view returns (address)

maps token address to silo address, asset => silo

Parameters

Returns

isPaused

function isPaused() external view returns (bool globalPause)

Returns

isSilo

function isSilo(address _silo) external view returns (bool)

Check if contract address is a Silo deployment

Parameters

Returns

isSiloPaused

function isSiloPaused(address _silo, address _asset) external view returns (bool)

Check given asset in a Silo is paused

Parameters

Returns

maxLiquidity

function maxLiquidity() external view returns (bool globalToggle, uint256 defaultMaxLiquidity)

Returns

newSilo

function newSilo(address _siloAsset, uint128 _siloVersion, bytes _siloData) external nonpayable

use this method only when off-chain verification is OFF

Silo does NOT support rebase and deflationary tokens

Parameters

owner

function owner() external view returns (address)

Get owner role address of Repository

Returns

pendingOwner

function pendingOwner() external view returns (address)

Returns the address of the pending owner.

Returns

priceProvidersRepository

function priceProvidersRepository() external view returns (contract IPriceProvidersRepository)

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

Returns

protocolLiquidationFee

function protocolLiquidationFee() external view returns (uint256)

Get protocol liquidation fee

Returns

protocolShareFee

function protocolShareFee() external view returns (uint256)

Get protocol share fee

Returns

registerSiloVersion

function registerSiloVersion(contract ISiloFactory _factory, bool _isDefault) external nonpayable

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

removeBridgeAsset

function removeBridgeAsset(address _bridgeAssetToRemove) external nonpayable

Removes bridge asset

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

Parameters

renounceOwnership

function renounceOwnership() external nonpayable

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

function replaceSilo(address _siloAsset, uint128 _siloVersion, bytes _siloData) external nonpayable

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

router

function router() external view returns (address)

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

Returns

setAssetConfig

function setAssetConfig(address _silo, address _asset, ISiloRepository.AssetConfig _assetConfig) external nonpayable

Set configuration for given asset in given Silo

Callable only by owner

Parameters

setDefaultInterestRateModel

function setDefaultInterestRateModel(contract IInterestRateModel _defaultInterestRateModel) external nonpayable

Set default interest rate model

Callable only by owner

Parameters

setDefaultLiquidationThreshold

function setDefaultLiquidationThreshold(uint64 _defaultLiquidationThreshold) external nonpayable

Set default liquidation threshold

Callable only by owner

Parameters

setDefaultMaximumLTV

function setDefaultMaximumLTV(uint64 _defaultMaxLTV) external nonpayable

Set default maximum LTV

Callable only by owner

Parameters

setDefaultSiloMaxDepositsLimit

function setDefaultSiloMaxDepositsLimit(uint256 _maxDeposits) external nonpayable

Sets default deposit limit for all Silos

Parameters

setDefaultSiloVersion

function setDefaultSiloVersion(uint128 _defaultVersion) external nonpayable

Set default Silo version

Callable only by owner.

Parameters

setFees

function setFees(ISiloRepository.Fees _fees) external nonpayable

Set default fees

Callable only by owner

Parameters

setGlobalPause

function setGlobalPause(bool _globalPause) external nonpayable

Pause all Silos

Callable only by owner.

Parameters

setNotificationReceiver

function setNotificationReceiver(address _silo, contract INotificationReceiver _newNotificationReceiver) external nonpayable

Set NotificationReceiver contract

Callable only by owner

Parameters

setPriceProvidersRepository

function setPriceProvidersRepository(address _repository) external nonpayable

Set price provider repository

Callable only by owner

Parameters

setRouter

function setRouter(address _router) external nonpayable

Set router contract

Callable only by owner

Parameters

setSiloMaxDepositsLimit

function setSiloMaxDepositsLimit(address _silo, address _asset, uint256 _maxDeposits) external nonpayable

Sets deposit limit for Silo

Parameters

setSiloPause

function setSiloPause(address _silo, address _asset, bool _pauseValue) external nonpayable

Pause single asset in a single Silo

Callable only by owner.

Parameters

setTokensFactory

function setTokensFactory(address _tokensFactory) external nonpayable

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

Callable only by owner

Parameters

siloFactory

function siloFactory(uint256) external view returns (contract ISiloFactory)

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

Parameters

Returns

siloRepositoryPing

function siloRepositoryPing() external pure returns (bool)

Returns

siloReverse

function siloReverse(address) external view returns (address)

maps silo address to token address, silo => asset

Parameters

Returns

siloVersion

function siloVersion() external view returns (uint128 byDefault, uint128 latest)

Returns

toggleLimitedMaxLiquidity

function toggleLimitedMaxLiquidity() external nonpayable

Switch to turn on and off limited liquidity

tokensFactory

function tokensFactory() external view returns (contract ITokensFactory)

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

Returns

transferOwnership

function transferOwnership(address newOwner) external nonpayable

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

Parameters

transferPendingOwnership

function transferPendingOwnership(address newPendingOwner) external nonpayable

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

Parameters

unregisterSiloVersion

function unregisterSiloVersion(uint128 _siloVersion) external nonpayable

Unregisters Silo version

Callable only by owner.

Parameters

Events

BridgeAssetAdded

event BridgeAssetAdded(address newBridgeAsset)

Emitted on new bridge asset

Parameters

BridgeAssetRemoved

event BridgeAssetRemoved(address bridgeAssetRemoved)

Emitted on removed bridge asset

Parameters

BridgePool

event BridgePool(address indexed pool)

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

Parameters

DefaultSiloMaxDepositsLimitUpdate

event DefaultSiloMaxDepositsLimitUpdate(uint256 newMaxDeposits)

Emitted when default max liquidity limit is changed

Parameters

FeeUpdate

event FeeUpdate(uint64 newEntryFee, uint64 newProtocolShareFee, uint64 newProtocolLiquidationFee)

Emitted when default fee is updated

Parameters

GlobalPause

event GlobalPause(bool globalPause)

Emitted when all Silos are paused or unpaused

Parameters

InterestRateModel

event InterestRateModel(contract IInterestRateModel newModel)

Emitted when default interest rate model is changed

Parameters

LimitedMaxLiquidityToggled

event LimitedMaxLiquidityToggled(bool newLimitedMaxLiquidityState)

Emitted when max liquidity toggle is switched

Parameters

NewDefaultLiquidationThreshold

event NewDefaultLiquidationThreshold(uint64 defaultLiquidationThreshold)

Parameters

NewDefaultMaximumLTV

event NewDefaultMaximumLTV(uint64 defaultMaximumLTV)

Parameters

NewSilo

event NewSilo(address indexed silo, address indexed asset, uint128 siloVersion)

Emitted on new Silo creation

Parameters

NotificationReceiverUpdate

event NotificationReceiverUpdate(contract INotificationReceiver newIncentiveContract)

Emitted on INotificationReceiver address update

Parameters

OwnershipPending

event OwnershipPending(address indexed previousOwner, address indexed newOwner)

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

Parameters

OwnershipTransferred

event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)

Emitted when ownership is transferred on transferOwnership and acceptOwnership

Parameters

PriceProvidersRepositoryUpdate

event PriceProvidersRepositoryUpdate(contract IPriceProvidersRepository oldProvider, contract IPriceProvidersRepository newProvider)

Emitted on price provider repository address update

Parameters

RegisterSiloVersion

event RegisterSiloVersion(address factory, uint128 siloLatestVersion, uint128 siloDefaultVersion)

Emitted when new Silo version is registered

Parameters

RouterUpdate

event RouterUpdate(address oldRouter, address newRouter)

Emitted on router address update

Parameters

SiloDefaultVersion

event SiloDefaultVersion(uint128 oldDefaultVersion, uint128 newDefaultVersion)

Emitted when default Silo version is updated

Parameters

SiloMaxDepositsLimitsUpdate

event SiloMaxDepositsLimitsUpdate(address indexed silo, address indexed asset, uint256 newMaxDeposits)

Emitted when deposit liquidity limit is changed for Silo and asset

Parameters

SiloPause

event SiloPause(address silo, address asset, bool pauseValue)

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

Parameters

TokensFactoryUpdate

event TokensFactoryUpdate(address oldTokensFactory, address newTokensFactory)

Emitted on token factory address update

Parameters

UnregisterSiloVersion

event UnregisterSiloVersion(address factory, uint128 siloVersion)

Emitted when Silo version is unregistered

Parameters

Errors

AddressZeroAsInput

error AddressZeroAsInput()

AssetIsNotABridge

error AssetIsNotABridge()

CanNotRemoveLastBridgeAssets

error CanNotRemoveLastBridgeAssets()

InvalidTokenAddress

error InvalidTokenAddress()

NoPriceProviderForAsset

error NoPriceProviderForAsset()

SiloAlreadyExistsForAsset

error SiloAlreadyExistsForAsset()

SiloForBridgeAssetsAlreadyExists

error SiloForBridgeAssetsAlreadyExists()

SiloNotAllowedForBridgeAsset

error SiloNotAllowedForBridgeAsset()

SiloNotExists

error SiloNotExists()

Last updated