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
Transfers ownership of the contract to a pending owner Can only be called by the pending owner.
addBridgeAsset
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 |
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 |
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 |
_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 | 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 | 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 | address | undefined |
asset | 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 | address | undefined |
newOwner | address | undefined |
OwnershipTransferred
Emitted when ownership is transferred on transferOwnership
and acceptOwnership
Parameters
Name | Type | Description |
---|---|---|
previousOwner | address | undefined |
newOwner | 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 | address | undefined |
asset | 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