[EP3.3] [Executable] Sell ETH into USDC

I’d be supportive of DCAing, and your project seems like a great tool for that - but we can’t be its first user with such a large amount of money at stake, particularly prior to an audit.

A Gnosis auction is a straightforward way to do this that will get us a good price - albeit, the equivalent to the spot price on the day. An alternative would be to send the funds to be exchanged to a Gnosis Safe using the Roles Modifier that allows, eg, the metagov stewards to exchange funds and send them back to the DAO; they could then make the trades but would have no access to the funds.

In the interest of not getting tied up in bikeshedding I’d propose we go ahead with the Gnosis auction for now, and find long-term sustainable approaches down the road.

3 Likes

Media is paying attention.

1 Like

Yup totally reasonable given your timelines. Look forward to ENS DAO using TWAMMs down the line post-launch!

I’d be an advocate of doing this over a longer period of time. 10000 ETH is quite a bit. I’d also like to know the current performance of the budget spends from various working groups to understand if the currently-utilized budgets are getting the expected results.

Also curious to know the answers to @Ronald’s point - why does ENS Labs need $11,500 per day? (4 million per year)

2 Likes

In short, because we employ 17 talented individuals full-time, in a highly competitive field. We also have not insignificant infrastructure expenses on ENS’s behalf, such as the site and the metadata service, as well as travel to conferences, marketing & PR spend, etc.

3 Likes

Thank you! Also thank you @Coltron.eth for sharing this - [EP14][Executable] Funding True Names Ltd


That topic aside, I would be more for this sale of ETH if there were a few options presented like 1 month, 3 months, 6 months, etc.

Hey everyone, I’m Nicole Maffeo the cofounder of SIZE Markets. Read through the proposal & thread. It sounds like there are three main pain points:

  • Needs to be on-chain.
  • DCA with scheduled recurring auctions.
  • No front-running.

Treasuries use SIZE to easily create custom on-chain, sealed bid auctions. ENS DAO could schedule a recurring ETH auction, set auction duration and reserve price. You could also add vesting parameters if of interest.

Thanks!
Nic

Hey ENS community and delegates!
(finally managed to get permission to post comments in the forum)

I’m leading BD for CoW Swap, we’d like to propose an alternative solution to Gnosis Auction.
Our team has built Gnosis Auction, with the main use case of selling newly issued tokens where the price is still not established with a liquid on-chain market. In those cases Gnosis Auction shines, serving as a price finding mechanism.

Gnosis Auction is still a decent choice for large trades of liquid tokens - but for this purpose we’ve built CoW Protocol!
CoW Protocol employs a similar batch auction to the one used in Gnosis Auction, but auctions are much faster and the solvers competing to provide best-execution prices for users, can also tap into any available on chain liquidity (something that is missing in Gnosis Auction for this use case)

The price impact of a single trade selling 10k ETH is less than 1% - so from this perspective, TWAP won’t help a lot, unless the purpose is to DCA. If splitting the order into multiple smaller orders that will execute over time is a hard requirement, this is also something that CoW Protocol can handle, let us know and we can explain how it could be done - requiring only a single transaction from ENS DAO.

Finally I want to provide a few real world examples of similar trades being executed using CoW Protocol, demonstrating its execution efficiency and ability to execute order of this size consistently.

Example 1:

  • 15k ETH sold for USDC
  • 0.5% slippage tolerance fully protected
  • Additional price improvement of 0.08%
  • Indicated as 0.58% of surplus

Example 2:

  • 10.5k ETH sold for USDT
  • 0.5% slippage tolerance fully protected
  • Additional price improvement of 0.03%
  • Indicated as 0.53% of surplus

Example 3:

  • 15.6k ETH sold for USDC
  • 0.5% slippage tolerance fully protected
  • Additional price improvement of 0.08%
  • Indicated as 0.58% of surplus

We would love to answer any further questions and to provide any support needed for crafting the required transaction to create the sell order using CoW Protocol :cow:

6 Likes

@middleway.eth
Can we use cow protocol to set up, on a single call, a batch of auctions set in the future?

  • create 100 orders of selling 100 eth each
  • each order is an auction at market price that lasts 24h and is each starts at a future date over 100 days in the future
  • we set a minimum floor for eth price

I’m a user of Cow Swap and like it personally but I am trying to see if it can be useful for the DAO

3 Likes

Can you explain how we could do this, given the one week delay between proposing a vote and its execution?

