Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸͺ™ CoinMaker β€” Solana Token Creator

CoinMaker is a web application that lets you create a Solana SPL token with full on-chain metadata (name, symbol, logo, social links) in just a few clicks. It uploads your logo and metadata to IPFS (via Pinata), mints the full supply to your wallet, attaches Metaplex metadata, and revokes the mint authority so the supply is fixed.

⚠️ Liquidity Pool creation is currently DISABLED. The "Create Raydium Liquidity Pool" option exists in the code but is turned off. Tokens are created without an automated liquidity pool. You can still add liquidity later manually using Raydium, Pump.fun, or Jupiter (see Adding Liquidity Manually).

✨ Features

  • Create a Solana SPL token with a custom name, symbol, decimals, and supply.
  • Upload a logo (PNG/JPG/GIF/WEBP/SVG) to IPFS so it shows in Phantom, Solscan, and Jupiter.
  • Attach Metaplex on-chain metadata (logo, description, website, Twitter, Telegram, Discord).
  • Mint the full supply directly to your connected wallet.
  • Revoke mint authority automatically β†’ fixed supply, appears as trusted on explorers.
  • Cost calculator that shows the exact SOL (and USD) needed before you launch.
  • Pre-flight checklist and server-side validation before any transaction is sent.
  • Local token history saved in your browser (localStorage).
  • Works on Mainnet and Devnet (Devnet is free for testing).

🧰 Requirements

  • Node.js 16+ (Node 18+ recommended)
  • npm (comes with Node) or yarn
  • A Solana wallet with SOL balance:
    • For the UI wallet connection: a browser extension wallet such as Phantom or Solflare.
    • For the server-side signing: a base58 secret key (the app prompts you to paste it when connecting).
  • A Pinata account (free) to get a PINATA_JWT for IPFS uploads.
  • (Optional but recommended) A dedicated Solana RPC endpoint (Helius, QuickNode, Alchemy) because public RPCs are rate-limited.

πŸ“ Project Structure

CoinMaker/
β”œβ”€β”€ server/
β”‚   β”œβ”€β”€ index.js           # Express API server (cost calc, validation, token creation)
β”‚   └── ipfs.js            # IPFS / Pinata upload integration
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ App.jsx            # Main React app, state, API calls
β”‚   β”œβ”€β”€ main.jsx           # React entry point
β”‚   β”œβ”€β”€ index.css          # Styles
β”‚   └── components/
β”‚       β”œβ”€β”€ CreateToken.jsx   # Launch button + pre-flight checklist
β”‚       β”œβ”€β”€ TokenForm.jsx     # Token details form (name, symbol, logo, pool)
β”‚       β”œβ”€β”€ CostBreakdown.jsx # Cost / pool preview
β”‚       β”œβ”€β”€ PoolHelp.jsx      # Manual liquidity guide (pool feature disabled)
β”‚       β”œβ”€β”€ TokenHistory.jsx  # Created-token history
β”‚       └── WalletConnect.jsx # Wallet connect UI
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ test-rpc.js        # Test RPC endpoint speed/reachability
β”‚   β”œβ”€β”€ test-ipfs-upload.js# Test Pinata/IPFS upload
β”‚   β”œβ”€β”€ test-api.js        # Test the API end-to-end
β”‚   β”œβ”€β”€ check-token.js     # Inspect a token's on-chain metadata
β”‚   β”œβ”€β”€ check-tx.js        # Inspect a transaction
β”‚   β”œβ”€β”€ analyze-token.js   # Analyze a token (metadata + pool)
β”‚   └── switch-network.js  # Switch default network (devnet/mainnet)
β”œβ”€β”€ .env.example           # Template for your .env
β”œβ”€β”€ vite.config.js
└── package.json

πŸš€ Step 1 β€” Install Dependencies

Open a terminal in the project folder and install everything:

npm install

This installs both the React frontend dependencies and the Node server dependencies.


