[BIP-199] Enable PoolRecoveryHelper on v3 Pools

Payload PR - BIP-199

Background

The poolRecoveryHelper is a smart contract, which allows permissionless calling of the enableRecoveryMode() call
assuming that any of the rate providers used in a given pool are failing. This allows anyone in the balancer or greater web3 community to
put the pools into a state where bad rateProvider data does not create routing issues. It also allows for permissionless
automation to be setup to look for problems and quickly react.

More details on RecoveryMode and the poolRecovery Manager can be found in the text of BIP-121 which originally introduced these concepts.

This BIP requests adding authoriation for the pool recovery manager to operate on the recently deployed v3 Weighted Pool Factory and the v3 Composable Stable Pool Factory and all pools generated by them.

English Specification

The transaction details were generated by this script with inputs and outputs in this directory

The following files can be found both linked below and in the payload PR linked above:

Filename Description of Contents
inputs.json The inputs to the script mapping functions and deployments to target addresses that can execute them.
results_address_sorted.md The resulting changes printed in a table sorted by target chain and target address. (to easily understand permisisons granted)
results_deployment_sorted.md The resulting changes printed in a table sorted by target chain and target deployment. (for verification against action ids)
function_descriptions.md A table that describes what each function that is being granted privileged access to allows.
chainname.json For each change with changes, a transaction builder json named after said chain exists to apply the changes described in the tables.

In the tables above:

The “poolRecoveryHelper” caller group:

Specification

As described in the payload json, the authorizer will be called to grant the roles as described.

The change can be reviewed by the below by comparing the results_deployment_sorted.md file to the source of truth, which should match the order found in the source of truth for actionIds on the balancer-v2-monorepo.

For record, the contents of results_address_sorted.md are printed here:

deployment chain function role target target_address
20230206-weighted-pool-v3 arbitrum enableRecoveryMode() 0x1e3379f440ccd8ad4fbacfa446ce3de718eda1a091b271c9053bdedff90cdf1c poolRecoveryHelper 0xb5e56CC3d2e38e53b1166175C59e921A37cDC1E2
20230206-composable-stable-pool-v3 arbitrum enableRecoveryMode() 0xe6321aecff7f0051958627890aa2a16d7221f860dfa3359a1cea6f4a3f87933e poolRecoveryHelper 0xb5e56CC3d2e38e53b1166175C59e921A37cDC1E2
20230206-weighted-pool-v3 gnosis enableRecoveryMode() 0x2e31b466b15801536da90012c6e9916b3e0587c2d0b7c63328971c531b6ccf87 poolRecoveryHelper 0xc3ccacE87f6d3A81724075ADcb5ddd85a8A1bB68
20230206-composable-stable-pool-v3 gnosis enableRecoveryMode() 0xd6f4df0a512a29fa4cf2fcfbe4a0b5ea1266a4bbb1ab6fb5761205dbb038441f poolRecoveryHelper 0xc3ccacE87f6d3A81724075ADcb5ddd85a8A1bB68
20230206-weighted-pool-v3 mainnet enableRecoveryMode() 0xa53ffba9aa2195cd7646f9cbaca0985f432bded3dd5319916afc5ec395f280d7 poolRecoveryHelper 0x1b300C86980a5195bCF49bD419A068D98dC133Db
20230206-composable-stable-pool-v3 mainnet enableRecoveryMode() 0x8c91ddec262ae544d56464e260d0b840239949d86149c139510d5e399a30099f poolRecoveryHelper 0x1b300C86980a5195bCF49bD419A068D98dC133Db
20230206-weighted-pool-v3 optimism enableRecoveryMode() 0x076ec7596fb2fd56057ab4b4ab843852ee914ca3095f9cdf46a79085b266a748 poolRecoveryHelper 0x26743984e3357eFC59f2fd6C1aFDC310335a61c9
20230206-composable-stable-pool-v3 optimism enableRecoveryMode() 0xa7508bde3c3d65fa21321ca35b2d1da564bc4a772cff9947de3c3e1a467e9dec poolRecoveryHelper 0x26743984e3357eFC59f2fd6C1aFDC310335a61c9
20230206-weighted-pool-v3 polygon enableRecoveryMode() 0x8e751c9d2a2e4de88b6c71094d5a2b18be451801333ea94579761179bc9b9ef9 poolRecoveryHelper 0x495F696430F4A51F7fcB98FbE68a9Cb7A07fB1bA
20230206-composable-stable-pool-v3 polygon enableRecoveryMode() 0x4645b2fd612d1e3d4f7cbd5f68df6511f4dedfcba83090853604d4fbf33f467d poolRecoveryHelper 0x495F696430F4A51F7fcB98FbE68a9Cb7A07fB1bA

Risk Assessment

This BIP is about allowing automation and the greater Web3 community to move pools into a state where there is less risk,
in situations where there could be some concern about their function. A number of higher AUM V2 pools spent quite a bit
of time in Recovery Mode recently as a result of some recently discovered and patched reentrency issues.
It has been well demonstrated that, while recoveryMode can create some minor UX problems for exiting pools and results in less revenue being earned by the DAO, it otherwise has no ill-effects nor creates new risk.

References

Directory of Addresses used by script which generated the table and multsig payloads

https://snapshot.org/#/balancer.eth/proposal/0xa8e7428382b9bb28ab3fe0ea805d46849a3316fb9b697aafaa1202c0d0bb6da7

1 Like