Vanilla Lab

← 回文章列表

60 行 Python 發一顆幣:鵝肉幣完整工程紀錄(含全部踩坑清單)

2026-09-03

前情提要:《我看完孬晨的慘案後,決定自己發一顆幣》記錄了鵝肉幣 $EROU 的誕生。這篇是工程篇——把每一個技術決策、每一個踩過的坑攤開。讀完你會發現:發幣難的不是那 60 行程式,是湊齊能讓它跑起來的 40 個決策。



結論

  • 發幣程式本體只有 60 行 Python,依賴只要三個套件,成本一餐鵝肉錢——難的是周邊:RPC 限流、水龍頭、metadata、流動性池,每一步都有文檔不會寫的坑。

  • 官方文檔給的是地圖,這篇給的是 GPS 軌跡:真實花費的時間、真實遇到的錯誤訊息、真實的繞道方案。

  • 全部程式碼與腳本可直接照抄,發一顆自己的幣從零到上線,一個晚上夠用。

第 0 步:發幣前的四個決策

寫程式之前要先回答四個問題,官方文檔不會幫你選:

  1. 哪條鏈?Solana。理由:鑄幣租金 ~0.0015 SOL(約 NT$5)、交易費 0.000005 SOL、三秒確認。同樣的事在以太坊光 gas 就夠吃一個月。幣安選它、Jupiter 索引它、錢包原生支援它。

  2. SPL 還是 Token-2022?SPL(舊制)。Token-2022 有新功能但生態支援不全——幣安 Alpha、部分錢包還沒跟進。迷因幣要的是「最大相容性」,不是新功能。

  3. 幾位小數、多少總量?9 位小數、10 億枚,跟 SOL/主流幣對齊。這個純粹是習俗,但習俗就是共識的一部分。

  4. devnet 先練,mainnet 再打。devnet 免費、程式碼一模一樣,只改一行 RPC URL。先在測試網炸掉所有錯誤,再到主網花真錢。



第 1 步:環境(十分鐘)

python3 -m venv ~/coin-venv
~/coin-venv/bin/pip install solders spl requests base58

三個套件。solders 負責簽章(Rust 寫的,快),spl 是 Solana 官方 Token 程式的指令封裝,requests 打 JSON-RPC。沒有 npm、沒有 300 個依賴。

坑:solana-py(另一個同類套件)版本紊亂,新版把 API 全改了,網路上的教學一半是舊版一半是新版,抄來抄去會撞到 unexpected keyword argument。直接用 solders + spl 就好,不要混裝。


第 2 步:錢包(一行)

from solders.keypair import Keypair
owner = Keypair()
open("wallet.json", "w").write(owner.to_json())

私鑰就是 64 bytes,存成 JSON。這個檔案 = 你的銀行帳戶+印章,誰拿到誰就是你。放本機、別 commit、別截圖。


第 3 步:燃料(第一個大坑)

devnet 要領免費 SOL:

requests.post("https://faucet.devnet.solana.com",
              json={"pubkey": addr, "lamports": 2_000_000_000})

坑:這個水龍頭一天領 2 SOL,撞到 429 就要等明天;官方 faucet.solana.com 要 GitHub 登入;ISP 或機房 IP 可能整段被擋。我們的解法是繞到 VPS 用不同 IP 領——requestAirdrop 只要帶地址,從哪台機器呼叫都行。這招文檔不會教。



第 4 步:60 行主體(核心)

一筆交易做四件事:

tx = Transaction.new_signed_with_payer([
    # 1. 開一個 82 bytes 的帳戶給 mint 住(租金 ~0.0015 SOL)
    create_account(CreateAccountParams(
        from_pubkey=owner.pubkey(), to_pubkey=mint, space=82,
        lamports=rent, owner=TOKEN_PROGRAM_ID)),
    # 2. 初始化 mint:9 位小數、鑄幣權限 = 我
    initialize_mint(InitializeMintParams(
        decimals=9, program_id=TOKEN_PROGRAM_ID,
        mint=mint, mint_authority=owner.pubkey(),
        freeze_authority=owner.pubkey())),
    # 3. 開自己的持幣帳戶(ATA)
    create_associated_token_account(owner.pubkey(), owner.pubkey(), mint),
    # 4. 鑄 10 億枚進自己口袋
    mint_to(MintToParams(
        program_id=TOKEN_PROGRAM_ID, mint=mint, dest=ata,
        mint_authority=owner.pubkey(), amount=1_000_000_000 * 10**9)),
], owner.pubkey(), [owner, mint_kp], blockhash)

