Creator handbook
Everything a creator needs to launch a collection on Immoto, in the order you will do it. Zero capital, one transaction, art from the first block.
What you are launching
A DN-404 pair: an ERC-20 token and an ERC-721 collection that mirror each other. Whoever holds one whole unit holds one NFT; selling below a whole unit dissolves the NFT (last acquired first).
A single-sided pool against IMMOTO: the whole supply goes onto a three-tranche curve — 40% of the units between p0 and 4·p0, 35% between 4·p0 and 20·p0, 25% from 20·p0 to infinity. IMMOTO paid by buyers stays in the pool forever; the pool never sells out and always has a bid.
Zero capital, zero allocation: you deposit nothing and receive no tokens. Your income is the creator share (§5). One pool, for life: your token trades only in its Immoto pool (any router may use it); wallet transfers and NFT marketplaces are free. There is no graduation.
What you need
| A wallet on Arc | any EVM wallet; gas is paid in USDC (≈ 1 USDC for the launch, 7.2M gas) |
| One staked IMMOTO seat | buy on Launch, stake on My Seats. It becomes your license: locked 30 days, then it must stay staked and owned by you for the creator share to flow. One seat licenses one collection at a time. |
| The factory open | createCollection opens once the IMMOTO/USDC pool holds 100,000 USDC (the Create page shows the progress) |
| Art | one of the three options in §4, prepared before you launch |
Parameters
| Field | Rule | Advice |
|---|---|---|
| Name / symbol | symbol 2–8 uppercase letters or digits | the NFT collection carries the same name |
| Units | 100 – 100,000 | your NFT supply; all of it goes to the curve |
| p0 (start price, IMMOTO) | > 0 | buyers pay in USDC through the IMMOTO pool, so think in USDC: p0 × IMMOTO price. With IMMOTO at 12 USDC, p0 = 0.05 means the first unit costs ≈ 0.6 USDC + fees |
| License seat | a staked seat of yours that licenses nothing else |
The first hour after launch every buy carries a surcharge fading from 27% to 0 (paid to stakers) so bots cannot sweep the cheap tranche. Announce after the transaction confirms, not before.
Art — set it before launch
The Create page has an Art step; your choice is applied inside the launch transaction, so unit #1 has its metadata from the first block. You remain the metadata owner and can change everything from the collection page until you freeze (permanent).
A · Protocol placeholder. Nothing to prepare: symbol, unit id and state printed on cream paper. Never broken on marketplaces. Replace it later.
B · Metadata files (IPFS / Arweave / HTTPS). One JSON per unit named 1.json … N.json in the OpenSea format:
{ "name": "Night Shift #1", "description": "…", "image": "ipfs://<cid>/1.png",
"attributes": [ { "trait_type": "Shift", "value": "Late" } ] }Upload images and the JSON folder (Pinata, web3.storage, ArDrive, your own server) and use the folder URI ending with a slash, e.g. ipfs://bafy…/; the token's metadata becomes <base><id>.json. Optional: a second base URI for staked and cooling-down units (same file names). The Create page fetches 1.json and shows the image before you sign; if it cannot be fetched you may still launch and publish later (units show as broken until then).
C · Onchain renderer. Deploy a contract implementing
function tokenURI(uint256 id, uint8 state, uint256 tenure) external view returns (string memory); // state: 0 liquid · 1 staked · 2 cooldown · tenure: seconds staked (0 unless staked)
returning a data:application/json;base64,… URI whose JSON has name, image and attributes. State and tenure let the art react to staking — Immoto's own portraits light up when staked and add tenure marks. The Create page calls your renderer for unit #1 (liquid and staked) before you sign; it must be deployed on the same network. Immoto's renderer contracts are open source and verified — copy the pattern.
Royalty. ERC-2981 at 5% to you by default, enforced on ERC721-C marketplaces; change receiver and percent on the collection page.
What you earn
| Stream | Amount | When |
|---|---|---|
| Pool fee share | ‰100 of the 2% fee on every swap of your token (0.2% of volume) | continuously; claim on the collection page |
| Mint fee | 5% of every primary sale (half of the 10% mint fee) | as the curve sells |
| Royalty | 5% (default) on NFT marketplace sales | per marketplace |
Paid in IMMOTO (royalties in whatever the marketplace pays). While your license seat is unstaked or sold, the pool share and the mint half go to IMMOTO stakers instead; Relicense with another staked seat restores it. Your holders earn too: 65% of every fee goes to whoever stakes your units, 15% to IMMOTO stakers, 5% to protocol liquidity, 5% to the protocol.
Launch checklist
- Wallet on Arc with ≥ 1 USDC of gas.
- One IMMOTO seat bought and staked, licensing nothing else.
- Art prepared: files published under a base URI, or renderer deployed and verified.
- Factory open (the Create page shows “Open”).
- Fill name / symbol / units / p0, choose the art option, check the preview of unit #1, pick the license seat.
- Create collection — one transaction. The pool is live immediately; the 1-hour surcharge starts.
- Open your collection page: verify the art, set the royalty, share the link. Claim the creator share whenever you like.
Launching from a script or an agent
Everything the page does is one call to SeatsFactory.createCollection:
cast send $FACTORY "createCollection((string,string,uint256,uint256,uint256,address,string,string))" \ "(\"Night Shift\",\"NIGHT\",300,50000000000000000,53,0x0000000000000000000000000000000000000000,\"ipfs://bafy…/\",\"\")" \ --rpc-url https://rpc.mainnet.arc.io --keystore <yours> --gas-limit 9000000
p0 is in wei (18 decimals). Pass the renderer address with empty URIs for option C, or zeros / empty strings for the placeholder. Read collections(i) / collectionInfo(addr) for the result and licenseOf(addr) for the license. The quoter and router expose quoteBuyChild / buyChild (USDC, two hops) and the …WithSeat variants; the indexer's GraphQL endpoint gives volume, fees, holders and activity. Addresses: Docs → Contracts. Agents: /llms.txt.
What cannot happen
You cannot pre-mint, allocate or reserve units; you cannot change fees, the curve or the supply after launch; you cannot withdraw liquidity. Nobody can — including the Immoto owner. Your token cannot be moved into another AMM pool (the permanent routing lock); it can be transferred wallet to wallet and listed on any NFT marketplace.