Home
EXECUTED
Ended Apr 14 at 12:50 AM UTC

[EP 6.39] [Executable] Treasury Flow Automation

By
Votes
1.31Mfor
45.23Kagainst
6.54Kabstain
131.29%Quorum
Skip to Votes

Abstract

ENS protocol revenue currently requires three separate steps to move from registrar controllers to productive use in the endowment and fund operations. This proposal introduces a Registrar Manager contract that takes ownership of all registrar controllers and enables permissionless withdrawals directly to the endowment. It also configures a Zodiac module permission on the endowment to allow the treasury manager to send ETH and USDC to the timelock without a proposal, following a two-year stablecoin runway policy consistent with the current Investment Policy Statement.

The result is zero proposals for routine treasury operations, faster yield on collected revenue, permissionless withdrawals, and increased income for the DAO. A conservative estimate suggests that since January 2024, approximately $1 million in yield was missed due to idle capital in registrar controllers and the timelock.

Specification

Problem

ENS protocol revenue requires three steps to move from collection to productive use. Registrar controllers collect ETH from .eth registrations and renewals, and the current controller (controller.ens.eth) already sends withdrawn ETH to the timelock. However, the old registrar controller at 0x283Af0B28c62C092C9727F1Ee09c02CA627eb7F5 holds roughly 772 ETH that requires a dedicated proposal just to withdraw.

Once ETH reaches the timelock, sending it to the endowment (endowment.ensdao.eth) for investment requires another proposal. Capital can sit idle in the timelock for several months before it starts earning yield.

When the DAO needs to fund operational expenses like ENS Labs, the Service Provider Program, or Working Groups, yet another proposal is needed to transfer from the endowment back to the timelock or to execute operations with twap.ensdao.eth. For context, EP 6.32 proposed a $2.5M USDC transfer from the endowment to the timelock just to cover Working Group budgets that had already been approved.

On top of that, there is currently roughly 4,148 ETH sitting in the timelock that could be earning yield in the endowment. The operational funding process today is reactive and not smooth. Each transfer requires a full governance cycle, and capital that could be generating yield sits idle throughout.

Key Addresses

• Timelock: 0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7 (wallet.ensdao.eth) • Current Registrar Controller: 0x253553366Da8546fC250F225fE3d25d0C782303b (controller.ens.eth) • Old Registrar Controller (~772 ETH): 0x283Af0B28c62C092C9727F1Ee09c02CA627eb7F5 • Endowment: 0x4F2083f5fBede34C2714aFfb3105539775f7FE64 (endowment.ensdao.eth) • Governor: 0x323A76393544d5ecca80cd6ef2A560C6a395b7E3 (governor.ensdao.eth) • TWAP safe: 0x02D61347e5c6EA5604f3f814C5b5498421cEBdEB (twap.ensdao.eth)

Solution

This proposal introduces two components that eliminate all three bottlenecks: a Registrar Manager and an Endowment Zodiac Module permission.

Registrar Manager

The Registrar Manager is a contract that becomes the owner of all registrar controllers. Its key properties:

a) Exposes a permissionless withdraw() function that anyone can call. When called, it pulls ETH from each controller and routes it directly to the endowment.

b) The destination address is configurable by the DAO through the timelock, so governance can redirect the flow at any time.

c) Acts as a pass-through for governance calls, meaning the DAO retains full control over controller parameters.

d) New controllers can be added over time.

e) Never holds funds.

Source code of Registrar Manager contract.

Endowment Zodiac Module

The Zodiac module is already part of how the endowment is managed. This proposal adds a scoped permission that allows the treasury manager (Karpatkey) to send ETH and USDC to wallet.ensdao.eth without a proposal. It cannot send to any other address or use any other token. All other endowment operations remain unchanged.

Funding Policy

This is the current suggestion for the funding policy.

The timelock maintains a 6 months runway in USDC (~$8M at current spending). Each quarter, Karpatkey calculates the current runway on the timelock. If it falls below 6 months, the endowment sends the shortfall. If it exceeds 6 months, no transfer is needed and the excess stays invested in the endowment. If an additional governance proposal requiring capital is approved, this may trigger an earlier runway evaluation and transfer, consistent with this policy.

The initial policy is included in this executable proposal, so no separate vote is needed to get started. Any future changes to the funding policy require a social vote. This establishes clear expectations about responsibilities and decision-making: the treasury manager handles routine rebalancing within the policy, and the community sets the policy itself.

This proposal remains aligned with the IPS. The required three-year stablecoin runway is calculated at the Endowment level, including stablecoins held and deployed there, as is currently done. The expansion guidelines reference transferring 33% of protocol revenue to the Endowment. This proposal modifies that mechanism by routing revenue directly to the Endowment to improve operational efficiency and capital deployment.

Impact

The operational funding process is reactive, requiring a full governance cycle for each transfer. Meanwhile, capital that could be earning yield sits idle in controllers and the timelock for several months at a time.

With this proposal, capital flows from registrars to the endowment as soon as anyone calls withdraw(). The endowment begins generating yield immediately rather than after several months of governance overhead. Operational funding follows a clear quarterly process based on the two-year runway target, removing the need for ad-hoc proposals.

