The rules
How Factory Ninja works
A mission lists with a live prototype, not a logo. Backers commit the chain's native asset to an on-chain escrow. Meet the goal and the escrow funds the build; miss it and every backer refunds.
01 — The founder flow
The Nine Gates
Nine steps from an empty wallet to a funded mission. Each gate costs something real — attention, signature or stake — so the missions that pass them are the missions that mean it.
- 01
Connect
Link a wallet on a mission chain. The board, the Dōjō and your Mon follow the same address.
- 02
Brief
Name the mission, write the tagline, pick the chain and the slug. The slug becomes the prototype's subdomain.
- 03
Pledge
Sign the Ninpō — the written promise to build or refund — and approve the $NINJA stake.
- 04
Forge
Build the prototype in the Dōjō with Sensei, the AI pair. Sensei usage is metered in $NINJA.
- 05
Throw
Deploy the prototype to <slug>.factory.ninja. The Shuriken: small, thrown, live.
- 06
Verify
The platform fetches the prototype URL. It must answer over HTTPS and serve something.
- 07
Arm
Set the goal, the deadline and the stake, register the brief, then create the mission on-chain.
- 08
Live
Backers commit ETH or USDC to the on-chain escrow. Progress is public and real-time.
- 09
Strike
Goal met: escrow and stake release to the founder and the token launches. Goal missed: backers refund.
Walk the gates in order at /start. Progress is saved locally per slug.
02 — States
Mission lifecycle
Five states, one direction. Every transition is an on-chain event or a creator signature — the board mirrors the chain, never the other way around.
| State | Trigger | What it means |
|---|---|---|
| BUILDING | Gates 01–06: the brief is registered, the prototype is not yet verified. | The prototype is being forged in the Dōjō. Private to the founder's Mon; never on the public board. |
| LIVE | create() lands on-chain (gate 08). | The mission is open. Backers commit the chain's native asset to the escrow contract. |
| FUNDED | The goal is met and release() executes (gate 09). | The escrow and the stake pay out to the creator. The mission token launches with locked liquidity. |
| FULLY LAUNCHED | The founder signs a production URL after funding. | The real product is live at the founder's own URL. The prototype stays as the archive of proof. |
| FAILED | The deadline passes with the goal unmet. | Each backer pulls their own refund. The stake returns to the founder — unless it was slashed. |
03 — Money
Escrow
The escrow contract holds the chain's native asset — ETH on Base and Robinhood Chain, USDC on Arc. It has exactly three ways out.
- Goal met
- release() sends the whole escrow plus the stake to the creator. The founder builds the real product with the funds — that is the point of a mission, not a pre-order.
- Deadline passed, goal unmet
- Every backer pulls their own commit back with refund(). Nobody — not the founder, not the platform — can route the escrow anywhere else.
- Abandoned mission
- The $NINJA stake is the cost of walking away. It is slashed only after a mission has already failed, by the contract owner's single on-chain power.
release() and refund() are permissionless: when the conditions hold, anyone can call them — no platform signature, no waiting on us.
04 — The gate
The prototype gate
Before a mission opens, the founder deploys a working prototype from the Dōjō and the platform fetches it: HTTPS only, it must answer, and it must serve something. A logo and a pitch deck list nowhere.
After funding, the prototype stays online at <slug>.factory.ninja as the archive of proof — the record the next mission is judged against.
05 — After the strike
Tokens
A funded mission launches its token through the launchpad. Plain ERC-20, fixed supply, no mint, no pause, no owner.
- Platform fee
- 0%
- There is no fee address in the mission contracts, the factory or the locker. Gas is the only cost.
- Supply
- 100%
- One single-sided Uniswap v4 position holds the entire supply, in an ownerless locker with no withdraw path. Locked forever.
- LP fees
- 100% burned
- The mission flow sets no beneficiaries. Fees accrue to the locked position and are burned — nobody collects, including us.
06 — The token of the platform
$NINJA
$NINJA pays for work and proves intent. Two uses today.
- Dōjō credits
- Sensei usage in the Dōjō is metered in $NINJA.
- Founder stake
- Escrowed per mission, returned when the mission settles, slashed on abandonment.
- Values
- 1,000 $NINJA stake per mission on the testnets. Mainnet values are not set.
Testnet $NINJA is a separate throwaway token on each testnet — not bridged, no value. The mainnet token and its distribution are undecided.
07 — Words
Glossary
- Sensei
- The AI coding agent in the Dōjō. One who comes before.
- Dōjō
- The workspace at ide.factory.ninja where prototypes are built.
- Mission
- A funded campaign: backers escrow capital for a deliverable the founder builds.
- Kunai
- The build phase. The tool that measures, not the weapon.
- Shuriken
- The prototype deploy. Small, thrown, delivered instantly.
- Ninpō
- The founder's written pledge, wallet-signed, shown on the mission page.
- Mon
- The reputation profile: the missions a wallet founded and backed.
- Jutsu
- A starter template in the Dōjō.
- Teisatsu · Kanchō · Kishu
- Backer tiers by contribution — scout, spy, raider.
- Nine Gates
- The nine-step founder flow, from Connect to Strike.
08 — Where this runs
Chains & faucets
Missions run on the three testnets. The mainnets are wired for the token launchpad only — mission escrow is not deployed there yet.
| Network | Chain ID | Gas | Faucet |
|---|---|---|---|
| Base Sepolia | 84532 | ETH | Coinbase Developer Platform faucet0.1 ETH per 24h per address |
| Arc Testnet | 5042002 | USDC (native) | Circle faucetGas is test USDC — 20 per 2h per address |
| Robinhood Chain Testnet | 46630 | ETH | Official faucetFaucet eligibility unverified |
Arc pays gas in native USDC — the same balance as the ERC-20 face at 0x3600…0000. Keep the 18-decimal native and 6-decimal ERC-20 faces apart.
09 — Source of truth
Contracts
Read the code before you trust the copy. Mission escrow on the testnets, token launchpad per chain — an address not deployed anywhere reads exactly that.
Base
CHAIN 8453- MissionCampaign
- not deployed
- $NINJA
- not deployed
- LaunchFactory
- not deployed
- LaunchLocker
- not deployed
Robinhood Chain
CHAIN 4663- MissionCampaign
- not deployed
- $NINJA
- not deployed
- LaunchFactory
- not deployed
- LaunchLocker
- not deployed
Arc
CHAIN 5042- MissionCampaign
- not deployed
- $NINJA
- not deployed
- LaunchFactory
- not deployed
- LaunchLocker
- not deployed
Base Sepolia
CHAIN 84532- MissionCampaign
- 0xa0bF2a9Ae83602D159F475414F0a1f65aB3f4C3D
- LaunchFactory
- 0xD67E1477f8668749328e46f75DCa78ad88CAa92E
- LaunchLocker
- 0xe2AD0B9456944241B16b16698F1FE58605a2A532
Robinhood Chain Testnet
CHAIN 46630- MissionCampaign
- not deployed
- $NINJA
- not deployed
- LaunchFactory
- not deployed
- LaunchLocker
- not deployed
Arc Testnet
CHAIN 5042002- MissionCampaign
- 0x050AA998403C0e4C63266AEe90274F775aD0C62d
- LaunchFactory
- 0x4668f9f2BD1695aAab378324bC66e2E6c8cC41B3
- LaunchLocker
- 0xD67E1477f8668749328e46f75DCa78ad88CAa92E
Uniswap v4's PoolManager, PositionManager, Permit2 and Universal Router are Uniswap's canonical deployments. Source on GitHub.