πŸ”§ Step 2 β€” Configure Environment (.env)

  1. Copy the example file to create your real .env:

    copy .env.example .env

    (On macOS/Linux use cp .env.example .env.)

  2. Open .env in a text editor (e.g. notepad .env) and fill in at least:

    # Required β€” Pinata JWT for IPFS uploads (logo & metadata)
    PINATA_JWT=your_pinata_jwt_token_here
    
    # Optional β€” custom IPFS gateway (default works fine)
    PINATA_GATEWAY=https://gateway.pinata.cloud/ipfs
    
    # Required β€” Solana RPC endpoint
    SOLANA_RPC=https://solana-mainnet.rpc.extrnode.com

How to get a PINATA_JWT

  1. Go to https://app.pinata.cloud/developers/api-keys (create a free account if needed).
  2. Click New Key β†’ create an API Key (it returns a JWT string).
  3. Copy the JWT and paste it as PINATA_JWT in your .env.

Without PINATA_JWT, logo upload will fail and your token will not show a logo in wallets.

Choosing an RPC

Public RPCs (api.mainnet-beta.solana.com) are heavily rate-limited and often cause fetch failed errors. For reliable results use a free/premium RPC:

For free testing without spending real SOL, set:

SOLANA_RPC=https://api.devnet.solana.com

βœ… Step 3 β€” Test Your Configuration

Before launching the app, verify that IPFS and RPC are working:

# Test IPFS / Pinata upload
npm run test:ipfs

# Test RPC endpoint speed & reachability
npm run test:rpc

Both should finish with a βœ… success message. If either fails, fix the corresponding value in .env and re-run.


▢️ Step 4 β€” Run the App

You need two terminal windows (the API server and the Vite UI run separately).

Terminal 1 β€” start the API server:

npm run server

You should see the server listening (default port 3001).

Terminal 2 β€” start the UI:

npm run dev

Vite will print a local URL. Open it in your browser:

http://localhost:5173

Keep both terminals running while you use the app.


