比特幣測試網完整指南

深入介紹比特幣測試網路(Testnet)和回歸測試網路(RegTest)的使用方法和最佳實踐。

比特幣測試網完整指南

深入介紹比特幣測試網路(Testnet)和回歸測試網路(RegTest)的使用方法和最佳實踐。

測試網路類型

比特幣測試網對比

特性TestnetRegTestSignet
共識規則與主網相同可自訂與主網相同
難度調整降低可設定動態調整
挖礦時間10分鐘即時10分鐘
用途測試應用本地開發標準化測試
幣種代碼TBTCRBTCTBTC
社群活躍度

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 比特幣

龍頭網站

  1. Testnet 龍頭

使用 Bitcoin Core 挖礦

# 產生區塊(需要錢包)
bitcoin-cli -testnet createwallet "testwallet"

# 挖礦到地址
bitcoin-cli -testnet getnewaddress "mining"

# 挖礦(生成區塊)
bitcoin-cli -testnet generatetoaddress 101 <你的地址>

Testnet 節點列表

節點地址端口
Blockstreamtestnet-bitcoin.blockstream.info18333
Bitcoin Jungletestnet.junglist.info18333
Tatooinetatooine.cyberhash.io18333

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

測試最佳實踐

隔離環境

自動化

記錄測試

測試網路風險

⚠️ 重要提醒

常見問題

Q:Testnet 比特幣用完怎麼辦?

A:使用龍頭網站獲取,或使用 RegTest 本地挖礦。

Q:測試網和主網代碼有何不同?

A:測試網使用不同魔數和參數,共識規則相同。

Q:如何確保測試通過後主網也能正常運作?

A:使用 Signet 測試,或在 Testnet 完整測試。

Q:測試網需要多少磁碟空間?

A:Testnet 約 50GB,RegTest 可忽略不計。

Q:可以同時運行多個測試網路嗎?

A:可以,使用不同端口配置即可。

相關連結

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!