---
title: "如何在 Solana 上製作 memecoin：逐步指南"
description: "了解如何透過 launchpad 或自行開發的方式在 Solana 上製作 memecoin。"
---

# 如何在 Solana 上製作 memecoin：逐步指南

<ImageBlock
  src="https://media.alchemy.com/1766155069-memecoins-on-solana.png"
  alt="貓咪主題 memecoin 插圖，用於 Solana memecoin 指南"
  width={3840}
  height={1800}
  priority
/>

如果你剛接觸 Solana，memecoin 是一種低風險的入門方式。這個領域喧鬧又混亂，但這樣的活動會迫使你去接觸真正的基礎構件，像是 token mint、metadata、錢包和 RPC。而在這個過程中，你能立即看到成果。打造 memecoin 是理解 Solana 應用在實際環境中如何運作的簡單途徑。

在本教學中，我們會展示兩種在 Solana 上打造 memecoin 的實務做法：

1. **無程式碼[啟動平台](https://www.alchemy.com/dapps/best/crypto-launchpads)**（最快的發行方式）
1. **DIY 鑄造**，使用 Solana 的 SPL 工具（適合想完全掌控流程的開發者）

## 什麼是 Solana 上的 memecoin？

在 Solana 上，memecoin 通常只是一個標準的 SPL 同質化代幣（fungible token），具備名稱、代號、圖片和發行計畫。技術上它並沒有什麼特別之處——同樣的 SPL token 機制也被錢包、DeFi 應用和正式的消費型專案所使用。

memecoin 之所以顯得特別，關鍵在於它們的_使用方式_。Solana 低廉的手續費和快速的交易，讓鑄造代幣、頻繁交易和實驗性發行變得容易，這也是為什麼 memecoin 在活躍期間佔了網路上大部分的代幣建立與交易活動。

對開發者來說，這種活動正是重點所在。memecoin 是學習 Solana 核心基礎元件（SPL token、metadata、錢包與發行流程）的簡單、低風險方式，不需要先打造一個完整的應用程式。

## 你在 Solana 上實際建立的是什麼

一個 Solana token 有一個 mint account（代幣的識別碼），使用者則透過 token account（通常稱為「Associated Token Account」，或 ATA）持有餘額。

你需要在以下兩者間做選擇：

- [SPL Token program](https://solana.com/docs/tokens/basics)
- [Token-2022](https://www.solana-program.com/docs/token-2022) / Token Extensions，如果你想要內建功能（例如 metadata extension、轉帳手續費、其他控制機制）。

對大多數 memecoin 來說：舊版 SPL token 仍然是相容性最高、最安全的預設選項，能確保最大程度的錢包／交易所相容性。

## 選項一：透過 memecoin 啟動平台發行（無程式碼）

如果你的目標是「盡快讓代幣上線並可交易」，第三方啟動平台會替你處理鑄造和初期交易的使用者體驗。這個選項有多個啟動平台可以選擇。

### Pump.fun

<ImageBlock
  src="https://media.alchemy.com/1766156582-pump.png"
  alt="Pump 代幣建立頁面的截圖"
  width={2188}
  height={1658}
/>

[Pump.fun](https://pump.fun/) 的訴求基本上是「無需準備流動性即可發行可立即交易的代幣」。使用 Pump.fun 的典型流程如下：

- 為你的代幣選擇名稱、代號和圖片
- 支付建立手續費
- 代幣會依照平台的機制開始交易

### Raydium LaunchLab

<ImageBlock
  src="https://media.alchemy.com/1766156642-raydium.png"
  alt="Raydium 代幣頁面的截圖"
  width={2188}
  height={1540}
/>

[Raydium LaunchLab](https://raydium.io/launchpad/) 提供類似的建立代幣流程（你只需加入名稱、代號、圖片和社群連結）。它們提供兩種建立與發行新代幣的模式：簡化的 JustSendIt 模式，以及可完全自訂的 Advanced Mode。Advanced Mode 讓你對代幣的參數有完整的控制，更適合需要特定代幣經濟學或更複雜設定的專案。

### Bonk.fun

<ImageBlock
  src="https://media.alchemy.com/1766156657-bonk.png"
  alt="BONK 網站的截圖"
  width={3406}
  height={1228}
/>

[BONK.fun](https://bonk.fun/) 是另一個 Solana memecoin 啟動平台，在 2025 年獲得許多關注。這個平台透過社群驅動的激勵機制與透明度，取得了可觀的市場佔有率。

## 選項二：使用 SPL 工具自行建立代幣

如果你想繞過這些啟動平台，也可以完全自行建立 memecoin。要做到這點，你需要完成以下步驟。

### 建立 Solana SPL token

如果你曾經鑄造過 SPL token，然後發現它在錢包中顯示為「Unknown token」（或沒有圖示），原因就在這裡：單靠 SPL mint 本身並不會攜帶完整的 metadata。

在 Solana 上，同質化代幣是透過 SPL Token program 建立的，而那些「美觀」的欄位（例如名稱、代號、圖片、JSON URI）通常是透過 [Metaplex Token Metadata program](https://developers.metaplex.com/smart-contracts/token-metadata) 附加上去的。

在本教學中，你將使用以下工具鑄造一個同質化 SPL token：

- [Umi](https://developers.metaplex.com/dev-tools/umi/metaplex-umi-plugins)（Metaplex 的現代化 client framework）來建立／簽署／傳送交易
- mpl-token-metadata 輔助工具，在同一流程中建立 mint 和 metadata
- [Alchemy Solana RPC](https://www.alchemy.com/solana) 作為你的網路連線
- 你現有的 [Phantom 錢包](https://www.alchemy.com/dapps/phantom) 私鑰（不需要產生新的 keypair）

### 你在鏈上實際在做什麼

當你執行鑄造腳本時，你並不只是「建立一個代幣」——你其實是在建立一組彼此協同運作的鏈上帳戶，讓錢包和瀏覽器知道該如何解讀它。

1. **Mint account**（SPL Token mint）：這是定義你代幣的核心鏈上帳戶。當人們談論 Solana 上的「token address」時，通常指的就是這個 mint account。這也是你要貼到 [Solana Explorer](https://www.alchemy.com/dapps/list-of/block-explorers-on-solana) 裡的地址。這個帳戶儲存的內容包括：

1. Decimals：代幣可以細分的程度（例如，8 位小數代表 1.0 個代幣 = 100,000,000 個基本單位）。
1. Mint authority：有權鑄造更多供應量的金鑰。
1. Freeze authority（選用）：可以凍結 token account 的金鑰。
1. **Metadata account**（Metaplex Token Metadata PDA）：SPL Token program 本身並不儲存名稱、代號或圖片。這些資訊存放在由 Metaplex Token Metadata program 建立的另一個 metadata account 中。這個帳戶是一個 Program Derived Address（PDA），是從你的 mint 地址以確定性方式推導出來的。這代表錢包不需要一個登記表或資料庫——它們可以從 mint 推導出 metadata 地址，檢查它是否存在，如果存在就讀取它。這就是像 Phantom 這樣的錢包能自動找到並顯示 token metadata 的原理。
1. **鏈下 metadata**（URI → JSON）：metadata account 並不會直接儲存所有細節。相反地，它儲存的是指向一個託管在鏈下（通常在 IPFS 上）的 JSON 檔案的 URI。這個 JSON 遵循一個標準的結構（名稱、代號、描述、圖片），瀏覽器和錢包都知道如何取得並呈現它。這讓鏈上資料維持精簡，同時仍能提供豐富的代幣資訊。

有了這些背景知識，下面的程式碼應該就更容易理解：你在建立 mint、為它附加一個 metadata account，並讓那個 metadata 指向一個錢包可以讀取的 JSON 檔案。

現在，讓我們來打造這個 memecoin。

## 步驟 1：專案設定（TypeScript ＋ 依賴套件）

首先，我們會建立一個新的專案目錄，並初始化一個 Node.js 專案。這會給我們一個乾淨的工作空間，以及一個用來管理依賴套件的 package.json 檔案。

<CodeSnippet language="bash" code={`mkdir CATY
cd CATY

npm init -y
npm i -D typescript ts-node @types/node
npx tsc --init`} />

- `npm init -y` 使用預設設定建立一個基本的 Node 專案。
- typescript 讓我們可以撰寫具型別的 JavaScript，這在使用 Solana 和 Metaplex SDK 時很有幫助。
- `ts-node` 讓我們可以直接執行 TypeScript 檔案，不需要另外的建置步驟。
- `npx tsc --init` 產生一個 tsconfig.json，用來控制 TypeScript 的編譯方式。

接著，更新 `tsconfig.json` 來啟用之後會用到的幾個選項：

<CodeSnippet
  language="json"
  code={`{
  "compilerOptions": {
    "esModuleInterop": true,
    "resolveJsonModule": true
  }
}`}
/>
- `esModuleInterop` 讓我們可以使用現代化的 import 語法搭配常見的 Node
套件。- `resolveJsonModule` 讓我們可以直接匯入 .json 檔案，這在處理設定和
metadata 時很實用。

接著我們要安裝與 Solana 和 Metaplex 互動所需的函式庫：

<CodeSnippet
  language="bash"
  code={`npm i @solana/web3.js@1 \\\\
  @metaplex-foundation/umi \\\\
  @metaplex-foundation/umi-bundle-defaults \\\\
  @metaplex-foundation/mpl-token-metadata \\\\
  bs58 dotenv`}
/>
每個套件的用途如下：

- `@solana/web3.js` 是與 Solana 網路互動的核心 JavaScript SDK。
- `umi` 是 Metaplex 用來建立、簽署和傳送交易的 client framework。
- `umi-bundle-defaults` 提供常見的預設值（例如 RPC 處理），讓我們不需要手動接好一切。
- `mpl-token-metadata` 包含建立並附加 token metadata 的輔助工具。
- `bs58` 用來解碼 Phantom 以 base58 編碼的私鑰。
- `dotenv` 讓我們可以安全地從 .env 檔案載入機密資訊（RPC URL、私鑰）。

最後，我們要建立整個教學中會用到的檔案：

<CodeSnippet
  language="bash"
  code={`touch mint.ts token.json .env .gitignore`}
/>
- `mint.ts` 會包含建立並鑄造代幣的腳本。- `token.json` 會保存鏈下
metadata（名稱、代號、圖片）。- `.env`
儲存機密值，像是你的 RPC URL 和私鑰。- `.gitignore`
確保機密資訊不會被提交到版本控制系統。

讓我們在 `.gitignore` 加入以下內容：

<CodeSnippet
  language="javascript"
  code={`node_modules
.env`}
/>
這可以避免你的依賴套件和私鑰不小心被提交到 Git。

## 步驟 2：在 .env 中加入 Alchemy RPC ＋ Phantom 私鑰

### Alchemy RPC

<ImageBlock
  src="https://media.alchemy.com/1766156725-alchemy_rpc.png"
  alt="Alchemy 儀表板的截圖"
  width={746}
  height={914}
/>

Alchemy 提供快速可靠的 Solana RPC 端點，涵蓋 devnet 和 mainnet。測試期間請使用 devnet。要使用我們的端點，你需要一組（免費！）API 金鑰。你只需要[前往我們的儀表板](https://dashboard.alchemy.com/)，在儀表板上建立一個新的 Solana app。請確認你開啟了 Node API 和 Webhooks 服務，並啟用 devnet。接著，只要把你的 API 金鑰或端點 URL 複製貼上到 .env 檔案中即可。

### 匯出 Phantom 私鑰

Phantom 官方的[說明文件](https://help.phantom.com/hc/en-us/articles/25334064171795-How-to-view-your-recovery-phrase-or-private-key-in-Phantom)展示了查看／複製私鑰的確切流程：簡單來說，你只需要前往 Settings，然後「Manage Accounts」，接著「Show Private Key」，再「Choose network」，最後點選 continue 即可。

完成後，你可以設定你的 .env：

<CodeSnippet
  language="json"
  code={`SOLANA_RPC_URL=https://solana-devnet.g.alchemy.com/v2/YOUR_ALCHEMY_KEY
PHANTOM_PRIVATE_KEY_BASE58=PASTE_FROM_PHANTOM
TOKEN_METADATA_URI=`}
/>
關於安全性的提醒：這是「腳本中的熱錢包」模式。用於 devnet 實驗是可以的，但如果要用在
mainnet，你應該使用專用的錢包，並避免把金鑰貼到隨意的專案中。

## 步驟 3：把圖片與 metadata 上傳到 IPFS（Pinata）

只在你的電腦上有一個 token.json 檔案是不夠的。Solana 程式無法讀取你本機檔案系統中的檔案，而直接把大量 metadata 存在鏈上的成本也會很高。因此，Token Metadata program 會儲存一個指向公開可存取的 JSON 檔案的 URI，該檔案通常託管在鏈下（常見於 IPFS）。錢包和瀏覽器會透過這個 URI 取得該 JSON，藉此顯示你代幣的名稱、代號和圖片。

你可以使用任何 IPFS 服務來達成這個目的。在本教學中我使用的是 [Pinata](https://pinata.cloud/)。至於運作方式：你上傳的檔案會得到一個 CID（內容識別碼），你可以透過 gateway URL 取得它。[Pinata 文件](https://docs.pinata.cloud/quickstart)有說明 gateway 和取得檔案的方式。

實際操作上，你首先要建立 token.json：

<CodeSnippet
  language="json"
  code={`{
  "name": "Cat with Hat",
  "symbol": "CATY",
  "description": "My Cat with Hat",
  "image": "https://YOUR_GATEWAY/ipfs/YOUR_IMAGE_CID"
}`}
/>
這裡的操作順序如下：

- 上傳你的圖片 → 複製 gateway URL。
- 把那個 URL 貼到 token.json.image 中
- 上傳更新後的 token.json → 複製這個 JSON 的 gateway URL。
- 把那個 JSON URL 放進 .env：

<CodeSnippet
  language="json"
  code={`TOKEN_METADATA_URI=https://gateway.pinata.cloud/ipfs/<YOUR_TOKEN_JSON_CID>`}
/>
你可以使用自己的圖片或 metadata，或使用下方的範例圖片。

<ImageBlock
  src="https://media.alchemy.com/1766156740-cat.webp"
  alt="戴帽子的貓，memecoin 代幣中繼資料範例圖片"
  width={2613}
  height={3000}
/>

## 步驟 4：用 Devnet SOL 為錢包儲值

鑄造和建立帳戶需要花費 SOL（即使在 devnet 上也是如此）。好消息是 devnet 的 SOL 是免費的。要取得一些，你可以使用 Solana 官方的 [devnet 水龍頭](https://faucet.solana.com/)來取得測試用 SOL。

<ImageBlock
  src="https://media.alchemy.com/1766156769-solana.png"
  alt="Solana faucet 的截圖"
  width={2608}
  height={1456}
/>

## 步驟 5：透過 Alchemy RPC 鑄造代幣（umi ＋ token metadata）

以下是完整的 `mint.ts` 腳本，其中內建了幾個重要細節：

- 它會把 Phantom 的 base58 私鑰轉換成 Solana Keypair（Phantom 匯出的資料可能是 64 位元組；有些格式則是 32 位元組）。
- 它會告訴 Umi 使用你的 Alchemy RPC URL。根據 Umi 的文件說明：你傳給 createUmi(...) 的端點，就是用來執行 RPC 呼叫的端點。
- 它會正確印出交易簽章（base58 格式），讓你的瀏覽器連結能正常運作。

把以下內容複製貼上到你的 `mint.ts`：

<CodeSnippet language="typescript" code={`import "dotenv/config";
import bs58 from "bs58";
import { Keypair } from "@solana/web3.js";

import {
  mplTokenMetadata,
  createAndMint,
  TokenStandard,
} from "@metaplex-foundation/mpl-token-metadata";
import {
  createSignerFromKeypair,
  generateSigner,
  percentAmount,
  signerIdentity,
} from "@metaplex-foundation/umi";
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";

const rpcUrl = process.env.SOLANA_RPC_URL!;
const pk58 = process.env.PHANTOM_PRIVATE_KEY_BASE58!;

if (!rpcUrl) throw new Error("Missing SOLANA_RPC_URL");
if (!pk58) throw new Error("Missing PHANTOM_PRIVATE_KEY_BASE58");

// Umi uses this RPC endpoint for all subsequent RPC calls. [oai_citation:13‡developers.metaplex.com]

const umi = createUmi(rpcUrl);

// 1) Phantom base58 private key -> Solana Keypair.
// Phantom commonly exports a 64-byte secretKey; some tools export 32 bytes.
const raw = bs58.decode(pk58);
const solanaKeypair =
raw.length === 64 ? Keypair.fromSecretKey(raw)
: raw.length === 32 ? Keypair.fromSeed(raw)
: (() => { throw new Error(\`Unexpected key length: \${raw.length}\`); })();

// 2) Solana Keypair -> Umi signer + identity.
const umiKeypair = umi.eddsa.createKeypairFromSecretKey(solanaKeypair.secretKey);
const signer = createSignerFromKeypair(umi, umiKeypair);
umi.use(signerIdentity(signer));

// 3) Add Token Metadata program helpers.
// Token Metadata attaches data to fungible and non-fungible mints. [oai_citation:14‡GitHub]
umi.use(mplTokenMetadata());

// --- token config ---
const NAME = "Cat with Hat";
const SYMBOL = "CATY";
const METADATA_URI = process.env.TOKEN_METADATA_URI!;
const decimals = 8;
const supplyTokens = 1_000_000n;
const amountBaseUnits = supplyTokens \* 10n ** BigInt(decimals);

if (!METADATA_URI) throw new Error("Missing TOKEN_METADATA_URI");

(async () => {
// generateSigner creates a new keypair for the mint account.
// Your Phantom wallet pays fees and becomes the authority by default.
const mint = generateSigner(umi);

const res = await createAndMint(umi, {
mint,
authority: umi.identity,
name: NAME,
symbol: SYMBOL,
uri: METADATA_URI,
sellerFeeBasisPoints: percentAmount(0),
decimals,
amount: amountBaseUnits,
tokenOwner: umi.identity.publicKey,
tokenStandard: TokenStandard.Fungible,
}).sendAndConfirm(umi);

// Umi returns signatures as bytes; Explorer expects base58.
const sigBase58 =
typeof res.signature === "string" ? res.signature : bs58.encode(res.signature);

console.log("Mint address:", mint.publicKey.toString());
console.log("Tx:", \`https://explorer.solana.com/tx/\${sigBase58}?cluster=devnet\`);
})();`} />
讓我們執行這個腳本——當腳本成功執行完畢後，memecoin token 就會被鑄造出來。輸出結果會包含 mint 地址，以及一個可以在鏈上驗證的交易連結。

<CodeSnippet language="bash" code={`npx ts-node mint.ts`} />
如果一切順利，恭喜——你剛剛在 Solana 上鑄造出你自己的 memecoin token 了。

<ImageBlock
  src="https://media.alchemy.com/1766156798-mint_success.png"
  alt="mint 成功回應的截圖"
  width={1288}
  height={154}
/>

## 步驟 6：在 Solana explorer 上驗證這個 mint

複製腳本印出的 Mint address，貼到 [Solana Explorer](https://explorer.solana.com/?cluster=devnet) 中。請確認你使用的是 devnet。

🎉 恭喜——你已經鑄造出屬於自己的代幣（你的「CATY」），初始供應量固定為 1,000,000，並且已接好 metadata。

<ImageBlock
  src="https://media.alchemy.com/1766156815-explorer.png"
  alt="顯示該 memecoin 的 Solana Explorer 截圖"
  width={2552}
  height={1364}
/>

## 結論

就是這樣——你現在已經看過在 Solana 上發行 memecoin 的兩種做法。如果你想要最快的方式，像 pump.fun、[Raydium](https://www.alchemy.com/dapps/raydium) LaunchLab 或 BONK.fun 這樣的啟動平台會替你處理大部分的設定工作。如果你想要完全的掌控權，自行鑄造 SPL token 能讓你更深入了解 Solana token 在底層實際上是如何運作的。

無論選哪一種方式，你現在都已經具備能力，可以隨心所欲地建立任意數量的 memecoin。如果你想繼續深入，可以參考 [Alchemy 的 Solana 文件](https://www.alchemy.com/docs/solana)和開發者指南，進一步了解 Solana RPC、錢包和可用於正式環境的工具，並探索關於打造 Solana 應用程式、使用 SPL token 以及處理真實鏈上流量的教學。

## 常見問題

### 什麼是 Solana 上的 memecoin？

Solana 上的 memecoin 是一個標準的 SPL 同質化代幣，具備名稱、代號、圖片和發行計畫。技術上它並沒有什麼特別之處，同樣的 SPL token 機制也被錢包、DeFi 應用和正式的消費型專案所使用。

### 在 Solana 上建立 memecoin 有哪兩種主要方式？

你可以使用像 Pump.fun、Raydium LaunchLab 或 BONK.fun 這樣的無程式碼啟動平台，以最快速度發行；或者你也可以使用 Solana 的 SPL 工具自行鑄造代幣，以完全掌控整個流程。

### 建立 memecoin 需要什麼錢包？

你需要一個支援 Solana 的錢包，像是 Phantom、Backpack 或 [Solflare](https://www.alchemy.com/dapps/solflare)，並存入少量 SOL 來支付交易手續費。

### 在 Solana 上建立 memecoin 需要多少費用？

在 Solana 上建立代幣的成本極低，基本的代幣鑄造和帳戶建立，無論在 devnet 或 mainnet 上，手續費通常不到 1 美元（以 SOL 計）。

### SPL Token 和 Token-2022 有什麼差別？

SPL Token 是舊版的 token program，是相容性最高、最安全的預設選項，能確保最大程度的錢包和交易所相容性。Token-2022（Token Extensions）提供內建功能，像是 metadata extension 和轉帳手續費，但普及度可能不如前者。

### 我需要為我的 memecoin 加入 metadata 嗎？

需要，metadata（名稱、代號、圖片、描述）是透過 Metaplex Token Metadata program 儲存的，通常會託管在鏈下的 IPFS 上。這讓錢包和瀏覽器能顯示你代幣的資訊，而不是顯示成「Unknown token」。

### Umi 是什麼？為什麼用它來鑄造代幣？

Umi 是 Metaplex 用來在 Solana 上建立、簽署和傳送交易的現代化 client framework。它簡化了在同一流程中建立代幣並附加 metadata 的過程。

### 鑄造 memecoin 時會建立哪些帳戶？

你會建立一個 mint account（代幣的核心識別碼，儲存 decimals 和各種 authority）、一個 metadata account（一個 PDA，儲存名稱、代號和 URI），以及鏈下 metadata（一個存放在 IPFS 上、包含詳細代幣資訊的 JSON 檔案）。

### 我可以在正式發行到 mainnet 前先測試代幣建立流程嗎？

可以，你可以使用 [Solana devnet](https://www.alchemy.com/overviews/solana-devnet) 來測試。你可以從 Solana 官方的 devnet 水龍頭取得免費的 devnet SOL，用來支付實驗過程中的交易費用。
