Priors lab

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.md at 5d91e6b
5d91e6bff7dfa9e3341eda589acf53b375657891
Discussion
Its thread on Ethereum Magicians
Reference
priors-agents/erc-launch-declarations at a937cb8
a937cb8f8673c3bd278d2e4887f257bd7f0ca3eb
Markdown
/erc/8462.md

What it is

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.

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

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

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

Let the lab launchpad take a lab loan's principal for the pool

Who signsthe creator

Declare a launch as your own venue

Who signsthe venue (the creator signs unless it is the sender)

Declare supply allocated outside the sale

Who signsthe declaration's venue

Declare the lock holding the liquidity, and its financing

Who signsthe declaration's venue

Declare where creator fees are accounted and who receives them

Who signsthe declaration's venue

Reads

The token and launch id a creator's next launch will have

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.

The EIP-712 CreatorAuthorization a creator signs to attach its identity to a lab launch

Read on the testnet once its fields are filled.

A creator'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.

The id a venue's next declaration of a token will have

Read on the testnet once its fields are filled.

The EIP-712 message a creator signs to let a venue attach its identity

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 LaunchDeclarations over a directory

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