Skip to content

001 /What one trade does

One trade. Three shares.

1.00%

Fee on every buy and sell. Fixed when a token is created; nobody can change it.

Example tradeETH
Trade (buy or sell)
0.100000
Fee 1.00%
0.001000
to holders 50%
0.000500
to creator 30%
0.000300
to platform 20%
0.000200
To the curve
0.099000

Example only, computed with Mitra’s fee parameters. Rounding remainders go to holders. Gas is extra.

One trade, line by line

Holders. Credited to whoever holds the token at the moment of this trade, pro rata to their balance. Rounding remainders go here.

Example only, with Mitra's fee parameters, the same for every token. Gas is extra.

How it works

Four steps, all on-chain.

  • A creator launches a token with fixed rules
  • Anyone buys or sells against its curve
  • Each trade's fee is split in the same transaction
  • Holders claim what accrued to them, when they choose
MitraToken.sol · unaudited
Contract calls for a buy and a claim
// MitraToken, unaudited
token.buy{value: 0.1 ether}(minTokensOut, deadline);

// inside the same transaction:
fee          = value * 100 / 10_000;           // 1.00%
creatorOwed += fee * 3_000 / 10_000;           // 30%
platformOwed+= fee * 2_000 / 10_000;           // 20%
holders      = fee - creator - platform;       // 50%, plus rounding
acc         += holders * 2**128 / eligible;    // the buyer's own balance is excluded

token.claim();  // sends claimable(msg.sender)

002 /Principles

Rules, not promises.

What the contracts will guarantee, and only that. Each item says whether it is true today or still planned; planned items become true only when a test proves them.
  1. Fees are split at trade time

    The fee on a trade is divided between holders, the creator and the platform in the same transaction. The holders' part is credited against the supply at that moment, so it goes to whoever held then, not to whoever arrives later. The trader's own fee never pays the trader.

    Proved by test_holdersSharePerTradeProRata, test_buyingAfterATradeEarnsNothingFromIt, test_traderIsExcludedFromOwnFee

    Tested
  2. No one can withdraw reserves or others' fees

    There is no function that lets the platform owner, the creator or anyone else take the ETH behind the curve or fees that accrued to someone else. Each address claims only its own share; creator and platform shares go only to their fixed addresses.

    Proved by test_creatorAndPlatformClaimToFixedRecipients, test_everyoneCanSellBack, invariant_reserveCoversFullSellBack

    Tested
  3. Parameters fixed at launch

    Supply, curve and fee shares are immutable values set when a token is created. There is no mint after creation and no setter for any of them.

    Proved by test_paramsAreStored, invariant_supplyAccounting

    Tested
  4. No upgrades, no pause on trading

    The contracts are not upgradeable and nobody can pause trading or claims. The launchpad owner has one switch: turning new launches on or off. It has no effect on existing tokens, and ownership can be renounced.

    Proved by test_launchSwitchCannotAffectExistingTokens, test_ownershipCanBeRenounced

    Tested
  5. Solvency checked after every operation

    Each token's ETH balance always covers its curve reserve plus every unclaimed fee. Invariant tests check this after random sequences of buys, sells, transfers and claims, and compare every balance with an independent reference model.

    Proved by invariant_solvent, invariant_feeConservation, invariant_matchesReferenceModel

    Tested
  6. Open source, verified on the explorer

    The Solidity source is public in the repository. Once deployed, it is verified on the network's Blockscout explorer, so the code you read is the code that runs.

    True today
  7. Unaudited

    No independent audit has been done. Mitra runs on testnet with test ETH. Mainnet deployment is locked in the deploy script until an audit report has been accepted.

    True today

003 /The code

Read it before you trust it.

The explorer shows files from the repository as they are committed. The contracts appear here once they are written; until then the list says so.

This is the actual repository

Keyboard: arrow keys move through the file tree, Enter opens a file, Control or Command K (or slash) filters files, and the bracket keys open the previous or next file.

  • docs
  • design.md
  • slither.md
  • packages
  • contracts
  • script
  • Deploy.s.sol
  • src
  • lib
  • CurveMath.sol
  • FeeMath.sol
  • MitraLaunchpad.sol
  • MitraToken.sol
  • test
  • invariant
  • Handler.sol
  • Invariants.t.sol
  • shared
  • src
  • chain.ts
  • fees.ts
  • README.md
README.md95 lines

Mitra

UNAUDITED. Mitra's contracts have not been independently audited. Testnet only until an audit is accepted. Experimental software. Not financial advice. You can lose everything you put in.

Mitra is a token launchpad on Robinhood Chain (testnet chain ID 46630; mainnet 4663 is locked). Anyone can launch a token. Trades go against a bonding curve inside the launchpad contracts. Each trade pays a fee, and a fixed share of that fee accrues to the token's current holders, pro rata, at the moment of the trade. Holders claim what has accrued. Fixed shares go to the creator and to the platform.

Mainnet is configured but locked: the deploy script refuses chain 4663 until an audit report is approved, and the app cannot select mainnet until a mainnet deployment is recorded. See docs/mainnet.md. Hosting: docs/deploy.md. Final report and manual test checklist: docs/report.md.

Status

Step State
1. Scaffold, tokens, fonts, mark, dithered art done
2. Component lab (/lab) done, approved
3. Static site done, approved
4. Contract design note (docs/design.md) approved
5. Contracts, tests, testnet deployment done: launchpad 0xd25302fb109a62542e395bf9cccb5617d685a946, verified
6. Indexer, API, app screens done (tested against a local chain)
7. Docs, risks, hosting instructions done
8. Final report docs/report.md

Layout

apps/web            Next.js app (App Router, Tailwind v4, motion, wagmi/viem)
  src/server        Postgres schema (Drizzle), indexer, API helpers, moderation, storage
  src/app/api       Route handlers: tokens, accounts, metadata, reports, admin, cron, health
packages/contracts  Foundry: MitraLaunchpad, MitraToken (UNAUDITED), deploy script with mainnet lock
packages/shared     Networks, deployments, fee and curve maths, naming rules, ABIs (shared with tests)

Develop

Requires Node 22+ and pnpm 11.

pnpm install
pnpm dev                # http://localhost:3000
pnpm lint && pnpm typecheck && pnpm test   # unit, API and indexer-against-anvil tests
pnpm --filter web dev:stack    # anvil + contracts + app on :3200 (needs Foundry)
pnpm --filter web e2e:app      # Playwright: launch, buy, accrue, claim against a local chain
pnpm --filter web e2e          # Playwright smoke (builds and serves on :3100)
pnpm --filter web e2e:shots    # gate screenshots into docs/screens
pnpm brand:dither       # re-render public/brand/dither from apps/web/assets/brand-src

Brand assets

  • apps/web/public/brand/mitra-mark.svg: the mark, redrawn as four rectangles, currentColor.
  • apps/web/public/brand/dither/*.png: two-colour dithered variants of the banner art, generated by apps/web/scripts/dither-brand.ts. The browser shows them with image-rendering: pixelated.
  • Fonts (all SIL Open Font License 1.1, self-hosted by next/font): Inter Tight (headlines), IBM Plex Mono (body, labels, numbers), Newsreader (wordmark only).

Third-party visual references live in reference/, which is git-ignored and never published.

Contracts

UNAUDITED. Testnet only. See docs/design.md for the design and docs/slither.md for the static-analysis triage.

cd packages/contracts
forge build --sizes
forge test                       # unit, fuzz and invariant tests
FOUNDRY_PROFILE=ci forge test    # more fuzz and invariant runs
pnpm --filter @mitra/shared vectors   # regenerate shared fee vectors (CI checks they are current)
Deploy to Robinhood Chain testnet

The deployer key is never stored in env files or in git. Import it once into an encrypted Foundry keystore, then deploy and verify on Blockscout in one command:

cast wallet import mitra-deployer --interactive
export MITRA_OWNER=0x...               # owner of the launch switch
export MITRA_PLATFORM_RECIPIENT=0x...  # receives the platform share
forge script script/Deploy.s.sol --rpc-url https://rpc.testnet.chain.robinhood.com \
  --account mitra-deployer --broadcast \
  --verify --verifier blockscout --verifier-url https://explorer.testnet.chain.robinhood.com/api/

Then pnpm record-deployment 46630 && pnpm abi. Full steps: docs/deploy.md. The script refuses every chain except testnet (46630) and a locked mainnet (4663); see docs/mainnet.md.

004 /Tokens

Launched on Mitra.

0 tokens

No tokens yet.

Be the first to launch one.

Explore

005 /Status

Where things stand.

No testimonials, no user counts. Just the facts that matter before you put anything in.
Audit
NoneThe contracts have not been independently audited. Mainnet deployment stays locked until one is accepted.
Contracts
WrittenMitraLaunchpad and MitraToken, following the approved design note. No proxies, no upgrades.
Contract tests
60 of 60Unit, fuzz and invariant tests in Foundry, including a per-holder reference model. Slither: 0 findings after triage.
Deployment
TestnetLaunchpad 0xd25302fb109a62542e395bf9cccb5617d685a946 on Robinhood Chain Testnet, source verified on the explorer.

006 /Launch cost

What it costs to launch.

Launch fee, testnet

0

You pay network gas, which varies with the network. After launch, each trade pays 1.00% of its value, split as below. Fixed when the token is created.

  1. Name, ticker, image and description
  2. Fixed supply of 1,000,000,000 tokens on the curve
  3. 30% of every trade's fee to you, the creator
  4. 50% of every trade's fee to holders at that moment
  5. Optional first buy in the launch transaction, up to 5% of supply, fee included

007 /FAQ

Before you trade.

  • A token launchpad on Robinhood Chain. Anyone can launch a token, trade it against a bonding curve, and claim their share of the fees that trades pay. Mitra means friend, or covenant: the rules between creators and holders are written into the contract.

  • On Robinhood Chain Testnet, with test ETH that has no value. The contracts are written, tested and deployed, and they have not been audited.

  • You trade against the token's bonding curve in ETH. The trade pays a fee of 1.00% of its ETH value. In the same transaction that fee is split: 50% to current holders, 30% to the creator, 20% to the platform.

  • Pro rata to balances at the moment of the trade, excluding the trader. The contract keeps a running total of fees per token held; your claimable amount is your balance times the growth of that total while you held. Buying after a trade does not give you a share of that trade.

  • Whenever you like, on the token's page or in your portfolio. A claim is a transaction that sends what has accrued to your wallet; it costs gas. Fees that accrued while you held stay claimable after you sell or transfer.

  • Mitra describes a mechanism, not an outcome. Whether any fees accrue depends entirely on whether people trade, and you can lose everything you put in. Nothing on this site is financial advice.

  • No independent security firm has reviewed the contracts. Bugs may exist that lock or lose funds. The deploy script refuses mainnet until an audit report is accepted, and a legal review has to happen before any mainnet launch.

  • Robinhood Chain Testnet (chain ID 46630), with test ETH from the official faucet. Any browser wallet that supports custom networks works, such as Rabby or MetaMask; Mitra offers a one-click switch to the right network.

  • There is no launch fee. You pay network gas. If you make a first buy in the launch transaction, it pays the normal fee and is capped at 5% of supply. Trades on your token then pay the fee described above.

  • Mitra can hide a token from its own listings after a report, for example for impersonation. Hiding changes only this website. The contract stays on-chain and keeps working.

Before you launch

Read the rules. Then write yours.

Every Mitra token follows the same fixed rules. Read how the fee is split and what can go wrong before you launch or trade.

Read the docs