One-click OP_20 token factory on native Bitcoin L1 via OPNet.
Deploy your own memecoins, DeFi tokens, or utility tokens directly on Bitcoin — no bridges, no L2s.
🌐 Live: optoken-forge-production.up.railway.app
- Connect your OP_WALLET browser extension
- Fill in token parameters (name, symbol, supply, decimals)
- Deploy — the dApp handles the two-step process:
- Deploys the OP_20 WASM contract on-chain
- Waits for on-chain confirmation
- Registers the token in the VibeTokenFactory registry
- Done — your token is live on Bitcoin L1
- Smart Contract: AssemblyScript (VibeTokenFactory) compiled to WASM, deployed on OPNet testnet
- Frontend: React 19 + Vite + TypeScript + TailwindCSS
- Wallet: OP_WALLET browser extension
- Libraries:
opnet,@btc-vision/transaction,@btc-vision/bitcoin
| Network | Address |
|---|---|
| OPNet Testnet | opt1sqznrflg7krnelcuvvl8zmq66cg36yqqcgufmpuxz |
cd frontend
npm install
npm run dev/
├── src/factory/ # VibeTokenFactory smart contract (AssemblyScript)
├── abis/ # Contract ABIs
├── frontend/ # React dApp
│ ├── src/
│ │ ├── components/ # UI components (DeployForm, DeployProgress, TokenList...)
│ │ ├── services/ # deploy.ts, factory.ts, provider.ts, wallet.ts
│ │ ├── contexts/ # WalletContext (OP_WALLET integration)
│ │ ├── pages/ # HomePage, DeployPage, ExplorePage
│ │ └── config/ # Constants, network config
│ └── public/
│ └── op20-token.wasm # Pre-built OP_20 token binary
├── example-contracts/ # CLI deploy/register scripts
├── server.js # Zero-dependency static server (Railway)
├── Dockerfile # Railway deployment
└── railway.json # Railway config
OP_WALLET handles MLDSA (quantum-resistant) key linking automatically — it derives the same keypair from your wallet seed and manages the one-time on-chain binding transparently.
Important: Do not mix CLI-generated MLDSA keys (.quantum_key files) with OP_WALLET for the same address. The wallet derives its own MLDSA keypair from the seed, and if a different key was previously linked to your address via CLI scripts, subsequent wallet transactions will fail with "Can not reassign existing MLDSA public key." Use a fresh address if switching between CLI and wallet workflows.
MIT