Activate the fee allocator and redirect 10% of revenue to community fund

Summary:

Following the previous discussion on building a Curve DAO treasury, this proposal implements a fee allocation mechanism that redirects 10% of protocol revenue to the community fund, ensuring the protocol’s long-term sustainability.

Abstract:

Deploy a FeeAllocator contract that splits protocol fees between veCRV holders and other recipients, such as the community fund. Initially, 10% of crvUSD fees are allocated to the community fund while 90% continues to flow to veCRV holders. The DAO can adjust allocations and add new recipients through future votes.

Motivation:

The DAO currently has only a few years of runway with given its annual expenses. Meanwhile the DAO generated $26.8m in revenue last year (from $40m protocol-level revenue), 100% of which was redirected to veCRV holders. Redirecting a small portion (10%) creates a sustainable treasury without significantly impacting veCRV yields.

historical distributions to veCRV:

year total $ value of distributions
2020 3,943,774.86
2021 56,849,754.57
2022 44,983,835.50
2023 17,429,445.27
2024 26,836,722.25
2025 7,222,328.72

Specification:

The FeeAllocator contract acts as an intermediary between the Hooker and FeeDistributor, splitting incoming crvUSD fees according to configured weights. The contract caps non-veCRV allocations at 50% and supports up to 10 receivers. Funds sent to the community fund remain under DAO control with a 1-year vesting period for any subsequent allocation.

The 10% allocation goes to the community fund as general purpose treasury, maintaining full DAO control over its use. These funds can support various initiatives including service providers (Swiss Stake, Llama Risk), insurance for bad debt or hack reimbursements, bug bounties, audits, etc. Some users also suggested CRV buybacks in the previous discussion. All these options can be enacted provided they can gather enough support in a DAO vote for approval.

While community fund allocations are subject to 1-year vesting, the FeeAllocator allows adding other recipients who could receive direct revenue shares without vesting. Any changes to recipients likewise requires DAO approval.

Actions:


    # 1. Set allocator as hook
    set_allocator_as_hook_calldata = HOOKER.set_hooks.prepare_calldata(
        [
            (
                fee_allocator.address,
                fee_allocator.distribute_fees.prepare_calldata(),
                EMPTY_COMPENSATION,
                True,
            )
        ]
    )
    # 2. Cancel previous distributor approval
    cancel_distributor_approval_calldata = (
        HOOKER.one_time_hooks.prepare_calldata(
            [
                (
                    CRVUSD.address,
                    CRVUSD.approve.prepare_calldata(
                        FEE_DISTRIBUTOR.address, 0
                    ),
                    EMPTY_COMPENSATION,
                    False,
                )
            ],
            [(0, 0, b"")],
        )
    )
    # 3. Approve allocator to spend hooker's crvUSD
    approve_allocator_for_crvusd_spend_calldata = (
        HOOKER.one_time_hooks.prepare_calldata(
            [
                (
                    CRVUSD.address,
                    CRVUSD.approve.prepare_calldata(
                        fee_allocator.address, 2**256 - 1
                    ),
                    EMPTY_COMPENSATION,
                    False,
                )
            ],
            [(0, 0, b"")],
        )
    )
    # 4. Set the community fund as a recipient for 10% of incoming fees
    create_community_fund_allocation_call_data = (
        fee_allocator.set_receiver.prepare_calldata(
            COMMUNITY_FUND.address, 1000
        )
    )
    return [
        (HOOKER.address, set_allocator_as_hook_calldata),
        (HOOKER.address, cancel_distributor_approval_calldata),
        (HOOKER.address, approve_allocator_for_crvusd_spend_calldata),
        (fee_allocator.address, create_community_fund_allocation_call_data),
    ]

Full deployment script: fee_allocator/script/deploy.py at main · benber86/fee_allocator · GitHub
Deployed contract: https://etherscan.io/address/0x874942096Ed129C1a7c99de6C7Aa6fa0B679f322#code

5 Likes

I’ll preface this by saying I’m someone who is contracted by the DAO through community grants, but also holds a significant amount of my net worth in veCRV tokens.

This proposal sounds reasonable to me. There is a lot of work which is required to keep Curve running, e.g. websites, APIs, pool optimizations, lending market optimizations, audits, etc. There’s also a significant amount of constant development required to continue to dominate stablecoin markets and compete in lending, volatile asset swaps and help crvUSD flourish.

Creating a DAO fund which grows is important imo, community funds need some way to be replenished, so the DAO can choose to fund or not to fund whatever it wishes into the future.

Also interesting here that after setting 3pool admin fees to 100% (all other pools at 50%), the extra fees the DAO collected account for 8% of total veCRV fees (or almost an extra 9% revenue for veCRV holders). So this could be seen as almost equivalent as that proposal, and veCRV holders are almost net equal.

4 Likes

After discussion with c2, wavey and others - the original vote was amended so that the revenue would be redirected to a treasury contract allowing for transfers without vesting. The community fund contract only allows one to disburse funds with a minimum 1 year vest which could prove unpractical overtime.

The new treasury contract is the same contract used by Resupply. A new instance has been deployed at 0x6508ef65b0bd57eabd0f1d52685a70433b2d290b

The new proposal adds this contract as a receiver of the 10% revenue share instead of the community fund.

5 Likes

Ive been thinking about this exact concept for the last couple weeks. Was planning on making a proposal myself. Thanks for the hard work on putting this together! I’d like to help ensure it passes. I think another element for why this is valuable is that it has the effect of attracting more risk averse investors :grinning_face_with_smiling_eyes: