On Robinhood Chain testnet
Fees, shared.
Every trade on a Mitra token pays a fee. Part of it accrues to whoever holds the token at that moment, by rule, on-chain.
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.
- 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.
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, 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.
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
TestedNo 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
TestedParameters 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
TestedNo 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
TestedSolvency 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
TestedOpen 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 todayUnaudited
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.
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
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 byapps/web/scripts/dither-brand.ts. The browser shows them withimage-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.mdfor the design anddocs/slither.mdfor 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.

005 /Status
Where things stand.
- 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.
- Name, ticker, image and description
- Fixed supply of 1,000,000,000 tokens on the curve
- 30% of every trade's fee to you, the creator
- 50% of every trade's fee to holders at that moment
- 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.


