2 H# d# C7 j) h A- a9 U
你可能会惊讶地发现,有多个比特币区块链。2009年1月3日由SatoshiNakamoto创建的“主要”比特币块链,即本章研究的创世区块所在的网络,被称为主干网。另外还有其他用于测试的比特币区块链:现存的有testnet,segnet和regtest。我们依次看看每一个。
6 T5 F* a9 A. M. o
2Testnet——比特币的试验场 N5 y3 M8 G7 d
0 h' t$ v, \! I( l' B4 O4 D
Testnet是用于测试的区块链,网络和货币的总称。testnet是一个功能齐全的在线P2P网络,包括钱包,测试比特币(testnet币),挖矿以及类似主干网的所有其他功能。实际上它和主网只有两个区别:testnet币是毫无价值的,挖掘难度足够低,任何人都可以相对容易地使用testnet币)。
任何打算在比特币主干网上用于生产的软件开发都应该首先在testnet上用测试币进行测试。这样可以保护开发人员免受由于软件错误而导致的金钱损失,也可以保护网络免受由于软件错误导致的意外攻击。
* ~" @5 _, C& \+ u5 N% g( X
然而,保持测试币的无价值和易挖掘并不容易。尽管有来自开发商的呼吁,但还是有人使用先进的设备(GPU和ASIC)在testnet上挖矿。这就增加了难度,使用CPU挖矿不可能,导致获取测试币非常困难,以致于人们开始赋予其一定价值,所以测试币并不是毫无价值。结果,时不时地testnet必须被报废并重新从创始区块启动,重新进行难度设置。
% Y- p& f6 i2 z
目前的testnet被称为testnet3,是testnet的第三次迭代,于2011年2月重启,重置了之前的testnet网络的难度。/ f1 k N1 c: r1 g% k1 e
/ S, ~3 U& Q7 _; R/ A4 C9 n& D& ?
请记住,testnet3是一个大区块链,在2017年初超过20GB。完全同步需要一天左右的时间,并占用您的计算机资源。它不像主干网,也不是“轻量级”。运行testnet节点的一个好方法就是将其运行为一个专用的虚拟机镜像(例如,VirtualBox,Docker,CloudServer等)。$ G0 ~4 G% c- G, m9 T
9.9.1.1使用testnet
像几乎所有其他比特币软件一样,BitcoinCore完全支持在testnet网络运行而不是只能在主干网上运行,还允许您进行测试币挖矿并运行一个testnet全节点。
: ~0 V: I0 b) G! ^
如果要在testnet上启动BitcoinCore,而不是在主干网启动,您可以使用testnet开关:- y5 n6 u4 N1 e6 O( E3 `
$bitcoind-testnet8 Y8 b$ P+ Z# r' B8 A2 f0 u; j) L
# o$ m; S. e8 c. u& a9 n
在日志中,您应该会看到,bitcoind正在默认bitcoind目录的testnet3子目录中构建一个新的区块链:
6 N" ?9 g) ~' r+ s4 H
bitcoind:Usingdatadirectory/home/username/.bitcoin/testnet3; m9 m; P; Q' r- M
要连接bitcoind,可以使用bitcoin-cli命令行工具,但是要记得切换到testnet模式:
- ' Y# [7 P. h! S: e( {5 Y+ v, {
- $ bitcoin-cli -testnet getinfo5 |/ J7 X+ i6 W. Y8 {
- {7 o U% n H4 _/ P9 u( k+ R
- "version": 130200,7 x% X% R- R$ C: d! [
- "protocolversion": 70015,
- "walletversion": 130000,
- "balance": 0.00000000,4 i) T+ Q0 g+ }$ u; F$ D, u: H, F0 n
- "blocks": 416,0 _4 z% ^8 N/ e
- "timeoffset": 0,
- "connections": 3," p* z: W7 p- h8 T) U( ^3 s- y
- "proxy": "",
- "difficulty": 1,) K0 r J+ N% }2 ?% L
- "testnet": true,
- "keypoololdest": 1484801486,
- "keypoolsize": 100,
- "paytxfee": 0.00000000,1 P: b Z6 `7 W+ \1 m! |* }
- "relayfee": 0.00001000,
- "errors": "" v( z; v _+ w: z
- }
您还可以使用getblockchaininfo命令确认testnet3区块链的详细信息和同步进度:- a k( v% I6 s- ?5 E0 m# A; E! Z2 f
- $ bitcoin-cli -testnet getblockchaininfo
-
- {2 ?2 n: C7 [% C( O6 V0 v9 c6 B# _
- "chain": "test",
- "blocks": 1088,& L/ D `: @1 ~ {$ f; k
- "headers": 139999,
- "bestblockhash": "0000000063d29909d475a1c4ba26da64b368e56cce5d925097bf3a2084370128",
- "difficulty": 1,
- "mediantime": 1337966158,# u/ j$ ^; ]7 m* l! q; |+ B+ i
- "verificationprogress": 0.001644065914099759,
- "chainwork": "0000000000000000000000000000000000000000000000000000044104410441",. v+ u) q, b4 S; i" y8 Z. n
- "pruned": false,: G! p. Y1 `' h; m! G {
- "softforks": [
- $ ?1 o, r0 s' T% B2 D& f
- [...]
- $ bitcoin-cli -regtest getblockchaininfo2 n0 l8 S5 W6 s
-
- {8 w- w$ Z/ R" L" t% d) d
- "chain": "regtest",& o6 a( K0 ^: e0 @! \: D
- "blocks": 0,, f$ [1 Z* E g- U+ \5 D* ~
- "headers": 0,, M7 H& z/ W: c ?& ^0 I
- "bestblockhash": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206",
- "difficulty": 4.656542373906925e-10,: E: K: u! u' \8 r# f& G" d+ n
- "mediantime": 1296688602," c7 F5 ]& K4 H# @( A
- "verificationprogress": 1,
- "chainwork": "0000000000000000000000000000000000000000000000000000000000000002",6 _$ y" q& u. h' i$ w$ {7 k
- "pruned": false,
你可以看到,还没有任何区块。 让我们开始挖一些(500块),赚取奖励:6 e! n7 P! w! |9 V& x# c
- $ bitcoin-cli -regtest generate 500; X% t1 H2 j8 J9 x! G/ j$ O% I
-
- [) y; o3 E; ^% S7 K6 H, g$ |
- "7afed70259f22c2bf11e406cb12ed5c0657b6e16a6477a9f8b28e2046b5ba1ca",
- "1aca2f154a80a9863a9aac4c72047a6d3f385c4eec5441a4aafa6acaa1dada14",
- "4334ecf6fb022f30fbd764c3ee778fabbd53b4a4d1950eae8a91f1f5158ed2d1",
- "5f951d34065efeaf64e54e91d00b260294fcdfc7f05dbb5599aec84b957a7766",
- "43744b5e77c1dfece9d05ab5f0e6796ebe627303163547e69e27f55d0f2b9353",
- [...] `; m# G6 w% y% h
- "6c31585a48d4fc2b3fd25521f4515b18aefb59d0def82bd9c2185c4ecb754327"
挖掘所有这些块只需要几秒钟,这样就可以很容易地进行测试。如果您检查您的钱包余额,您将看到您获得了前400个区块的奖励(Coinbase的奖励必须挖满100块之后才能花费):
$bitcoin-cli-regtestgetbalance
12462.50000000- C) S2 t! G! |7 m/ N
6 U8 c2 k- S" \: R0 x' Q4 l
5使用测试块链进行开发* U/ x" e+ e/ a# D7 w- n) ^$ j$ Q5 |
Bitcoin的各种区块链(regtest,segnet,testnet3,以及主干网)为比特币开发提供了一系列测试环境。无论您是开发比特币核心还是另一个全节点共识客户端,诸如钱包,交易所,电子商务网站等应用程序,甚至开发新颖的智能合同和复杂的脚本等等,请使用测试区块链网进行开发。2 a8 e: E/ S& o! t" p) B6 T
" ~0 `) X$ {* o$ u% @* Z2 d' N& y
您可以使用测试区块链来建立开发管道。在开发它时,建议在本地测试代码。
2 x1 b( g8 o# I. o& U
一旦您准备好在公共网络上尝试,请切换到testnet,将您的代码暴露在更加动态的环境中,并提供更多样化的代码和应用程序。
+ G* [$ E% o7 \* b# ~2 ~# y
最后,一旦您确信您的代码正常工作,请切换到主网以实现生产部署。( F; h- i* u) ]6 \* S8 b
% a O+ O2 X2 t( F: L
当您进行变更,改进,错误修复等操作时,再次启动这个开发管道,首先在regtest上部署每个变更,然后在testnet上进行测试,最后实现生产。