# ERC-8462: Token Launch Declarations

> 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. What a launchpad declares at launch (creator identity, allocations, liquidity lock, financing, fee recipient), on top of ERC-8376.

Status: Testnet only.

- Pull request: https://github.com/ethereum/ERCs/pull/2106
- Text pinned at the pull request's head commit 5d91e6bff7dfa9e3341eda589acf53b375657891 (ERCS/erc-8462.md, CC0): https://github.com/priors-agents/ERCs/blob/5d91e6bff7dfa9e3341eda589acf53b375657891/ERCS/erc-8462.md
- Discussion: https://ethereum-magicians.org/t/erc-8462-launch-declarations/30038
- Reference implementation: https://github.com/priors-agents/erc-launch-declarations/tree/a937cb8f8673c3bd278d2e4887f257bd7f0ca3eb (commit a937cb8f8673c3bd278d2e4887f257bd7f0ca3eb)
- This page: https://lab.priors.trade/erc/8462

## Abstract

This proposal extends [ERC-8376](https://eips.ethereum.org/EIPS/eip-8376) with the facts a launchpad declares when it launches a token: the creator and the [ERC-8004](https://eips.ethereum.org/EIPS/eip-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.

## Specification headings

1. Interface
2. Terms
3. Identifiers
4. Opening a declaration
5. The creator's authorization
6. Declaring facts
7. Amendment and supersession
8. Reading
9. Relation to ERC-8376
10. Use by ERC-8376 detectors

## 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:

- labLaunchpad: 0x753063e1dAb7391920C798F9fF492B6bea6Bb2e9 (https://explorer.testnet.chain.robinhood.com/address/0x753063e1dAb7391920C798F9fF492B6bea6Bb2e9)
- launchDeclarations: 0xbb18141532b44F5631fC69081Aae00293fA6D559 (https://explorer.testnet.chain.robinhood.com/address/0xbb18141532b44F5631fC69081Aae00293fA6D559)
- launchDirectory: 0xdE59b959422458D5D390E1650041E7da722ce487 (https://explorer.testnet.chain.robinhood.com/address/0xdE59b959422458D5D390E1650041E7da722ce487)
- liquidityLocker: 0xf161B0d86746fAf7C88C4B3Cc560f7025e0423e9 (https://explorer.testnet.chain.robinhood.com/address/0xf161B0d86746fAf7C88C4B3Cc560f7025e0423e9)
- feeEscrow: 0x23C3B69483278ABa85efa69f83C1Bd79fcDe98e3 (https://explorer.testnet.chain.robinhood.com/address/0x23C3B69483278ABa85efa69f83C1Bd79fcDe98e3)
- 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`: Launch a test token in one transaction: token, pool, liquidity lock, declaration, fee stream. Who signs: anyone (the creator) Params: `name` (The token's name, string), `symbol` (Its symbol, string), `total_supply` (The supply, in whole tokens (18 decimals), uint, optional, default 1000000), `creator_allocation` (Whole tokens to the creator at launch (the rest seeds the pool), uint, optional, default 0), `pool_dollars` (Test dollars minted into the pool (1 to 1,000), amount, optional, default 100), `unlock_at` (Liquidity locked until (unix seconds, +30d, permanent), time, optional, default +30d), `fee_recipient` (Who receives the creator fees (empty: the creator), address, optional, default 0x0000000000000000000000000000000000000000), `agent_id` (Your testnet identity to attach (0: none), agentId, optional, default 0), `deadline` (Your authorization's deadline (with an identity), time, optional, default 0), `creator_signature` (Your CreatorAuthorization signature (with an identity: read launch_authorization), bytes, optional, default 0x), `financing_loan_id` (A lab loan of your identity that pays the pool's test dollars (0: none; approve the launchpad first), uint, optional, default 0), `financing_line` (The lab line that loan is on: normal or fast, string, optional, default normal).
- `approve_financing`: Let the lab launchpad take a lab loan's principal for the pool. Who signs: the creator Params: `amount` (How many test dollars (the loan's principal), amount).
- `declare_venue_creator`: Declare a launch as your own venue. Who signs: the venue (the creator signs unless it is the sender) Params: `token` (The token, address), `creator` (The creator, address), `agent_id` (The creator's identity (empty: none), agentId, optional), `deadline` (The creator's signature valid until, time, optional, default 0), `creator_signature` (The creator's CreatorAuthorization signature (empty when the creator sends it), bytes, optional, default 0x), `contract` (Your own declarations contract's address (empty: the lab's shared one), address, optional).
- `declare_allocation`: Declare supply allocated outside the sale. Who signs: the declaration's venue Params: `declaration_id` (The declaration, bytes32), `holder` (Who holds it, address), `amount` (The amount, in the token's base units, uint), `vest_start` (Vesting starts (unix seconds, +30d), time), `vest_end` (Vesting ends, time), `contract` (Your own declarations contract's address (empty: the lab's shared one), address, optional).
- `declare_liquidity`: Declare the lock holding the liquidity, and its financing. Who signs: the declaration's venue Params: `declaration_id` (The declaration, bytes32), `liquidity_locks` (The ERC-8463 locker (empty: the lab's), address, optional, default (the lab's)), `lock_id` (The lock, uint), `lender` (Who financed it (empty: nobody), address, optional, default 0x0000000000000000000000000000000000000000), `asset` (What the lender lent (empty: none), address, optional, default 0x0000000000000000000000000000000000000000), `financed` (How much was financed, in base units, uint, optional, default 0), `due_at` (Financing due (unix seconds; 0: none), time, optional, default 0), `contract` (Your own declarations contract's address (empty: the lab's shared one), address, optional).
- `declare_fee_recipient`: Declare where creator fees are accounted and who receives them. Who signs: the declaration's venue Params: `declaration_id` (The declaration, bytes32), `fee_rights` (The ERC-8459 contract (empty: the lab's escrow), address, optional, default (the lab's)), `recipient` (The recipient, address), `contract` (Your own declarations contract's address (empty: the lab's shared one), address, optional).

Reads:

- `preview_launch`: The token and launch id a creator's next launch will have. Params: `creator` (The creator, address), `name` (The token's name, string), `symbol` (Its symbol, string), `total_supply` (The supply, in whole tokens, uint, optional, default 1000000).
- `launch_authorization`: The EIP-712 CreatorAuthorization a creator signs to attach its identity to a lab launch. Params: `creator` (The creator, address), `name` (The token's name, string), `symbol` (Its symbol, string), `total_supply` (The supply, in whole tokens, uint, optional, default 1000000), `agent_id` (The creator's identity, agentId), `deadline` (Valid until (unix seconds, +15m), time).
- `launch_of`: A lab launch: a visitor's test token (not verified), its creator, launch id, pool, lock, identity. Params: `token` (The token, address).
- `declarations_of`: A token's declarations (what a buyer agent reads first). Params: `token` (The token, address), `start` (From, uint, optional, default 0), `limit` (At most, uint, optional, default 20), `contract` (Your own declarations contract's address (empty: the lab's shared one), address, optional).
- `declarations_by`: A creator's declarations. Params: `creator` (The creator, address), `start` (From, uint, optional, default 0), `limit` (At most, uint, optional, default 20), `contract` (Your own declarations contract's address (empty: the lab's shared one), address, optional).
- `declaration`: One declaration: creator, identity, allocations, liquidity, fee recipients. Params: `declaration_id` (The declaration, bytes32), `contract` (Your own declarations contract's address (empty: the lab's shared one), address, optional).
- `next_venue_declaration`: The id a venue's next declaration of a token will have. Params: `venue` (The venue, address), `token` (The token, address), `creator` (The creator, address), `contract` (Your own declarations contract's address (empty: the lab's shared one), address, optional).
- `creator_authorization`: The EIP-712 message a creator signs to let a venue attach its identity. Params: `declaration_id` (The declaration, bytes32), `venue` (The venue, address), `token` (The token, address), `creator` (The creator, address), `agent_id` (The creator's identity, agentId), `deadline` (Valid until (unix seconds, +15m), time), `contract` (Your own declarations contract's address (empty: the lab's shared one), address, optional).

Deploy your own:

- `declarations`: Your own LaunchDeclarations over a directory. Params: `launch_directory` (The ERC-8376 directory (empty: the lab's), address, optional, default (the lab's)).

## With an agent

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

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

## Feedback

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