1月初旬、中国政府は、全世界の暗号通貨の3/4を生み出している国の「ビットコインマイナーの軍隊」に仕事をやめる
よう命じました。 この決定の主な理由の1つは、採掘農場で消費される電力量が高すぎること
でした -現在、ビットコインブロックチェーンと鉱山コインを確保するには、世界の総エネルギー消費量の約0.2%が
必要です。
今日は、なぜ鉱業がそのような量のエネルギーを消費するのか、なぜ必要なのか、どのように販売されるのかについてお話します。 ハッシュアルゴリズム(SHA-256)と、マイナーがプールから「助けを求める」理由について説明します。
/ image シンディシェブリー CCマイニングとは何ですか?
マイニングは多くの場合
、新しいビットコインを作成
する方法
と見なされますが、これは完全に真実ではありません。 マイニングの主なタスクは、ネットワーク参加者の1人が別のトランザクションで既に使用され
ているコインを使うことを防ぐために、どのトランザクションが有効であると見なされるかについて合意に達する
ことです。
これを行うために、鉱山労働者は機器の複雑な数学的問題を解決し、電力を消費し、代わりにビットコイン(およびトランザクション処理料金)の形で報酬を受け取ります。
鉱夫の仕事は何ですか
マイナーは、ブロック内のトランザクションに適したハッシュ値を選択し、秘密キーを取得できるという事実に従事しています。 目的のハッシュ
は 、前のブロックのハッシュ、乱数(nonce)、および過去10分間のトランザクションハッシュの合計に
基づいて形成されます。 さらに、システムの条件を満たしている必要があります。宣言されたマイニングの
複雑度 (難易度)に対応し、
ターゲットの複雑度 (ターゲット)よりも小さい-目的のハッシュの先頭のゼロビット
の数を
決定します。
ハッシュの複雑さを計算する
には、 bitcoinwiki
ページで提供されている修正テイラー級数への展開でアルゴリズムを使用でき
ます 。
#include <iostream> #include <cmath> inline float fast_log(float val) { int * const exp_ptr = reinterpret_cast <int *>(&val); int x = *exp_ptr; const int log_2 = ((x >> 23) & 255) - 128; x &= ~(255 << 23); x += 127 << 23; *exp_ptr = x; val = ((-1.0f/3) * val + 2) * val - 2.0f/3; return ((val + log_2) * 0.69314718f); } float difficulty(unsigned int bits) { static double max_body = fast_log(0x00ffff), scaland = fast_log(256); return exp(max_body - fast_log(bits & 0x00ffffff) + scaland * (0x1d - ((bits & 0xff000000) >> 24))); } int main() { std::cout << difficulty(0x1b0404cb) << std::endl; return 0; }
執筆時点では、ブロックチェーンネットワークの複雑さは2874674234415.941ですが、このパラメーターは2016ブロックごとに再計算されます。 ブロック作成
の平均速度(1時間あたり約6個)を
維持するために増減します。
SHA-256
ビットコインブロックチェーンでハッシュするためのツールとして、SHA-256アルゴリズムが選択されています。 次に、彼のラウンドの1つを
見ていき
ます 。
/ 8つの入力ワード用のラウンドSHA-256 /ウィキメディア/ kockmeyer / CC8個の単語がアルゴリズムに入力されたと仮定すると、それらをA、B、C ... Hで示します。関数Maは、単語A、B、Cでビット単位の演算を実行します。受信した値のほとんどがゼロの場合、ゼロも返します。
ブロックΣ0は、ワードAを2、13、および22ビットずつ3回シフトし、生成された値はxor演算でビットごとに加算されます。 ブロックΣ1も同様に機能します。シフトは6、11、25ビットで実行されます。
ブロックChは、Eのビットに基づいて結果のビットを選択する関数です。入力値が1の場合、ワードFの対応するビットが出力され、そうでない場合、ワードGのビットが出力されます。
図の赤い四角は、AおよびEの新しい値を生成する32ビットの追加ブロックです。サイクル全体が64回繰り返され、その後、情報は安全に暗号化されます。
ハッシュ計算プロセスを説明するために、「Bl0Ckchain」および「blockchain」という単語のハッシュを生成するPython
コードを次に示し
ます 。
import itertools from hashlib import sha256
しかし、作成されたハッシュのチェックは、作成に多くのリソースが必要な場合でも非常に高速です。
msg = "blockchain" nonce = 5263268363 print_pow(msg, nonce)
SHA-256関数を使用した結果は不可逆的であると見なされるため、マイナーはブルートフォースを使用して「ターゲット」ハッシュを選択します。
Bitcoinプロトコルはダブルハッシュを使用
するため、マイナーのタスクは、ハッシュxの2番目の逆画像(ハッシュyの最初の逆画像x、y = H(x))
を見つけることであり、これは条件y = H(x ')を満たします。 ただし、タスクを簡素化するために、マイナーは部分的なプロトタイプ-H(x)/ 2 ^(nk)= 0のみを探しています。 ここで、nは結果の「サイズ」です(SHA256の場合、n = 256ビット)。kは、結果のハッシュのゼロの数を決定する要因です。 たとえば、k = 20の場合、約100万回の試行が必要になります。
したがって、マイナーはブロックヘッダーのnonceパラメータを変更し、複雑性の条件が満たされるまでハッシュを考慮します。 目標に到達すると、ブロックがチェーンに追加されます。
マイニング-ネットワークメンバーの共同努力
ブロックソリューションは非常に複雑です。 現在、ビットコインネットワークのマイナーは1秒あたり約2,000万テラヘッシュを
実行しており、この数字は増え続けています。 比較のために、1つのビデオカード
は 1秒あたり約30メガキャッシュを
生成します。 また、彼のブログで、エンジニアのケン・シリフはペンと紙でブロック
を解決
しようとしました -彼の業績はさらに控えめでした(1日あたり0.67ハッシュ)。
/ blockchain.infoによると、1秒あたりのテラヘッシュ数複雑さの増大(および絶えず増大)のため、鉱夫がブロックだけを解決することは困難です。 したがって、それらはプールで結合され、ブロックと報酬を解決する作業を共有します。 プールは鉱夫にタスクを発行し、完了した作業量を監視します。 鉱夫がブロックの決定に対して行った貢献が大きければ大きいほど、彼が受け取る報酬の割合は大きくなります。
完了した作業の割合を評価するために、プールはマイナーに部分的な解決策を見つけるための情報を送信するように依頼します。 たとえば、ビットコインブロックチェーン
でブロックハッシュに15個のゼロを含める必要がある場合、プールは作業の証拠として10個のゼロを含む結果を送信するように要求する場合があります。 これは何百万回も簡単であり、鉱夫はそのような解決策を1時間に数回受け取ります。
プールと鉱夫の相互作用を組織するための特別なプロトコルがあります。 たとえば、ほとんどのプールで
使用される Stratumプロトコル(
Getwork 、
Getblocktemplateなど)があります。 Ken Shirrif
は、彼のブログで、タスクの発行時にプールから送信されるコード
を提供しています。このコードには、ブロックの作業を開始するために必要なすべての情報が含まれています。
ブロックが解決されると、プールは賞に適切なトランザクションを生成し、ヘッダーを承認してブロックを検証します。 プールの外にいる鉱夫によってブロックが決定された場合、サービスは参加者に新しいタスクを提供します。 この場合、鉱夫はハッシュ選択の報酬を受け取りません。
基本的に、ビットコインマイニングは一種の「軍拡競争」に似ています。 当初、人々はCPUを使用して暗号通貨を採掘しましたが、CPUパワーは十分ではなく、業界はGPUと
専用の ASIC
機器に切り替えました。
発行されるビットコインの数を規制することに加えて、コンピューティングの複雑さを増すことは、ブロックチェーンに対する攻撃に対する防御として機能することに注意してください。 大規模なネットワークでパーソナルコンピューターを使用してマイニングを
行うことが有益である場合、攻撃者は攻撃のための機器
を見つけ
やすくなります。 ハードウェアへの投資の必要性は、制限要因であり、追加の保護メカニズムです。
しかし、テクノロジーと「現実世界」へのそのようなリンクには欠点があります。 既に述べたように、マイニングはエネルギー消費の観点から見てかなり「高価な」活動です。 現在、ビットコインブロックチェーン
は年間48 TW /時間を
消費し 、チップの冷却に使用されるエネルギーの30〜40%を占めています。
ただし、消費されるエネルギー量は、採掘の収益性が低下するため、ブロック報酬の次の減少が発生する2020年以降、徐々に減少し始める
と考えられています。 この場合、マイナーがブロックチェーン上の情報を保護し続けるように動機付ける効果的な方法
は 、トランザクション処理手数料からの収益
を増やすことです。
そのためには、ブロックチェーン技術のエコシステムに対する公共の関心を高め続けることが重要です。 これにより、将来、ビットコインブロックチェーンを、
許可されたブロックチェーンと
サイド チェーンの一種の「アービター」として使用できるようになり、新世代の金融システムが作成されます。
ブログからブロックチェーンの作業に関する資料をさらに提供します: