比特幣測試網完整指南
深入介紹比特幣測試網路(Testnet)和回歸測試網路(RegTest)的使用方法和最佳實踐。
比特幣測試網完整指南
深入介紹比特幣測試網路(Testnet)和回歸測試網路(RegTest)的使用方法和最佳實踐。
測試網路類型
比特幣測試網對比
| 特性 | Testnet | RegTest | Signet |
|---|---|---|---|
| 共識規則 | 與主網相同 | 可自訂 | 與主網相同 |
| 難度調整 | 降低 | 可設定 | 動態調整 |
| 挖礦時間 | 10分鐘 | 即時 | 10分鐘 |
| 用途 | 測試應用 | 本地開發 | 標準化測試 |
| 幣種代碼 | TBTC | RBTC | TBTC |
| 社群活躍度 | 高 | 低 | 中 |
Testnet 完整指南
連接 Testnet
使用 Bitcoin Core
# 啟動 testnet 節點
bitcoind -testnet -daemon
# 或使用 docker
docker run -d --name bitcoin-testnet \
-p 18332:18332 \
-p 18333:18333 \
ruimarinho/bitcoin-core:latest \
-testnet
# 命令列工具前綴
bitcoin-cli -testnet getblockcount
使用公共節點
# 透過 RPC 連接公共 testnet 節點
curl --user testuser:testpass \
--data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockchaininfo", "params": []}' \
-H 'content-type: text/plain;' \
https://blockstream.info/testnet/api/
獲取 Testnet 比特幣
龍頭網站
- Testnet 龍頭
- https://testnet-faucet.mempool.co/
- https://faucet.testnet3.confirmations.io/
- https://bitcoinfaucet.uo1.net/
使用 Bitcoin Core 挖礦
# 產生區塊(需要錢包)
bitcoin-cli -testnet createwallet "testwallet"
# 挖礦到地址
bitcoin-cli -testnet getnewaddress "mining"
# 挖礦(生成區塊)
bitcoin-cli -testnet generatetoaddress 101 <你的地址>
Testnet 節點列表
| 節點 | 地址 | 端口 |
|---|---|---|
| Blockstream | testnet-bitcoin.blockstream.info | 18333 |
| Bitcoin Jungle | testnet.junglist.info | 18333 |
| Tatooine | tatooine.cyberhash.io | 18333 |
RegTest 回歸測試
啟動 RegTest
# 本地啟動
bitcoind -regtest -daemon
# docker
docker run -d --name bitcoin-regtest \
-p 18443:18443 \
-p 18444:18444 \
ruimarinho/bitcoin-core:latest \
-regtest
基本操作
# 創建錢包
bitcoin-cli -regtest createwallet mywallet
# 獲取地址
bitcoin-cli -regtest getnewaddress
# 挖礦(立即確認)
bitcoin-cli -regtest generate 101
# 查看餘額
bitcoin-cli -regtest getbalance
自動化測試腳本
#!/bin/bash
# 初始化
bitcoin-cli -regtest createwallet test
# 創建多個地址
ADDR1=$(bitcoin-cli -regtest getnewaddress)
ADDR2=$(bitcoin-cli -regtest getnewaddress)
# 挖礦獲得資金
bitcoin-cli -regtest generate 101
# 發送交易
TXID=$(bitcoin-cli -regtest sendtoaddress $ADDR2 10)
# 確認交易
bitcoin-cli -regtest generate 1
# 檢查餘額
echo "餘額: $(bitcoin-cli -regtest getbalance)"
Signet 標準化測試
啟動 Signet
# 使用公共 Signet
bitcoind -signet -daemon
# 或自訂 Signet
bitcoind -signet -signetChallenge=... -daemon
Signet 常用節點
# 公共 Signet DNS 種子和節點
signet.btc.lndexp.io
測試網路實戰
建立測試環境
Docker Compose 設定
version: '3.8'
services:
bitcoin-regtest:
image: ruimarinho/bitcoin-core:latest
environment:
- BITCOIN_USER=testuser
- BITCOIN_PASS=testpass
ports:
- 18443:18443
- 18444:18444
volumes:
- bitcoin-regtest:/home/bitcoin/.bitcoin
command: -regtest -server -rpcuser=testuser -rpcpass=testpass -prune=550 -blockmaxweight=4000000
測試錢包配置
const config = {
network: 'regtest',
rpc: {
host: 'localhost',
port: 18443,
user: 'testuser',
pass: 'testpass'
},
wallet: 'testwallet'
};
單元測試範例
使用 Python 測試
import unittest
from bitcoinrpc.authproxy import AuthServiceProxy
class TestBitcoinFunctions(unittest.TestCase):
def setUp(self):
self.rpc = AuthServiceProxy("http://testuser:testpass@localhost:18443/wallet/testwallet")
def test_create_address(self):
addr = self.rpc.getnewaddress()
self.assertIsNotNone(addr)
self.assertTrue(addr.startswith('bcrt1') or addr.startswith('2'))
def test_get_balance(self):
balance = self.rpc.getbalance()
self.assertGreaterEqual(balance, 0)
def test_send_transaction(self):
addr = self.rpc.getnewaddress()
txid = self.rpc.sendtoaddress(addr, 1.0)
self.assertIsNotNone(txid)
if __name__ == '__main__':
unittest.main()
使用 JavaScript 測試
const assert = require('assert');
const { BitcoinRpc } = require('./bitcoin-rpc');
const rpc = new BitcoinRpc({
host: 'localhost',
port: 18443,
user: 'testuser',
pass: 'testpass',
wallet: 'testwallet'
});
describe('Bitcoin Functions', () => {
it('should create new address', async () => {
const addr = await rpc.getnewaddress();
assert(addr.startsWith('bcrt1'));
});
it('should get balance', async () => {
const balance = await rpc.getbalance();
assert(balance >= 0);
});
});
智慧合約測試
測試 Taproot 腳本
# 創建 Taproot 地址
bitcoin-cli -regtest getnewaddress "" "bech32m"
# 測試 key path 花費
bitcoin-cli -regtest taprootcreatefundpsbt
# 測試 script path 花費
bitcoin-cli -regtest taprootaddscript
測試 Script 腳本
# 創建時間鎖定輸出
bitcoin-cli -regtest lockunspent false '[{"txid":"...","vout":0}]'
# 測試 OP_CHECKLOCKTIMEVERIFY
bitcoin-cli -regtest sendtowithargs
常見測試場景
場景一:錢包餘額查詢
# 測試代碼
def test_balance_query():
rpc = connect_to_regtest()
initial_balance = rpc.getbalance()
assert initial_balance >= 0
場景二:交易發送
def test_send_transaction():
rpc = connect_to_regtest()
# 獲取新地址
to_addr = rpc.getnewaddress()
# 發送比特幣
txid = rpc.sendtoaddress(to_addr, 1.0)
# 驗證交易
tx = rpc.gettransaction(txid)
assert tx['confirmations'] >= 1
場景三:多籤交易
# 創建多籤錢包
bitcoin-cli -regtest createwallet "multisig" true true "[\"key1\",\"key2\"]" 2
# 添加更多密鑰
bitcoin-cli -regtest addmultisigaddress 2 '["key1","key2","key3"]'
# 創建部分簽名交易
bitcoin-cli -regtest walletcreatefundedpsbt
場景四:閃電網路測試
# 初始化 LND
lnd --bitcoin.active --bitcoin.regtest --bitcoin.node=bitcoind
# 創建錢包
lncli create
# 連接到節點
lncli connect <node_pubkey>@<host>:9735
# 開啟通道
lncli openchannel <node_pubkey> 100000
測試最佳實踐
隔離環境
- 每個測試使用獨立錢包
- 使用 RegTest 避免網路延遲
- 測試後清理環境
自動化
- GitHub Actions 整合測試
- CI/CD 流程自動化
- 定期執行回歸測試
記錄測試
- 記錄所有交易細節
- 保存交易截圖
- 記錄預期與實際結果差異
測試網路風險
⚠️ 重要提醒:
- 測試網比特幣無實際價值
- 測試網可能會定期重置
- 某些功能在測試網可能無法測試
常見問題
Q:Testnet 比特幣用完怎麼辦?
A:使用龍頭網站獲取,或使用 RegTest 本地挖礦。
Q:測試網和主網代碼有何不同?
A:測試網使用不同魔數和參數,共識規則相同。
Q:如何確保測試通過後主網也能正常運作?
A:使用 Signet 測試,或在 Testnet 完整測試。
Q:測試網需要多少磁碟空間?
A:Testnet 約 50GB,RegTest 可忽略不計。
Q:可以同時運行多個測試網路嗎?
A:可以,使用不同端口配置即可。
相關連結
相關文章
- 比特幣開發環境完整搭建指南 — 本指南協助開發者從零開始搭建比特幣開發環境,涵蓋不同技術棧的開發需求。
- 比特幣 SDK 完整使用指南 — 本指南深入介紹主流比特幣 SDK 的使用方法,幫助開發者快速上手比特幣應用開發。
- 比特幣錢包完整比較 — 深入比較市場主流比特幣錢包的功能特性、安全性與適用場景,幫助用戶選擇最適合的錢包解決方案。
- 比特幣交易所完整比較 — 全面比較全球主要比特幣交易所的功能特性、費用結構與安全設計,幫助用戶找到最適合的交易平台。
- 比特幣區塊瀏覽器完整比較 — 深入比較主流比特幣區塊瀏覽器的功能特性與使用場景,從日常查詢到專業分析的全方位指南。
延伸閱讀與來源
這篇文章對您有幫助嗎?
請告訴我們如何改進:
0 人覺得有帮助
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!