RFP: Stream Platform for ENS Service Providers

As the metagov-steward elect, I’d like to formally open a request for proposals for Streaming platforms for which we will use for the Service Providers. The goal is to have the stream start by mid-january to February so I understand it’s a short time, but over the past few weeks we’ve already seen demos from Sablier (@prberg), Superfluid, LlamaPay and Hedgey Finance. I ask these projects (and any other) to formally apply by simply answering the post below.

Starting next year, 9 separate projects will be paid from the ENS DAO with streams. ENS DAO also will be paying 9 stewards through the Metagov group, as well as a secretary role, and these could also be streams, depending on the platform chosen.

Process

The Metagov steward will read through the proposals, ask relevant questions and come to a decision. It is not a matter that will be put on a social vote, but it will lead to an Executable proposal in the January voting season.

Request for Proposals

We request a stream technology platform, meaning the ability to transfer tokens over time. It must be live on MainNet ethereum. If you are a representative of such platform (if there’s no company behind it, anyone can decide to advocate for an open source solution) then please answer the questionnaire below.

Name and website of the stream platform

For how long have you been on Mainnet Ethereum? How much value have you streamed in total so far? What’s the current Total Value Locked of the platform?

Platforms must be on main net ethereum for over at least one year and have a streamed over $100 million in total value streamed

What tokens you support?

Our main requirements will be USDC, ENS and WETH

Report any important security incidents you’ve encountered and how you managed it

Does your app have the possibility of having a public custom UI so that anyone can follow the state of multiple streams?

All streams will be public and we want there to be a place where anyone can check the values being streamed to all participants

Are you able to create indefinite streams? How easy is it to renew, pause or edit an existing stream?

*Our current stream providers will be receiving funds for at least one year, but there’s no end date. The goal is to have a new Stream Provider election in Q1 or Q2 2025, followed by an Executable Proposal which will remove some recipients, add others and maybe change the value of some. Your stream must be able to support that without any interruption in the service. This can be done by natively editing a live stream or being able to cancel and start a new one in a single transaction *.

How much value must be locked in order to create a one year minimum stream of $3.6 million?

Please explain how much capital needs to be locked as well as the strategies to reduce smart contract risk of the locked up capital.

What are the gas costs and fees associated with your service?

Does your service charge fees? If not, what’s the business model? How much does it cost to withdraw from a stream, typically?

Are you able to have a developer from your team to support ENS?

We only expect to need support on the initial creation of the executable transaction to the DAO and in case of any emergency. Will that come with a cost?

10 Likes

Sablier - https://sablier.com

Sablier V1 has been live on mainnet for over four years now, dating back to 2019. Sablier V2 was deployed in July 2023.

Here are some combined metrics for both V1 and V2:

  • According to DeFiLlama (with “vesting” turned on), the current TVL is $148M.
  • Between 2021 and 2023, the median monthly TVL has been ~$152M.
  • Based on our Dune dashboard, 43k streams, 27k total users, and $49M cumulative TVL just in stablecoins.

It is worth noting that tracking TVL for streaming protocols is not easy. We have recently proposed a new methodology called Total Obtainable Value that attempts to improve the status quo.

See the Assumptions section in our security policy.

Most ERC-20 tokens are compatible with Sablier, including ENS and USDC. The tokens can be streamed directly – they do not have to be wrapped.

Sablier has never been hacked.

A low-severity bug was found in 2021, but user funds were not at risk of being hacked and no loss of funds occurred. Immediately after being notified, we paused all other development efforts and set out to patch the bug.

Within 24 hours, we had deployed a patched contract (V1.1), and began working on updates for the front-end and subgraph to go live with an update as soon as possible. We subsequently manually reached out to all identifiable users to help them migrate over to the new version, even going as far as offering a migration script to make it significantly easier.

We take security extremely seriously. This Twitter post expounds our code philosophy.

Yes. The Sablier UI offers a public dashboard where all streams can be tracked. You just pass the address of the ENS DAO as the “sender”, and you get all the streams associated with that address. You can see a demo here.

Indefinite streams and pausing are not supported at the moment. However, the issue of “not interrupting” the service can be solved by having the follow-on streams start immediately after the first stream ends. This can be done via the Sablier function createWithRange.

