This proposal extends ERC-8376 with the facts a launchpad declares when it launches a token: the creator and the ERC-8004 identity it holds, the supply allocated outside the sale and how it vests, the lock that holds the launch's liquidity and who financed that liquidity, and where the creator's fees are paid. When the ERC-8376 directory lists the launch, a declarations contract records them under its ERC-8376 launchId, with the creator taken from the directory and the venue the directory names as the only writer. Otherwise it records them under an identifier scoped to the launchpad that declares them, which no other address can write under. A launchpad can name a creator outside the directory, or attach a creator's identity, only with that creator's authorization: the creator calls, or signs it. Nothing declared can be changed, so detectors, wallets and lenders can compare what a launchpad declared with what they observe.
ERC-8462 · draft under review
Token Launch Declarations
What a launchpad declares at launch (creator identity, allocations, liquidity lock, financing, fee recipient), on top of ERC-8376.
StatusTestnet only
Guided in the app: Launch a token.
- Pull request
- ethereum/ERCs #2106 (the text under review)
- Text pinned at
ERCS/erc-8462.mdat 5d91e6b
5d91e6bff7dfa9e3341eda589acf53b375657891- Discussion
- Its thread on Ethereum Magicians
- Reference
- priors-agents/erc-launch-declarations at a937cb8
a937cb8f8673c3bd278d2e4887f257bd7f0ca3eb - Markdown
- /erc/8462.md
What it is
Specification headings
- Interface
- Terms
- Identifiers
- Opening a declaration
- The creator's authorization
- Declaring facts
- Amendment and supersession
- Reading
- Relation to ERC-8376
- Use by ERC-8376 detectors
The abstract and headings above are the text at 5d91e6b, 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 lab's launchpad (LabLaunchpad) | 0x753063e1dAb7391920C798F9fF492B6bea6Bb2e9 |
| The lab's launch declarations (LaunchDeclarations) | 0xbb18141532b44F5631fC69081Aae00293fA6D559 |
| The lab's ERC-8376 launch directory (the reference's MockLaunchDirectory) | 0xdE59b959422458D5D390E1650041E7da722ce487 |
| The lab's liquidity locker (LiquidityLocker) | 0xf161B0d86746fAf7C88C4B3Cc560f7025e0423e9 |
| The creator fee escrow behind the reference's mock launchpad (CreatorFeeEscrow) | 0x23C3B69483278ABa85efa69f83C1Bd79fcDe98e3 |
| 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.
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-8462
lab_erc(8462)- 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(8462, "preview_launch", { creator, name, symbol, total_supply })- The token and launch id a creator's next launch will have.
lab_read(8462, "launch_authorization", { creator, name, symbol, total_supply, agent_id, deadline })- The EIP-712 CreatorAuthorization a creator signs to attach its identity to a lab launch.
lab_read(8462, "launch_of", { token })- A lab launch: a visitor's test token (not verified), its creator, launch id, pool, lock, identity.
lab_read(8462, "declarations_of", { token, start, limit, contract })- A token's declarations (what a buyer agent reads first).
lab_read(8462, "declarations_by", { creator, start, limit, contract })- A creator's declarations.
lab_read(8462, "declaration", { declaration_id, contract })- One declaration: creator, identity, allocations, liquidity, fee recipients.
lab_read(8462, "next_venue_declaration", { venue, token, creator, contract })- The id a venue's next declaration of a token will have.
lab_read(8462, "creator_authorization", { declaration_id, venue, token, creator, agent_id, deadline, contract })- The EIP-712 message a creator signs to let a venue attach its identity.
lab_prepare(8462, "launch", { name, symbol, total_supply, creator_allocation, pool_dollars, unlock_at, fee_recipient, agent_id, deadline, creator_signature, financing_loan_id, financing_line })- Launch a test token in one transaction: token, pool, liquidity lock, declaration, fee stream. Who signs: anyone (the creator)
lab_prepare(8462, "approve_financing", { amount })- Let the lab launchpad take a lab loan's principal for the pool. Who signs: the creator
lab_prepare(8462, "declare_venue_creator", { token, creator, agent_id, deadline, creator_signature, contract })- Declare a launch as your own venue. Who signs: the venue (the creator signs unless it is the sender)
lab_prepare(8462, "declare_allocation", { declaration_id, holder, amount, vest_start, vest_end, contract })- Declare supply allocated outside the sale. Who signs: the declaration's venue
lab_prepare(8462, "declare_liquidity", { declaration_id, liquidity_locks, lock_id, lender, asset, financed, due_at, contract })- Declare the lock holding the liquidity, and its financing. Who signs: the declaration's venue
lab_prepare(8462, "declare_fee_recipient", { declaration_id, fee_rights, recipient, contract })- Declare where creator fees are accounted and who receives them. Who signs: the declaration's venue
lab_deploy_prepare(8462, "declarations", { launch_directory })- Your own LaunchDeclarations over a directory.
lab_check_contract(8462, chain, address)- The conformance read of any contract, on testnet or mainnet: supportsInterface and the views.
lab_feedback_draft(8462, note, txHash?)- The report text and the thread and issue links. It posts nothing.
HTTP
GET https://lab.priors.trade/api/lab/erc/8462GET https://lab.priors.trade/api/lab/read/8462/preview_launch?creator=<creator>&name=<name>&symbol=<symbol>&total_supply=<total_supply>GET https://lab.priors.trade/api/lab/read/8462/launch_authorization?creator=<creator>&name=<name>&symbol=<symbol>&total_supply=<total_supply>&agent_id=<agent_id>&deadline=<deadline>GET https://lab.priors.trade/api/lab/read/8462/launch_of?token=<token>GET https://lab.priors.trade/api/lab/read/8462/declarations_of?token=<token>&start=<start>&limit=<limit>&contract=<contract>GET https://lab.priors.trade/api/lab/read/8462/declarations_by?creator=<creator>&start=<start>&limit=<limit>&contract=<contract>GET https://lab.priors.trade/api/lab/read/8462/declaration?declaration_id=<declaration_id>&contract=<contract>GET https://lab.priors.trade/api/lab/read/8462/next_venue_declaration?venue=<venue>&token=<token>&creator=<creator>&contract=<contract>GET https://lab.priors.trade/api/lab/read/8462/creator_authorization?declaration_id=<declaration_id>&venue=<venue>&token=<token>&creator=<creator>&agent_id=<agent_id>&deadline=<deadline>&contract=<contract>GET https://lab.priors.trade/api/lab/prepare/8462/launch?name=<name>&symbol=<symbol>&total_supply=<total_supply>&creator_allocation=<creator_allocation>&pool_dollars=<pool_dollars>&unlock_at=<unlock_at>&fee_recipient=<fee_recipient>&agent_id=<agent_id>&deadline=<deadline>&creator_signature=<creator_signature>&financing_loan_id=<financing_loan_id>&financing_line=<financing_line>GET https://lab.priors.trade/api/lab/prepare/8462/approve_financing?amount=<amount>GET https://lab.priors.trade/api/lab/prepare/8462/declare_venue_creator?token=<token>&creator=<creator>&agent_id=<agent_id>&deadline=<deadline>&creator_signature=<creator_signature>&contract=<contract>GET https://lab.priors.trade/api/lab/prepare/8462/declare_allocation?declaration_id=<declaration_id>&holder=<holder>&amount=<amount>&vest_start=<vest_start>&vest_end=<vest_end>&contract=<contract>GET https://lab.priors.trade/api/lab/prepare/8462/declare_liquidity?declaration_id=<declaration_id>&liquidity_locks=<liquidity_locks>&lock_id=<lock_id>&lender=<lender>&asset=<asset>&financed=<financed>&due_at=<due_at>&contract=<contract>GET https://lab.priors.trade/api/lab/prepare/8462/declare_fee_recipient?declaration_id=<declaration_id>&fee_rights=<fee_rights>&recipient=<recipient>&contract=<contract>GET https://lab.priors.trade/api/lab/deploy/8462/declarations?launch_directory=<launch_directory>GET https://lab.priors.trade/api/lab/check/8462/<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/8462.md. Try ERC-8462, Token Launch Declarations (a draft under review). Start with lab_setup for my testnet address to see my test ETH, test dollars and identities, then launch a test token in one transaction: token, pool, liquidity lock, declaration, fee stream, then let the lab launchpad take a lab loan's principal for the pool, then declare a launch as your own venue, then declare supply allocated outside the sale, then declare the lock holding the liquidity, and its financing, then declare where creator fees are accounted and who receives them with lab_prepare(8462, <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 ILaunchDeclarations 0x84164db3 (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.