[BIP-142] Permission Granting - Recovery Mode - ComposableStable-V2


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.


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.


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

Vote is pending: https://snapshot.org/#/balancer.eth/proposal/0xc0e6a9bf5eaf73eac00d52ac007bfd5349e47f7037277603702ab3f6b3d469ee