Renewing/ editing streams is a two-step process:

  1. Cancel the current stream (which returns all unstreamed funds back to the sender)
  2. Re-create another stream with new values

All the funds need to be locked up beforehand, meaning the $3.6 million would have to be deposited upfront.

Sablier is entirely free to use, and has been since its inception, as a true public good. Just like in Uniswap, there is a protocol fee switch, but it hasn’t been activated and we don’t plan to activate it any time soon, as we are obsessively focused on growth at the moment, and ensuring our users get the best experience possible. Also, the fees apply only proactively; streams already created are free to use forever.

Regarding gas fees, the Sablier protocol is super gas efficient owing to our singleton architecture. Here are some estimations:

  • ~11.4M gas to create 100 linear streams, in one go
  • ~60k gas to withdraw from a linear stream (example here)

Of course! We will support you along the way, free of charge.


Closing thoughts: thank you for your consideration and support.

1 Like

Hello everyone, it’s a pleasure to see ENS embracing streaming to payout these grants next year. After completing last year’s scholarship streams on Dec 12th, we’d like to continue supporting ENS going forward at the best of our capability, offering hands-on support when needed. Below you can find the answers to your questions, should you have any further comments or questions please let us know.

Name and website of the stream platform

For how long have you been on Mainnet Ethereum? How much value have you streamed in total so far? What’s the current Total Value Locked of the platform?

  • Live on Mainnet Ethereum for over a year (November 2022), live on Polygon and Gnosis Chain since March 2021.
  • To date, the total value streamed is $112M. Over 412k Superfluid streams have been sent since launch, with 52k streams currently active today. In total, the protocol has been used by 518k unique wallets to date.
  • We have designed the protocol to keep funds in user wallets, and not in the protocol’s smart contracts specifically to minimize TVL.

What tokens you support?

  • Any ERC-20 token can be streamed on Superfluid. USDC, ENS and ETH are all supported on Ethereum Mainnet.

Report any important security incidents you’ve encountered and how you managed it

  • On February 8, 2022, an attacker exploited the protocol’s host contract. The incident was noticed, mitigated, resolved and communicated publicly within 6 hours. The timeline and main exploit details are available on this blog post published the same day.
  • No security incidents occurred since Feb 2022. After the exploit of Feb 2022 the protocol has been further audited and bug bounty programs have been running since. The latest audit was just completed with Trail of Bits, among the top auditors in the industry. As will be highlighted by the audit report, our testing standards are some of the highest in the industry. In ToB’s words: “The test suite of Superfluid is considered very thorough. There are unit tests, integration tests, fuzzing tests, invariant tests (using both Foundry and Echidna), and tests using the Certora Prover.”

Does your app have the possibility of having a public custom UI so that anyone can follow the state of multiple streams?

  • Yes, all Superfluid streams are visible publicly. Viewers can monitor individual streams or all streams being sent from or received by a wallet (or ENS address) via our Dashboard. We can also build a custom public overview with all the key information and stats about the grants status (i.e. amount paid out so far, etc). Anyone can use our freely available subgraph or on-chain data to build transparent analytics as well. ENS addresses and avatars are supported by our Dashboard.

Are you able to create indefinite streams? How easy is it to renew, pause or edit an existing stream?

  • Yes, streams can be indefinite, they are “open-ended” by default. They can be paused, edited or extended easily via a simple transaction. You will be able to set automatic start and/or end dates as needed for each individual stream.

How much value must be locked in order to create a one year minimum stream of $3.6 million?

  • Superfluid has been designed to avoid locking value in smart contracts, funds are always available in the sender or recipient user wallets. There is a small “buffer” required for opening a stream, that on Ethereum Mainnet is currently set to $69, so assuming 9 streams the total value locked would be $621. By wrapping a set amount on a weekly or monthly basis there will be limited funds exposure to the protocol smart contracts, up to the total amount wrapped at any given time.

