forward the original title ‘白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?’
ブロックチェーンに関連する最も馴染み深い概念の1つはおそらくマイニングです。多くの人々が何度もマイニングについて聞いたことがあるかもしれませんが、実際には何を意味するのかはよくわからないかもしれません。このセクションでは、通常のプログラムを中断して最初に「マイニング」を紹介します。
「プレーンブロックチェーン1:ビットコインの紹介(ブロックチェーン革命の先駆者で主権通貨の挑戦者)」からの内容の簡単な要約です。ここでは、中本哲史がビットコインの通貨システムを設計し、ブックキーピングの報酬を通貨発行とリンクさせました。このアプローチにより、通貨発行をブックキーピングプロセスで自動化することができ、通貨発行の問題を解決しながら、ブックキーパーが積極的に参加することを促します。
現実世界では、マイニングは鉱山から岩に隠された貴重な金属を掘り出すために、鉱夫がさまざまなツールを使用することを意味します。鉱夫はこれら自然に隠された希少な金属から価値を抽出し、物理労働を通じてその価値を得ます。
ブロックチェーンプロジェクトでは(通常デジタル通貨プロジェクト)、ネットワークノードは計算リソースを消費して問題を解決します。解決策を見つけると、ブロックをパッケージ化し、新たに発行された通貨の形で報酬を受け取ります。このプロセスは、鉱石から金などの貴金属を抽出することに類似しているため、「マイニング」と呼ばれています。ここで、ブックキーパーはマイナーであり、ハードウェアと電力を使用してブロックをパッケージ化するために競争し、新しい通貨が作成されます。
マイニングには主に2つの目的があります。最近の取引をブロックにまとめ、ブロックチェーンにリンクして確認すること、そしてブックキーパーに報酬を与えることで新しい通貨を発行することです。以下に、マイニングの詳細な機能が示されています。
マイニング参加者は、ブロックチェーンにブロックを正常にパッケージングすることで、大きな報酬を受け取るため、マイニングに参加する動機づけを受けます。これらの報酬は、主に2つの主要な源泉から提供されます:
時間の経過とともに、ブロック報酬は減少します(例えば、ビットコインのハーフィングメカニズムにより、報酬はおおよそ4年ごとに半減されます)。最終的には、21億ビットコインが全てマイニングされた後、予想されるのは2141年頃で、自動ブロック報酬は存在しなくなり、取引手数料がマイナーの主な収入源となります。
ビットコインは約10分ごとに新しいブロックを生成します。最初に、各新しいブロックが50ビットコインを生成します。この報酬は4年ごとに半減し、現在までに4回の半減イベントがありました。現在、各ブロックは3.125ビットコインを生成し、最新の半減は2024年4月に発生しました。次の半減は2028年ごろを予想しています。約2141年までに、ビットコインの発行上限に到達します。
取引手数料は供給と需要だけでなく、取引のサイズにも影響されます。手数料は取引がブロック内で占めるスペースに比例しています。
マイニングに参加するマイナーにとって、マイニングは簡単です。デジタル通貨ウォレットクライアントをダウンロードし、クライアント内でマイニングボタンをクリックしてマイニングを開始します。
ブロックチェーンプロジェクトのブロック報酬には、通常、マイニングアルゴリズムがウォレットに統合されたスクリプトに記述されています。マイナーは単にボタンをクリックしてスクリプトを開始するだけです。
マイニングアルゴリズムは決定論的であり、マイナーがアルゴリズムを継続的に実行すれば、最終的に結果を得ることができます。しかし、計算リソースの違いにより、この結果を計算するために必要な時間はマイナー間で異なる場合があります。ノードが目標値を計算すると、その期間中の他のマイナーの努力は無駄になり、物理的なリソースの消耗によるマイナスのリターンが生じます。
無駄な労力を避けるために、マイナーはマイニングプールノードに参加して計算リソースをプールすることがよくあります。このノードは他のノードと同様に動作しますが、計算能力が大幅に向上しています。プールがブロックのマイニングに成功すると、報酬は参加マイナーの貢献した計算リソースに基づいて分配されます。ブロックチェーン上では、ブロックをパッケージ化するものとして記録されたマイナーはマイニングプールノードであり、個々のマイナーは通貨システムから直接ではなく、プールによって割り当てられた報酬のシェアを受け取ることに注意することが重要です。
高効率なマイニングチップを製造する企業であるBitmainは、マイニングプールの役割を固め、帳簿の中央集権化に貢献しています。
ブロックチェーンプロジェクトが異なれば、マイニングパズルや難易度も異なる場合があります。ここでは、ビットコインを例にとります。ビットコインで使用されるマイニングアルゴリズムは、プルーフ・オブ・ワーク(POW)と呼ばれます。このアルゴリズムの本質は、結果を得るためには、それを証明するためにある程度の作業を費やす必要があるということです。
マイニングパズルは伝統的な数学的問題ではなく、ランダムな数字(nonce)を見つけることが必要です。このnonceは、ブロック内のデータと組み合わせてハッシュ関数を処理すると、特定の条件を満たすハッシュ値を生成する必要があります。通常、この条件はハッシュ値が目標値以下である必要があります(または、同等に、ハッシュ値の最初のnビットがゼロである必要があります)。式は以下のようになります:hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target
ビットコインは、任意の長さの入力を256ビット(16進数で64桁または32バイト)の固定長出力に変換するSHA-256ハッシュ関数を使用しています。出力はほぼランダムですが、同じ入力に対しては必ず同じです。マイニングは、ノンスを連続的に変更し、SHA-256を使用してブロックヘッダーデータをハッシュ化して、目標条件を満たすハッシュ値が見つかるまで続ける作業です。
たとえば、最初の30ビットがゼロであるsha-256ハッシュ値:000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110
これを16進数に変換すると、7つのゼロで始まる値になります:00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90
簡単に言うと、最初のnビットがゼロであるハッシュを見つける確率は12n\frac{1}{2^n}2n1です。nが大きいほど、ゼロのビットが多くなり、確率が低くなります。
nが256になると、現在の人間の計算能力では、量子コンピュータを除いて、そのようなハッシュ値を見つけることは地球が存在しなくなる前に事実上不可能です。
sha-256の特性により、唯一の方法はブルートフォースです。これは、条件が満たされるまで、非常に多くのノンスを試行することを意味します。このため、マイニングには高性能なコンピューティング機器が必要です。
ノンスをブロックデータに追加し、それをsha-256を通して渡すことで生成されるハッシュ値を予測することはできないため、プロセスは完全にランダムです。たとえば、ターゲットのハッシュ値が10,000の場合、どのノンスがブロックデータと組み合わさって10,000未満のハッシュ値を生成するかはわかりません。この予測不可能でランダムな性質は、マイナーが条件が満たされるまで可能性を列挙し続けなければならないことを意味します。条件を満たす複数の値がある場合は、最小のハッシュ値が選択されます。なぜなら、より小さいハッシュ値は高い難易度と低い発生確率を示すからです。
生成されたハッシュ値が要件を満たすかどうかを検証することは簡単で、単一の比較操作のみが必要です。しかし、目標値以下のハッシュ値を見つけることは、総当たり列挙によってのみ実現できます。検証は簡単だが結果を見つけることが難しいというこの特性は、計算的非対称性として知られています。
以下のコードは、マイニングプロセスをシミュレートします。まず、ブロックヘッダーデータ文字列「geekbang」から始まり、10,000のノンス値から順次検索して、指定された条件を満たすノンスを見つけるまで続けます。
こちらはマイニングプロセスを示すPythonスクリプトです。
import hashlibdef main(): base_string = "geekbang" nonce = 10000 count = 0 while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string.encode()).hexdigest() count += 1 if pow_hash.startswith("0000"): # first 4 hex digits are 0, equivalent to the first 16 bits being 0 print("hash:", pow_hash) print("nonce:", nonce, "scan times:", count) break nonce += 1if __name__ == '__main__': main()
ハッシュ結果の最初の4桁がゼロであること(16ビット目がゼロであることに相当する)が要件である場合、計算回数は約58,000です。要件を最初の5桁がゼロに増やすと、計算回数は123万に増加します。要件が最初の7桁がゼロである場合、計算回数は1億6000万に達します。これは、ハッシュ接頭辞の各追加のゼロが計算を約16倍増加させることを示しています。
異なるターゲット条件の結果はこちらです:
最初の4桁はゼロです(16ビット):
import hashlib
def main():
base_string = "geekbang"nonce = 10000count = 0while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith("0000"): # 前4个16进制位是0,相当于前16个比特位是0 print pow_hash print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png" scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1
if 名前 == ‘メイン‘:
main()
上記の通り、ハッシュで先頭ゼロの数を増やす必要があると、必要な試行回数が著しく増加し、指数関数的な成長パターンをたどります。これは、マイニングの計算的な難しさとリソースの必要性を示しており、マイニングプロセスにおいて高性能なコンピューティングデバイスが必要であることを強調しています。
ブロックが約10分ごとに生成されるようにするために、ビットコインシステムはマイニングの難易度を調整します。この難易度調整メカニズムはビットコインシステムの重要な部分です。理想的には、最後の2016ブロックの生成にかかった時間は約2週間です。もしこれらのブロックが2週間未満で生成された場合、難易度は先頭のゼロの数を増やすことによって上昇します(ターゲット値を下げます)。逆に、2週間以上かかった場合、難易度は先頭のゼロの数を減らすことによって下がります(ターゲット値を上げます)。このメカニズムにより、ネットワークの総ハッシュレートが変動しても、ブロックを生成する時間が約10分に保たれます。
この難易度調整メカニズムは、ビットコインの創設者であるサトシ・ナカモトによって設計され、ネットワークの合計計算能力に自動的に適応するように計画されています。これにより、安定したマイニングペースが維持され、市場経済が乱れる可能性のある急速な通貨発行を防止します。
異なるブロックチェーンプロジェクトには、さまざまなマイニングアルゴリズムがあります。ここでは、最も有名なものであるビットコインのマイニングアルゴリズムについて説明します。
ビットコインの基盤となるマイニングアルゴリズムの実行プロセスは次のとおりです:
ブロックヘッダー内の各フィールドのサイズは次のとおりです:
https://time.geekbang.org/column/article/5963
alt="">マークルツリーの構造は次のようになっています:
大后端私房菜]. alt="">
マイニングに関連する主な論争は、ビットコインおよびその派生物で使用されているプルーフ・オブ・ワーク(PoW)アルゴリズムに関わるものです。これらのアルゴリズムは、マイナーに対して、ネットワーク全体で合意された問題を解くために多大な計算リソースを割り当てる必要があります。多くの人々が同時にこれらの計算に取り組んでいますが、問題を最初に解いた者だけが報酬を得ます。その他の参加者の計算および電気リソースは事実上無駄になり、追加の価値を生み出しません。
この資源の浪費を最適化するための主要な方法は2つあります:
マイニングの価値は何ですか?リソースの無駄のように見え、社会にとって意味がないようです。
この記事の「マイニングがなぜ必要なのか?」セクションを再検討すると、マイニングの直接的な意義は、デジタル通貨の発行を支援することです。マイニング報酬は、より多くの人々がデジタル通貨を維持することに参加するように促し、より安定したものにします。加えて、マイニングアルゴリズムは、デジタル通貨システム内でのトランザクションの一貫性を維持し、内部および外部攻撃に対してより堅牢でより強力にします。
マイニングの間接的な意義は、デジタル通貨そのものから派生しています。デジタル通貨は、中央集権化の欠点を回避しながら、セキュアな取引が中央集権化された機関の必要性なしに発生する、グローバルで信頼性の高い通貨システムを創造します。グローバルな性質により、効率的かつ低コストな国境を越えた取引も可能となります。
マイニングのリターンがコストを下回るまで減少し、マイナーがマイニングを停止し、取引が停止する地点に達する可能性はありますか?
マイニングの収益は時間とともに減少するシステムリワードに依存するという懸念が一般的です。しかし、マイニングは取引手数料からも大きな収入を生み出します。デジタル通貨がより広く受け入れられるにつれて、デジタル通貨取引市場も拡大します。この増加した取引量はブロックの含まれるための競争を激化させ、ユーザーは自分の取引を優先させるために支払いを意欲的に行うようになります。その結果、マイナーは依然として相当な取引手数料を稼ぎ続けることができ、取引処理の持続可能性が確保されます。
取引手数料はマイニングコストを補いますか?
はい、トランザクション手数料はマイニングのコストを補償するのに役立ちます。ブロック報酬が時間とともに減少するにつれて、トランザクション手数料はマイナーの重要な収入源となります。これにより、電力費が高くても、ユーザーがトランザクション処理のために支払う手数料によってマイナーは運営を維持することができます。
複数のマイナーが新しいブロックを同時にブロードキャストした場合、マイニング報酬は分割されますか?
いいえ。もし複数のマイナーがパズルを解いて新しいブロックを同時にブロードキャストした場合、ブロックチェーンに一時的なフォークが作成されます。以下がその動作方法です:
例:
51%攻撃とは何ですか、そしてなぜスーパーノードは詐欺をしませんか?
51%攻撃は、単一の実体またはグループがネットワークの計算能力の50%以上を制御する場合に発生します。スーパーノードが通常のチートをしない理由は次のとおりです:
ブロックチェーンは意図的な中断や不正取引をどのように防止していますか?
マイナーによる一貫性のないブロック配布の防止
定義と機能:ブロックチェーンネットワークにおいて、まだブロックに含まれていないすべての放送トランザクションは、ネットワークノードのメモリプール(メムプール)に一時的に保存されます。マイナーは、新しいブロックを構築するためにトランザクションを選択するために自分のメムプールを監視します。
トランザクション選択戦略:マイナーは、自分の戦略に基づいてメンプールからトランザクションを選択することができます。一般的には、手数料が高いトランザクションを優先しますが、一部のマイナーはトランザクションの年齢(メンプール内での経過時間)など、他の要素も考慮する場合もあります。
誰が参加し、どのように稼ぐか:ユーザーとは別に、ビットコインシステムの主な参加者は、マイナー、開発者、ノードオペレーターの3人です。
GPU価格の上昇:マイニング目的でのマイナーによるGPUに対する高い需要により、供給不足が発生し、価格が上昇しています。
マイニングgpus:マイニングgpusとは、以前に仮想通貨のマイニングに使用されたものです。これらのgpusは集中的な計算を行い、かなりの摩耗が生じます。性能が低下したため、ほとんどの人々が使用済みのマイニングgpusを購入することを好みません。
完全な冗長ストレージ要件:はい、マイナーはトークンが以前に使用されていないかを検証し、台帳のセキュリティと整合性を確保するために、全体のブロックチェーン台帳を保存する必要があります。ただし、非常に初期のブロックに関しては、マイナーはブロックのヘッダーのみを保存すればよく、ブロックの内容全体を保存する必要はありません。これにより、ブロックチェーンの効率を維持しながら、セキュリティを確保することができます。
2,100万ビットコインを超える自動報酬なし:ビットコインの総供給量が上限の2,100万ビットコインに達すると、システムはマイナーへの報酬として新しいビットコインを発行しなくなります。ユーザーが取引手数料の支払いを望まない場合、理論的には、取引システムは運用上の課題に直面する可能性があります。しかし、ユーザーは取引を処理するために取引手数料を支払うことをいとわない可能性が高く、システムの継続性を確保します。
ブロックの高さは、採掘者が採掘し、取引を新しいブロックにパッケージ化する限り、2100万ビットコインの最大供給に達した後も引き続き増加し続けます。ブロックの高さ(総ブロック数)はビットコインの供給上限によって制限されません。
コンセンサス変更の可能性:コミュニティはコンセンサスルールの変更を提案することができます。例えば、必要に応じて新しいコインの生成を許可するために、ビットコインの総供給量を増やすなどの変更が考えられます。
コインベーストランザクション:ビットコインブロックチェーンでは、マイナーの報酬は「コインベーストランザクション」または「ブロック報酬」として知られる特別な取引を通じて分配されます。この取引にはユニークな特性があります:
ブロックごとの収益計算:マイナーの収益は、ブロックが正常にマイニングされ、ネットワークのコンセンサスメカニズムによって確認されるたびに計算されます。ブロックをマイニングするマイナー(またはマイニングプール)は、ブロックに含まれるすべてのトランザクションからブロック報酬と累積トランザクション手数料を受け取ります。
報酬を受け取るプロセス: マイナーまたはマイニングプールがブロックを採掘し、ネットワークによって確認された後、ブロック報酬と取引手数料を受け取ります。これはコインベーストランザクションを介して実行され、手数料と報酬が未使用取引出力(UTXO)に変換され、マイナーのアカウントに入金されます。
連続的な作成:ブロックはブロックチェーン上で連続的に作成されます。前のブロックが正常にマイニングされ、チェーンに追加された後に、新しいブロックが作成されることができます。
ブロックごとに複数のトランザクション: 通常、ブロックには複数のトランザクションが含まれます。マイナーは、トランザクションを個別にパッケージ化するのではなく、トランザクション手数料の収益を最大化するために、できるだけ多くのトランザクションを含めます。
部分的に埋まったブロック:ほとんどのブロックは完全に活用されていません。ブロックが完全に埋まっているかどうかに関係なく、マイナーは難易度の要件を満たす有効なハッシュを見つけるとすぐに次のブロックの作業を開始します。
空のブロック: トランザクションが含まれていなくても、ブロックをマイニングすることができます。これらのブロックは空のブロックと呼ばれ、マイナーにシステム報酬を提供します。
最長チェーンルール:フォークが発生すると、ネットワークは最も累積されたプルーフオブワーク(通常は最長のチェーン)を持つチェーンをたどります。ノードは、どちらにより多くの作業が費やされているかが明らかになると、より長いチェーンに切り替わります。
ダブルスペンドの解決:
検証プロセス:
取引手数料の計算:ユーザーは取引手数料を制御して、取引の確認を迅速化できます。料金は、次の式によって決定されます。
手数料=総入力-総出力-おつり
ユーザーは、入力金額、出力金額、およびお釣り金額を調整して取引手数料を設定します。
収益分配:プールでマイニングを行う場合、プールノードはブロック報酬を受け取ります。その後、プールは参加メンバーの計算能力に基づいて収益を分配します。この分配は、マイナーのウォレットへの送金を通じて実行されます。
利己的なマイニング:利己的なマイニングは、マイナー(またはマイニングプール)が新しいブロックを見つけるが、すぐにはそれをブロードキャストしない戦略です。代わりに、彼らは自分のチェーン(隠しチェーン)で個人的にマイニングを続けます。追加のブロックを見つけると、それらを一斉にブロードキャストします。これにより、他のマイナーの作業が無効になり、計算能力と報酬が利己的なマイナーに傾く可能性があります。ビットコインは、ブロードキャストプロトコルを改善することで、利己的なマイニングの影響 mitiGate.io ことができます。
トランザクションの検証:トランザクションがノードにブロードキャストされると、それがメンプールに追加されるべきかどうかを判断するために、いくつかのチェックを受けます。
ブロックの検証:マイナーノードが新しいブロックを受信すると、ブロックとそのトランザクションに対して詳細なチェックを行います:
[1] 講義12 |詳細なブロックチェーン技術(4):PoWコンセンサス-ブロックチェーンの詳細な説明-オタク時間:免責事項:
forward the original title ‘白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?’
ブロックチェーンに関連する最も馴染み深い概念の1つはおそらくマイニングです。多くの人々が何度もマイニングについて聞いたことがあるかもしれませんが、実際には何を意味するのかはよくわからないかもしれません。このセクションでは、通常のプログラムを中断して最初に「マイニング」を紹介します。
「プレーンブロックチェーン1:ビットコインの紹介(ブロックチェーン革命の先駆者で主権通貨の挑戦者)」からの内容の簡単な要約です。ここでは、中本哲史がビットコインの通貨システムを設計し、ブックキーピングの報酬を通貨発行とリンクさせました。このアプローチにより、通貨発行をブックキーピングプロセスで自動化することができ、通貨発行の問題を解決しながら、ブックキーパーが積極的に参加することを促します。
現実世界では、マイニングは鉱山から岩に隠された貴重な金属を掘り出すために、鉱夫がさまざまなツールを使用することを意味します。鉱夫はこれら自然に隠された希少な金属から価値を抽出し、物理労働を通じてその価値を得ます。
ブロックチェーンプロジェクトでは(通常デジタル通貨プロジェクト)、ネットワークノードは計算リソースを消費して問題を解決します。解決策を見つけると、ブロックをパッケージ化し、新たに発行された通貨の形で報酬を受け取ります。このプロセスは、鉱石から金などの貴金属を抽出することに類似しているため、「マイニング」と呼ばれています。ここで、ブックキーパーはマイナーであり、ハードウェアと電力を使用してブロックをパッケージ化するために競争し、新しい通貨が作成されます。
マイニングには主に2つの目的があります。最近の取引をブロックにまとめ、ブロックチェーンにリンクして確認すること、そしてブックキーパーに報酬を与えることで新しい通貨を発行することです。以下に、マイニングの詳細な機能が示されています。
マイニング参加者は、ブロックチェーンにブロックを正常にパッケージングすることで、大きな報酬を受け取るため、マイニングに参加する動機づけを受けます。これらの報酬は、主に2つの主要な源泉から提供されます:
時間の経過とともに、ブロック報酬は減少します(例えば、ビットコインのハーフィングメカニズムにより、報酬はおおよそ4年ごとに半減されます)。最終的には、21億ビットコインが全てマイニングされた後、予想されるのは2141年頃で、自動ブロック報酬は存在しなくなり、取引手数料がマイナーの主な収入源となります。
ビットコインは約10分ごとに新しいブロックを生成します。最初に、各新しいブロックが50ビットコインを生成します。この報酬は4年ごとに半減し、現在までに4回の半減イベントがありました。現在、各ブロックは3.125ビットコインを生成し、最新の半減は2024年4月に発生しました。次の半減は2028年ごろを予想しています。約2141年までに、ビットコインの発行上限に到達します。
取引手数料は供給と需要だけでなく、取引のサイズにも影響されます。手数料は取引がブロック内で占めるスペースに比例しています。
マイニングに参加するマイナーにとって、マイニングは簡単です。デジタル通貨ウォレットクライアントをダウンロードし、クライアント内でマイニングボタンをクリックしてマイニングを開始します。
ブロックチェーンプロジェクトのブロック報酬には、通常、マイニングアルゴリズムがウォレットに統合されたスクリプトに記述されています。マイナーは単にボタンをクリックしてスクリプトを開始するだけです。
マイニングアルゴリズムは決定論的であり、マイナーがアルゴリズムを継続的に実行すれば、最終的に結果を得ることができます。しかし、計算リソースの違いにより、この結果を計算するために必要な時間はマイナー間で異なる場合があります。ノードが目標値を計算すると、その期間中の他のマイナーの努力は無駄になり、物理的なリソースの消耗によるマイナスのリターンが生じます。
無駄な労力を避けるために、マイナーはマイニングプールノードに参加して計算リソースをプールすることがよくあります。このノードは他のノードと同様に動作しますが、計算能力が大幅に向上しています。プールがブロックのマイニングに成功すると、報酬は参加マイナーの貢献した計算リソースに基づいて分配されます。ブロックチェーン上では、ブロックをパッケージ化するものとして記録されたマイナーはマイニングプールノードであり、個々のマイナーは通貨システムから直接ではなく、プールによって割り当てられた報酬のシェアを受け取ることに注意することが重要です。
高効率なマイニングチップを製造する企業であるBitmainは、マイニングプールの役割を固め、帳簿の中央集権化に貢献しています。
ブロックチェーンプロジェクトが異なれば、マイニングパズルや難易度も異なる場合があります。ここでは、ビットコインを例にとります。ビットコインで使用されるマイニングアルゴリズムは、プルーフ・オブ・ワーク(POW)と呼ばれます。このアルゴリズムの本質は、結果を得るためには、それを証明するためにある程度の作業を費やす必要があるということです。
マイニングパズルは伝統的な数学的問題ではなく、ランダムな数字(nonce)を見つけることが必要です。このnonceは、ブロック内のデータと組み合わせてハッシュ関数を処理すると、特定の条件を満たすハッシュ値を生成する必要があります。通常、この条件はハッシュ値が目標値以下である必要があります(または、同等に、ハッシュ値の最初のnビットがゼロである必要があります)。式は以下のようになります:hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target
ビットコインは、任意の長さの入力を256ビット(16進数で64桁または32バイト)の固定長出力に変換するSHA-256ハッシュ関数を使用しています。出力はほぼランダムですが、同じ入力に対しては必ず同じです。マイニングは、ノンスを連続的に変更し、SHA-256を使用してブロックヘッダーデータをハッシュ化して、目標条件を満たすハッシュ値が見つかるまで続ける作業です。
たとえば、最初の30ビットがゼロであるsha-256ハッシュ値:000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110
これを16進数に変換すると、7つのゼロで始まる値になります:00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90
簡単に言うと、最初のnビットがゼロであるハッシュを見つける確率は12n\frac{1}{2^n}2n1です。nが大きいほど、ゼロのビットが多くなり、確率が低くなります。
nが256になると、現在の人間の計算能力では、量子コンピュータを除いて、そのようなハッシュ値を見つけることは地球が存在しなくなる前に事実上不可能です。
sha-256の特性により、唯一の方法はブルートフォースです。これは、条件が満たされるまで、非常に多くのノンスを試行することを意味します。このため、マイニングには高性能なコンピューティング機器が必要です。
ノンスをブロックデータに追加し、それをsha-256を通して渡すことで生成されるハッシュ値を予測することはできないため、プロセスは完全にランダムです。たとえば、ターゲットのハッシュ値が10,000の場合、どのノンスがブロックデータと組み合わさって10,000未満のハッシュ値を生成するかはわかりません。この予測不可能でランダムな性質は、マイナーが条件が満たされるまで可能性を列挙し続けなければならないことを意味します。条件を満たす複数の値がある場合は、最小のハッシュ値が選択されます。なぜなら、より小さいハッシュ値は高い難易度と低い発生確率を示すからです。
生成されたハッシュ値が要件を満たすかどうかを検証することは簡単で、単一の比較操作のみが必要です。しかし、目標値以下のハッシュ値を見つけることは、総当たり列挙によってのみ実現できます。検証は簡単だが結果を見つけることが難しいというこの特性は、計算的非対称性として知られています。
以下のコードは、マイニングプロセスをシミュレートします。まず、ブロックヘッダーデータ文字列「geekbang」から始まり、10,000のノンス値から順次検索して、指定された条件を満たすノンスを見つけるまで続けます。
こちらはマイニングプロセスを示すPythonスクリプトです。
import hashlibdef main(): base_string = "geekbang" nonce = 10000 count = 0 while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string.encode()).hexdigest() count += 1 if pow_hash.startswith("0000"): # first 4 hex digits are 0, equivalent to the first 16 bits being 0 print("hash:", pow_hash) print("nonce:", nonce, "scan times:", count) break nonce += 1if __name__ == '__main__': main()
ハッシュ結果の最初の4桁がゼロであること(16ビット目がゼロであることに相当する)が要件である場合、計算回数は約58,000です。要件を最初の5桁がゼロに増やすと、計算回数は123万に増加します。要件が最初の7桁がゼロである場合、計算回数は1億6000万に達します。これは、ハッシュ接頭辞の各追加のゼロが計算を約16倍増加させることを示しています。
異なるターゲット条件の結果はこちらです:
最初の4桁はゼロです(16ビット):
import hashlib
def main():
base_string = "geekbang"nonce = 10000count = 0while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith("0000"): # 前4个16进制位是0,相当于前16个比特位是0 print pow_hash print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png" scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1
if 名前 == ‘メイン‘:
main()
上記の通り、ハッシュで先頭ゼロの数を増やす必要があると、必要な試行回数が著しく増加し、指数関数的な成長パターンをたどります。これは、マイニングの計算的な難しさとリソースの必要性を示しており、マイニングプロセスにおいて高性能なコンピューティングデバイスが必要であることを強調しています。
ブロックが約10分ごとに生成されるようにするために、ビットコインシステムはマイニングの難易度を調整します。この難易度調整メカニズムはビットコインシステムの重要な部分です。理想的には、最後の2016ブロックの生成にかかった時間は約2週間です。もしこれらのブロックが2週間未満で生成された場合、難易度は先頭のゼロの数を増やすことによって上昇します(ターゲット値を下げます)。逆に、2週間以上かかった場合、難易度は先頭のゼロの数を減らすことによって下がります(ターゲット値を上げます)。このメカニズムにより、ネットワークの総ハッシュレートが変動しても、ブロックを生成する時間が約10分に保たれます。
この難易度調整メカニズムは、ビットコインの創設者であるサトシ・ナカモトによって設計され、ネットワークの合計計算能力に自動的に適応するように計画されています。これにより、安定したマイニングペースが維持され、市場経済が乱れる可能性のある急速な通貨発行を防止します。
異なるブロックチェーンプロジェクトには、さまざまなマイニングアルゴリズムがあります。ここでは、最も有名なものであるビットコインのマイニングアルゴリズムについて説明します。
ビットコインの基盤となるマイニングアルゴリズムの実行プロセスは次のとおりです:
ブロックヘッダー内の各フィールドのサイズは次のとおりです:
https://time.geekbang.org/column/article/5963
alt="">マークルツリーの構造は次のようになっています:
大后端私房菜]. alt="">
マイニングに関連する主な論争は、ビットコインおよびその派生物で使用されているプルーフ・オブ・ワーク(PoW)アルゴリズムに関わるものです。これらのアルゴリズムは、マイナーに対して、ネットワーク全体で合意された問題を解くために多大な計算リソースを割り当てる必要があります。多くの人々が同時にこれらの計算に取り組んでいますが、問題を最初に解いた者だけが報酬を得ます。その他の参加者の計算および電気リソースは事実上無駄になり、追加の価値を生み出しません。
この資源の浪費を最適化するための主要な方法は2つあります:
マイニングの価値は何ですか?リソースの無駄のように見え、社会にとって意味がないようです。
この記事の「マイニングがなぜ必要なのか?」セクションを再検討すると、マイニングの直接的な意義は、デジタル通貨の発行を支援することです。マイニング報酬は、より多くの人々がデジタル通貨を維持することに参加するように促し、より安定したものにします。加えて、マイニングアルゴリズムは、デジタル通貨システム内でのトランザクションの一貫性を維持し、内部および外部攻撃に対してより堅牢でより強力にします。
マイニングの間接的な意義は、デジタル通貨そのものから派生しています。デジタル通貨は、中央集権化の欠点を回避しながら、セキュアな取引が中央集権化された機関の必要性なしに発生する、グローバルで信頼性の高い通貨システムを創造します。グローバルな性質により、効率的かつ低コストな国境を越えた取引も可能となります。
マイニングのリターンがコストを下回るまで減少し、マイナーがマイニングを停止し、取引が停止する地点に達する可能性はありますか?
マイニングの収益は時間とともに減少するシステムリワードに依存するという懸念が一般的です。しかし、マイニングは取引手数料からも大きな収入を生み出します。デジタル通貨がより広く受け入れられるにつれて、デジタル通貨取引市場も拡大します。この増加した取引量はブロックの含まれるための競争を激化させ、ユーザーは自分の取引を優先させるために支払いを意欲的に行うようになります。その結果、マイナーは依然として相当な取引手数料を稼ぎ続けることができ、取引処理の持続可能性が確保されます。
取引手数料はマイニングコストを補いますか?
はい、トランザクション手数料はマイニングのコストを補償するのに役立ちます。ブロック報酬が時間とともに減少するにつれて、トランザクション手数料はマイナーの重要な収入源となります。これにより、電力費が高くても、ユーザーがトランザクション処理のために支払う手数料によってマイナーは運営を維持することができます。
複数のマイナーが新しいブロックを同時にブロードキャストした場合、マイニング報酬は分割されますか?
いいえ。もし複数のマイナーがパズルを解いて新しいブロックを同時にブロードキャストした場合、ブロックチェーンに一時的なフォークが作成されます。以下がその動作方法です:
例:
51%攻撃とは何ですか、そしてなぜスーパーノードは詐欺をしませんか?
51%攻撃は、単一の実体またはグループがネットワークの計算能力の50%以上を制御する場合に発生します。スーパーノードが通常のチートをしない理由は次のとおりです:
ブロックチェーンは意図的な中断や不正取引をどのように防止していますか?
マイナーによる一貫性のないブロック配布の防止
定義と機能:ブロックチェーンネットワークにおいて、まだブロックに含まれていないすべての放送トランザクションは、ネットワークノードのメモリプール(メムプール)に一時的に保存されます。マイナーは、新しいブロックを構築するためにトランザクションを選択するために自分のメムプールを監視します。
トランザクション選択戦略:マイナーは、自分の戦略に基づいてメンプールからトランザクションを選択することができます。一般的には、手数料が高いトランザクションを優先しますが、一部のマイナーはトランザクションの年齢(メンプール内での経過時間)など、他の要素も考慮する場合もあります。
誰が参加し、どのように稼ぐか:ユーザーとは別に、ビットコインシステムの主な参加者は、マイナー、開発者、ノードオペレーターの3人です。
GPU価格の上昇:マイニング目的でのマイナーによるGPUに対する高い需要により、供給不足が発生し、価格が上昇しています。
マイニングgpus:マイニングgpusとは、以前に仮想通貨のマイニングに使用されたものです。これらのgpusは集中的な計算を行い、かなりの摩耗が生じます。性能が低下したため、ほとんどの人々が使用済みのマイニングgpusを購入することを好みません。
完全な冗長ストレージ要件:はい、マイナーはトークンが以前に使用されていないかを検証し、台帳のセキュリティと整合性を確保するために、全体のブロックチェーン台帳を保存する必要があります。ただし、非常に初期のブロックに関しては、マイナーはブロックのヘッダーのみを保存すればよく、ブロックの内容全体を保存する必要はありません。これにより、ブロックチェーンの効率を維持しながら、セキュリティを確保することができます。
2,100万ビットコインを超える自動報酬なし:ビットコインの総供給量が上限の2,100万ビットコインに達すると、システムはマイナーへの報酬として新しいビットコインを発行しなくなります。ユーザーが取引手数料の支払いを望まない場合、理論的には、取引システムは運用上の課題に直面する可能性があります。しかし、ユーザーは取引を処理するために取引手数料を支払うことをいとわない可能性が高く、システムの継続性を確保します。
ブロックの高さは、採掘者が採掘し、取引を新しいブロックにパッケージ化する限り、2100万ビットコインの最大供給に達した後も引き続き増加し続けます。ブロックの高さ(総ブロック数)はビットコインの供給上限によって制限されません。
コンセンサス変更の可能性:コミュニティはコンセンサスルールの変更を提案することができます。例えば、必要に応じて新しいコインの生成を許可するために、ビットコインの総供給量を増やすなどの変更が考えられます。
コインベーストランザクション:ビットコインブロックチェーンでは、マイナーの報酬は「コインベーストランザクション」または「ブロック報酬」として知られる特別な取引を通じて分配されます。この取引にはユニークな特性があります:
ブロックごとの収益計算:マイナーの収益は、ブロックが正常にマイニングされ、ネットワークのコンセンサスメカニズムによって確認されるたびに計算されます。ブロックをマイニングするマイナー(またはマイニングプール)は、ブロックに含まれるすべてのトランザクションからブロック報酬と累積トランザクション手数料を受け取ります。
報酬を受け取るプロセス: マイナーまたはマイニングプールがブロックを採掘し、ネットワークによって確認された後、ブロック報酬と取引手数料を受け取ります。これはコインベーストランザクションを介して実行され、手数料と報酬が未使用取引出力(UTXO)に変換され、マイナーのアカウントに入金されます。
連続的な作成:ブロックはブロックチェーン上で連続的に作成されます。前のブロックが正常にマイニングされ、チェーンに追加された後に、新しいブロックが作成されることができます。
ブロックごとに複数のトランザクション: 通常、ブロックには複数のトランザクションが含まれます。マイナーは、トランザクションを個別にパッケージ化するのではなく、トランザクション手数料の収益を最大化するために、できるだけ多くのトランザクションを含めます。
部分的に埋まったブロック:ほとんどのブロックは完全に活用されていません。ブロックが完全に埋まっているかどうかに関係なく、マイナーは難易度の要件を満たす有効なハッシュを見つけるとすぐに次のブロックの作業を開始します。
空のブロック: トランザクションが含まれていなくても、ブロックをマイニングすることができます。これらのブロックは空のブロックと呼ばれ、マイナーにシステム報酬を提供します。
最長チェーンルール:フォークが発生すると、ネットワークは最も累積されたプルーフオブワーク(通常は最長のチェーン)を持つチェーンをたどります。ノードは、どちらにより多くの作業が費やされているかが明らかになると、より長いチェーンに切り替わります。
ダブルスペンドの解決:
検証プロセス:
取引手数料の計算:ユーザーは取引手数料を制御して、取引の確認を迅速化できます。料金は、次の式によって決定されます。
手数料=総入力-総出力-おつり
ユーザーは、入力金額、出力金額、およびお釣り金額を調整して取引手数料を設定します。
収益分配:プールでマイニングを行う場合、プールノードはブロック報酬を受け取ります。その後、プールは参加メンバーの計算能力に基づいて収益を分配します。この分配は、マイナーのウォレットへの送金を通じて実行されます。
利己的なマイニング:利己的なマイニングは、マイナー(またはマイニングプール)が新しいブロックを見つけるが、すぐにはそれをブロードキャストしない戦略です。代わりに、彼らは自分のチェーン(隠しチェーン)で個人的にマイニングを続けます。追加のブロックを見つけると、それらを一斉にブロードキャストします。これにより、他のマイナーの作業が無効になり、計算能力と報酬が利己的なマイナーに傾く可能性があります。ビットコインは、ブロードキャストプロトコルを改善することで、利己的なマイニングの影響 mitiGate.io ことができます。
トランザクションの検証:トランザクションがノードにブロードキャストされると、それがメンプールに追加されるべきかどうかを判断するために、いくつかのチェックを受けます。
ブロックの検証:マイナーノードが新しいブロックを受信すると、ブロックとそのトランザクションに対して詳細なチェックを行います:
[1] 講義12 |詳細なブロックチェーン技術(4):PoWコンセンサス-ブロックチェーンの詳細な説明-オタク時間:免責事項: