All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- add
getOracleAddressesto SiloLens
- silo-core: Silo hook deployment (#1453)
- silo-core: GaugeHookReceiver with Ownable 1-step transfer (#1447)
- silo-core: Manual liquidation helper accepts native tokens (#1439)
- silo-core: Allow multiple instances of liquidation helper (#1436)
- new markets:
- silo-core: wmetaS/wS market on Sonic (#1437)
- silo-core: Anon/USDC.e market on Sonic (#1438)
- silo-core: yUSD/USDC Silo on Arbitrum (#1446)
- silo-core: sACRED/USDC market on Avalanche (#1452)
- silo-core: USDf/USDC market on mainnet (#1442)
- silo-core: fix leverage bug with swap abusing debt share token receive allowance and ERC-20 approval (#1434)
- silo-core: Ethereum mainnet deployment
- silo-core: Avalanche deployment
- silo-vaults: Avalanche deployment
- silo-oracles: Avalanche deployment
- silo-oracles: Wrapped Pendle LP tokens price providers
- silo-oracles: WrappedMetaVaultOracleAdapter
- silo-oracles: ERC4626Oracle with hardcoded quote token
- silo-oracles: ERC4626OracleWithUnderlying
- silo-oracles: Oracle scaler factory mainnet deployment
- silo-oracles: PT oracles deployments
- silo-oracles: Adjust PT oracles for different decimals case
- silo-core: SiloIncentivesControllerFactory deployment
- silo-core: SiloHookV1 deployment
- silo-core: SiloVerifier for the Pendle LPT markets
- silo-core: SiloRouterV2 deployment with Pendle LP tokens wrap/unwrap support
- silo-core: leverage live deployment for sonic, mainnet
- silo-core: certora rules for leverage debt token approvals
- silo-core: protect permit in leverage from frontrun
- new markets:
- silo-core: PT-stS-18DEC2025 wS market on Sonic
- silo-core: xUSD scUSD Silo on Sonic
- silo-core: sUSDX USDC Silo on Arbitrum
- silo-core: ARB USDC Silo on Arbitrum
- silo-core: WBTC USDC Silo on Arbitrum
- silo-core: sUSDf/USDC mainnet market
- silo-core: PT-sUSDf-25SEP2025/USDC mainnet market
- silo-core: wmetaUSD/USDC Sonic market
- silo-core: USR/USD market on mainnet
- silo-core: ezETH/WETH mainnet market
- silo-core: weETH WETH Silo on mainnet
- silo-core: LPT-sUSDE-25SEP2025/USD mainnet market
- silo-core: LPT-sUSDE-31JUL2025/USD mainnet market
- silo-core: LPT-eUSDe-14AUG25/USD mainnet market
- silo-core: PT-eUSDE-14AUG2025/USDC mainnet market
- silo-core: PT-cUSDO-20NOV2025/USDC mainnet market
- silo-core: PT-sUSDE-25SEP2025/USDC mainnet market
- silo-core: PT-USDS-14AUG2025/USDC mainnet market
- silo-core: PT-eUSDE-14AUG2025/USDf mainnet market
- silo-core: WBTC/USDC market on mainnet
- silo-core: RLP/USDC market on mainnet
- silo-core: wsrUSD/USDC mainnet market
- silo-core: USR/USDC mainnet market redeployment
- silo-core: wstUSR/USD mainnet market
- silo-core: PT-USDe 25 Sep 2025 / USDC mainnet market
- silo-core: mMEV/USDC mainnet market
- silo-core: PT-USR-4SEP2025/USDC mainnet market
- silo-core: PT-wstUSR-25SEP2025/USDC mainnet market
- silo-core: PT-RLP-4SEP2025/USDC mainnet market
- silo-core: WAVAX/USDC avalanche market
- silo-core: sdeUSD/USDC avalanche market
- silo-core: deUSD/USDC avalanche market
- silo-core: BTC.b/WAVAX Avalanche market
- silo-core: ggAVAX/WAVAX Avalanche market
- silo-core: sBUIDL/USDC Avalanche market
- silo-core: sAVAX/WAVAX Avalanche market
- silo-core: scBTC/scUSD sonic market
- silo-core: savBTC/WBTC.b avalanche market
- silo-core: AUSD/USDC avalanche market
- silo-core: savUSD/USDC avalanche market
- silo-core: wsrUSD/USDC sonic market
- silo-core: wmetaUSD/scUSD sonic market
- silo-oracles: remove heartbeat check from DIA oracle
- silo-oracles: remove heartbeat check from Chainlink oracle
- Removed ve-silo and proposals
- silo-core: Ethereum deployment
- silo-vaults: Ethereum deployment
- silo-oracles: DIA price provider deployments
- x-silo: XSilo and Stream
- x-silo: production deployment
- silo-vaults: fixed decimals offset
- silo-core: enigma invariant suite core
- new markets:
- silo-core: PT-Silo-46-scUSD-14AUG2025 USDC.e market on Sonic
- silo-core: PT-aSonUSDC-14AUG2025 USDC.e Silo on Sonic
- silo-core: PT-Silo-20-USDC.e-17JUL2025 USDC.e new market on Sonic
- silo-core: WBTC USDC new market on Arbitrum
- silo-core: wstETH WETH new market on Arbitrum
- silo-core: kBTC USDT0 Silo on Ink
- silo-core: kBTC WETH Silo on Ink
- silo-core: ezETH WETH market on Arbitrum
- silo-core: WBTC WETH market on Arbitrum
- silo-core: ARB WETH market on Arbitrum
- silo-core: ETH+ WETH market on Arbitrum
- silo-core: PEAS USDC on Arbitrum
- silo-core: GRAIL USDC market on Arbitrum
- silo-core: PT-wstkscUSD-18DEC2025 USDC.e market on Sonic
- silo-core: PT-wOS-18DEC2025 wS silo on Sonic
- silo-core: PT-wstkscETH-18DEC2025 WETH market on Sonic
- silo-core: yUSD USDC.e silo on Sonic
- silo-core: OS scUSD market on Sonic
- silo-core: xUSD USDC.e market on Sonic
#Added
- certora specs for the Silo Vaults
- silo-core: incentive program name conversion
- silo-core: liquidation helper deployment ink
- silo-oracles: revert on zero price in DIA
- silo-oracles: pyth deployment
- SiloIncentivesController and SiloVaultDeployer deployment
- new markets:
- silo-core: WETH USDC market on Arbitrum
- silo-core: sUSDX USDC new market Arbitrum
- silo-core: ARB USDC new market on Arbitrum
- silo-core: WETH USDT market on Ink
- silo-core: fix
maxBorrow, see explanation in code, methodmaxBorrowValueToAssetsAndShares() - silo-core: Silo implementation redeploy
- silo-core: SiloLens isTokenAddress fn check code size
- silo-core: wstkscUSD USDC.e new market
- silo-core: wOS wS borrowable new market
- silo-core: EURC.e USDC.e new market
- silo-core: prioritize DAO fee to ensure it is not zero-out by precision error
- silo-core: count for fractions when calculate maxBorrow
- silo-core: underestimate
maxWithdrawto count for interest fractions - silo-core: fix maxRedeem for dust
- silo-core: proper name conversion in the getProgramName fn
- silo-core: silo lens getter for programs names
- silo-core: Incentives controller for ws in beS / wS Silo
- silo-vaults: helper contract to deploy claiming logics
- x-silo: Silo Token V2
- sonic deployment: silo-core, silo-oracles
- arbitrum deployment: silo-core, silo-oracles, silo-vaults
- optimism deployment: silo-core, silo-oracles, silo-vaults
- ink deployment: silo-core, silo-oracles, silo-vaults
- silo-vaults: SiloIncentivesControllerCLDeployer helper contract to deploy claiming logics
- silo-core: moved hooks into silo-core/contracts/hooks
- Revert "silo-vaults: deployment sonic 1 min timelock"
- silo-core: silo lens getter for programs names
- silo-vaults: deployment sonic 1 min timelock
- silo-vaults: deployment sonic
- silo-core: SiloDeployer hook and config reorg
- silo-core: InterestRateModelV2Factory reorg protection
- silo-oracles: factories reorg protection
- silo-vaults: deployment min timelock 1 day
- silo-vaults: deployment min timelock 1 min
- silo-vaults: Silo Vaults Deployer
- silo-vaults: Incentives claiming logics trusted factories
- silo-vaults: Deflation attack
- silo-vaults: Wrong calculation of toSupply which is supplied to a market will lead to less supply for some markets
- silo-vaults: Fee not Accrued In Transfer Functions Leads to Reward Loss
- silo-vaults: Supply function doesn't account for market maxDeposit when providing assets to it
- silo-vaults: SiloVault.sol :: Markets with assets that revert on zero approvals cannot be removed
- silo-vaults: SiloVault.maxDeposit and SiloVault.maxMint don't comply with ERC4626
- silo-vaults: L-01 Factories using CREATE opcode create contracts vulnerable to reorgs
- silo-vaults: Improvement: exact approvals on deposit
- silo-vaults: Improvement: Incentives module owner is the silo vault owner (Ownable2Step removed)
- silo-vaults: Changed permissions: setArbitraryLossThreshold fn and syncBalanceTracker fn only guardian
- silo-vaults: Acceptable loss configuration
- silo-vaults: internal balances sync
- silo-vaults: syncBalanceTracker fn require valid override input
- silo-vaults: approval on deposit
- silo-vaults: create2 factories
- silo-vaults: Incentives module owner is the silo vault owner
- silo-core: [M-01] catch when fee transfer is not successful
- silo-core: address as programId on immediate rewards distribution
- silo-core: store fraction of interest and fraction of fees
- silo-core: add reentrancy protection for liquidation call
- silo-core: PT-aSonUSDC-14AUG2025 / scUSD market
- silo-core: PT-wstkscETH/scETH market
- silo-core: sfrxUSD / scUSD new market
- silo-core: WBTC / USDC Silo
- silo-core: x33 asset adapter
- silo-core: x33 new Silo
- silo-core: add bulk methods for APR in SiloLens
- silo-core: ERC4626 price provider update
- silo-core: SiloFactory initial silo id 100
- silo-core: restore current router deployments
- silo-core: DebtShareToken with receive approval on mint
- bump: solidity to 0.8.29
- silo-vaults: Guardian role in the vault incentives module
- silo-vaults: Internal tracker for market allocations
- silo-vaults: require asset decimals to be up to 18
- silo-core: accrue fees on claiming rewards
- silo-core: fee receiver per silo per asset
- silo-vaults: add reentrancy protection on transfer
- silo-vaults: reset approval on market removal
- silo-vaults: vault incentives module timelock and permissions
- silo-vaults: revert action when zero assets or shares
- silo-vaults: use offset 6
- silo-core: allow to burn NFT only by owner
- silo-core: revert on invalid token type in
Hook.shareTokenTransfer() - silo-vaults: M-01 VaultIncentivesModule initialization
- incentives: L-1 The function
_transferRewardsdoes not check return value - silo-vaults: use
previewRedeeminstead of theconvertToAssets - silo-vaults: factory with reorgs protection
- silo-vaults: L-06 Vault could be vulnerable to an inflation attack, add offset 3
- silo-core: immediate incentives distribution only notifier
- silo-core: require existing programs on rewards claims
- silo-core: fix daoRevenue value when fee receiver empty
- silo-core: GaugeHookReceiver send notifications even if killed
- silo-core: protected collateral protection
- silo-core: Handling revert on deployer fee transfer
- silo-core: SiloFactory reorg protection
- silo-vaults: setCap fn in the SiloVaultActionsLib
- silo-core: Router with multicall
- Silo hooks refactoring
- silo-vaults: use 18 decimals offset in idle vault
- silo-vaults: replace .transfer with low level call
- silo-core: switch collateral event on borrow
- silo-vaults: remove skim method
- silo-vaults: remove loss check
- add method
getUsersHealthto SiloLens
- SiloLens redeployment
- LBTC / scBTC market on Sonic
- LBTC / WBTC market on Sonic
- SiloRouter deployment
- SiloLens deployment
- Router with multicall
- stS/S market with 18 decimals share token on Sonic
- deploy new
LiquidationHelper
- adjustment for coverage to work
- Anon/USDC.e market sonic
- wstkscETH/ETH market sonic
- wanS/S market sonic
- silo-coracle: silo virtual asset name and symbol
- silo-core: add flag that informs about full liquidation
- silo lens redeployment
- silo-oracles: ERC4626 price oracle
- silo-oracles: Pyth aggregator factory
- silo-oracles: OracleScaler to normalize amounts for 18 decimal
- silo-core: manual liquidation helper
- wS/USDC.e borrowable S market sonic
- woS/S market sonic
- wstkscUSD/USDC.e market sonic
- solvBTC.BNN/solvBTC market sonic
- wS/scUSD market sonic
- Redeployment SiloDeployer
- silo-core: use underlying token decimals in collateral share token
- silo-oracles: invert flag
- add rescue function to incentive controller
- allow to restart incentive program after some time and ensure rewards are not calculated for a "gap"
- ensure claim rewards reset state after claiming
- Redeployment market for Sonic:
stS/S - Redeployment SiloRouter
- Redeployment GaugeHookReceiver with updated event and reduced contract size
- Redeployment market for Sonic:
stS/S - Redeployment GaugeHookReceiver
- Extended LiquidationCall event
- silo vaults catch 63/64 gas attack
- Sonic and Arbitrum deployments
- new market for Sonic:
stS/S - Silo Incentives controller
- Silo vaults incentives module and incentives claiming logic
- Renaming of 'MetaMorpho' to 'SiloVaults'
- Extended LiquidationCall event
- allow LiquidationHelper to accept ETH
- new markets for v0.17:
wstETH/WETH,gmETH/WETH,solvBTC/wBTC,ETHPlus/WETH
- redeployment of silo-vault with
MIN_TIMELOCKset to 1 minute for QA purposes
- redeployment of whole protocol
- add support for custom oracle setup
- add initial setup for IRM params:
riandTcrit
- fix
maxBorrowestimation
PublicAllocatorcontract for vaults- add reentrancy for
withdrawFees
- ensure transition deposit not fail when user insolvent
- Vault functionality based on MetaMorpho
- MetaMorpho was adjusted to work with ERC4626 standard
- Concept of Idle market needs to be replaced with additional vault. By default, in Silo
IdleVaultis used.
LiquidationHelperandTower
- LICENSE
- modified license for some solidity files
- SiloLens redeployment
- solvBTC/wBTC market Arbitrum
- gmETH/WETH market Arbitrum
- wstETH/WETH market Arbitrum
- ETH+/WETH market Arbitrum
- SiloRouter with preview methods instead of convertToAssets
- dao fee can be set based on range
- optimism deployment
- make target LTV after liquidation configurable
- SiloRouter with convertToAssets
- allow for forced transfer of debt
- use transient storage for reentrancy flag
- remove unchecked math from some places
- exclude protected assets from flashloan
- remove
leverageSameAsset - remove self liquidation
- remove decimals from value calculations
Design changes:
- The liquidation module was transformed into a hook receiver.
- Silo is now a share collateral token and implements share token functionality. So, now we have collateral share token (silo), protected share token (customized ERC-20), debt share token (customized ERC-20).
- Removed ‘bool sameAsset’ from the silo and introduced separate methods for work with the same asset.
- Removed ordered configs from the SiloConfig and introduced a collateral silo concept.
- Removed ‘leverage’ functionality from the Silo.borrow fn.
- Removed InterestRateModelV2.connect and added InterestRateModelV2.initialize. Now each silo has a different irm that is a minimal proxy and is cloned during the silo deployment like other components
- Refactoring of the hooks' actions and hooks inputs
- Reentrancy bug fix in flashLoan fn
- Rounding error bug fix in maxWithdraw fn
- Overflow bug fix on maxWithdraw fn
- ERC20Permit for share token
- Added delegate call into the callOnBehalfOfSilo fn
- Other minor fixes and improvements
- deployment with mocked CCIP and tokens for Arbitrum and Optimism
- apply fixes for certora report
- deposit to any silo without restrictions
- borrow same token
- liquidation for same token can be done with sToken without reverting
- case observed on full liquidation: when we empty out silo, there is dust left (no shares)
- standard reentrancy guard was replaced by cross Silo reentrancy check
- fix issue with wrong configs in
isSolventafter debt share transfer
- SiloLens deploy
- add returned code for
IHookReceiver.afterTokenTransfer
- underestimate
maxWithdraw
- fix rounding on
maxRedeem - fix rounding on
maxBorrow
- optimise
maxWithdraw: do not rungetTotalCollateralAssetsWithInteresttwice
- add
SiloLensto reduced Silo size
- change visibility of
totalmapping to public - ensure total getters returns values with interest
- remove
getProtectedAssets()
- Arbitrum and Optimism deployments
- fix
maxBorrowSharesby using-1, same solution as we have formaxBorrow
- fix max redeem: include interest for collateral assets
- accrue interest on both silos for borrow
- improvements to
silo-core, new test environments: certora, echidna
SiloStdLib.flashFeefn revert if_amountis0
- ensure we can not deposit shares with
0assets
- ensure we can not borrow shares with
0assets
- code after first audit + develop changes
- issue-320 TOB-SILO2-19: max* functions return
incorrect values: underestimate
maxBorrowmore, to cover big amounts
- issue-320 TOB-SILO2-19: max* functions return incorrect values: add liquidity limit when user has no debt
- TOB-SILO2-10: Incorrect rounding direction in preview functions
- TOB-SILO2-13: replaced leverageNonReentrant with nonReentrant, removed nonReentrant from the flashLoan fn
- issue-320 TOB-SILO2-19: max* functions return incorrect values
- issue-319 TOB-SILO2-18: Minimum acceptable LTV is not enforced for full liquidation
- issue-286 TOB-SILO2-3: Flash Loans cannot be performed through the SiloRouter contract
- issue-322 Repay reentrancy attack can drain all Silo assets
- issue-321 Deposit reentrancy attack allows users to steal assets
- issue-255: UniswapV3Oracle contract implementation is left uninitialized
- TOB-SILO2-17: Flashloan fee can round down to zero
- TOB-SILO2-16: Minting zero collateral shares can inflate share calculation
- TOB-SILO2-14: Risk of daoAndDeployerFee overflow
- TOB-SILO2-12: Risk of deprecated Chainlink oracles locking user funds
- TOB-SILO2-10: Incorrect rounding direction in preview functions
- TOB-SILO2-13: Users can borrow from and deposit to the same silo vault to farm rewards
EVM version changed to paris
- TOB-SILO2-9: fix avoiding paying the flash loan fee
- TOB-SILO2-7: fix fee distribution
- TOB-SILO2-8: fix fee transfer
- TOB-SILO2-4: add 2-step ownership for
SiloFactoryandGaugeHookReceiver
- TOB-SILO2-6: ensure no one can initialise GaugeHookReceiver and SiloFactory
- TOB-SILO2-1: ensure silo factory initialization can not be front-run
- tob-silo2-5: fix deposit limit
- fix
ASSET_DATA_OVERFLOW_LIMITin IRM model
- silo-core for audit
- silo-oracles for audit
- ve-silo for audit