Replies: 15 comments 34 replies
-
Above, I presented the debate objectively. Below, I will give a few subjective takes. My InterpretationWe ought to remember that Sablier is a money streaming protocol, not a token vesting protocol. It just so happens that vesting a brilliant use case for streaming, but Sablier is first and foremost a money streaming protocol. True money streaming means that with every second that passes, the money is actually yours. So the Dynamical Interpretation is the only charitable interpretation of money streaming. I know that in practice, we don't deliver on that promise today. Users need to manually inspect each stream. We don't even show a total balance of all streams in the Sablier UI. But here we're concerned with V2 and the future direction of the project, so this is the right time to talk about a shift in perspective. My Responses to ConsTaxable EventsThis is fair, and IMO the only relevant con. Though I think we should view it as a necessary cost for the pros, and we should also weigh in on how large this risk would realistically be. I posit that for the vast majority of streams, there would be zero interest in triggering a taxable event for the recipient (in order to grief them). Also, there's no MEV. Lack of ControlThis an irrational fear. As long as the protocol is safe (an assumption which we make nonetheless), users shouldn't be concerned about this. Riskier ImplementationAll else being equal, this is true. But not all else will be equal - we will take greater care of the testing for this function, we will fuzz the caller addresses, and so forth. We're not in a hurry with the contracts deployment, so we have ample of time to test the protocol. |
Beta Was this translation helpful? Give feedback.
-
A solution that I thought of and I think that would please both camps would be to add a The only downside I could think of is that it adds complexity to the |
Beta Was this translation helpful? Give feedback.
-
@razgraf I guess that after the recent conversation we had with Andrew (as per #150), the possibility of making the |
Beta Was this translation helpful? Give feedback.
-
Locking this discussion since it's clear that we won't make the For the same reason that no DeFi protocols allows any third-party to claim tokens on your behalf (e.g. yield farms don't allow this). |
Beta Was this translation helpful? Give feedback.
-
Unlocking this because I just saw in LlamaPay's README that their withdraw function is public:
|
Beta Was this translation helpful? Give feedback.
-
Here's another argument in favor of making the withdraw function public instead of implementing the rescuers idea. From a regulatory perspective, it would make Sablier seem much less of a financial product, and more of an autonomous protocol. |
Beta Was this translation helpful? Give feedback.
-
@PaulRBerg could you maybe ask some past-users or even developers close to the matter like Micah what they think about this? I'm still pretty much against this (cons of a public method outweigh the pros for me). @maxdesalle expressed his opinion. I'd love to hear @andreivladbrg and @gavriliumircea pitch in too. But hearing some extra opinions shouldn't hurt. That is if you have anyone in mind that could provide a clear argument pro/against. |
Beta Was this translation helpful? Give feedback.
-
Locking. We've beaten this topic to death. I think that we have landed on a soft agreement that it feels somewhat unnatural to leave the protocol callable by anyone. |
Beta Was this translation helpful? Give feedback.
-
Evidence on Discord that people want the
|
Beta Was this translation helpful? Give feedback.
-
I (subjectively) still do not like this proposal due to the following:
Good point on the tax event. Regarding the user's pain point: would still be solvable by a whitelisted (protocol level or stream level) set of NFT operators. This, without scaling the set of addresses with permission to withdraw to "anyone". On the other hand, they make a good point when they say "as they would just pay the gas for you". I (objectively) am fine with the idea if you still want to implement it, due to advantages clearly still existing and not being invalidated. But I'd urge you to consider a couple more ideas before choosing the protocol-level public withdrawal route:
|
Beta Was this translation helpful? Give feedback.
-
Here's another user begging us to withdraw on their behalf: |
Beta Was this translation helpful? Give feedback.
-
after reading this discussion, an idea came to mind - that it's against and problematic to this proposal - if we are going to implement this (or at least something integrating a lending protocol), and if there's a bad actor who wants to manipulate the market or exploit the lending protocol, wouldn't giving them access to |
Beta Was this translation helpful? Give feedback.
-
More (indirect) empirical support: |
Beta Was this translation helpful? Give feedback.
-
Micah's feedback on making the withdraw function publicly callable. Beautifully argued! |
Beta Was this translation helpful? Give feedback.
-
Should I close this issue since |
Beta Was this translation helpful? Give feedback.
-
Context
There has been a lengthy discussion about the permissiveness of the
withdraw
function in Withdraw on behalf of.I will attempt to summarize the dissenting views on the matter here, as objectively as I can, but as you guys know I tend to favor the position that we should make
withdraw
public.Interpretation of Money Ownership
There are many ways one could interpret the moneyness of a Sablier stream, but the two ways that are relevant for this discussion are the following:
I shall refer to the 1st interpretation as the "Conservative Interpretation", and to the 2nd as the "Dynamic Interpretation".
Crucially, this distinction is a psychological one. The technology is the same in both cases - it's just a question of how humans interpret it. If we're successful, this distinction might someday be statutory, in which case we will just follow the law. But we're not there yet.
The Interpretation Makes the Position
The Conservative Interpretation favors making the
withdraw
function private, while in light of the Dynamic Interpretation, makingwithdraw
public makes a lot of sense.Thus I think this is actually a debate about what interpretation we should favor internally.
Pros
Global Relayers
A public
withdraw
function would give us extreme optionality. We would be able to:Simpler Implementation
No need for any whitelisting mechanism. The pure
withdraw
function would be able to do everything.Scalability
Assuming the Dynamic Interpretation ...
The year is 2025 and Sablier is completely integrated in most web3 wallets, including MetaMask.
MetaMask now tracks all of your Sablier streams and shows up the total balance access all streams. When you wish to make a transfer, MetaMask will check what is the actual balance of your EOA and, if it is not sufficient to cover the transfer costs, MetaMask will simply call
withdraw
on your behalf on as many streams as needed (or ask one of the many public Sablier relayers to do this), so that you can perform your token transfer.Cons
Taxable Events
Assuming the Conservative Interpretation, anyone would be able to trigger a taxable event for any Sablier user.
Lack of Control
Again assuming the Conservative Interpretation, users wouldn't be in full control anymore. Some users might feel uncomfortable with the idea that random people on the Internet can move funds for them.
Riskier Implementation
All else being equal, a function which can be called by anyone is a more dangerous function than a function that can be called only by some users.
Beta Was this translation helpful? Give feedback.
All reactions