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
_newBridgeAsset
address
bridge asset address
assetConfigs
function assetConfigs(address, address) external view returns (uint64 maxLoanToValue, uint64 liquidationThreshold, contract IInterestRateModel interestRateModel)
maps silo => asset => config
Parameters
_0
address
undefined
_1
address
undefined
Returns
maxLoanToValue
uint64
undefined
liquidationThreshold
uint64
undefined
interestRateModel
contract IInterestRateModel
undefined
bridgePool
function bridgePool() external view returns (address)
Silo for bridge asset. We can have only one bridge pool
Returns
_0
address
undefined
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
maxLoanToValue
uint64
undefined
liquidationThreshold
uint64
undefined
interestRateModel
contract IInterestRateModel
undefined
ensureCanCreateSiloFor
function ensureCanCreateSiloFor(address _asset, bool _assetIsABridge) external view
checks all conditions for new silo creation and throws when not possible to create
Parameters
_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
function entryFee() external view returns (uint256)
Get protocol fee for opening a borrow position
Returns
_0
uint256
fee in precision points (BaseSilo.PRECISION_DECIMALS() == 100%)
fees
function fees() external view returns (uint64 entryFee, uint64 protocolShareFee, uint64 protocolLiquidationFee)
Returns
entryFee
uint64
undefined
protocolShareFee
uint64
undefined
protocolLiquidationFee
uint64
undefined
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
_0
address[]
address array of bridge assets
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
_silo
address
address of Silo
_asset
address
address of an asset
Returns
model
contract IInterestRateModel
address of interest rate model
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
_silo
address
address of Silo
_asset
address
address of an asset
Returns
_0
uint256
liquidation threshold in precision points (BaseSilo.PRECISION_DECIMALS())
getMaxSiloDeposits
function getMaxSiloDeposits(address _silo, address _asset) external view returns (uint256)
Gets deposit limit for Silo
Parameters
_silo
address
Silo address for which to set limit
_asset
address
Silo asset for which to set limit
Returns
_0
uint256
deposit limit for Silo
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
_silo
address
address of Silo
_asset
address
address of an asset
Returns
_0
uint256
maximum LTV in precision points (BaseSilo.PRECISION_DECIMALS())
getNotificationReceiver
function getNotificationReceiver(address) external view returns (contract INotificationReceiver)
Maps Silo address to incentive contract that will distribute rewards for that Silo
Parameters
_0
address
undefined
Returns
_0
contract INotificationReceiver
undefined
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
_0
address[]
address array of bridge assets
getSilo
function getSilo(address) external view returns (address)
maps token address to silo address, asset => silo
Parameters
_0
address
undefined
Returns
_0
address
undefined
isPaused
function isPaused() external view returns (bool globalPause)
Returns
globalPause
bool
undefined
isSilo
function isSilo(address _silo) external view returns (bool)
Check if contract address is a Silo deployment
Parameters
_silo
address
address of expected Silo
Returns
_0
bool
true if address is Silo deployment, otherwise false
isSiloPaused
function isSiloPaused(address _silo, address _asset) external view returns (bool)
Check given asset in a Silo is paused
Parameters
_silo
address
address of Silo
_asset
address
address of an asset
Returns
_0
bool
true if given asset in a Silo is paused, otherwise false
maxLiquidity
function maxLiquidity() external view returns (bool globalToggle, uint256 defaultMaxLiquidity)
Returns
globalToggle
bool
undefined
defaultMaxLiquidity
uint256
undefined
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
_siloAsset
address
silo asset
_siloVersion
uint128
version of silo implementation
_siloData
bytes
(optional) data that may be needed during silo creation
owner
function owner() external view returns (address)
Get owner role address of Repository
Returns
_0
address
owner role address
pendingOwner
function pendingOwner() external view returns (address)
Returns the address of the pending owner.
Returns
_0
address
undefined
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
_0
contract IPriceProvidersRepository
undefined
protocolLiquidationFee
function protocolLiquidationFee() external view returns (uint256)
Get protocol liquidation fee
Returns
_0
uint256
protocol liquidation fee in precision points (BaseSilo.PRECISION_DECIMALS() == 100%)
protocolShareFee
function protocolShareFee() external view returns (uint256)
Get protocol share fee
Returns
_0
uint256
protocol share fee in precision points (BaseSilo.PRECISION_DECIMALS() == 100%)
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
_factory
contract ISiloFactory
factory contract that deploys new version of Silo
_isDefault
bool
true if this version should be used as default
removeBridgeAsset
function removeBridgeAsset(address _bridgeAssetToRemove) external nonpayable
Removes bridge asset
Note that all Silos must be synced manually. Callable only by owner.
Parameters
_bridgeAssetToRemove
address
bridge asset address to be removed
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
_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
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
_0
address
undefined
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
_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
function setDefaultInterestRateModel(contract IInterestRateModel _defaultInterestRateModel) external nonpayable
Set default interest rate model
Callable only by owner
Parameters
_defaultInterestRateModel
contract IInterestRateModel
default interest rate model
setDefaultLiquidationThreshold
function setDefaultLiquidationThreshold(uint64 _defaultLiquidationThreshold) external nonpayable
Set default liquidation threshold
Callable only by owner
Parameters
_defaultLiquidationThreshold
uint64
default liquidation threshold in precision points (BaseSilo.PRECISION_DECIMALS())
setDefaultMaximumLTV
function setDefaultMaximumLTV(uint64 _defaultMaxLTV) external nonpayable
Set default maximum LTV
Callable only by owner
Parameters
_defaultMaxLTV
uint64
default maximum LTV in precision points (BaseSilo.PRECISION_DECIMALS())
setDefaultSiloMaxDepositsLimit
function setDefaultSiloMaxDepositsLimit(uint256 _maxDeposits) external nonpayable
Sets default deposit limit for all Silos
Parameters
_maxDeposits
uint256
deposit limit amount in ETH
setDefaultSiloVersion
function setDefaultSiloVersion(uint128 _defaultVersion) external nonpayable
Set default Silo version
Callable only by owner.
Parameters
_defaultVersion
uint128
Silo version to be set as default
setFees
function setFees(ISiloRepository.Fees _fees) external nonpayable
Set default fees
Callable only by owner
Parameters
_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
function setGlobalPause(bool _globalPause) external nonpayable
Pause all Silos
Callable only by owner.
Parameters
_globalPause
bool
true to pause all Silos, otherwise false
setNotificationReceiver
function setNotificationReceiver(address _silo, contract INotificationReceiver _newNotificationReceiver) external nonpayable
Set NotificationReceiver contract
Callable only by owner
Parameters
_silo
address
silo address for which to set _notificationReceiver
_newNotificationReceiver
contract INotificationReceiver
undefined
setPriceProvidersRepository
function setPriceProvidersRepository(address _repository) external nonpayable
Set price provider repository
Callable only by owner
Parameters
_repository
address
price provider repository address
setRouter
function setRouter(address _router) external nonpayable
Set router contract
Callable only by owner
Parameters
_router
address
router address
setSiloMaxDepositsLimit
function setSiloMaxDepositsLimit(address _silo, address _asset, uint256 _maxDeposits) external nonpayable
Sets deposit limit for Silo
Parameters
_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
function setSiloPause(address _silo, address _asset, bool _pauseValue) external nonpayable
Pause single asset in a single Silo
Callable only by owner.
Parameters
_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
function setTokensFactory(address _tokensFactory) external nonpayable
Set factory contract for debt and collateral tokens for each Silo asset
Callable only by owner
Parameters
_tokensFactory
address
address of TokensFactory contract that deploys debt and collateral tokens
siloFactory
function siloFactory(uint256) external view returns (contract ISiloFactory)
Maps version => ISiloFactory. Versions start at 1 and are incremented by 1.
Parameters
_0
uint256
undefined
Returns
_0
contract ISiloFactory
undefined
siloRepositoryPing
function siloRepositoryPing() external pure returns (bool)
Returns
_0
bool
undefined
siloReverse
function siloReverse(address) external view returns (address)
maps silo address to token address, silo => asset
Parameters
_0
address
undefined
Returns
_0
address
undefined
siloVersion
function siloVersion() external view returns (uint128 byDefault, uint128 latest)
Returns
byDefault
uint128
undefined
latest
uint128
undefined
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
_0
contract ITokensFactory
undefined
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
newOwner
address
undefined
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
newPendingOwner
address
undefined
unregisterSiloVersion
function unregisterSiloVersion(uint128 _siloVersion) external nonpayable
Unregisters Silo version
Callable only by owner.
Parameters
_siloVersion
uint128
Silo version to be unregistered
Events
BridgeAssetAdded
event BridgeAssetAdded(address newBridgeAsset)
Emitted on new bridge asset
Parameters
newBridgeAsset
address
undefined
BridgeAssetRemoved
event BridgeAssetRemoved(address bridgeAssetRemoved)
Emitted on removed bridge asset
Parameters
bridgeAssetRemoved
address
undefined
BridgePool
event BridgePool(address indexed pool)
Emitted when new Silo (or existing one) becomes a bridge pool (pool with only bridge tokens).
Parameters
pool indexed
address
undefined
DefaultSiloMaxDepositsLimitUpdate
event DefaultSiloMaxDepositsLimitUpdate(uint256 newMaxDeposits)
Emitted when default max liquidity limit is changed
Parameters
newMaxDeposits
uint256
undefined
FeeUpdate
event FeeUpdate(uint64 newEntryFee, uint64 newProtocolShareFee, uint64 newProtocolLiquidationFee)
Emitted when default fee is updated
Parameters
newEntryFee
uint64
undefined
newProtocolShareFee
uint64
undefined
newProtocolLiquidationFee
uint64
undefined
GlobalPause
event GlobalPause(bool globalPause)
Emitted when all Silos are paused or unpaused
Parameters
globalPause
bool
undefined
InterestRateModel
event InterestRateModel(contract IInterestRateModel newModel)
Emitted when default interest rate model is changed
Parameters
newModel
contract IInterestRateModel
undefined
LimitedMaxLiquidityToggled
event LimitedMaxLiquidityToggled(bool newLimitedMaxLiquidityState)
Emitted when max liquidity toggle is switched
Parameters
newLimitedMaxLiquidityState
bool
undefined
NewDefaultLiquidationThreshold
event NewDefaultLiquidationThreshold(uint64 defaultLiquidationThreshold)
Parameters
defaultLiquidationThreshold
uint64
undefined
NewDefaultMaximumLTV
event NewDefaultMaximumLTV(uint64 defaultMaximumLTV)
Parameters
defaultMaximumLTV
uint64
undefined
NewSilo
event NewSilo(address indexed silo, address indexed asset, uint128 siloVersion)
Emitted on new Silo creation
Parameters
silo indexed
address
undefined
asset indexed
address
undefined
siloVersion
uint128
undefined
NotificationReceiverUpdate
event NotificationReceiverUpdate(contract INotificationReceiver newIncentiveContract)
Emitted on INotificationReceiver address update
Parameters
newIncentiveContract
contract INotificationReceiver
undefined
OwnershipPending
event OwnershipPending(address indexed previousOwner, address indexed newOwner)
Emitted when ownership transfer is proposed, aka pending owner is set
Parameters
previousOwner indexed
address
undefined
newOwner indexed
address
undefined
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Emitted when ownership is transferred on transferOwnership
and acceptOwnership
Parameters
previousOwner indexed
address
undefined
newOwner indexed
address
undefined
PriceProvidersRepositoryUpdate
event PriceProvidersRepositoryUpdate(contract IPriceProvidersRepository oldProvider, contract IPriceProvidersRepository newProvider)
Emitted on price provider repository address update
Parameters
oldProvider
contract IPriceProvidersRepository
undefined
newProvider
contract IPriceProvidersRepository
undefined
RegisterSiloVersion
event RegisterSiloVersion(address factory, uint128 siloLatestVersion, uint128 siloDefaultVersion)
Emitted when new Silo version is registered
Parameters
factory
address
undefined
siloLatestVersion
uint128
undefined
siloDefaultVersion
uint128
undefined
RouterUpdate
event RouterUpdate(address oldRouter, address newRouter)
Emitted on router address update
Parameters
oldRouter
address
undefined
newRouter
address
undefined
SiloDefaultVersion
event SiloDefaultVersion(uint128 oldDefaultVersion, uint128 newDefaultVersion)
Emitted when default Silo version is updated
Parameters
oldDefaultVersion
uint128
undefined
newDefaultVersion
uint128
undefined
SiloMaxDepositsLimitsUpdate
event SiloMaxDepositsLimitsUpdate(address indexed silo, address indexed asset, uint256 newMaxDeposits)
Emitted when deposit liquidity limit is changed for Silo and asset
Parameters
silo indexed
address
undefined
asset indexed
address
undefined
newMaxDeposits
uint256
undefined
SiloPause
event SiloPause(address silo, address asset, bool pauseValue)
Emitted when asingle Silo or single asset in a Silo is paused or unpaused
Parameters
silo
address
undefined
asset
address
undefined
pauseValue
bool
undefined
TokensFactoryUpdate
event TokensFactoryUpdate(address oldTokensFactory, address newTokensFactory)
Emitted on token factory address update
Parameters
oldTokensFactory
address
undefined
newTokensFactory
address
undefined
UnregisterSiloVersion
event UnregisterSiloVersion(address factory, uint128 siloVersion)
Emitted when Silo version is unregistered
Parameters
factory
address
undefined
siloVersion
uint128
undefined
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