To put this in perspective: looking at the period from January 2024 until now, and considering ETH staking yields if this capital had been allocated to the endowment, a conservative estimate of $1 million in yield was left on the table. This is based on the balances held in the timelock, the current registrar controller, and the old registrar controller (which still have a relevant number of registrations). Going forward, every ETH collected will begin earning yield within days, compounding the DAO's income over time.

Votes
1.31Mfor
45.23Kagainst
6.54Kabstain
131.29%Quorum
0x5bfc...83900x5bfc...8390voted for
253.99K
0xb8c2...67d50xb8c2...67d5voted for
149.45K
0x1d54...63590x1d54...6359voted for
114.93K
0x5346...42cf0x5346...42cfvoted for
111.16K
0x9831...67440x9831...6744voted for
98.78K
0xd5d1...cf2c0xd5d1...cf2cvoted for
92.54K
0x866b...5eee0x866b...5eeevoted for
65.67K
0xb352...8b1b0xb352...8b1bvoted for
60K
0x54be...7ab60x54be...7ab6voted for
58.08K
0x8393...07800x8393...0780voted for
51.86K
0xc027...614e0xc027...614evoted for
50K
0xac50...c0390xac50...c039voted against
41.3K
https://discuss.ens.domains/t/executable-treasury-flow-automation/21923/16?u=clowes.eth
0xa8b4...28e80xa8b4...28e8voted for
40.51K
0x7f77...1caa0x7f77...1caavoted for
33.21K
0x8b1f...feff0x8b1f...feffvoted for
32.4K
0x7ae9...0c0b0x7ae9...0c0bvoted for
10.37K
0x1f3d...05910x1f3d...0591voted for
10.15K
https://discuss.ens.domains/t/executable-treasury-flow-automation/21923/15
0x480b...9a300x480b...9a30voted for
10K
0x76a6...bbb80x76a6...bbb8voted for
9.87K
0x035e...17d30x035e...17d3voted for
9.68K
0x1df8...5a170x1df8...5a17voted for
7.15K
0x4dc9...865a0x4dc9...865avoted for
7.05K
0xf342...33290xf342...3329voted for
5.96K
0x1f9c...270e0x1f9c...270evoted for
5.39K
0x3335...81e10x3335...81e1abstained
4.56K
0x2e11...75010x2e11...7501voted for
4.4K
0x36f7...a5890x36f7...a589voted against
3.93K
0x711c...d0a10x711c...d0a1voted for
3.79K
0x179a...92850x179a...9285abstained
1.98K
Fine but we should update the contract soon with these changes https://discuss.ens.domains/t/21923/16
0xe22f...94ac0xe22f...94acvoted for
1.85K
0x703a...789b0x703a...789bvoted for
1.75K
0x30c7...c7020x30c7...c702voted for
1.69K
0xb3e6...26d10xb3e6...26d1voted for
1.38K
0x8da4...81e40x8da4...81e4voted for
963
0xb35f...b1e10xb35f...b1e1voted for
419
0xa729...de600xa729...de60voted for
394
0xbc15...e8e30xbc15...e8e3voted for
359
0x796c...38b50x796c...38b5voted for
342
0x1087...92df0x1087...92dfvoted for
251
0x0fa4...0bf90x0fa4...0bf9voted for
150
0x51c5...58a80x51c5...58a8voted for
103
0xc554...77590xc554...7759voted for
100
0x82eb...3dab0x82eb...3dabvoted for
83
0x4579...ca810x4579...ca81voted for
33
0x6ee0...17450x6ee0...1745voted for
31
0xdd26...79cc0xdd26...79ccvoted for
20
0x29de...f8910x29de...f891voted for
19
0x3ddc...05b00x3ddc...05b0voted for
16
0x5fa8...0e040x5fa8...0e04voted for
10
0x1729...b8790x1729...b879voted for
10
0x0151...c3b90x0151...c3b9voted for
2
0x2f2f...f78a0x2f2f...f78avoted for
1
0xa8e1...f37c0xa8e1...f37cvoted for
1
0x3fb1...4c8a0x3fb1...4c8avoted for
1
0x4d32...bbfa0x4d32...bbfavoted for
1
0x0057...15c80x0057...15c8voted for
0
0xbac8...13b30xbac8...13b3abstained
0
0xc04a...9a110xc04a...9a11voted for
0
0x3821...0bf00x3821...0bf0voted for
0
0x1c05...40940x1c05...4094voted for
0
0xd8de...ae410xd8de...ae41voted for
0
0x477e...238b0x477e...238bvoted for
0
0xc3a2...e6ee0xc3a2...e6eevoted for
0
0x475e...e10c0x475e...e10cvoted for
0
0x6429...5c7e0x6429...5c7evoted for
0
I’ve been working on sepolia with the para wallet. I’m the one who submitted the bug report that got forwarded to the devs. Please let me be part of the community. It would be an honor to be able to discuss these proposals on the forums with everyone.
0x24ed...3eac0x24ed...3eacabstained
0