What are the gas costs and fees associated with your service?

  • Superfluid is permissionless, fully open-source and free to use, there are no protocol fees nor UI fees. We are working on separate business models to sustain the protocol operations that won’t necessarily require adding fees to streams operations.
  • The gas required to set 9 scheduled streams on Ethereum Mainnet is 355k, or around $50 at the current gas and ETH prices. Once started, streams run indefinitely without consuming any gas. Unwrapping tokens after receiving them via a stream on Ethereum Mainnet normally costs between $4 and $25, based on the gas and ETH prices.

Are you able to have a developer from your team to support ENS?

  • Certainly, we can offer hands-on support from our team that covers a broad range of requests and time zones, via a dedicated communication channel for ENS. We can also work with you each step of the way from planning the distribution to setting it up together live on video call, to offering support to ENS and all recipients until all payouts are successfully completed. That will be free of charge.

Thanks once again for the opportunity to serve the ENS DAO and community. Should you have any questions please let me know.

8 Likes

I’ve experimented creating streams in both platforms and based on that and the provided answers. I’ve only created one stream in each on polygon, haven’t attempted to try multiple streams in different times etc, so that might explain why the values I got were higher than what the team’s own benchmark represents. But I think it seems to paint that overall Sablier tends to be more gas efficient (even accounting for having to do two separate transactions to “modify” a stream) while Superfluid seems to be more flexible and capital efficient.

Here’s a summary:

Sablier Superfluid
Create Stream 230k (+50k to approve tokens) gas 400k (+90k to wrap tokens) gas
Cancel a Stream 90k gas 310k gas
Modify Stream 320k (cancel + create new) gas 320k gas
Capital lockup for 18 months 5.4M USDC (18 months) ˜150k USDC (two weeks of capital)
ENS Support :white_check_mark: (not on polygon) :white_check_mark:
Polygon :white_check_mark: :white_check_mark:
Allows substreams (stream to WG which then controls streams) :x: :white_check_mark:
3 Likes

Thanks @AvsA for compiling the helpful table above.

And thank you to @prberg and @mdali.eth for taking the time to put your answers here together into this thread. Metagov is looking at this now and we’ll be coming back with a decision very soon. :pray:

1 Like

Thanks for the draft report, @AvsA. A couple of comments:

Gas costs are higher on on Polygon because the PoS flavors of ERC-20 eat up a great deal more gas than the vanilla ERC-20s on Mainnet.

Deploying 5.4M USDC is just the default option.

It is possible to create 36 separate Sablier streams worth 150k USDC each. You would do this by calling the createWithDurations function once every two weeks. Then, in our UI, the recipient would have the option to withdraw from multiple streams in one go (the Sablier dashboard aggregates all streams).

Importantly, Sablier should confer you and the ENS DAO more peace of mind compared to Superfluid because Sablier streams are autonomous. Unlike Superfluid, we do NOT have a liquidation network.

With the Superfluid model, if the DAO fails to make the bi-weekly deposits on time, a portion is forfeited to liquidators. For example, for a stream worth ~300k USDC per month, the liquidation fee amounts to ~1,644 USDC. This fee would be levied each time the DAO does not top up on time.

Whereas with Sablier, this risk of liquidation simply does not exist.

1 Like

It seems that creating a new stream every week defeats the purpose of a stream. If we were to do so, not only it would be gas intensive but also the DAO requires votes for every action so we would need to approve an intermediary contract and have some script that would call the create new stream function, and if we’re doing that, why not simply script sending the funds every two weeks?

this is true - creating new Sablier streams is more gas expensive than wrapping Superfluid tokens.

You would not be exposed to liquidation risk, and so the question for you/ the DAO is:

Is it worth it to pay 130k more gas and get the benefit of no liquidation risk?

I’m biased but I think the answer is “yes”. Lots of things could go wrong with the intermediary contract and the script that wrap the tokens. Whereas with Sablier, the cost and the risk are both deterministic.

Some back-of-the-napkin calculations: at an average gas price of 35 gwei, 130k extra gas every two weeks would translate into 0.1638 ETH paid for gas, which is $390 at the current price of ~$2,385 per ETH. This is merely a quarter of the 1,644 USDC liquidation fee levied by Superfluid (which would apply every time the balance is not topped up on time).

