When proposals are open which will affect Sablier streams, there are certain states that blockchain may get into which will render the created proposal invalid at time of execution, despite being valid at time of creation.
All of those scenarios are due to the specific situation in which a stream which has funds to claim from the stream during the proposal creation, no longer has funds to claim from the stream at proposal execution. This can happen because the role member manually flushed out their stream funds during the time when the proposal is active.
In order to protect against these potential race conditions, we should move the logic to determine whether or not to attempt to withdraw funds from a stream from proposal creation time to proposal execution time.
We think a potential solution to this would be to create and deploy a contract with this logic, then:
ephemerally attach it as a module to the Safe during execution
call a function on it which includes a list of Sablier streams and maybe some more metadata about those streams
(if necessary at execution time) proxy a call to flush the Sablier stream through the Safe
When proposals are open which will affect Sablier streams, there are certain states that blockchain may get into which will render the created proposal invalid at time of execution, despite being valid at time of creation.
All of those scenarios are due to the specific situation in which a stream which has funds to claim from the stream during the proposal creation, no longer has funds to claim from the stream at proposal execution. This can happen because the role member manually flushed out their stream funds during the time when the proposal is active.
In order to protect against these potential race conditions, we should move the logic to determine whether or not to attempt to withdraw funds from a stream from proposal creation time to proposal execution time.
We think a potential solution to this would be to create and deploy a contract with this logic, then: