The UpdateRule contract uses an immutable address for updateWeightRunner, preventing new UpdateWeightRunner instances from interacting with existing rules after a pool migration, effectively breaking core weight update functionality.
NOTE!: This issue assumed that issues regarding the need to recall
setRuleForPool()during changingUpdateWeightRunnerinQuantAMMWeightedPoolhas been solved
Rule contracts register UpdateWeightRunner as an immutable, but the problem is that its normal behavior to change UpdateWeightRunner since its a singleton design that my have hotfixes or upgrades here and there as said by DEVs in the comments here
Assuming that the pool register its settings, oracles and rules successfully
The new UpdateWeightRunner will fail to interact with the old rules in critical areas, those areas are:
1- Weight updates through performUpdate():
2- Manual intermediate value updates:
Although in QuantAMMWeightedPool, it can update its UpdateWeightRunner:
The rules remain locked to the old runner due to immutable storage Leading to:
calls to UpdateWeightRunner::performUpdate() and UpdateWeightRunner::setIntermediateValuesManually() will always revert after migration
Forces redeployment of entire rules after any new UpdateWeightRunner deployment
calls to UpdateWeightRunner::performUpdate() and UpdateWeightRunner::setIntermediateValuesManually() will always revert after migration
Forces redeployment of entire rules after any new UpdateWeightRunner deployment
Manual Review
Remove immutable modifier in UpdateRule and add function to be able to change it
Likelihood: Low, when setting a new UpdateWeightRunner (for hotfixes) Impact: High, DoS performUpdate and force redeployment
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.