開發者工具箱
Bitcoin Developer Tools & Resources
最後更新:2025年
目錄
開發環境
Bitcoin Core
官方參考實現,也是最重要的開發工具。
- Bitcoin Core - 官方下載
- Bitcoin Core GitHub - 原始碼
- Developer Documentation - 開發者文檔
常用 RPC 命令:
1
2
3
4
5
6
7
8
9
10
11
# 獲取區塊鏈資訊
bitcoin-cli getblockchaininfo
# 創建錢包
bitcoin-cli createwallet "devwallet"
# 獲取新地址
bitcoin-cli getnewaddress
# 發送交易
bitcoin-cli sendtoaddress <address> <amount>
Regtest 模式
本地開發和測試的最佳環境:
1
2
3
4
5
6
7
8
# 啟動 regtest 節點
bitcoind -regtest -daemon
# 生成區塊(挖礦)
bitcoin-cli -regtest generatetoaddress 101 <your_address>
# 重置區塊鏈
rm -rf ~/.bitcoin/regtest
Docker 環境
快速啟動開發環境:
1
2
3
4
5
6
7
8
9
10
11
12
# docker-compose.yml
version: '3'
services:
bitcoin:
image: ruimarinho/bitcoin-core
ports:
- "18443:18443"
command:
-regtest
-rpcuser=dev
-rpcpassword=dev
-rpcallowip=0.0.0.0/0
SDK 與函式庫
Rust 生態系統
Rust 是比特幣開發最熱門的語言之一。
rust-bitcoin
- rust-bitcoin - 核心庫
- 用途:交易構建、簽名、解析
1
2
3
use bitcoin::{Address, Network, PublicKey};
let address = Address::p2wpkh(&public_key, Network::Bitcoin)?;
BDK (Bitcoin Dev Kit)
- BDK - 錢包開發工具
- BDK GitHub - 原始碼
- 特點:描述符錢包、PSBT 支援、多平台
1
2
3
4
5
6
7
8
9
10
11
use bdk::{Wallet, database::MemoryDatabase};
use bdk::wallet::AddressIndex;
let wallet = Wallet::new(
"wpkh([fingerprint/84'/0'/0']xpub.../0/*)",
Some("wpkh([fingerprint/84'/0'/0']xpub.../1/*)"),
Network::Bitcoin,
MemoryDatabase::default(),
)?;
let address = wallet.get_address(AddressIndex::New)?;
JavaScript/TypeScript
bitcoinjs-lib
- bitcoinjs-lib - 最流行的 JS 庫
1
2
3
4
5
6
7
const bitcoin = require('bitcoinjs-lib');
// 創建 Taproot 地址
const { address } = bitcoin.payments.p2tr({
internalPubkey: internalPubkey,
network: bitcoin.networks.bitcoin,
});
Noble 密碼學庫
- noble-secp256k1 - 純 JS 橢圓曲線
- noble-hashes - 哈希函數
Python
python-bitcoinlib
- python-bitcoinlib - Peter Todd 維護
1
2
3
4
5
from bitcoin import SelectParams
from bitcoin.wallet import CBitcoinAddress
SelectParams('mainnet')
addr = CBitcoinAddress('bc1q...')
BDK Python
- bdk-python - BDK 的 Python 綁定
Go
Scala
- bitcoin-s - Scala 比特幣庫
- 特點:DLC、Taproot 支援完善
測試網與工具
公共測試網
| 網路 | 用途 | 水龍頭 |
|---|---|---|
| Testnet | 公共測試 | testnet-faucet.com |
| Signet | 更穩定的測試 | signet.bc-2.jp |
| Regtest | 本地開發 | 自己挖礦 |
Polar
閃電網路本地開發的最佳工具。
功能:
- 一鍵啟動 Bitcoin + LN 節點
- 視覺化網路拓撲
- 支援 LND、CLN、Eclair
- 自動開通道和注資
Nigiri
Docker 化的比特幣開發環境。
- Nigiri - GitHub
1
2
3
4
5
6
7
8
# 安裝
curl https://getnigiri.vulpem.com | bash
# 啟動
nigiri start
# 停止
nigiri stop
區塊瀏覽器(本地)
閃電網路開發
LND
- LND - Lightning Labs 實現
- LND API Docs - API 文檔
1
2
3
4
5
6
7
8
# gRPC 連接
lncli getinfo
# 創建發票
lncli addinvoice --amt 1000
# 支付發票
lncli payinvoice <payment_request>
LDK (Lightning Dev Kit)
特點:
- 模組化設計
- 適合嵌入應用
- Rust 實現,多語言綁定
Core Lightning (CLN)
- Core Lightning - Blockstream 實現
- CLN Plugins - 插件生態
WebLN
瀏覽器閃電網路標準。
1
2
3
4
5
// 請求支付
if (typeof window.webln !== 'undefined') {
await window.webln.enable();
const result = await window.webln.sendPayment(paymentRequest);
}
API 服務
區塊鏈數據
| 服務 | 特點 | 免費額度 |
|---|---|---|
| mempool.space API | 開源、可自建 | 無限(自建) |
| Blockstream Esplora | 開源 | 無限(自建) |
| BlockCypher | 商業服務 | 有限 |
| Blockchain.com API | 商業服務 | 有限 |
閃電網路
- Lightning Terminal - Lightning Labs
- Amboss API - 節點數據
價格數據
- CoinGecko API - 免費價格數據
- Kraken API - 交易所 API
學習資源
官方文檔
- Bitcoin Developer Guide - 官方開發者指南
- Learn me a Bitcoin - 視覺化學習
- Bitcoin Optech - 技術週報
互動教程
- Chaincode Labs Seminars - 進階研討會
- Bitcoin Dev Project - 實作專案
- Base58 Workshops - 進階課程
書籍
| 書籍 | 難度 | 語言 |
|---|---|---|
| Mastering Bitcoin | 中高 | 多語言 |
| Programming Bitcoin | 高 | Python |
| Grokking Bitcoin | 入門 | 英文 |
影片
- Jimmy Song’s PB Class - Programming Bitcoin 課程
- Base58 YouTube - 技術教程
社群
- Delving Bitcoin - 技術討論論壇
- Bitcoin StackExchange - Q&A
- Bitcoin Dev Mailing List - 開發者郵件列表
開發最佳實踐
安全考量
- 永遠不要在主網上測試新代碼
- 使用描述符錢包(而非舊式 HD 錢包)
- PSBT 用於多方簽名
- 驗證所有輸入
測試策略
1
單元測試 → 整合測試 → Regtest → Testnet/Signet → 主網
推薦工具鏈
| 用途 | 推薦工具 |
|---|---|
| 錢包開發 | BDK |
| 交易分析 | rust-bitcoin |
| 閃電網路 | LDK |
| 本地測試 | Polar / Nigiri |
| Web 整合 | bitcoinjs-lib |
進階主題
Miniscript
結構化的比特幣腳本子集。
- Miniscript 規範 - Pieter Wuille
- Policy to Miniscript - 編譯器
1
2
3
4
5
# Policy(人類可讀)
or(pk(A), and(pk(B), older(144)))
# Miniscript(機器優化)
or_d(pk(A), and_v(v:pk(B), older(144)))
Output Descriptors
標準化的錢包描述格式。
1
2
3
4
5
6
7
8
# Native SegWit 單簽
wpkh([fingerprint/84'/0'/0']xpub.../0/*)
# Taproot
tr([fingerprint/86'/0'/0']xpub.../0/*)
# 2-of-3 多簽
wsh(sortedmulti(2,xpub1...,xpub2...,xpub3...))
PSBT (BIP 174)
部分簽名比特幣交易的標準格式。
工作流程:
- Creator - 創建交易框架
- Updater - 添加 UTXO 資訊
- Signer - 添加簽名
- Combiner - 合併部分簽名
- Finalizer - 完成交易
- Extractor - 提取最終交易
快速開始模板
Node.js 專案
1
2
3
mkdir btc-project && cd btc-project
npm init -y
npm install bitcoinjs-lib @noble/secp256k1
Rust 專案
1
2
cargo new btc-project && cd btc-project
cargo add bitcoin bdk
Python 專案
1
2
3
4
mkdir btc-project && cd btc-project
python -m venv venv
source venv/bin/activate
pip install python-bitcoinlib
資源索引
GitHub 組織
- bitcoin - Bitcoin Core
- bitcoindevkit - BDK
- rust-bitcoin - Rust 生態
- lightningnetwork - LND
- ElementsProject - Core Lightning