Priors lab

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.md at 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

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.

Specification headings

  1. Terms
  2. Interface
  3. Registration
  4. Changing the recipient
  5. The creator share and the fee rate
  6. Accrual
  7. 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. 1

    Wallet

    Not connected. Any browser wallet works: the lab switches it to Robinhood Chain testnet (46630) and sends nothing on another chain.

  2. 2

    Test ETH

    For the testnet's network fees. The lab's drip sends a little to a connected wallet once a day.

  3. 3

    Test dollars

    The Lab Test Dollar (no value) that lines lend and launches pair with.

  4. 4

    Testnet identity

    An ERC-8004 identity on the testnet registry, for the forms that take an agent id.

The testnet contracts

ContractAddress 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.

Launch a test token in one transaction: token, pool, liquidity lock, declaration, fee stream

Who signsanyone (the creator)

ERC-8462: the launch, as the launchpad records it

A visitor's test token, not verified: anyone can launch one on the lab, and the lab vouches for none.

Read on the testnet once its fields are filled.

ERC-8462: the token's declarations

A visitor's test token, not verified: anyone can launch one on the lab, and the lab vouches for none.

Read on the testnet once its fields are filled.

ERC-8462: the declaration (creator, allocations, liquidity, fee recipient)

A visitor's test token, not verified: anyone can launch one on the lab, and the lab vouches for none.

Read on the testnet once its fields are filled.

ERC-8463: the liquidity lock

A visitor's test token, not verified: anyone can launch one on the lab, and the lab vouches for none.

Read on the testnet once its fields are filled.

ERC-8463: the pool's locked liquidity

A visitor's test token, not verified: anyone can launch one on the lab, and the lab vouches for none.

Read on the testnet once its fields are filled.

ERC-8459: the creator fee stream

A visitor's test token, not verified: anyone can launch one on the lab, and the lab vouches for none.

Read on the testnet once its fields are filled.

Actions

Launch a mock token on the reference's mock launchpad

Who signsanyone

Let the mock launchpad take a trade's fee

Who signsthe trader

Trade on the mock launchpad: pay a fee into the stream

Who signsanyone (the trader)

Claim the creator fees

Who signsanyone (they go to the recipient)

Move the fee stream to a new recipient (pledge it)

Who signsthe current fee recipient

Let the lab launchpad take a fee payment

Who signsthe payer

Pay creator fees on a lab-launched token

Who signsanyone

Reads

A token's creator fee stream

A visitor's test token, not verified: anyone can launch one on the lab, and the lab vouches for none.

Read on the testnet once its fields are filled.

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.

Your own CreatorFeeEscrow (for your launchpad)

Who signsa launchpad

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/8459
  • GET 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.