Summary
Authorize the PoolRecoveryHelper contract to put ComposableStable-V2 pools in Recovery Mode. This proposal is follow up to the original to cover the additional pool factory.
Motivation
It has recently come to our attention that rate providers can cause some operations to revert if the call to getRate
reverts. This goes undetected by most order routing algorithms, which assume rates change slowly and only use the pool’s internal rate cache for estimating the expected outputs of a transaction.
In order to prevent pools with faulty rate providers from interfering with order routing algorithms, Balancer Labs has developed the PoolRecoveryHelper, a smart contract which performs checks on all rate providers of a given pool and puts the pool into Recovery Mode if one of the rate providers reverts.
The notion of Recovery Mode was introduced in recent pool factories. Only addresses authorized by Balancer Governance can put pools in Recovery Mode.
When a pool enters Recovery Mode, any protocol fees it owes at that time are forfeited and a new exit kind is enabled, that bypasses updating the rate cache.
When a pool is put in Recovery Mode, this fact is recorded in the subgraph and order routing algorithms can ignore the pool.
The PoolRecoveryHelper contract is permissionless. Anyone can trigger a check, but the pool will only be put in Recovery Mode in the event that the rate provider required for that pool to work properly reverts.
The contract can only interact with pools deployed from a set of factories. This set will now include the ComposableStable-V2 pool factory deployed in December. See this previous proposal where Balancer Labs was granted the ability to add/remove factories from this set, given the governance decision to do so.
Specification
Grant the following roles to the PoolRecoveryHelpers on each network
Expand Table
Network | Pool | Function | Role (action ID) | PoolRecoveryHelper |
---|---|---|---|---|
Mainnet | ComposableStable-V2 | enableRecoveryMode | 0x7d89412e7c8893c1c85589d68187b2ee925cd2d27c10393980897d1fa4346b0a | 0x1b300C86980a5195bCF49bD419A068D98dC133Db |
Polygon | ComposableStable-V2 | enableRecoveryMode | 0x7d89412e7c8893c1c85589d68187b2ee925cd2d27c10393980897d1fa4346b0a | 0x495F696430F4A51F7fcB98FbE68a9Cb7A07fB1bA |
Arbitrum | ComposableStable-V2 | enableRecoveryMode | 0x7d89412e7c8893c1c85589d68187b2ee925cd2d27c10393980897d1fa4346b0a | 0xb5e56CC3d2e38e53b1166175C59e921A37cDC1E2 |
Optimism | ComposableStable-V2 | enableRecoveryMode | 0x7d89412e7c8893c1c85589d68187b2ee925cd2d27c10393980897d1fa4346b0a | 0x26743984e3357eFC59f2fd6C1aFDC310335a61c9 |