ビットコイン開発の------テストチェーン

5894 ワード

1ビットコインのテストブロックチェーン


複数のビットコインブロックチェーンがあることに驚くかもしれません.2009年1月3日にSatoshi Nakamotoによって作成された「主要」ビットコインブロックチェーン、すなわち本章で研究した創世ブロックが存在するネットワークは、主幹ネットワークと呼ばれている.また、テスト用のビットコインブロックチェーンもあります.testnet、segnet、regtestが現存しています.私たちは順番に見てみましょう.

2 Testnet——ビットコインの試験場


Testnetは、テストに使用されるブロックチェーン、ネットワーク、通貨の総称です.testnetは、財布、テストビットコイン(testnetコイン)、掘削、およびホストネットワークのような他のすべての機能を含む機能がそろったオンラインP 2 Pネットワークです.実際には、testnetコインは価値がなく、発掘の難易度が十分に低く、誰もが比較的簡単にtestnetコインを使用することができます).
ビットコインのメインネットワーク上で生産に使用するソフトウェア開発は、まずtestnet上でテストコインでテストする必要があります.これにより、開発者をソフトウェアエラーによる金銭的損失から保護したり、ソフトウェアエラーによる予期せぬ攻撃からネットワークを保護したりすることができます.
しかし、テストコインの価値を維持し、掘り起こしやすいのは容易ではありません.開発者からの呼びかけにもかかわらず、先進的な設備(GPUとASIC)を使ってtestnetで鉱山を掘る人もいる.これにより、CPUを用いて鉱山を掘ることが不可能になり、テストコインの入手が困難になり、一定の価値を与え始めたため、テストコインに価値がないわけではない.その結果、testnetは時々廃棄され、創始ブロックから再起動され、難易度設定が再開される必要がある.
現在のtestnetはtestnet 3と呼ばれ、testnetの3回目の反復であり、2011年2月に再起動し、以前のtestnetネットワークの難易度をリセットした.
testnet 3は大きなブロックチェーンで、2017年初めに20 GBを超えたことを覚えておいてください.完全な同期には1日程度かかり、コンピュータのリソースを消費します.メインネットではなく、「軽量級」でもありません.testnetノードを実行する良い方法は、専用の仮想マシンミラー(VirtualBox、Docker、Cloud Serverなど)として実行することです.
9.9.1.1 testnetの使用
ほとんどの他のビットコインソフトウェアのように、Bitcoin Coreは、メインネットワークでのみ実行できるのではなくtestnetネットワークで実行することを完全にサポートしています.また、テストコインの掘削を行い、testnetフルノードを実行することもできます.
ホストネットワークではなくtestnetでBitcoin Coreを起動する場合は、testnetスイッチを使用します.
$ bitcoind -testnet
ログでは、bitcoindがbitcoindディレクトリのtestnet 3サブディレクトリに新しいブロックチェーンを構築していることがわかります.
bitcoind: Using data directory/home/username/.bitcoin/testnet3
bitcoindに接続するには、bitcoin-cliコマンドラインツールを使用しますが、testnetモードに切り替えることを忘れないでください.
$ bitcoin-cli -testnet getinfo

{
  "version": 130200,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 416,
  "timeoffset": 0,
  "connections": 3,
  "proxy": "",
  "difficulty": 1,
  "testnet": true,
  "keypoololdest": 1484801486,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}

getblockchainfoコマンドを使用してtestnet 3ブロックチェーンの詳細と同期の進捗を確認することもできます.
$ bitcoin-cli -testnet getblockchaininfo

