Flow

Sablier
FoundryDeFi
20,000 USDC
View results
Submission Details
Severity: low
Invalid

Misleading Result on Voided Streams Due to `SablierFlowBase::isPaused` Function

Summary

The SablierFlowBase::isPaused function checks whether a stream is paused, which is indicated by a ratePerSecond value of 0. If the stream is paused, it can either be restarted or remain in its paused state. It's important to note that voided streams also have a ratePerSecond of 0, but these cannot be restarted.

Since this protocol is designed to be integrated with multiple other protocols, relying on this function can lead to significant issues with those integrations, potentially affecting whether certain operations are allowed or denied based on the stream's paused status.

In the scenario where an integration checks a voided stream using the isPaused function, the result will be true. However, if the next line in the integration’s code attempts to restart the stream, it will cause a revert.

Recommendations

Check first if the stream is voided:

function isPaused(uint256 streamId) external view override notNull(streamId) returns (bool result) {
+ if (_streams[streamId].isVoided) {
+ result = false;
+ }
result = _streams[streamId].ratePerSecond.unwrap() == 0;
}
Updates

Lead Judging Commences

inallhonesty Lead Judge 8 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Appeal created

mrkaplan Submitter
8 months ago
inallhonesty Lead Judge
8 months ago
inallhonesty Lead Judge 8 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.