送出後兩秒確認。到此為止幣已經存在——但還是個沒名字沒臉的空殼,Solscan 上只有一串地址。接下來才是文檔不寫的部分。



第 5 步:metadata——讓幣有臉(第二個大坑)

Metaplex 的 metadata 程式要手刻 borsh 序列化。我們手刻了兩輪,兩輪都被鏈上退回 InvalidInstructionData——DataV2 結構的 option 欄位(creators、collection、uses)少一個 byte 都是這個錯,錯誤訊息不會告訴你哪裡錯。

正解:別手刻,用官方 UMI SDK(JavaScript):

npm install @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/mpl-token-metadata

createMetadataAccountV3 一個函式解決,name/symbol/uri 丟進去就上鏈。uri 指向一個 JSON(自己放在任何 https 主機),內容含名稱、描述、logo 圖片網址、屬性。Solscan 抓到這個 JSON 就會顯示幣名和圖片。

坑:改 logo 圖之後記得換檔名——CDN 快取會讓你看到舊圖,以為沒生效。



第 6 步:流動性池——讓幣能被買(第三個大坑)

Raydium CPMM(V7)是最省的選擇:沒有 CLMM 的複雜度,任何人用 Jupiter 就能買到。用 raydium-sdk-v2:

const feeConfigs = await raydium.api.getCpmmConfigs();
const feeConfig = feeConfigs.find((c) => c.index === 0); // 0.25% 費率
const { execute, extInfo } = await raydium.cpmm.createPool({
  programId: CREATE_CPMM_POOL_PROGRAM,
  poolFeeAccount: CREATE_CPMM_POOL_FEE_ACC,
  mintA, mintB,
  mintAAmount: new BN("50000000"),      // 0.05 SOL
  mintBAmount: new BN("500000000000000"), // 50 萬 EROU
  startTime: new BN(0),  // 立即開放
  feeConfig, txVersion: TxVersion.V0,
});

三個坑:

  • 建池 protocol fee 0.15 SOL——固定,付給 Raydium 協議,錢包餘額不夠會在最後一步才報錯(我們親測)。

  • 初始價 = 兩邊數量比,掛錯價格機器人幾秒內套利走你,掛之前算清楚。

  • 水池開完 10 分鐘內 Jupiter 自動索引,之後全世界都能買。幣安 Alpha 索引也只要一天。



第 7 步:善後——燒掉權限(道德加分題)

# mint authority + freeze authority 設為 None = 永久放棄
set_authority(SetAuthorityParams(
    account=mint, authority=AuthorityType.MINT_TOKENS,
    current_authority=owner.pubkey(), new_authority=None))

放棄後:永遠無法增發、無法凍結任何人的幣。RugCheck 的紅燈、幣安安全檢測的風險項直接消失。總量 10 億成為數學事實。迷因幣的世界裡,「我發誓不會亂印」沒人信,「鏈上驗證無法增發」才是護城河。



總帳單

項目

成本

0.274 SOL(買幣含緩衝)

約 NT$1,000

鑄幣租金+手續費

~0.012 SOL

metadata

~0.01 SOL

Raydium 建池費

0.15 SOL(固定)

池底

0.05 SOL + 50 萬枚

合計

約 NT$1,100



踩坑清單(文檔不會寫的)

  1. solana-py / solders API 版本地獄——撞錯誤先確認簽名,別照舊教學抄

  2. 水龍頭 429——換 IP、換機器、requestAirdrop 從哪叫都行

  3. borsh 手刻序列化——別,用官方 SDK

  4. 主網/測試網的 Blockhash 是 Hash 物件不是字串

  5. 建池費在最後一步才爆——餘額要多留 0.15 SOL

  6. 圖片/JS 改了沒生效——CDN 快取,換檔名

  7. 本機 DNS 負快取——dig 正常 curl 卻掛,flush cache



結論

發幣的技術總量:60 行 Python + 20 行 JS + 一晚的坑。文檔提供零件,這篇提供組裝順序和地雷圖。看不懂程式碼沒關係——重點是理解「門檻在哪」:不在程式,在沒人整理過的坑。

至於要不要發?鵝肉幣的答案印在官網上:沒有投資價值。這篇是工程紀錄,不是教學勸誘——你發幣你負責,我發鵝肉幣是因為我喜歡吃鵝肉。

(本文為技術實驗記錄,不構成任何投資建議。鵝肉幣沒有投資價值,你要買我也不反對,歡迎來鵝肉城聊幣。鵝肉幣與鵝肉城活海鮮無任何商業關係或官方授權,僅為發行人個人喜好的台灣美食文化致敬。)


౨ৎ Anthony 不負責任編輯 ~

留言 (0)