we (the app, at proposal creation time) assume that the state of the blockchain at proposal creation will stay unchanged (except for time passing) by the time proposal execution eventually happens.
the following scenarios will render one or more of the above set of assumptions invalid:
role member changed
IF any streams end streaming OR any streams are cancelled DURING the proposal time
AND the original recipient CLAIMS their funds after the stream ends or is cancelled during this proposal time
THEN the proposal will attempt to withdraw funds from an empty Sablier stream
RESULTING IN A REVERTED TRANSACTION
IF any streams start streaming funds DURING the proposal time
THEN the proposal will not include a call to claim and withdraw from the Sablier stream at execution
RESULTING IN OUTGOING MEMBER FUNDS GOING TO THE INCOMING MEMBER
IF any streams are not actively streaming but DO have funds to withdraw from Sablier
AND the original recipient CLAIMS their funds from the stream DURING the proposal
THEN the proposal will attempt to withdraw funds from an empty Sablier stream
RESULTING IN A REVERTED TRANSACTION
role deleted
IF any streams end streaming OR any streams are cancelled DURING the proposal time
THEN the proposal will attempt to cancel a stream which is already over or cancelled
RESULTING IN A REVERTED TRANSACTION
IF any streams start streaming funds DURING the proposal time
THEN the proposal will not include a transaction to withdraw any streamed funds from the newly cancelled Sablier stream
RESULTING IN LOST MEMBER FUNDS
IF any streams are not actively streaming but DO have funds to withdraw from Sablier
AND the recipient CLAIMS their funds from the stream DURING the proposal
THEN the proposal will attempt to withdraw funds from an empty Sablier stream
RESULTING IN A REVERTED TRANSACTION
stream edited (not past end date and not cancelled)
IF stream ends OR stream is cancelled DURING the proposal time
THEN the proposal will attempt to cancel the stream which is already over or cancelled
RESULTING IN A REVERTED TRANSACTION
IF the stream start streaming funds DURING the proposal time
THEN the proposal will not include a transaction to withdraw any streamed funds from the newly cancelled Sablier stream
RESULTING IN LOST MEMBER FUNDS
IF the stream is not actively streaming but DOES have funds to withdraw from Sablier
AND the recipient CLAIMS their funds from the stream DURING the proposal
THEN the proposal will attempt to withdraw funds from an empty Sablier stream
RESULTING IN A REVERTED TRANSACTION
stream cancelled
IF stream ends OR stream is cancelled DURING the proposal time
THEN the proposal will attempt to cancel the stream which is already over or cancelled
RESULTING IN A REVERTED TRANSACTION
IF the stream starts streaming funds DURING the proposal time
THEN the proposal will not include a transaction to withdraw any streamed funds from the newly cancelled Sablier stream
RESULTING IN LOST MEMBER FUNDS
IF the stream is not actively streaming but DOES have funds to withdraw from Sablier
AND the recipient CLAIMS their funds from the stream DURING the proposal
THEN the proposal will attempt to withdraw funds from an empty Sablier stream
and the Role member is changing (including Role being deleted)
OR
If a stream has already naturally ended, and we try to cancel it
The issues are
that Sablier will revert if a Stream is attempted to be withdrawn from, and there are no funds to claim in that stream. Calling withdrawMax on a stream with no funds to claim will revert
attempting to cancel a stream which has naturally ended will revert
Ok it seems like the thing to start hacking on here is:
Anywhere in the Roles proposal builder where we’re calling withdrawMax and cancelStream move that (and any necessary context) into a new Module contract and dynamically make that decision to withdraw or cancel or not at runtime.
unaffected user stories
affected user stories
ASSUMPTION:
we (the app, at proposal creation time) assume that the state of the blockchain at proposal creation will stay unchanged (except for time passing) by the time proposal execution eventually happens.
the following scenarios will render one or more of the above set of assumptions invalid: