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:
- maps to the deployed poolRecoveryHelper contract
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