Replies: 3 comments 6 replies
-
This is great feedback. Never a bad idea to talk to users some more. Trade-offs, Trade-offs EverywhereAs a general preface to my response, I wish to remark that it is not possible to build a protocol that serves all needs. As we've discussed elsewhere, all streams are not created equal. Feedback
I'm afraid that they would have to do this anyway, because the
I am against this.
The burning of the NFT is rather orthogonal to the discussion regarding the end state of the stream. We could very well let the NFT live forever.
So what if later on we discuss with another user who says that, also due to tax or accounting reasons, they would prefer the protocol not to auto-send the funds to the sender on cancelation? A smarter way to tend to this would be to only claim the funds for the caller - if the caller is the sender, claim for the sender, but not for the recipient, and vice-versa. But this would add a great deal of complexity for little benefit and at any rate as per my explanation above this is not a proper solution.
This is another reason why we shouldn't make decisions about what counts as a taxable event or not. Additionally, as I have explained this at length in #110, it may well be the case that in future, closed-ended Sablier streams will be considered income even before claiming. Framing the Solution DifferentlyRather than regulating the rules of the game ourselves (and adding undue complexity in the core), we should let developers "react" to stream interactions, i.e. to cancelations and withdrawals. See the discussion I opened about this here: Side Note about FSMsMight it be helpful to flesh out a finite-state machine with the xState Vizualizer so that we are all aligned on the flow of funds in Sablier V2 (that is, us and the Astaria team)? I don't think that handling ERC-20s would be such a difficult task for the |
Beta Was this translation helpful? Give feedback.
-
I am still very much against this, especially after my recent proposal in #164 to enable recipient hooks. @razgraf can we consider this conversation closed and lock it? |
Beta Was this translation helpful? Give feedback.
-
This functionality ended up being implemented in #422 as a security practice. |
Beta Was this translation helpful? Give feedback.
-
Context
We recently discussed with a user looking to integrate the Sablier v2 NFTs into their lending protocol. They presented us with some valuable feedback on the lifecycle of the token and how to possibly improve its DX.
Assumption
In the current design, the discussion revolved around burning the token (#129) as soon as the stream reaches an end state.
New perspective (technical)
To support our Sablier v2 NFT, their protocol would implement a special wrapper (a
wNFS
if you may, as in "wrapped non fungible stream"). The fact that canceling is a hard-to-predict action (sender may choose when [if stream is cancelable]) would force the integrator to code special logic to host not only an ERC721 but ERC20s too, inside the wrapper. This is because, upon cancelation, the owner of the token would have to expect funds being sent into their balance. The owner/recipient here would be the wrapper itself, hence the need for custom logic.Proposed solution
The proposed solution consisted of creating a new end state that comes into play after the stream gets canceled. Instead of burning the NFT, the
cancel
action would move the idle/non-streamed funds back to the sender, while the ones that haven't been redeemed yet would remain in the custody of the NFT itself. This would actually makewithdraw
the only case when, upon asking to redeem 100% of the available funds would cause the stream to move into an end state and possibly be burned.New perspective (economical)
Although we are not financial advisors and tax is subjective to our user's own research and jurisdiction, in a borrowing context, leaving the funds locked into the NFT could prove beneficial for its owner. As borrowing is usually not a taxable event, the user could choose to leave their funds idle in the token contract (delaying the final withdrawal) and borrow against it even though the stream itself may have stopped a long time ago.
TL;DR;
cancel
withdraw
(no more value inside)Beta Was this translation helpful? Give feedback.
All reactions