<!-- canonical: https://0xsimao.com/findings/glacier-percentages-differ-yield-differs -->

# Strategy percentages will differ over time as yield accrued differs in ReservePool

Low/Info · Three Sigma · Liquid staking · 12th July, 2023

Finding 3S-GLACIER-L03 of the Glacier security review.

- Protocol: https://www.glacier.io/
- Report: /reports/glacier
- Source: https://cdn.sanity.io/files/qoqld077/production/21bd3b6fa78c55968a6c9c7ea4fd49f34a8bd3d8.pdf

---

### Description

The ReservePool always deposits and withdraws according to the specified strategy
weights. As the strategies have different yield rates, the actual weights will change over
time.

### Recommendation

To overcome this, a rebalance function could be added to the ReservePool that is called
whenever the values differ too much or on every rebalance.

### Status

This issue has been addressed by adding a rebalance function in commit: [#6e95d2a](https://github.com/threesigmaxyz/glacier-contracts-foundry/commit/6e95d2a93935ef31e8c88fa5c123aa1ec2c6ccc1).

---

Related findings:

- [`IDOPoolAbstract` does not deal with yield and gas accrued on Blast](https://0xsimao.com/findings/blast-ido-pools-yield-gas-accrued-blast): Blast IDO Pools
- [`ReserveLogic::_updateIndexes()` assumes the utilization rate was constant the whole time when calculating the new borrows](https://0xsimao.com/findings/yieldoor-constant-whole-calculating-borrows): Yieldoor
- [Yield loss due to StrategyRouterLib:rebalanceStrategies() not allocating saturated strategy deposits](https://0xsimao.com/findings/clip-finance-i-yield-allocating-saturated-deposits): Clip Finance Strategies
- [`VaultPoolLib::reserve()` will store the `Pa` not attributed to user withdrawals incorrectly and leave in untracked once it expires again](https://0xsimao.com/findings/cork-protocol-attributed-withdrawals-untracked-expires): Cork Protocol
