Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
1比特币的测试区块链
2 r3 e' N9 p  I5 g- x7 u2 l8 |# I3 N7 {% J, r$ F' U6 I! d: U9 T( [
    你可能会惊讶地发现,有多个比特币区块链。2009年1月3日由SatoshiNakamoto创建的“主要”比特币块链,即本章研究的创世区块所在的网络,被称为主干网。另外还有其他用于测试的比特币区块链:现存的有testnet,segnet和regtest。我们依次看看每一个。( t6 p, q7 A+ x5 |; c
0 s& |6 t' Q/ m
    2Testnet——比特币的试验场% q0 o6 H9 x: U* _/ ]
  i' N0 v& [- F$ X" u/ Y4 S
    Testnet是用于测试的区块链,网络和货币的总称。testnet是一个功能齐全的在线P2P网络,包括钱包,测试比特币(testnet币),挖矿以及类似主干网的所有其他功能。实际上它和主网只有两个区别:testnet币是毫无价值的,挖掘难度足够低,任何人都可以相对容易地使用testnet币)。! T* W& \* s7 s

+ o; d5 H/ S2 l! X    任何打算在比特币主干网上用于生产的软件开发都应该首先在testnet上用测试币进行测试。这样可以保护开发人员免受由于软件错误而导致的金钱损失,也可以保护网络免受由于软件错误导致的意外攻击。, N3 G# Q. h) j4 p1 S6 y+ ^' \2 K/ [' |

8 B2 |3 S( O! N/ n. F# ]* P    然而,保持测试币的无价值和易挖掘并不容易。尽管有来自开发商的呼吁,但还是有人使用先进的设备(GPU和ASIC)在testnet上挖矿。这就增加了难度,使用CPU挖矿不可能,导致获取测试币非常困难,以致于人们开始赋予其一定价值,所以测试币并不是毫无价值。结果,时不时地testnet必须被报废并重新从创始区块启动,重新进行难度设置。: s0 R9 \. I, {  C$ S" ]

& V# M2 Q& C2 y6 [& \& a9 h; c: N* X    目前的testnet被称为testnet3,是testnet的第三次迭代,于2011年2月重启,重置了之前的testnet网络的难度。/ c2 P' Q& P1 X7 f& p1 I  o5 G
8 a4 M1 o# R- ?* R4 z# Z9 L
    请记住,testnet3是一个大区块链,在2017年初超过20GB。完全同步需要一天左右的时间,并占用您的计算机资源。它不像主干网,也不是“轻量级”。运行testnet节点的一个好方法就是将其运行为一个专用的虚拟机镜像(例如,VirtualBox,Docker,CloudServer等)。1 p# }* @4 A* j/ D) s# s
) ]5 Q% B, u% b$ I" w% Q" f
    9.9.1.1使用testnet! x/ D% [! H1 u6 n/ |+ w7 I; b
$ _5 q  T' g( n' a* I/ ]5 D
    像几乎所有其他比特币软件一样,BitcoinCore完全支持在testnet网络运行而不是只能在主干网上运行,还允许您进行测试币挖矿并运行一个testnet全节点。; M+ C$ p( K. h% C6 c0 G
$ e' Q8 w+ c9 z
    如果要在testnet上启动BitcoinCore,而不是在主干网启动,您可以使用testnet开关:
2 ]0 i& J5 ]$ {/ H( e' r
* K6 t2 X0 [2 G! ~, i    $bitcoind-testnet  J% y( q5 X1 S6 m3 I5 ~

# `0 U0 U7 T; s& U8 D    在日志中,您应该会看到,bitcoind正在默认bitcoind目录的testnet3子目录中构建一个新的区块链:! {8 L8 Q+ L. |7 A, ]: @$ L! c- M) }% M

$ r, N3 P2 j1 ]- a    bitcoind:Usingdatadirectory/home/username/.bitcoin/testnet3
- F9 t8 b# u7 j7 o6 m! {
; `* N) o% ]2 Y1 s. H! U9 q! g) `: z    要连接bitcoind,可以使用bitcoin-cli命令行工具,但是要记得切换到testnet模式:
- n6 `( _+ \6 C" M% e! i: B9 B
  1. . f, B6 e0 I. F1 x# B, W# K
  2. $ bitcoin-cli -testnet getinfo0 S" S' K* ?) |% x
  3. {. D  `: J# {1 W
  4.   "version": 130200,4 \8 P  k' ]1 o9 ?, k# S6 l$ H
  5.   "protocolversion": 70015,
    & ^* r; v  J9 B' o( H: r% g3 q
  6.   "walletversion": 130000,1 i" H6 _6 p. ^* a+ ], T! y
  7.   "balance": 0.00000000,
    9 E. @: M. b! d. g1 a
  8.   "blocks": 416,
    * @: Q+ W9 m$ ^0 Q4 j. w- f3 c/ S
  9.   "timeoffset": 0,) L  w2 |: c) t& z- W
  10.   "connections": 3,
    / D6 \  n9 w$ N" E" B
  11.   "proxy": "",# I9 q* ^' A9 n1 [" @) ^3 c; O6 m3 M
  12.   "difficulty": 1,
    - t- K: \! i5 Z6 ^" r  M
  13.   "testnet": true,
    " Y; w% }: L  @' C5 N
  14.   "keypoololdest": 1484801486,& J  d3 E- Z8 A# y! K$ j
  15.   "keypoolsize": 100,2 B" ^" J& I+ @1 b  y- y7 j; s
  16.   "paytxfee": 0.00000000,
    6 n, c* v9 e; q
  17.   "relayfee": 0.00001000,
    0 ]( R7 R5 b$ i( \' F! ~
  18.   "errors": ""- n$ i- ~5 \1 g" Q% X
  19. }
复制代码
2 W7 U& C1 r6 Z3 a, a8 h  j
您还可以使用getblockchaininfo命令确认testnet3区块链的详细信息和同步进度:
$ p& F; K" W# ^: `: V
  1. $ bitcoin-cli -testnet getblockchaininfo. J  D& Y0 [3 i" P5 a4 s
  2. 1 U7 x$ \5 U  b' i& b2 R
  3. {# `, f7 Z9 Z) ~2 u( g4 B* U
  4.   "chain": "test",# g6 t; H$ A: |5 u, D+ L
  5.   "blocks": 1088,8 B0 Q; E( M7 v( E) A
  6.   "headers": 139999,
    0 @; Y% t1 c  G
  7.   "bestblockhash": "0000000063d29909d475a1c4ba26da64b368e56cce5d925097bf3a2084370128",
    ) z+ ^. z: t) a5 O4 o/ L! R
  8.   "difficulty": 1,
    7 w, u+ O+ [# r& [; @
  9.   "mediantime": 1337966158,* w8 \% V  h& A
  10.   "verificationprogress": 0.001644065914099759,
    / N% j* \0 U9 y, [4 Y0 Q
  11.   "chainwork": "0000000000000000000000000000000000000000000000000000044104410441",7 h: O$ P7 o# b: ?1 M+ D
  12.   "pruned": false,
    + m7 i* L6 x5 q6 o0 {# ^/ `
  13.   "softforks": [1 W! `  q! h3 N1 t* O: o

  14. 1 n3 X  c9 |- Y9 J) {, ^$ x
  15.   [...]
复制代码
  1. $ bitcoin-cli -regtest getblockchaininfo) S6 J' V7 q: ?! h) t8 [

  2. / ]. y: d! P4 i$ e
  3. {
    $ y$ E  Y; f& H* {
  4.   "chain": "regtest",  u* S$ g& a$ P$ B3 A# p
  5.   "blocks": 0,- ]0 L' [1 o( D& N
  6.   "headers": 0,
    , ~9 S8 l+ q, O* K3 ]
  7.   "bestblockhash": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206",( _2 |& X. A9 P' T# Y4 Y
  8.   "difficulty": 4.656542373906925e-10,
    " ]- `5 A0 B9 T8 z; Z: W% j
  9.   "mediantime": 1296688602,! ?0 T; A' k* T
  10.   "verificationprogress": 1,
    . I9 w# l. E$ w; y
  11.   "chainwork": "0000000000000000000000000000000000000000000000000000000000000002",
    9 ~1 D8 H! R) \3 [+ U+ e  |. @. y$ T$ C
  12.   "pruned": false,
复制代码
' s) R1 ]2 Q5 Z5 O$ g6 r* @
你可以看到,还没有任何区块。 让我们开始挖一些(500块),赚取奖励:
' v9 D' {5 ~. Y" \: P& J/ q  p, E
  1. $ bitcoin-cli -regtest generate 500
    / _  d% [! z5 v0 S4 S
  2. * {- V' d7 L$ I* }
  3. [; w* \5 z! k% W
  4.   "7afed70259f22c2bf11e406cb12ed5c0657b6e16a6477a9f8b28e2046b5ba1ca",1 T' N4 T; G/ c. ?) v0 F/ Q
  5.   "1aca2f154a80a9863a9aac4c72047a6d3f385c4eec5441a4aafa6acaa1dada14",
    0 x0 i9 Q! X* N' o- u  n
  6.   "4334ecf6fb022f30fbd764c3ee778fabbd53b4a4d1950eae8a91f1f5158ed2d1",- g. ], M2 R: L. D
  7.   "5f951d34065efeaf64e54e91d00b260294fcdfc7f05dbb5599aec84b957a7766",& g. v; I- Z* v  U& i% @
  8.   "43744b5e77c1dfece9d05ab5f0e6796ebe627303163547e69e27f55d0f2b9353",
    1 B+ l+ \* q/ q0 ?6 c
  9.    [...]5 ^2 n4 E- ?% b( E! L5 q
  10.   "6c31585a48d4fc2b3fd25521f4515b18aefb59d0def82bd9c2185c4ecb754327"
复制代码
+ ?  E0 E  I0 h  P% s. r- M) M

* u' d/ c: W2 e! F/ U) _4 H
8 D# X1 A. x/ Q0 o    挖掘所有这些块只需要几秒钟,这样就可以很容易地进行测试。如果您检查您的钱包余额,您将看到您获得了前400个区块的奖励(Coinbase的奖励必须挖满100块之后才能花费):- J) N0 c5 }7 h( a" e) T
, s2 z. a$ f" c) y7 ]* G' F
    $bitcoin-cli-regtestgetbalance. n$ s3 Z8 R2 A) u/ l4 j) T8 g

; u7 Z2 c# z" G$ w1 ~: Q    12462.50000000% d* G% ]9 F1 X" g" i

, L0 K6 f! M3 p8 c8 W0 n    5使用测试块链进行开发, A; }+ v. t9 D& i2 Y1 a+ T2 U

1 @, c( p( z3 t: h0 ~* q. Q  p    Bitcoin的各种区块链(regtest,segnet,testnet3,以及主干网)为比特币开发提供了一系列测试环境。无论您是开发比特币核心还是另一个全节点共识客户端,诸如钱包,交易所,电子商务网站等应用程序,甚至开发新颖的智能合同和复杂的脚本等等,请使用测试区块链网进行开发。; _: [* N& S7 S
4 h1 o7 }! y: I2 l+ ~& V/ @
    您可以使用测试区块链来建立开发管道。在开发它时,建议在本地测试代码。
$ T8 i  a" L- t  F0 P9 Z( t& |& `& M; a+ ?/ I3 N' l" X) k
    一旦您准备好在公共网络上尝试,请切换到testnet,将您的代码暴露在更加动态的环境中,并提供更多样化的代码和应用程序。
/ u  s; E7 F( f: K+ W, u( n: `4 }% S% }, B
    最后,一旦您确信您的代码正常工作,请切换到主网以实现生产部署。, v; y, S% ~9 i( z. ~( h

9 c2 X5 r3 m  S$ `6 N/ x    当您进行变更,改进,错误修复等操作时,再次启动这个开发管道,首先在regtest上部署每个变更,然后在testnet上进行测试,最后实现生产。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

青丝暮雪780 初中生
  • 粉丝

    0

  • 关注

    2

  • 主题

    11