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

Hi All, great discussions here and on the Twitter spaces. As @AvsA and others have mentioned, DCA is the optimal strategy to execute this trade on-chain vs Gnosis auction.

We’ve built a tool to allow DAOs, protocols, and whales to efficiently DCA on-chain in a gas-optimal manner: TWAMM. From the reception on the call by @James and others, it seemed like the best fit for a trade of this size.

I did not want to de-rail the conversation here and therefore made a long-form post here for more details on our tool, background, advantages, risks, etc: TWAMM: on-chain non-custodial DeFi protocol for large asset swaps.

As I mentioned in the Twitter space, our tool is going into audit on January 23, 2023, by SpearbitDAO, and pending a successful audit will be ready by Eth Denver (March 01, 2023). The first pool we plan to deploy will be ETH/USDC.

I understand that there’s hesitation to execute a large trade of this size on a tool that hasn’t been battle-tested, but I’ve addressed the different risks and mitigation strategies in the forum post linked above.

Happy to answer any further questions!

Wasn’t aware of the USDC requirement - if there’s no way to change that another option could be to deposit this amount of stables in 3Pool on Curve and withdraw USDC as need for operations (perhaps something for Endaoment team to handle). This achieves two things:

  • less amount of funds at risk of being blacklisted by Circle (likely a very low risk, but in DAI or 3Pool it’s eliminated)
  • some arguably very safe yield i.e. 1.5% with $500M+ TVL

3Crv option ofc does bring exposure to USDT, just something to be aware of and consider.

less amount of funds at risk of being blacklisted by Circle

This was discussed in the US Financial Services Committee ad infinitum last year in the outgoing house. There are a strong number of representatives who want to get rid of all stablecoins. They know they can demand blacklisting, which is honestly impressive given that in 2021 almost nobody read contracts or understood blacklists take place.

The most common use of the blacklist now has been hacked funds, and also funds sent to wrong addresses. USDT is pretty efficient even and returns stuck funds sent to contracts for a 10% fee, and wrong addresses too if you know the right people.

While you may discount a direct blacklisting of the ENS, it is definitely possible to get wrapped in sanctions or sweeping legislation of DAOs with governance token. The main threat though is simply a KYC mandate for all stablecoin transactions, and making them illegal with a future rollout of a CBDC down the road. They did exactly this almost overnight with the UIGEA, and they are very likely to pull a similar stunt when it comes to stablecoins.

You may counter with the fact the ENS is ‘transparent’ with known directors, but that’s not how this works. In 2006 there were very transparent and fair gambling sites for poker, while in 2023 there is a mess of gambling legislation at the state level in the US, and nothing is good for anyone. It took way longer than anyone expected for even the most basic things to take place, and the fad of poker long moved on.

Putting money, even in DAI is high risk for anything but a short term movement of small funds. There are practical reasons to do this.

  • some arguably very safe yield i.e. 1.5% with $500M+ TVL

The yield of Ethereum will vastly destroy any stablecoin yield by growing as a network. If the ENS makes it, Ethereum does. There are scenarios where the ENS fails, and Ethereum does well, but it doesn’t seem very likely. This is why what is going on here is so shocking. Any basic understanding of risk and economics means you would never suggest this, unless of course you knew it was going to fail, or you had dark motives.

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.


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)


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.


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.


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:


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


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.

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!


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.