# ERC-8459: Creator Fee Rights

> Robinhood Chain testnet (46630). Test tokens, no value. Reference contracts not audited. These are drafts under review, not standards.

A draft under review on ethereum/ERCs. A launched token's creator fee stream, with its history and a recipient that only the recipient can change, so it can be pledged.

Status: Testnet only.

- Pull request: https://github.com/ethereum/ERCs/pull/2103
- Text pinned at the pull request's head commit 76d6be315c3ca8ce9704cae0ca18526687d8462c (ERCS/erc-8459.md, CC0): https://github.com/priors-agents/ERCs/blob/76d6be315c3ca8ce9704cae0ca18526687d8462c/ERCS/erc-8459.md
- Discussion: https://ethereum-magicians.org/t/erc-8459-creator-fee-rights/30027
- Reference implementation: https://github.com/priors-agents/erc-creator-fee-rights/tree/55bf9408dec94bc3a0d3fa789b7ba03a18050713 (commit 55bf9408dec94bc3a0d3fa789b7ba03a18050713)
- This page: https://lab.priors.trade/erc/8459

## Abstract

This proposal defines one interface for the creator fee stream of each token a launchpad launches: who receives it, what it has earned since launch, what can be claimed now, and a claim anyone can call that always pays the recipient. Only the current recipient can name a new recipient, as only the owner of an [ERC-173](https://eips.ethereum.org/EIPS/eip-173) contract can name a new owner, and no administrator, launchpad setting or upgrade can change a launched token's recipient or lower its creator share. Every credit to a stream is logged in the transaction where the fee accrues, so a lender can recount what the stream has earned. A creator can then point its stream at a contract that repays its lenders first, and cannot take it back while it owes.

## Specification headings

1. Terms
2. Interface
3. Registration
4. Changing the recipient
5. The creator share and the fee rate
6. Accrual
7. Claiming

## At Priors

Nothing at Priors runs this draft. Its reference contracts go on the testnet only.

## Try it on testnet (46630)

Every action is prepared as an unsigned transaction { chainId: 46630, to, data, value }, signed by your own wallet or testnet key. Test tokens have no value.

Contracts:

- feeEscrow: 0x23C3B69483278ABa85efa69f83C1Bd79fcDe98e3 (https://explorer.testnet.chain.robinhood.com/address/0x23C3B69483278ABa85efa69f83C1Bd79fcDe98e3)
- feeLaunchpad: 0xF80aE3e3CF7BD234Ac4d7a4cFfA3770F419c953A (https://explorer.testnet.chain.robinhood.com/address/0xF80aE3e3CF7BD234Ac4d7a4cFfA3770F419c953A)
- labFeeEscrow: 0x117332ec46f213a3ba189d02EA2CaD8BD349a010 (https://explorer.testnet.chain.robinhood.com/address/0x117332ec46f213a3ba189d02EA2CaD8BD349a010)
- labLaunchpad: 0x753063e1dAb7391920C798F9fF492B6bea6Bb2e9 (https://explorer.testnet.chain.robinhood.com/address/0x753063e1dAb7391920C798F9fF492B6bea6Bb2e9)
- testDollar: 0x64A419191369E6a79d562A65336073ec1bfbf4BD (https://explorer.testnet.chain.robinhood.com/address/0x64A419191369E6a79d562A65336073ec1bfbf4BD)

Launch a token: ERC-8462's `launch` creates a test token, seeds its pool against the Lab Test Dollar, locks the liquidity (ERC-8463), declares the launch (ERC-8462) and registers the creator fee stream (ERC-8459), in one transaction. Read each back with the reads below and on the ERC-8462, ERC-8463 and ERC-8459 pages. Every token launched on the lab is a visitor's test token, not verified: anyone can launch one on the lab, and the lab vouches for none.

Actions:

- `launch_mock_token`: Launch a mock token on the reference's mock launchpad. Who signs: anyone Params: `creator` (The creator: the first fee recipient, address).
- `approve_fee`: Let the mock launchpad take a trade's fee. Who signs: the trader Params: `amount` (How many test dollars, amount).
- `trade`: Trade on the mock launchpad: pay a fee into the stream. Who signs: anyone (the trader) Params: `token` (The launched token, address), `fee` (The trade's fee in test dollars, amount).
- `claim`: Claim the creator fees. Who signs: anyone (they go to the recipient) Params: `token` (The launched token, address), `asset` (The fee asset (empty: the test dollar), address, optional, default (the lab's)), `escrow` (Which escrow: mock (behind the reference's mock launchpad) or launchpad (the lab launchpad's), string, optional, default mock), `contract` (Your own fee rights contract's address (empty: the lab's shared one), address, optional).
- `set_fee_recipient`: Move the fee stream to a new recipient (pledge it). Who signs: the current fee recipient Params: `token` (The launched token, address), `new_recipient` (The new recipient (a lender, an ERC-8464 payee), address), `escrow` (Which escrow: mock (behind the reference's mock launchpad) or launchpad (the lab launchpad's), string, optional, default mock), `contract` (Your own fee rights contract's address (empty: the lab's shared one), address, optional).
- `approve_launchpad_fee`: Let the lab launchpad take a fee payment. Who signs: the payer Params: `amount` (How many test dollars, amount).
- `pay_fee`: Pay creator fees on a lab-launched token. Who signs: anyone Params: `token` (A token the lab launchpad launched, address), `amount` (How many test dollars, amount).

Reads:

- `stream`: A token's creator fee stream. Params: `token` (The launched token, address), `asset` (The fee asset (empty: the test dollar), address, optional, default (the lab's)), `escrow` (Which escrow: mock (behind the reference's mock launchpad) or launchpad (the lab launchpad's), string, optional, default mock), `contract` (Your own fee rights contract's address (empty: the lab's shared one), address, optional).

Deploy your own:

- `escrow`: Your own CreatorFeeEscrow (for your launchpad). Params: `launchpad` (Your launchpad (the only caller of register and accrue), address), `admin` (The admin, address), `protocol_recipient` (Where the protocol share goes, address), `creator_share_bps` (The creator share, in basis points, uint, optional, default 5000).

## With an agent

- MCP (Streamable HTTP): https://lab.priors.trade/mcp. Tools for this draft: `lab_erc(8459)`, `lab_setup(address)`, `lab_read(8459, read, params)`, `lab_prepare(8459, action, params)`, `lab_deploy_prepare(8459, deploy, params)`, `lab_check_contract(8459, chain, address)`, `lab_feedback_draft(8459, note, txHash?)`.
- HTTP: https://lab.priors.trade/openapi.json describes GET https://lab.priors.trade/api/lab/erc/8459, /api/lab/read/8459/{read}, /api/lab/prepare/8459/{action}, /api/lab/deploy/8459/{deploy}, /api/lab/check/8459/{chain}/{address} and /api/lab/setup/{address}.

A prompt to give your agent:

```text
Use the Priors lab on Robinhood Chain testnet (chain id 46630), where every token is a test token of no value. Its MCP server is https://lab.priors.trade/mcp and this draft's page is https://lab.priors.trade/erc/8459.md. Try ERC-8459, Creator Fee Rights (a draft under review). Start with lab_setup for my testnet address to see my test ETH, test dollars and identities, then launch a mock token on the reference's mock launchpad, then let the mock launchpad take a trade's fee, then trade on the mock launchpad: pay a fee into the stream, then claim the creator fees, then move the fee stream to a new recipient (pledge it), then let the lab launchpad take a fee payment with lab_prepare(8459, <action>, params). Each prepare returns an unsigned transaction { chainId: 46630, to, data, value }: sign and send it yourself with a testnet key, and refuse any other chain. Never ask me for a key. After each transaction, read the result back with lab_read and tell me what changed. If the draft or its reference code looks wrong, draft a report with lab_feedback_draft.
```

## Check a contract

Any address on testnet or mainnet: supportsInterface(0xaae48ac7) and the views, read only (`lab_check_contract`, or GET https://lab.priors.trade/api/lab/check/8459/{chain}/{address}).

## Feedback

The discussion of the text belongs in its thread: https://ethereum-magicians.org/t/erc-8459-creator-fee-rights/30027. A bug in the reference implementation goes to its repository's issues: https://github.com/priors-agents/erc-creator-fee-rights/issues (a new one: https://github.com/priors-agents/erc-creator-fee-rights/issues/new). The text under review: https://github.com/ethereum/ERCs/pull/2103/files. `lab_feedback_draft` writes the report; the lab posts nothing for anyone.
