One of the invariant of the protocol can be broken
One of the main protocol invariant is that whenever the RPS
equals 0 for a non-voided stream, the stream must be paused, and the Flow.Status
should be either PAUSED_SOLVENT
or PAUSED_INSOLVENT
This can be observed from the protocol's deocumentation
for any non-voided stream, if rps=0⟹isPaused=true and Flow.Status is either PAUSED_SOLVENT or PAUSED_INSOLVENT.
However, this invariant can be easily broken by setting ratePerSecond
to zero without pausing the contract. This can be done by calling the adjustRatePerSecond function with newRatePerSecond
set to zero. There is no check to ensure that the value is non-zero, which is crucial to maintaining the invariant.
This would mean the invariant has been broken
Main invariant of the protocol is broken
Manual review
Ensure that whenever the adjustRatePerSecond function is called, the newRatePerSecond
is checked to confirm it is non-zero. If newRatePerSecond
is zero, the function should revert or automatically pause the contract. This safeguard will enforce the protocol invariant that ratePerSecond
must be greater than zero in an active stream, helping to prevent unintended states.
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.