[BIP-343] Grant emergencyDAO disable recovery mode on Weighted and ComposableStable pools

Payload PR - BIP-343

Background

On the 24th of June 2023, the Balancer Emergency SubDAO, put all Composable Stable Pools (CSPs) into Recovery Mode. This was in response to an incident reported by ImmuniFi that Balancer Labs was not able to immediately verify or discount.

Ongoing investigation is leading to the belief, which still must be verified, that many of the pools can run safely outside Recovery Mode. The Emergency DAO has requested that we grant rights to disableRecoveryMode() on all CSPs and all Weighted Pools version 2 and above.

This will allow them to unpause pools as it becomes sensible, without a 1-2 week governance delay.

TL;DR on recovery mode:

  • Pools in Recovery Mode do not collect protocol fees(and therefore do not accumulate core pools incentives)
  • Pools in Recovery Mode can only be joined and exited proportionally.
  • Recovery Mode may interfere with the compatibility of pools.

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 permissions 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.

More information about the various Balancer Multisigs and their functions can be found in the multisig-ops repo

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-deployments.

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

deployment chain function role caller caller_address
20230320-weighted-pool-v4 arbitrum disableRecoveryMode() 0x3f9dc3da8a6332271be3fccd1a107fd3117a1a988666ff673241edc8c12279ac multisigs/emergency 0xf404C5a0c02397f0908A3524fc5eb84e68Bbe60D
20230206-weighted-pool-v3 arbitrum disableRecoveryMode() 0x0fb35afbdd369d25e1e13986af342dd66f4af22e88628aded66fc015fddee9e6 multisigs/emergency 0xf404C5a0c02397f0908A3524fc5eb84e68Bbe60D
20220906-composable-stable-pool arbitrum disableRecoveryMode() 0x6849898f08c7f64552f27ae1a4dfcc908200c4d6901ee3945a8c62dbf9cefb8f multisigs/emergency 0xf404C5a0c02397f0908A3524fc5eb84e68Bbe60D
20221122-composable-stable-pool-v2 arbitrum disableRecoveryMode() 0x85896342da44e8444ef54be6c4643b51c1e23270bb9ec1f0257cd03d72a80cb6 multisigs/emergency 0xf404C5a0c02397f0908A3524fc5eb84e68Bbe60D
20230206-composable-stable-pool-v3 arbitrum disableRecoveryMode() 0x0585ff33fe95b333f37198850856b5b788891cbc6fd99c447b8d7625c94a33b9 multisigs/emergency 0xf404C5a0c02397f0908A3524fc5eb84e68Bbe60D
20230320-composable-stable-pool-v4 arbitrum disableRecoveryMode() 0x2cdef929bdc29c7b9ca832b8a8f62ce592fee150df38b736a8cab1d2918fc179 multisigs/emergency 0xf404C5a0c02397f0908A3524fc5eb84e68Bbe60D
20230320-weighted-pool-v4 avalanche disableRecoveryMode() 0xd674de2cecb3a543953d0844369358124e617428c5e1bbff8924a84e7e4128fa multisigs/emergency 0x308f8d3536261C32c97D2f85ddc357f5cCdF33F0
20230206-weighted-pool-v3 avalanche disableRecoveryMode() 0x57a99f3ed4c936dc3acc397e914c860702345856a9cca3a5be4c01fefa6a7674 multisigs/emergency 0x308f8d3536261C32c97D2f85ddc357f5cCdF33F0
20230320-composable-stable-pool-v4 avalanche disableRecoveryMode() 0xe41196603a4830aa78064fa1ce052e42607bc0a162707e1ce030e7fd9757f0b1 multisigs/emergency 0x308f8d3536261C32c97D2f85ddc357f5cCdF33F0
20230320-weighted-pool-v4 gnosis disableRecoveryMode() 0x29596d20dcc54c557d94ae57af84f08715a588be1d756198eec61a3dc368b6c1 multisigs/emergency 0xd6110A7756080a4e3BCF4e7EBBCA8E8aDFBC9962
20230206-weighted-pool-v3 gnosis disableRecoveryMode() 0x9023a208ea63197b4da99dc4a096d44fb3152b807b6e4d37f15239d9fff8beb2 multisigs/emergency 0xd6110A7756080a4e3BCF4e7EBBCA8E8aDFBC9962
20221122-composable-stable-pool-v2 gnosis disableRecoveryMode() 0x478e7f53087deab85ae5870218c02821a6bafa4a75984797ac58cdfd513a385b multisigs/emergency 0xd6110A7756080a4e3BCF4e7EBBCA8E8aDFBC9962
20230206-composable-stable-pool-v3 gnosis disableRecoveryMode() 0x4b0cfb0e3afde1903ef88f0072b490a0d78f1027a165371b1b4732daa84a9559 multisigs/emergency 0xd6110A7756080a4e3BCF4e7EBBCA8E8aDFBC9962
20230320-composable-stable-pool-v4 gnosis disableRecoveryMode() 0x338ff79f4b040df80f9cbc5217e904e2c8dbb7fb58beb6100c837ffa25ab4197 multisigs/emergency 0xd6110A7756080a4e3BCF4e7EBBCA8E8aDFBC9962
20230320-weighted-pool-v4 mainnet disableRecoveryMode() 0x883ac0fb54f0b07161f4c1d1132c7179cf4fd457dec4d2cf15af62bfe93d6402 multisigs/emergency 0xA29F61256e948F3FB707b4b3B138C5cCb9EF9888
20230206-weighted-pool-v3 mainnet disableRecoveryMode() 0xd1cab845861601849b43df194d75e16c676ee31cf20296f392e9d44dd3793ef3 multisigs/emergency 0xA29F61256e948F3FB707b4b3B138C5cCb9EF9888
20220906-composable-stable-pool mainnet disableRecoveryMode() 0xdcae01a1d3143e115458cda9b816ea278dd5daf08d9b6d3ec668632aa7b82dad multisigs/emergency 0xA29F61256e948F3FB707b4b3B138C5cCb9EF9888
20221122-composable-stable-pool-v2 mainnet disableRecoveryMode() 0x85896342da44e8444ef54be6c4643b51c1e23270bb9ec1f0257cd03d72a80cb6 multisigs/emergency 0xA29F61256e948F3FB707b4b3B138C5cCb9EF9888
20230206-composable-stable-pool-v3 mainnet disableRecoveryMode() 0xa35b682012cf580f34e9cd41e4bf1c0210b6ebfc1a952fb582842c0e23b8c069 multisigs/emergency 0xA29F61256e948F3FB707b4b3B138C5cCb9EF9888
20230320-composable-stable-pool-v4 mainnet disableRecoveryMode() 0xb6f4ab951143da625c0c25d6eca1ce9e007e3139abfd9cfec3a301bad7238e15 multisigs/emergency 0xA29F61256e948F3FB707b4b3B138C5cCb9EF9888
20230320-weighted-pool-v4 optimism disableRecoveryMode() 0xd674de2cecb3a543953d0844369358124e617428c5e1bbff8924a84e7e4128fa multisigs/emergency 0xd4c87b33afcE39F1E3F4aF1ce8fFFF7241d9128B
20230206-weighted-pool-v3 optimism disableRecoveryMode() 0x94d058c565b594a202b88b57a685b093db0fd3406b926f2033a3443a6d8e1b50 multisigs/emergency 0xd4c87b33afcE39F1E3F4aF1ce8fFFF7241d9128B
20220906-composable-stable-pool optimism disableRecoveryMode() 0x53a0625529c519f2e4a706b874baf30797466df455c9d39cd3ee19e6fe5bc6e2 multisigs/emergency 0xd4c87b33afcE39F1E3F4aF1ce8fFFF7241d9128B
20221122-composable-stable-pool-v2 optimism disableRecoveryMode() 0x85896342da44e8444ef54be6c4643b51c1e23270bb9ec1f0257cd03d72a80cb6 multisigs/emergency 0xd4c87b33afcE39F1E3F4aF1ce8fFFF7241d9128B
20230206-composable-stable-pool-v3 optimism disableRecoveryMode() 0xe4efb851c410e171273aee46d6939a91154b536e375e6fe59c09a4e617072339 multisigs/emergency 0xd4c87b33afcE39F1E3F4aF1ce8fFFF7241d9128B
20230320-composable-stable-pool-v4 optimism disableRecoveryMode() 0xf65bca6198c80a6fc89409c116db12c0427a0b571cd0d2ee5dd614145d006810 multisigs/emergency 0xd4c87b33afcE39F1E3F4aF1ce8fFFF7241d9128B
20230320-weighted-pool-v4 polygon disableRecoveryMode() 0x70d81f1b0f71c8c3037ee34b69ad6980888bab8b2e32959f8c6aac274a7f10cb multisigs/emergency 0x3c58668054c299bE836a0bBB028Bee3aD4724846
20230206-weighted-pool-v3 polygon disableRecoveryMode() 0x70ea65bcadbec99c10058d43f9acdc9a5ad05cde666b7d0065818feb763e7cb2 multisigs/emergency 0x3c58668054c299bE836a0bBB028Bee3aD4724846
20220906-composable-stable-pool polygon disableRecoveryMode() 0x2bd529cf8062fa0ff07c2054e5dc654a104415c2ae171092c450a88c9ff098a9 multisigs/emergency 0x3c58668054c299bE836a0bBB028Bee3aD4724846
20221122-composable-stable-pool-v2 polygon disableRecoveryMode() 0x85896342da44e8444ef54be6c4643b51c1e23270bb9ec1f0257cd03d72a80cb6 multisigs/emergency 0x3c58668054c299bE836a0bBB028Bee3aD4724846
20230206-composable-stable-pool-v3 polygon disableRecoveryMode() 0x3f743640e5e338ede5771590dab93e6860616f4318ca6d5a578c84be2c329844 multisigs/emergency 0x3c58668054c299bE836a0bBB028Bee3aD4724846
20230320-composable-stable-pool-v4 polygon disableRecoveryMode() 0xdb63b0c040446fcfa9503943eff986bc051fb5e7cb8f83a8bcebb7115c535b60 multisigs/emergency 0x3c58668054c299bE836a0bBB028Bee3aD4724846
20230320-weighted-pool-v4 zkevm disableRecoveryMode() 0xd21198f97672ee6118c9598a1b4c2053515bf28a40c4df5cf02365c4ff3d5ba7 multisigs/emergency 0x79b131498355daa2cC740936fcb9A7dF76A86223
20230320-composable-stable-pool-v4 zkevm disableRecoveryMode() 0x5610aeafaa3f5c4ef9b9b45ee9c0810b2f7bd64b7b504f19d1a8a3bde062a966 multisigs/emergency 0x79b131498355daa2cC740936fcb9A7dF76A86223

Risk Assessment

This BIP could allow the EmergencyDAO to remove pools from recovery mode without engaging governance or communicating the change. Voting on this BIP accepts that those who put a pool into Recovery Mode can also move it out without governance intervention.

References

Balancer Deployments
BAL Addresses

3 Likes

Since emergencyDAO has permission to enable recovery mode, makes total sense that they can also disable it when security issues are cleared.

1 Like

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

Secondary review by master @solarcurve revealed that CSPv4 had been missed. The payload has been updated, as has the BIP text above with new information. The snapshot text can not be changed and still does not reflect CSPv4.

The Maxis have deemed it acceptable to make this change early in the snapshot period in order to avoid future governance spam and potential delays in disabling recovery mode.

If anyone believes otherwise, please say so and we can run this again next week.

3 Likes