On L2, the chainlink returned price can be altered by the sequencer state. Per [chainlink docs](https://docs.chain.link/data-feeds/l2-sequencer-feeds), it is recommended to check sequencer status, and in case of downtime, add a grace period to properly have updatedprice in order to equilibrate the pool and update pool value. A grace period should be added for withdrawing and waiting for the update of the pool value otherwise fees can be miscalculated.
Pool is running with user funds in it, lpTokenDepositValue = 100
Sequencer down, market move higher, now lpToken = 200
user send withdraw request
Withdraw request is immediately processed when sequencer is up, pool owner did not had the time to update the pool value.
5 withdraw is processed and fees are not collected as it's link to the delta between value when depositing and withdrawing
Loss of fees for the protocol and Pool Owner when a user triggers a withdrawal when the sequencer is down.
Manual
Add a grace period as per chainlink docs so that the Pool owner can update lpTokenValue after the sequencer is up again before any withdrawals.
setQuantAMMUpliftFeeTake() update quantAMMSwapFeeTake variable instead of quantAMMUpliftFeeTake.
Admin will not update the value he thought he would. However, this value does not seem to be used anywhere.
Manual
Either delete all functions related to this variable and the variable itself or properly update the function and declare the variable quantAMMUpliftFeeTake
If a pool has a manager and a quantamm admin, admin will not be able to trigger InitialisePoolLastRunTime()
If there is a manager, unless quantammAdminAdress = managerAddress, the function will revert when quantamm admin tries to call it.
Pool is deployed with MASK_POOL_OWNER_UPDATES and MASK_POOL_QUANTAMM_ADMIN_UPDATES, a manger is assigned.
Quantamm admin tries to call InitialisePoolLastRunTime to retrigger an update
It will revert as the function first check for manager address.
Rework the if statement to handle both separately
An admin of a pool can totally change the weight of each asset and intermediate value, affecting the moving average of the pool by calling either setWeigthsManualy() or setIntermediateValuesManually()
Independent Pool Owner deploy a quantamWeighted pool targeting ETH and a lowCap token
A pool has Ether and a low cap token with weight ETH = 90% and lowCap = 10%
users deposits in the pool, want to have some exposition to both ether and lowCap with a majority of Eth
Pool owner (not quantamm) calls setWeigthsManualy to ETH = 0% and lowCap = 100% and calls performUpdate
Pool owner sells his stake of low cap
Pool owner reset to Eth = 90% and lowCap = 10% and has made some unrisk profit
Users expect the strategy to be a certain weight management strategy that the owner can alter freely. It represents a centralization risk. For example if the owner want to manipulate a small market it is possible.
Add a grace period for update to be triggered after manually changing weights. Users can withdraw between this period and avoid a loss. Because of the time of the grace period, it's harder for a pool owner to manipulate any markert
Likelyhood: High, calling setters or getters Impact: Low/Medium, both getters return `quantAMMSwapFeeTake` and `setQuantAMMUpliftFeeTake` modify `quantAMMUplfitFeeTake`. Real impact: those 2 values will be always the same.
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.