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 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.
ERC-8459 · draft under review
Creator Fee Rights
A launched token's creator fee stream, with its history and a recipient that only the recipient can change, so it can be pledged.
StatusTestnet only
Guided in the app: Launch a token, Claim the creator fees, Post an income statement and prove a payment.
- Pull request
- ethereum/ERCs #2103 (the text under review)
- Text pinned at
ERCS/erc-8459.mdat 76d6be3
76d6be315c3ca8ce9704cae0ca18526687d8462c- Discussion
- Its thread on Ethereum Magicians
- Reference
- priors-agents/erc-creator-fee-rights at 55bf940
55bf9408dec94bc3a0d3fa789b7ba03a18050713 - Markdown
- /erc/8459.md
What it is
Specification headings
- Terms
- Interface
- Registration
- Changing the recipient
- The creator share and the fee rate
- Accrual
- Claiming
The abstract and headings above are the text at 76d6be3, CC0. Read the full text at that commit.
Nothing at Priors runs this draft. Its reference contracts go on the testnet only.
Try it
On Robinhood Chain testnet (46630), with the reference contracts at their pinned commits and test tokens of no value. Each action shows the call it prepares before your wallet signs it, and each send is simulated first.
Set up
Four steps, once: your wallet on Robinhood Chain testnet, a little test ETH for its fees, test dollars of no value, and a testnet identity. The forms below fill from them.
- 1
Wallet
Not connected. Any browser wallet works: the lab switches it to Robinhood Chain testnet (46630) and sends nothing on another chain.
- 2
Test ETH
For the testnet's network fees. The lab's drip sends a little to a connected wallet once a day.
- 3
Test dollars
The Lab Test Dollar (no value) that lines lend and launches pair with.
- 4
Testnet identity
An ERC-8004 identity on the testnet registry, for the forms that take an agent id.
The testnet contracts
| Contract | Address on testnet (46630) |
|---|---|
| The creator fee escrow behind the reference's mock launchpad (CreatorFeeEscrow) | 0x23C3B69483278ABa85efa69f83C1Bd79fcDe98e3 |
| The creator fee reference's mock launchpad (MockLaunchpad) | 0xF80aE3e3CF7BD234Ac4d7a4cFfA3770F419c953A |
| The lab launchpad's creator fee escrow (CreatorFeeEscrow) | 0x117332ec46f213a3ba189d02EA2CaD8BD349a010 |
| The lab's launchpad (LabLaunchpad) | 0x753063e1dAb7391920C798F9fF492B6bea6Bb2e9 |
| The lab's test dollar (LabTestDollar) | 0x64A419191369E6a79d562A65336073ec1bfbf4BD |
Launch a token
One transaction through the lab's launchpad (LabLaunchpad): it creates a plain test token, seeds its pool against the Lab Test Dollar, locks that liquidity under ERC-8463 until the time you choose, declares the launch under ERC-8462 and registers its creator fee stream under ERC-8459, with you as its recipient. Each is then read back below, as on the ERC-8462 page.
Every token launched here is a visitor's test token, not verified: anyone can launch one on the lab, and the lab vouches for none.
Actions
Reads
Deploy your own
Deploy the reference contract from its pinned commit with your own wallet, on the testnet: you become its lender, launchpad or backer. Its address shows once the receipt is in, and Check a contract below reads it.
With an agent
Your agent gets the same lab through the MCP server at https://lab.priors.trade/mcp or the HTTP API described by /openapi.json. It reads, and gets back unsigned testnet transactions to sign with its own testnet key. The lab holds no key of its own for you and never asks for one.
MCP tools for ERC-8459
lab_erc(8459)- What the draft does on the lab, its contracts and an agent's next calls.
lab_setup(address)- Test ETH, test dollars and the testnet identities of an address, with the calls to register one and mint test dollars.
lab_read(8459, "stream", { token, asset, escrow, contract })- A token's creator fee stream.
lab_prepare(8459, "launch_mock_token", { creator })- Launch a mock token on the reference's mock launchpad. Who signs: anyone
lab_prepare(8459, "approve_fee", { amount })- Let the mock launchpad take a trade's fee. Who signs: the trader
lab_prepare(8459, "trade", { token, fee })- Trade on the mock launchpad: pay a fee into the stream. Who signs: anyone (the trader)
lab_prepare(8459, "claim", { token, asset, escrow, contract })- Claim the creator fees. Who signs: anyone (they go to the recipient)
lab_prepare(8459, "set_fee_recipient", { token, new_recipient, escrow, contract })- Move the fee stream to a new recipient (pledge it). Who signs: the current fee recipient
lab_prepare(8459, "approve_launchpad_fee", { amount })- Let the lab launchpad take a fee payment. Who signs: the payer
lab_prepare(8459, "pay_fee", { token, amount })- Pay creator fees on a lab-launched token. Who signs: anyone
lab_deploy_prepare(8459, "escrow", { launchpad, admin, protocol_recipient, creator_share_bps })- Your own CreatorFeeEscrow (for your launchpad).
lab_check_contract(8459, chain, address)- The conformance read of any contract, on testnet or mainnet: supportsInterface and the views.
lab_feedback_draft(8459, note, txHash?)- The report text and the thread and issue links. It posts nothing.
HTTP
GET https://lab.priors.trade/api/lab/erc/8459GET https://lab.priors.trade/api/lab/read/8459/stream?token=<token>&asset=<asset>&escrow=<escrow>&contract=<contract>GET https://lab.priors.trade/api/lab/prepare/8459/launch_mock_token?creator=<creator>GET https://lab.priors.trade/api/lab/prepare/8459/approve_fee?amount=<amount>GET https://lab.priors.trade/api/lab/prepare/8459/trade?token=<token>&fee=<fee>GET https://lab.priors.trade/api/lab/prepare/8459/claim?token=<token>&asset=<asset>&escrow=<escrow>&contract=<contract>GET https://lab.priors.trade/api/lab/prepare/8459/set_fee_recipient?token=<token>&new_recipient=<new_recipient>&escrow=<escrow>&contract=<contract>GET https://lab.priors.trade/api/lab/prepare/8459/approve_launchpad_fee?amount=<amount>GET https://lab.priors.trade/api/lab/prepare/8459/pay_fee?token=<token>&amount=<amount>GET https://lab.priors.trade/api/lab/deploy/8459/escrow?launchpad=<launchpad>&admin=<admin>&protocol_recipient=<protocol_recipient>&creator_share_bps=<creator_share_bps>GET https://lab.priors.trade/api/lab/check/8459/<chain>/<address>GET https://lab.priors.trade/api/lab/setup/<address>
Connect it, for example in Claude Code: claude mcp add --transport http priors-lab https://lab.priors.trade/mcp
A prompt to copy
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
Paste any contract on either chain: the lab reads supportsInterface for ICreatorFeeRights 0xaae48ac7 (computed from the pinned interface) and ERC-165's own, then calls each view. It only reads, so another implementer can test conformance with nothing signed.
Feedback
What you found goes where the draft is worked on: the discussion of the text in its thread on Ethereum Magicians, a bug in the reference code in its repository's issues. You post it under your own account. The lab posts nothing for anyone.