Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce EP5.2 #196

Merged
merged 2 commits into from
Mar 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions app/local/config/navigation/protocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -410,10 +410,10 @@ export const navigation: SectionData[] = [
title: '5.3 - [Social] Determine ENS Labs\' next steps in eth.link litigation',
href: '/dao/proposals/5.3',
},
// {
// title: '5.2 - [Executable] Commence Streams for Service Providers',
// href: '/dao/proposals/5.2',
// },
{
title: '5.2 - [Executable] Commence Streams for Service Providers',
href: '/dao/proposals/5.2',
},
{
title: '5.1 - [Executable] Upgrade DNSSEC support',
href: '/dao/proposals/5.1',
Expand Down
2 changes: 1 addition & 1 deletion docs/dao/proposals/4.7.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export const meta = {
description: 'This proposal creates a structure for electing new service providers for the DAO',
emoji: '📖',
contributors: [
// avsa.eth
'alexvansande'
],
proposal: {
discourse: '18091',
Expand Down
2 changes: 1 addition & 1 deletion docs/dao/proposals/4.8.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export const meta = {
description: 'This proposal amends the working group rules related to Steward term duration and compensation rules.',
emoji: '📖',
contributors: [
// avsa.eth
'alexvansande'
],
proposal: {
discourse: '18092',
Expand Down
69 changes: 69 additions & 0 deletions docs/dao/proposals/5.2.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
{/** @type {import('@/lib/mdxPageProps').MdxMetaProps} */}
export const meta = {
description: 'This EP will initiate the Streams for Service Providers as selected on EP4.9',
emoji: '📖',
contributors: [
'alexvansande'
],
proposal: {
tally: '63865530602418424570813160277709124551851041237648860550576561576702951975816',
type: 'executable'
}
};

# [EP5.2] [Executable] Commence Streams for Service Providers

This EP will initiate the Streams for Service Providers as selected on [EP4.9](https://docs.ens.domains/dao/proposals/4.9)

## Abstract

[EP 4.7](https://docs.ens.domains/dao/proposals/4.7) proposed the concept of Streams for service providers and set its budget at $3.6M per annum. EP4.9 selected the following Service providers and their annual budget:

|Service Provider Name| Annual Stream |
|---|---|
|ETH.LIMO|$500,000.00|
|NameHash Labs|$600,000.00|
|Resolverworks.eth|$700,000.00|
|Blockful|$300,000.00|
|Unruggable|$400,000.00|
|Wildcard Labs|$200,000.00|
|Ethereum Follow Protocol|$500,000.00|
|Namespace|$200,000.00|
|UNICORN.ETH|$200,000.00|

The Metagov Working Group has decided this will be implemented in the following manner:

1. Superfluid has been selected as the stream platform (details of which can be found on [this RFP](https://discuss.ens.domains/t/rfp-stream-platform-for-ens-service-providers/18448))
2. A new wallet, the "[Stream Management Pod](https://app.safe.global/settings/setup?safe=eth:0xB162Bf7A7fD64eF32b787719335d06B2780e31D1)" has been created as a Global.Safe (Gnosis Safe) wallet. It requires 3 out of 5 signatures to execute any transaction. Its members are the 3 Metagov Stewards, the secretary and the DAO Governor contract.
3. **This EP includes 5 Executable Transactions**, as follows:
1. **APPROVE** Superfluid contracts to wrap one month worth of USDC streaming (300,000 USDC);
2. **WRAP** one month worth of USDC streaming (300,000 USDC to USDCx);
3. **START A STREAM** to the Stream Management Pod of 0.114155251141552512 USDC per second [1];
1. **APPROVE** AutoWrap [2] contract to wrap an additional 5.1M USDC (this, added to the already wrapped 300k, should be enough to cover 18 months of the stream, after that a new EP will be required to keep the stream running);
1. **ENABLE AUTO-WRAP** to keep wrapping USDC to USDCx on a monthly basis (lower limit 200,000, upper limit 500,000).
4. Meanwhile the Stewards are reaching out to all representatives of the stream providers. Alex Urbelis, the general Counsel for ENS Labs, has drafted a service provider agreement and is acquiring the services of Urbelis to run a basic KYC and Sanctions protection. All Service Providers will be required to go through this process before receiving their first stream.
5. On February 1st Stream Management Pod will start creating individual streams to the Organizations who have completed the steps outlined in bullet #4. Because of Superfluid unique no-upfront-capital-lockup streams, it means that when all of 9 Service Providers Streams start, the Stream Management Pod will be forwarding 100% of the money it receives directly into the Service Providers. [3]

### Notes

[1]: USDC has a precision of 6 decimal places, but SuperUSDC has a precision of 18 decimals. The value of 0.114155251141552512 per second corresponds to approximately 9863.01 USDC per day and in 3,600,000.000000000018432 USDC per year in a non-leap year. In leap years (such as the current one) it will mean an extra $9.8K is paid in the 29th of February.

[2]: [Autowrapper](https://etherscan.io/address/0x1D65c6d3AD39d454Ea8F682c49aE7744706eA96d#code) is a [series](https://etherscan.io/address/0x30aE282CF477E2eF28B14d0125aCEAd57Fe1d7a1#code) of [contracts](https://etherscan.io/address/0x1D65c6d3AD39d454Ea8F682c49aE7744706eA96d#code) developed by superfluid. When pinged (and anyone would be able to ping it), if the amount of tokens that the DAO has wrapped is below the lower limit, it will automatically wrap new tokens in order to keep the stream running. The goal is to reduce smart contract risk. If Superfluid is somehow hacked, ENS will not lose more than the upper limit set here (about 50 days worth of funds). If both Superfluid AND the autowrapper are hacked at the same time, ENS cannot lose more than the maximun USDC allowance (18 months worth of funds).

[3]: Any capital that remains in the pod (due to the difference between the day this EP is executed and the day the last Service Provider stream is active) will be still considered under the DAO's ownership and will be used only as a buffer (if autowrapper fails, we will have some weeks to resolve it without interrupting payments) and to solve any logistical issues with service providers. It will NOT count towards Metagov's budget nor it will it be used to any other purpose than the service provider management.

## Specification

We will now details the transactions to be executed on this EP:

| Operation | Target | Decoded Calldata | Raw Calldata |
|---|---|---|--|
| approve USDCx SuperToken contract to transfer 300k USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 (USDC) |``function approve(address 0x1BA8603DA702602A8657980e825A6DAa03Dee93a, uint256 300000000000)`` | 0x095ea7b30000000000000000000000001ba8603da702602a8657980e825a6daa03dee93a00000000000000000000000000000000000000000000000000000045d964b800 |
| wrap 300k USDC to USDCX | 0x1BA8603DA702602A8657980e825A6DAa03Dee93a (Super-USDC) | `function upgrade(uint256 300000000000000000000000)` | 0x45977d03000000000000000000000000000000000000000000003f870857a3e0e3800000 |
| start flow to Safe with the flowrate of 0.1141... per second | 0xcfA132E353cB4E398080B9700609bb008eceB125 (Superfluid) |``function setFlowrate(address 0x1BA8603DA702602A8657980e825A6DAa03Dee93a, address 0xB162Bf7A7fD64eF32b787719335d06B2780e31D1, int96 114155251141552512) `` | 0x57e6aa360000000000000000000000001ba8603da702602a8657980e825a6daa03dee93a000000000000000000000000b162bf7a7fd64ef32b787719335d06b2780e31d100000000000000000000000000000000000000000000000001958f989989a980 |
| approve auto-wrap for 5.1M | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 (USDC) | ``function approve(address 0x1D65c6d3AD39d454Ea8F682c49aE7744706eA96d, uint256 5100000000000`` |``0x095ea7b30000000000000000000000001d65c6d3ad39d454ea8f682c49ae7744706ea96d000000000000000000000000000000000000000000000000000004a36fb03800`` |
| create auto-wrap schedule | 0x30aE282CF477E2eF28B14d0125aCEAd57Fe1d7a1 (Autowrapper) | `function createWrapSchedule (address 0x1BA8603DA702602A8657980e825A6DAa03Dee93a, address 0x1D65c6d3AD39d454Ea8F682c49aE7744706eA96d, address 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, uint64 3000000000, uint64 1814400, uint64 4320000` | `0x5626f9e60000000000000000000000001ba8603da702602a8657980e825a6daa03dee93a0000000000000000000000001d65c6d3ad39d454ea8f682c49ae7744706ea96d000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000b2d05e0000000000000000000000000000000000000000000000000000000000001baf80000000000000000000000000000000000000000000000000000000000041eb00` |

All contracts have verifiable code. You can use tools such as the [Calldata decoder](https://tools.deth.net/calldata-decoder) to verify the correctness of the calldata and etherscan to look deeper into them. You can also *simulate the transactions yourself* using [this repo](https://github.com/d10r/ens-streams).

The terms for the createWrapSchedule are the address of the superToken (super-usdc), the address of the Strategy contract, the address of the base token (USDC), the expiry (set to the far future), lowerLimit and upperLimit. These last two are set in seconds and mean that if, when the autowrapper is pinged, the stream has less than 21 days in it's runway, then it will automatically wrap 50 days worth of funds.
Loading