1 Like

There are multiple options with varying considerations and assumptions, I’ll go from the simplest to the more complex:

  1. Simple sell order - Create a simple sell order using setPreSignature, selling 10k ETH for USDC. In the very simple case, you just estimate the ETH price at that time (7 days out) and take some spare - lets say 10% below current market price, to reduce the likelihood of your order becoming stale. This means your limit price is guaranteed on the smart contract level, and the slippage is protected by CoW Protocol’s solver competition. You should expect just getting the fair market price at the time of execution.
    You’d need to take very similar assumptions when setting up a Gnosis Auction - when setting the reserve price (minimum price you’re willing to accept)

The next two options are relying on a dedicated smart contract with extra logic that allows the trader to define additional rules for their order execution. The project is called milkman, it was fully audited and is production ready. Milkman allows to defer the choice of the limit price from order initiation (pre DAO vote) to order execution time (solver settling the trade). It does so by using ERC1271 signatures and considers a proposed execution price valid if it’s within a predefined range from an external oracle (e.g. Uniswap TWAP).

Having said that, it still didn’t accumulate a lot of trading volume going through it - so less battle tested. Regardless, the outcome is an order on CoW Swap that is surplus capturing and protected by the batch auction competition.

  1. Use Milkman to set up a single 10k ETH sell order, and attach a price checker. This allows an onchain check of a price oracle e.g. Uniswap TWAP, at execution time, to make sure execution is not below the oracle price. Essentially you get to reduce your trust of CoW Protocol best execution by adding an additional check (advantage over option 1).
  2. Use multicall to set up multiple orders using Milkman - each with a different validity time (validFrom, validTo). This means each of them will execute at a time you define in advance.
    To @AvsA question, this is the proposed solution for a DCA, but the auction will be a normal CoW protocol auction and not a 24h auction.
4 Likes

Interesting. The milkman option seems viable to me. It’s your proposal @James, what do you think?

Does sound interesting, so using Milkman we could set up a 2 week (time here is an open question) rolling order that would sell x amount of ETH per block through cowswap?

Is there risk here of someone seeing these orders and being able to manipulate the liquidity pools around it? I guess not considering the small amount of ETH per sale.

I’m also conscious of this sounding like a good idea but also adding more complexity to this ongoing process. We could execute a 5000 ETH auction, then explore the Milkman option for the remaining 5k balance?

Having looked at the code, I’m not sure how @middleway.eth intended this to work. I can’t see how you’d use a batch transaction to DCA, but I could be missing something.

The actual code and interface is very straightforward - simpler, I think, than the Gnosis auction - and I don’t think there’s much opportunity for price manipulation here.

Hey everyone,

After the above discussion, today we’re going to put this proposal up onchain for voting (and hopefully execution) based on the Milkman / cowswap strategy outlined above.

Remember if you haven’t already delegated you can head here to delegate your votes! Or vote yourself on Tally!

2 Likes

Even if not doing a DCA, I still think the proposal should consider doing multiple sell orders. 10k Ether is a lot of ethers to sell in one single day.

The price impact for a 10k ETH sell order is 0.8%, while for 1k ETH sell order it is 0.2% roughly speaking.
The DAO can save on average 0.6% for splitting to ten 1k orders.
It is nice, but low savings in comparison to ETH volatility, just putting it in perspective.

Generally I think that a single order should be sufficient. If you want to delay the vote for another day, happy to help to construct a transaction for a DCA/TWAP order to be considered as another option.
@nick.eth, using the validFrom price checker, you can construct a “good after time” order.

If you create ten such orders with validFrom being spaced 1 week apart, and combine them in a multicall, you get a single transaction that creates a TWAP selling strategy.

3 Likes

This proposal is now live on Tally.
Voting is open for 7 days.
Please go vote!

2 Likes

I voted FOR this proposal as I generally agree with the plan of responsibly managing the DAO’s funds and making sure there is enough runway for 2 years.The team has expenses and we need to make sure they are covered even if it the market takes another downturn.

As for using cowswap instead of a gnosis auction as @middleway.eth suggested, that’s an interesting idea. Has any such big swap happened via cowswap? The commands look straightforward.

Regarding the question of splitting up into smaller sells, that may indeed be a good idea, but depends on how far apart they would be executed. As you may avoid slippage but as mentioned above you are exposed to ETH’s own volatility.

1 Like

@lefterisjp I shared some examples above

1 Like