{
  "chain": "test",
  "blocks": 1088,
  "headers": 139999,
  "bestblockhash": "0000000063d29909d475a1c4ba26da64b368e56cce5d925097bf3a2084370128",
  "difficulty": 1,
  "mediantime": 1337966158,
  "verificationprogress": 0.001644065914099759,
  "chainwork": "0000000000000000000000000000000000000000000000000000044104410441",
  "pruned": false,
  "softforks": [

  [...]

testnet 3では、btcd(Goで記述)やbcoin(JavaScriptで記述)など、他の言語やフレームワークで実装された全ノードを実行して実験や学習することもできます.
2017年初頭、testnet 3はホストネットワークのすべての機能をサポートし、ホストネットワーク上でまだアクティブになっていない隔離証人も含まれている(Segregated Witness([segwit]隔離証人章を参照).したがって、testnet 3は、隔離証言機能をテストするためにも使用することができる.

3 Segnet-独立した証人テストネットワーク


2016年、特別な用途のテストネットワークが開始され、隔離証人の開発とテストを支援した(segwitとも呼ばれる;[segwit]).このテストブロックチェーンはsegnetと呼ばれ、Bitcoin Coreの特殊バージョン(ブランチ)を実行することで接続できます.
segwitはtestnet 3に追加されたため、segnetを使用してsegwit機能をテストすることはなくなりました.
将来的には、segnetなどの単一の機能または主要なアーキテクチャの変更をテストするために使用される他のテストネットワークブロックチェーンを見ることができます.

4 Regtest--ローカルブロックチェーン


Regtestは「回帰テスト」を表し、ビットコインのコア機能であり、テストのためにローカルブロックチェーンを作成できます.testnet 3(共通および共有のテストブロックチェーンである)とは異なり、regtestブロックチェーンはローカルテストの閉鎖システムとして動作することを目的としている.regtestブロックチェーンを最初から起動し、ローカルの創世ブロックを作成します.他のノードをネットワークに追加するか、単一のノードを使用して実行してBitcoin Coreソフトウェアをテストできます.
regtestモードでBitcoin Coreを起動するには、regtestフラグを使用します.
$ bitcoind -regtest
testnetを使用するように、Bitcoin Coreはbitcoindデフォルトディレクトリのregtestサブディレクトリの下で新しいブロックチェーンを初期化します.
bitcoind: Using data directory/home/username/.bitcoin/regtest
コマンドラインツールを使用するには、regtestフラグを指定する必要があります.getblockchainfoコマンドを試してregtestブロックチェーンを確認してみましょう.
$ bitcoin-cli -regtest getblockchaininfo

{
  "chain": "regtest",
  "blocks": 0,
  "headers": 0,
  "bestblockhash": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206",
  "difficulty": 4.656542373906925e-10,
  "mediantime": 1296688602,
  "verificationprogress": 1,
  "chainwork": "0000000000000000000000000000000000000000000000000000000000000002",
  "pruned": false,
  [...]

まだブロックがありませんいくつか(500元)を掘って奨励金を稼ぎましょう.
$ bitcoin-cli -regtest generate 500

[
  "7afed70259f22c2bf11e406cb12ed5c0657b6e16a6477a9f8b28e2046b5ba1ca",
  "1aca2f154a80a9863a9aac4c72047a6d3f385c4eec5441a4aafa6acaa1dada14",
  "4334ecf6fb022f30fbd764c3ee778fabbd53b4a4d1950eae8a91f1f5158ed2d1",
  "5f951d34065efeaf64e54e91d00b260294fcdfc7f05dbb5599aec84b957a7766",
  "43744b5e77c1dfece9d05ab5f0e6796ebe627303163547e69e27f55d0f2b9353",
   [...]
  "6c31585a48d4fc2b3fd25521f4515b18aefb59d0def82bd9c2185c4ecb754327"
]

これらのブロックをすべて掘り起こすのに数秒しかかからないので、簡単にテストできます.財布の残高をチェックすると、最初の400ブロックの奨励金が表示されます(Coinbaseの奨励金は100ブロックを掘ってからかかる必要があります):
$ bitcoin-cli -regtest getbalance

12462.50000000

5テストブロックチェーンを使用した開発


Bitcoinの様々なブロックチェーン(regtest,segnet,testnet 3,およびホストネットワーク)は、ビットコイン開発に一連のテスト環境を提供する.ビットコインコアを開発しても、財布、取引所、電子商取引サイトなどのアプリケーションを開発しても、新しいスマート契約や複雑なスクリプトを開発しても、テストブロックチェーンネットワークを使用して開発してください.
テストブロックチェーンを使用して、開発パイプを構築できます.開発時には、コードをローカルでテストすることをお勧めします.
パブリックネットワークで試してみる準備ができたらtestnetに切り替え、よりダイナミックな環境にコードを露出し、より多様なコードとアプリケーションを提供します.
最後に、コードが正常に動作していると確信したら、プライマリ・ネットワークに切り替えて本番導入を実現します.
変更、改善、エラー修復などの操作を行うと、この開発パイプを再起動し、まずregtestに各変更を配置し、testnetでテストし、最後に生産を実現します.