Replies: 7 comments 39 replies
-
Partial Solution (in app) - Incentivize withdraw + voidOn the recipient side, we would add a toggle for chaining a void action after withdraw. This makes sure that when Alice gets her last assets, she also "removes the stream from accounting" (voids it). This would only be good for paused streams (we wouldn't want Alice to void a good stream upon her first withdrawal), meaning we're left with the next edge-case:
Partial Solution (on-chain) - Dummy "signal"Accounting is usually more important for the sender (they're more likely to use their account to manage more engagements). Therefore, we could implement an on-chain "signal" to simply mark a stream as "sender-voided". This would come under the shape of a dummy method that only emits an I realize this could be done using our backend too.. but the advantages of implementing it on-chain are:
Solution (on-chain) - End streamWe discussed this in #40 |
Beta Was this translation helpful? Give feedback.
-
Indeed, there is a tricky situation caused by the nature of flow, particularly because of these aspects:
Currently, I don’t think there is any elegant way to address the unwanted dust problem. The on-chain solution that I can think of would involve implementing a system like Gelato to automate pausing. Whether it is on-chain or off-chain (backend - the automated pausing), this would not be feasible. Any stream created without an initial deposit becomes insolvent after one second, and with an automated system that pauses in case of debt, it would be paused immediately. It is difficult to create a scenario that would cover each type of flow stream created—whether it will incur debt after a couple of seconds, after months, or whether the debt is intentional or not. So, IMO, the best solution would be to add a param in the event that the sender triggers to ask the recipient to "withdraw + void" if there is any unwanted debt. Also, for your exact scenario, if the sender needs to pay a contractor for exact 3 months with an exact amount which he deposits at start, it would be achieved by lockup contract.
If anyone wishes to have a "fresh" start, he can start a new stream at any moment of time. |
Beta Was this translation helpful? Give feedback.
-
IIUC, another way to ask "How do we deal with the unwanted debt dust?" is "How can senders pause the stream at a specified time without accumulating any dust?" I want to propose an on-chain scheduler. Here's a detailed breakdown of how this could be implemented:
Incentives will be donated to another contract from which executors would receive incentives. These would be a very small amount. The executor would receive 150% of the gas cost and the remaining can be refunded to the sender in the same tx. QnAQ. What if the signed data is sent on-chain before the time range? Q. What if the sender decides to cancel the scheduled tx? Q. What if at the time of tx, gas cost is higher than incentive provided? Final noteThis may look complicated in writing but it's very less complicated to implement. It's how gasless transactions work. It's how opensea orders work and Cowswap amm works. We will add a function in Flow contract which will accept or reject the signed data and pause the stream. We will be offering a gasless way to pause a stream. In the future, we can extend it to make Sablier as a whole gasless for users. Wdyt (of course if you think that I correctly understood your problem)? |
Beta Was this translation helpful? Give feedback.
-
Sorry for taking longer to respond here. On @smol-ninja's Gelato-style suggestion, my general thoughts are:
Regarding @andreivladbrg's You mention the "debt dust problem" and while this doesn't solve it, it provides for a nicer way of explaining that debt in the user interface. At the same time, we re-discussed the possibility of implementing #40 such that:
I would be interested to hear your take on the above @smol-ninja, sorry again for the delay. |
Beta Was this translation helpful? Give feedback.
-
I haven't yet found a moment to review this discussion, but it is worth mentioning that in the future, the debt will be renamed to uncovered debt. |
Beta Was this translation helpful? Give feedback.
-
Ok, I have finally caught up with this thread. Thanks all for your contributions. Some thoughts:
Here it is:
The reason why we have allowed only the recipient to Note The If you (@sablier-labs/engineers) agree with this rationale, and you find no mistake in it, we should close #201 and open another issue to refactor |
Beta Was this translation helpful? Give feedback.
-
since we’ve reached a consensus, i’m going to close this as per issue #215 |
Beta Was this translation helpful? Give feedback.
-
Requesting some feedback on the following problems (+ the potential solutions). The main issue is with "socially unwanted debt" (meaning correct technically, but weird for UX).
Scenario
Context
In order to "stop" a stream, one can:
pause
it (debt is tracked)void
it (debt is cleared)Problem 1 - Debt dust
In organizations taking care of payroll, senders may forget to stop streams when someone is fired or a contractor finishes their commitment. Even if they do, it invites "dust" to accrue as unwanted debt.
In our scenario, Bob could pause the stream and go to Alice and ask her to send a
void
transaction. Realistically, this set of actions relies on a non-trivial coordination cost. While technically correct, the debt doesn't really fit with the "social contract", therefore causing bad UX for any accounting or portfolio tracking. The question here is:How do we deal with the unwanted debt dust?
Problem 2 - Debt-loaded restarts
PRB edit: see the conversation below. This is not a problem because in Flow, there can be multiple streams between two users.
Extending the initial scenario, say:> Bob needs Alice again for 2 months of work. He wants to start a stream of USDC 1000/month. The system tells him he needs to pay USDC 60, but that's unwanted debt so why would he?How can Bob start his new agreement with Alice without the unwanted debt?Note 1
The example of USDC 60 can be extended to cases of
USDC 999..99
for someone who simply forgets to close the stream.Note 2
To put it another way, I can't pay exactly 3000$ at 1000$/month.
@sablier-labs/everybody
Beta Was this translation helpful? Give feedback.
All reactions