Due differing validation used for lambdas it's likely that the pool can't be set to the full available range.
The pool setting lambda is validated as:
Which ends up limit λ as 0 < λ < 1e18. Notice that it cannot equal either of the end values 0 or 1e18.
While DifferenceMomentumUpdateRule, which uses has a "shortLambda" parameter in it has the validation of:
Where shortLambda in the end has to be 0 <= λ <= 1e18. And CAN equal 0 and 1e18.
Both shortLambda and the pool setting lambda are used in the same function _calculateQuantAMMMovingAverage and is likely that the pool validation is too restrictive.
Inside _calculateQuantAMMMovingAverage λ is used as int256 oneMinusLambda = ONE - convertedLambda;
and then in
movingAverageI + oneMinusLambda.mul(_newData[i] - movingAverageI);
Meaning that if λ = 0; the new difference has the biggest possible impact. While if λ = 1e18 the new difference is completely ignored and is equal to 0.
The pool is unnecessrily strict in its λ validation and prevents full available range (excludes values 0 and 1e18).
Manual review.
Since both variables are selected by the user and same function is used unless reason exists allow full range matching DifferenceMomentumUpdateRule unless, the range is actually specified in the whitepaper and was missed.
Otherwise if there is a specific λ range for moving average adjust both places to match that range.
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.