πŸͺ™ Step 5 β€” Create a Token (UI Walkthrough)

  1. Connect your wallet

    • Click Connect Wallet in the top-right.
    • The app will ask for your wallet's base58 secret key (from Phantom/Solflare export). Paste it to allow the server to sign the token-creation transactions.
    • Make sure the connected wallet has enough SOL (see Costs).
  2. Fill in token details

    • Name β€” e.g. My Coin
    • Symbol β€” e.g. MYC
    • Decimals β€” usually 6 or 9 (standard is 9)
    • Supply β€” total number of tokens, e.g. 1000000000
    • Target Price β€” informational only (used for pool math; pool is disabled)
  3. Add a logo

    • Click the logo box and choose a PNG/JPG/GIF/WEBP/SVG file (< 5 MB), or paste an image URL.
    • A preview should appear.
  4. ⚠️ Upload metadata to IPFS (important!)

    • Click Upload Metadata to IPFS.
    • Wait until the IPFS URI appears (you'll see "βœ“ Metadata on IPFS ready").
    • This uploads your logo + name + symbol to IPFS so wallets can display them.
  5. (Optional) Add social/extra metadata

    • Fill Description, Website, Twitter, Telegram, Discord if you want them on-chain.
  6. Calculate cost

    • Click Calculate Cost.
    • The cost breakdown shows the exact SOL (and β‰ˆ USD) required.
  7. Launch

    • Review the pre-flight checklist (wallet connected, name & symbol, logo, metadata, balance).
    • Click πŸš€ Launch Token.
    • Wait β€” the app will:
      1. Create the token mint & associated token account (ATA)
      2. Mint the full supply to your wallet
      3. Upload metadata to IPFS (if not already done)
      4. Attach on-chain Metaplex metadata pointing to IPFS
      5. Revoke mint authority (fixed supply)
    • On success you'll get a toast with the duration and be taken to the History tab.

πŸ”Ž Step 6 β€” Verify Your Token

Check your new token from the terminal using its mint address:

npm run check:token YOUR_MINT_ADDRESS

Or inspect the creation transaction by its signature:

npm run check:tx YOUR_TX_SIGNATURE

You can also view it on an explorer:

Logo and name may take 24–48 hours to appear in some wallets due to caching. If it shows correctly on Solscan, the wallet will catch up.


πŸ’§ Adding Liquidity Manually

Automatic pool creation is disabled in this build. To make your token tradable, add liquidity yourself using one of these services:

Option A β€” Raydium (recommended)

  1. Go to https://raydium.io/liquidity/create/
  2. Connect your wallet
  3. Enter your token mint address, pair with SOL
  4. Set the liquidity amount and create the pool
  5. Cost: ~0.5–2 SOL (OpenBook market + pool)

Option B β€” Pump.fun (easiest)

  1. Go to https://pump.fun
  2. Import your existing token
  3. Add SOL to create liquidity (automated pricing)

Option C β€” Jupiter

  1. Go to https://jup.ag/
  2. Use the liquidity / create-pool flow (CPMM pool)

πŸ› οΈ Available Scripts

Script Description
npm run dev Start the Vite UI dev server (http://localhost:5173)
npm run server Start the Express API server (default port 3001)
npm run build Build the production frontend
npm run preview Preview the production build
npm run test:ipfs Test Pinata/IPFS upload configuration
npm run test:rpc Test RPC endpoint speed & reachability
npm run check:token <mint> Inspect a token's on-chain metadata
npm run check:tx <sig> Inspect a transaction
npm run test:api End-to-end API test
npm run switch:devnet Switch default network to Devnet
npm run switch:mainnet Switch default network to Mainnet

πŸ› Troubleshooting

❌ Token has no name / logo

  • Metadata was not uploaded, or RPC was disconnected.
  • Run npm run check:token YOUR_MINT β€” if you see "No metadata account found", the metadata step was skipped.
  • Make sure you clicked Upload Metadata to IPFS and got the URI before launching.

❌ fetch failed / RPC errors

  • Your RPC endpoint is slow or rate-limited.
  • Run npm run test:rpc and try a different SOLANA_RPC in .env (see Step 2).

❌ Logo not showing in wallet

  • Wait 24–48h (explorer/wallet cache).
  • Confirm it appears on Solscan; if yes, the wallet will update soon.
  • Ensure PINATA_JWT is set and metadata was uploaded.

❌ Pool creation does nothing

  • Expected β€” pool creation is disabled in this build. Add liquidity manually (see above).

πŸ’° Costs

Token creation (no pool)

  • Mainnet: ~0.02–0.05 SOL
  • Devnet: free (for testing)

Includes: rent exemption, mint account, ATA creation, minting, metadata creation, mint-authority revoke.

Adding a liquidity pool (manual)

  • Mainnet: ~0.5–2 SOL (OpenBook market + pool setup)
  • Done manually via Raydium / Pump.fun / Jupiter (see Adding Liquidity Manually).

🌐 Network Switching (Devnet / Mainnet)

To test for free without real SOL, switch to Devnet:

npm run switch:devnet

Then set SOLANA_RPC=https://api.devnet.solana.com in .env and use a Devnet-funded wallet (get free SOL from https://faucet.solana.com).

Switch back to Mainnet with:

npm run switch:mainnet

πŸ”— Useful Links


πŸ“ Notes

  • The liquidity-pool UI option is present but disabled (addPool defaults to false and the checkbox is disabled). All related code remains in the project for future re-enablement.
  • Your token history is stored locally in the browser and is cleared via the Clear History button in the History tab.

πŸ“„ License

MIT


Support the Project

If you find this project useful, consider supporting its development:

Network Address
TON UQBW_LoEhcYPIzZL_dzp-OMsqI5uAwv8p6dXy8wzzkPU-CQQ
BNB / USDT (BEP-20) 0x951acaf8d4b61a000d3b5c697abcabf52973d0cf
TRX TL4Kej6DjJmT9gQ5ghmQcvsEUHPdnNNPyj
SOL 45kAfGyh13bcyYTdbNLkVfBGtMgq4WMijLgdBK9G9ugN

Releases

Packages

Contributors

Languages