It is worth noting that the gas cost can be further brought down by (i) using an optimizer tool like GasHawk and (ii) using monthly instead of bi-weekly tranches (i.e. creating 18 streams instead of 36 by depositing $300k in each stream instead of $150k).

An update on this from the new Metagov Working Group:

First, a huge thank you to @prberg, @mdali.eth, and the other teams that presented on the metagov calls.

After considering the pros and cons of the approaches by both providers in this thread, we determined that Superfluid would be the best choice for the ENS DAO’s needs on this specific project.

Several factors influenced the decision, but the primary point in this case was our hesitation to deposit the full stream amount into the vendor’s contract. Breaking the stream up as @prberg suggested is a valid solution, but we determined that it wouldn’t be the right approach for us on this project. While Sablier both eliminates the need to wrap tokens and the risks of liquidation, in this case, the lack of capital lockup was the higher priority to our team.

We found both products to be mature offerings and would recommend either to any other DAOs’ projects or other teams in the ecosystem.

6 Likes

To provide further information: besides the capital efficiency method, another factor that pushed us to superfluid was the ability to forward a stream without any more capital requirement. This will allow us to create a single stream from the DAO to a steward controlled multisig, which can then forward the streams to individual entities while keeping almost no capital in its own wallet. It’s a good way to allow a model in which we can respond quickly to anything that comes up while keeping very little trust in the stewards multisig.

7 Likes

Thanks for sharing your final decision @5pence.eth, @AvsA.

I’ve had a great experience pitching Sablier on this forum and I would like you thank you again for the fair play. As I’ve previously said, I think that all DAOs should employ a similar democratic approach when deciding what third-party on-chain tools to use (having a security mindset is da wei).

Duly noted. We will ship a new product in 2024 that will enable open-ended streaming on Sablier without lockups.

Fair enough. That’s indeed a cool feature!

4 Likes

Thanks for taking the time to pitch your offerings @prberg and @mdali.eth

I have no association with the working group but my project (alongside @Premm.eth) Unruggable is a recipient of the service provider stream.

I had a read through these proposals and had a look and figured I may as well comment as a matter of feedback even though a decision has already been made.

The main thing that stood out to me was the capital deposit requirement - it seems strange to me that an up front deposit of the full amount be required as in the case of Sabalier. The liquidation fee seems somewhat negligible to me in the context of the size of the stream and the opportunity cost of deploying the funds elsewhere in terms of capital returns.

As a recipient I have had a look on both sites and was surprised not to immediately find a video demo of the interface for both stream providers and recipients such that one can get a basic overview of the most simple use cases quickly and succinctly. Having never sent or received a stream before the first questions that come to my mind are how does it work - do I have to withdraw the funds (I assume so), and can I automatically redirect funds?

I accept that both products offer a lot of flexibility but it felt somewhat overwhelming when I clicked ‘Launch App’ and it felt as though I was very much being left to work it out myself…

2 Likes

liquidation shouldn’t even be included in any part of this discussion. This is a funding stream not an interest bearing market making profit account with attached risk.

Hi all, it has been a pleasure to participate actively in this forum for the first time, we are excited to support ENS again this year with our liquid streaming technology!

This is precisely why we built Superfluid Protocol the way it is, to allow composable streams that can redirect value as needed while leveraging the capital efficiency of not needing funds locked in wallets or contracts — exciting to hear it was a key factor in your decision making process.

Thanks @AvsA, @5pence.eth and all the other stewards for the thorough, fair and transparent call for proposals and selection process, I believe other DAOs should emulate a similar procurement for their service providers. Thanks @prberg for keeping the conversation fair and on point, the entire web3 industry benefits from healthy and constructive competition, this selection process has been a good example of that.

To the ENS stewards and to all streams recipients, our team will work with you hands on to ensure a smooth payout process end-to-end. We are looking forward to getting the streams started!

5 Likes

Hi – I know this decision is in the past but seeking to learn: from the DAOs perspective, what makes sablier’s biweekly stream creation materially different from superfluid’s biweekly token wrapping (to top up the streaming balance)? Naively, I would guess the former is more gas intensive but both would require some kind of DAO action/vote/intermediary/script? Your reply suggests this isn’t true, so hoping to learn ~how/why. Thank you for your time!