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


