マイニングの謎を解明する

初級編7/15/2024, 6:30:04 AM
この記事では、ブロックチェーンにおける「マイニング」プロセスについて詳しく紹介します。伝統的な鉱業活動との類似性を引きながら、トランザクションの検証と新しい通貨の発行のために計算リソースを使用して数学的な問題を解決するデジタルマイニングの基本的な概念を説明します。

forward the original title ‘白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?’

ブロックチェーンに関連する最も馴染み深い概念の1つはおそらくマイニングです。多くの人々が何度もマイニングについて聞いたことがあるかもしれませんが、実際には何を意味するのかはよくわからないかもしれません。このセクションでは、通常のプログラムを中断して最初に「マイニング」を紹介します。

「プレーンブロックチェーン1:ビットコインの紹介(ブロックチェーン革命の先駆者で主権通貨の挑戦者)」からの内容の簡単な要約です。ここでは、中本哲史がビットコインの通貨システムを設計し、ブックキーピングの報酬を通貨発行とリンクさせました。このアプローチにより、通貨発行をブックキーピングプロセスで自動化することができ、通貨発行の問題を解決しながら、ブックキーパーが積極的に参加することを促します。

1. マイニングとは何ですか?

現実世界では、マイニングは鉱山から岩に隠された貴重な金属を掘り出すために、鉱夫がさまざまなツールを使用することを意味します。鉱夫はこれら自然に隠された希少な金属から価値を抽出し、物理労働を通じてその価値を得ます。

ブロックチェーンプロジェクトでは(通常デジタル通貨プロジェクト)、ネットワークノードは計算リソースを消費して問題を解決します。解決策を見つけると、ブロックをパッケージ化し、新たに発行された通貨の形で報酬を受け取ります。このプロセスは、鉱石から金などの貴金属を抽出することに類似しているため、「マイニング」と呼ばれています。ここで、ブックキーパーはマイナーであり、ハードウェアと電力を使用してブロックをパッケージ化するために競争し、新しい通貨が作成されます。

2. マイニングはなぜ必要ですか?

マイニングには主に2つの目的があります。最近の取引をブロックにまとめ、ブロックチェーンにリンクして確認すること、そしてブックキーパーに報酬を与えることで新しい通貨を発行することです。以下に、マイニングの詳細な機能が示されています。

  1. ブックキーパーの選択: 実際のブックキーパーを数多くの候補者から選択するためには戦略が必要です。マイニングの結果がこの選択の基準として使用され、すべての取引がすべての参加者によって認識され、ネットワーク全体でコンセンサスが達成されることが確認されます。
  2. トランザクションの検証:各ビットコインの取引は、ネットワーク内のマイナーによって検証される必要があります。このプロセスによって取引の妥当性が確認されます。
    • トランザクションのフォーマットとサイズが仕様に合致していることを確認する。
    • 関連する秘密鍵を保有するユーザーによって開始されたことを確認するために、各トランザクションの署名の有効性を検証します。
    • 支払いに使用されるトークンが二重に支出されていないことを確認し、入力金額が出力金額を超えていること(金額の一部が手数料として取られる)、
    • トランザクションが以前にブロックに含まれていないことを確認します。
  3. 新しい通貨の発行:マイニングは新しいビットコインが流通する方法でもあります。マイナーが新しいブロックを採掘に成功すると、報酬として一定量のビットコインを受け取ります。この報酬メカニズムは、マイニングに参加することを促すだけでなく、ビットコインの発行方法としても機能します。通貨の発行方法により、通貨の流通量が着実に制御された速度で増えることが確保され、インフレを管理するのに役立っています。
  4. 参加を促進する:報酬メカニズムは、通貨システムの維持に参加する人々を増やし、その持続的かつ堅牢な発展を促進します。
  5. ネットワークのセキュリティと分散化を強化するために、マイニングからの報酬は多数のマイナーを引き寄せ、分散した計算能力をもたらします。この分散化により、単一のエンティティが計算能力の50%を制御することはありませんので、システムの透明性とセキュリティが向上します。最長チェーンの原則に従うことで、さらにシステムのセキュリティが向上します。

3. マイナーたちはなぜマイニングに参加するのでしょうか?

マイニング参加者は、ブロックチェーンにブロックを正常にパッケージングすることで、大きな報酬を受け取るため、マイニングに参加する動機づけを受けます。これらの報酬は、主に2つの主要な源泉から提供されます:

  • ブロック報酬(新たに発行された通貨):通貨システムは自動的に新しい通貨を発行し、それは完全にマイナーに支払われます。例えば、ビットコインシステムでは現在、マイナーは1つのブロックごとに3.125ビットコインを受け取ります。1ビットコインが約$65,000で評価されていることを考慮すると、1つのブロックをパッケージ化することで20万ドル以上、約147万人民元を得ることができます。
  • ユーザーが支払う取引手数料:取引記録を保持するブロックの容量が限られているため、一部のユーザーは取引手数料を支払って、マイナーが取引を優先してより迅速な確認を行うようにインセンティブを与えています。ブロックに含めるトランザクションをプールから選択する場合、マイナーは手数料の高いトランザクションを選択する傾向があります。ブロックには何千ものトランザクションを含めることができ、これらのトランザクションからのすべての手数料はマイナーに送られ、別の重要な収入源となります。取引にビットコインを使用する人が増えるにつれて、ブロックに含めるための競争が激化し、ユーザーが喜んで支払う手数料が高くなります。

時間の経過とともに、ブロック報酬は減少します(例えば、ビットコインのハーフィングメカニズムにより、報酬はおおよそ4年ごとに半減されます)。最終的には、21億ビットコインが全てマイニングされた後、予想されるのは2141年頃で、自動ブロック報酬は存在しなくなり、取引手数料がマイナーの主な収入源となります。

ヒント

ビットコインは約10分ごとに新しいブロックを生成します。最初に、各新しいブロックが50ビットコインを生成します。この報酬は4年ごとに半減し、現在までに4回の半減イベントがありました。現在、各ブロックは3.125ビットコインを生成し、最新の半減は2024年4月に発生しました。次の半減は2028年ごろを予想しています。約2141年までに、ビットコインの発行上限に到達します。

取引手数料は供給と需要だけでなく、取引のサイズにも影響されます。手数料は取引がブロック内で占めるスペースに比例しています。

4. マイニングへの参加方法

マイニングに参加するマイナーにとって、マイニングは簡単です。デジタル通貨ウォレットクライアントをダウンロードし、クライアント内でマイニングボタンをクリックしてマイニングを開始します。

ブロックチェーンプロジェクトのブロック報酬には、通常、マイニングアルゴリズムがウォレットに統合されたスクリプトに記述されています。マイナーは単にボタンをクリックしてスクリプトを開始するだけです。

マイニングアルゴリズムは決定論的であり、マイナーがアルゴリズムを継続的に実行すれば、最終的に結果を得ることができます。しかし、計算リソースの違いにより、この結果を計算するために必要な時間はマイナー間で異なる場合があります。ノードが目標値を計算すると、その期間中の他のマイナーの努力は無駄になり、物理的なリソースの消耗によるマイナスのリターンが生じます。

無駄な労力を避けるために、マイナーはマイニングプールノードに参加して計算リソースをプールすることがよくあります。このノードは他のノードと同様に動作しますが、計算能力が大幅に向上しています。プールがブロックのマイニングに成功すると、報酬は参加マイナーの貢献した計算リソースに基づいて分配されます。ブロックチェーン上では、ブロックをパッケージ化するものとして記録されたマイナーはマイニングプールノードであり、個々のマイナーは通貨システムから直接ではなく、プールによって割り当てられた報酬のシェアを受け取ることに注意することが重要です。

高効率なマイニングチップを製造する企業であるBitmainは、マイニングプールの役割を固め、帳簿の中央集権化に貢献しています。

5. マイニングパズルの具体的な内容

ブロックチェーンプロジェクトが異なれば、マイニングパズルや難易度も異なる場合があります。ここでは、ビットコインを例にとります。ビットコインで使用されるマイニングアルゴリズムは、プルーフ・オブ・ワーク(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 = 10n = 10n = 10: 1 in 1,024
  • n=20n = 20n=20: 1 in 1,048,576
  • n=30n = 30n=30: 1 in 1,073,741,824
  • n = 40: 1 in 1,099,511,627,776
  • n=50n = 50n=50: 1 in 1,125,899,906,842,624

nが256になると、現在の人間の計算能力では、量子コンピュータを除いて、そのようなハッシュ値を見つけることは地球が存在しなくなる前に事実上不可能です。

sha-256の特性により、唯一の方法はブルートフォースです。これは、条件が満たされるまで、非常に多くのノンスを試行することを意味します。このため、マイニングには高性能なコンピューティング機器が必要です。

ノンスをブロックデータに追加し、それをsha-256を通して渡すことで生成されるハッシュ値を予測することはできないため、プロセスは完全にランダムです。たとえば、ターゲットのハッシュ値が10,000の場合、どのノンスがブロックデータと組み合わさって10,000未満のハッシュ値を生成するかはわかりません。この予測不可能でランダムな性質は、マイナーが条件が満たされるまで可能性を列挙し続けなければならないことを意味します。条件を満たす複数の値がある場合は、最小のハッシュ値が選択されます。なぜなら、より小さいハッシュ値は高い難易度と低い発生確率を示すからです。

生成されたハッシュ値が要件を満たすかどうかを検証することは簡単で、単一の比較操作のみが必要です。しかし、目標値以下のハッシュ値を見つけることは、総当たり列挙によってのみ実現できます。検証は簡単だが結果を見つけることが難しいというこの特性は、計算的非対称性として知られています。

6. マイニングアルゴリズムのコードシミュレーション

以下のコードは、マイニングプロセスをシミュレートします。まず、ブロックヘッダーデータ文字列「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()

上記の通り、ハッシュで先頭ゼロの数を増やす必要があると、必要な試行回数が著しく増加し、指数関数的な成長パターンをたどります。これは、マイニングの計算的な難しさとリソースの必要性を示しており、マイニングプロセスにおいて高性能なコンピューティングデバイスが必要であることを強調しています。

7. ダイナミック難易度調整

ブロックが約10分ごとに生成されるようにするために、ビットコインシステムはマイニングの難易度を調整します。この難易度調整メカニズムはビットコインシステムの重要な部分です。理想的には、最後の2016ブロックの生成にかかった時間は約2週間です。もしこれらのブロックが2週間未満で生成された場合、難易度は先頭のゼロの数を増やすことによって上昇します(ターゲット値を下げます)。逆に、2週間以上かかった場合、難易度は先頭のゼロの数を減らすことによって下がります(ターゲット値を上げます)。このメカニズムにより、ネットワークの総ハッシュレートが変動しても、ブロックを生成する時間が約10分に保たれます。

この難易度調整メカニズムは、ビットコインの創設者であるサトシ・ナカモトによって設計され、ネットワークの合計計算能力に自動的に適応するように計画されています。これにより、安定したマイニングペースが維持され、市場経済が乱れる可能性のある急速な通貨発行を防止します。

8. マイニングアルゴリズムの実行プロセス

異なるブロックチェーンプロジェクトには、さまざまなマイニングアルゴリズムがあります。ここでは、最も有名なものであるビットコインのマイニングアルゴリズムについて説明します。

ビットコインの基盤となるマイニングアルゴリズムの実行プロセスは次のとおりです:

  1. トランザクションの選択: メモリプールからいくつかのトランザクションを選択します(通常は手数料の高いものを優先します)。受信者がマイナーであり、トランザクション金額がブロック報酬に選択されたすべてのトランザクション手数料を加えた特別なトランザクション(通常はコインベーストランザクションと呼ばれます)を自動生成します。この特別なトランザクションを選択したトランザクションの先頭に配置して、ブロックのトランザクションセットを形成します。
  2. Merkleツリーの構築:トランザクションセットからMerkleハッシュツリーを構築します。Merkleツリーは、各葉ノードがトランザクションのハッシュを格納し、それを一意に識別およびインデックス化するバイナリツリーです。各上位ノードは、子ノードの結合ハッシュを格納し、最終的にルートノードに集約されます。ルートノードは、Merkleツリーおよびそれに関連するすべてのトランザクションを一意に識別します。
  3. ブロックヘッダの構築: マークルルートの値、ノンス、ブロックバージョン、前のブロックのハッシュ、タイムスタンプ、難易度ターゲット、およびノンスからブロックヘッダを組み立てます。ブロックヘッダのサイズは80バイトです。
  4. ブロックヘッダーのハッシュ化:ブロックヘッダーのノンス値を継続的に変更し、ブロックヘッダーの内容に対して二重SHA-256ハッシュ(つまり、SHA256(SHA256(block_header)))を実行します。結果のハッシュをネットワークの現在のターゲット値と比較します。結果がターゲット値より小さい場合 (最初の n ビットが 0 であることを示す)、パズルが解かれ、プルーフ オブ ワークが完了します。
  5. ブロックのブロードキャスト: 新しく採掘されたブロックを隣接するノードに送信し、そのブロックが正常に採掘されたことを知らせる。
  6. 検証と伝播:新しいブロックを受け取ると、他のノードはブロックヘッダーに対してダブルハッシュを実行してブロックハッシュを取得します。彼らはブロックハッシュの最初のnビットがゼロであることを検証し、ブロックを認識し、このブロックの計算を停止し、隣接するノードにそれを伝播させます。

ブロックヘッダー内の各フィールドのサイズは次のとおりです:

https://time.geekbang.org/column/article/5963

alt="">

マークルツリーの構造は次のようになっています:

大后端私房菜]. alt="">

9. マイニングにおける論争

マイニングに関連する主な論争は、ビットコインおよびその派生物で使用されているプルーフ・オブ・ワーク(PoW)アルゴリズムに関わるものです。これらのアルゴリズムは、マイナーに対して、ネットワーク全体で合意された問題を解くために多大な計算リソースを割り当てる必要があります。多くの人々が同時にこれらの計算に取り組んでいますが、問題を最初に解いた者だけが報酬を得ます。その他の参加者の計算および電気リソースは事実上無駄になり、追加の価値を生み出しません。

この資源の浪費を最適化するための主要な方法は2つあります:

  1. よりリソースを消費しないアルゴリズムに切り替える:例えば、イーサリアムは、POWアルゴリズムからプルーフオブステーク(POS)アルゴリズムに移行し、リソースの浪費を大幅に減らしています。
  2. アイドルの電力資源を利用する:マイニングノードは、風力などの再生可能エネルギー源をマイニング作業に利用する実験を行っています。もう1つの重要な進展は、無駄になっていた天然ガスの利用です。さらに、一部の機関では、ビットコインマイニングによって生成された余剰熱をリサイクルする方法を探っています。

10. 質問

マイニングの価値は何ですか?リソースの無駄のように見え、社会にとって意味がないようです。

この記事の「マイニングがなぜ必要なのか?」セクションを再検討すると、マイニングの直接的な意義は、デジタル通貨の発行を支援することです。マイニング報酬は、より多くの人々がデジタル通貨を維持することに参加するように促し、より安定したものにします。加えて、マイニングアルゴリズムは、デジタル通貨システム内でのトランザクションの一貫性を維持し、内部および外部攻撃に対してより堅牢でより強力にします。

マイニングの間接的な意義は、デジタル通貨そのものから派生しています。デジタル通貨は、中央集権化の欠点を回避しながら、セキュアな取引が中央集権化された機関の必要性なしに発生する、グローバルで信頼性の高い通貨システムを創造します。グローバルな性質により、効率的かつ低コストな国境を越えた取引も可能となります。

マイニングのリターンがコストを下回るまで減少し、マイナーがマイニングを停止し、取引が停止する地点に達する可能性はありますか?

マイニングの収益は時間とともに減少するシステムリワードに依存するという懸念が一般的です。しかし、マイニングは取引手数料からも大きな収入を生み出します。デジタル通貨がより広く受け入れられるにつれて、デジタル通貨取引市場も拡大します。この増加した取引量はブロックの含まれるための競争を激化させ、ユーザーは自分の取引を優先させるために支払いを意欲的に行うようになります。その結果、マイナーは依然として相当な取引手数料を稼ぎ続けることができ、取引処理の持続可能性が確保されます。

マイニングコストがブロックチェーン手数料を上回る場合、マイニングは継続できますか?

取引手数料はマイニングコストを補いますか?

はい、トランザクション手数料はマイニングのコストを補償するのに役立ちます。ブロック報酬が時間とともに減少するにつれて、トランザクション手数料はマイナーの重要な収入源となります。これにより、電力費が高くても、ユーザーがトランザクション処理のために支払う手数料によってマイナーは運営を維持することができます。

複数のマイナーが同時にパズルを解いた場合、何が起こりますか?

複数のマイナーが新しいブロックを同時にブロードキャストした場合、マイニング報酬は分割されますか?

いいえ。もし複数のマイナーがパズルを解いて新しいブロックを同時にブロードキャストした場合、ブロックチェーンに一時的なフォークが作成されます。以下がその動作方法です:

  1. 一時的なフォーク:一部のノードが同じ高さの2つの有効なブロックを受け取ると、両方のブロックを一時的に保存し、ブロックチェーンに一時的なフォークを引き起こします。
  2. フォークの解決: 新しいブロックがマイニングされると、ノードは最も長いチェーンに引き続き構築し続けます。ネットワークは最終的に単一のチェーンに収束し、より短いチェーンは破棄されます。
  3. メインチェーンの選択:ノードは最も蓄積された作業証明を持つ最長のチェーンを追います。最長のチェーンに自分のブロックが終わるマイナーは報酬を受け取り、他のブロックは「孤児」ブロックとなります。

例:

  • マイナーaとマイナーbは両方とも同じ高さでブロックを採掘し、それをブロードキャストします。
  • 一部のノードはマイナーaのブロックを最初に受け取り、他のノードはマイナーbのブロックを受け取ります。
  • 両方のチェーンは一時的に存在します。
  • 次のブロックがマイニングされ、マイナーAのチェーンに追加された場合、そのチェーンは最も長くなり、ノードはそれをメインチェーンとして採用します。
  • マイナーAが報酬を受け取り、マイナーBのブロックは破棄されます。

なぜ50%以上のハッシュパワーを持つノードが不正をしないのですか?

51%攻撃とは何ですか、そしてなぜスーパーノードは詐欺をしませんか?

51%攻撃は、単一の実体またはグループがネットワークの計算能力の50%以上を制御する場合に発生します。スーパーノードが通常のチートをしない理由は次のとおりです:

  1. 実用上の不可能性:総ネットワークハッシュパワーの51%を所有することは、ビットコインなどの主要な暗号通貨の規模と分散のために非常に不可能です。
  2. ネットワークの検証:スーパーノードが詐欺を試みても、すべてのノードがそれぞれのブロックを独立して検証します。無効な取引や二重支払いの試みはネットワークによって拒否され、スーパーノードの努力は無駄になります。
  3. 評判と経済的インセンティブ:スーパーノードは、ブロックチェーンを攻撃するよりも、ブロックチェーンの完全性を維持することでより多くの利益を得ます。攻撃が成功すると、暗号通貨の価値が下がり、攻撃者の投資に損害を与える可能性があります。
  4. 攻撃の種類:
    • double spend: 同じコインを2回使おうとすること。
    • トランザクションブロッキング:特定の取引がブロックに含まれないようにすること。
    • selfish mining: trying to gain more mining rewards by selectively revealing blocks.
    • タイムスタンプ操作:ブロックのタイムスタンプを変更してマイニングの優位性を得ること。
    • 空のブロック攻撃:トランザクションを持たないブロックのマイニングにより、ネットワークを遅くする。

なぜブロックチェーンは不正取引を防止するために固定されたブックキーパーを想定していないのか

ブロックチェーンは意図的な中断や不正取引をどのように防止していますか?

  1. 隣接ノードによる検証:ブロックが隣接ノードに配信される際に、これらのノードはブロック内のトランザクションをチェックします。無効なトランザクションがある場合、ノードはブロックを拒否し、それ以上プロパゲートしません。
  2. 合意メカニズム:ビットコインの合意メカニズムは、最長チェーンの原則に依存しています。すべてのネットワークノードは、最長の有効なチェーンを拡張しようとします。誰かが歴史的な記録(たとえば取引の削除)を変更しようとすると、改ざんされたブロックにリンクされたすべての後続ブロックを変更し、変更されたチェーンが現在のメインチェーンよりも長くなるようにする必要があります。これには膨大な計算リソースが必要であり、それは実質的に不可能です。

マイナーによる一貫性のないブロック配布の防止

  1. ブロック配布の一貫性:マイナーは短時間内に複数の有効なnonce値を見つけることができず、異なる正当なブロックを同時に異なるノードに配布することができません。不正なブロックは隣接するノードによって破棄されます。

トランザクションプール(メモリプール)とは何ですか?

定義と機能:ブロックチェーンネットワークにおいて、まだブロックに含まれていないすべての放送トランザクションは、ネットワークノードのメモリプール(メムプール)に一時的に保存されます。マイナーは、新しいブロックを構築するためにトランザクションを選択するために自分のメムプールを監視します。

トランザクション選択戦略:マイナーは、自分の戦略に基づいてメンプールからトランザクションを選択することができます。一般的には、手数料が高いトランザクションを優先しますが、一部のマイナーはトランザクションの年齢(メンプール内での経過時間)など、他の要素も考慮する場合もあります。

ビットコインシステムの収益源

誰が参加し、どのように稼ぐか:ユーザーとは別に、ビットコインシステムの主な参加者は、マイナー、開発者、ノードオペレーターの3人です。

  1. マイナー:マイニングを通じて報酬と取引手数料を獲得してください。
  2. 開発者やノードオペレーターは、一般的にビットコインシステムから直接収益を得ることはありません。彼らの貢献はしばしば理想主義的であり、システムの完全性を維持することを目指しています。彼らは寄付やスポンサーシップなどの他の手段を通じて収入を得ることがあります。彼らのマイニングへの参加は個々の好みによって異なります。

なぜGPUの価格が上昇しているのですか?なぜマイニング用のGPUは望ましくないのですか?

GPU価格の上昇:マイニング目的でのマイナーによるGPUに対する高い需要により、供給不足が発生し、価格が上昇しています。

マイニングgpus:マイニングgpusとは、以前に仮想通貨のマイニングに使用されたものです。これらのgpusは集中的な計算を行い、かなりの摩耗が生じます。性能が低下したため、ほとんどの人々が使用済みのマイニングgpusを購入することを好みません。

マイナーは完全な台帳データを保存する必要がありますか?

完全な冗長ストレージ要件:はい、マイナーはトークンが以前に使用されていないかを検証し、台帳のセキュリティと整合性を確保するために、全体のブロックチェーン台帳を保存する必要があります。ただし、非常に初期のブロックに関しては、マイナーはブロックのヘッダーのみを保存すればよく、ブロックの内容全体を保存する必要はありません。これにより、ブロックチェーンの効率を維持しながら、セキュリティを確保することができます。

ビットコインの供給限界に達した場合、どうなりますか?

2,100万ビットコインを超える自動報酬なし:ビットコインの総供給量が上限の2,100万ビットコインに達すると、システムはマイナーへの報酬として新しいビットコインを発行しなくなります。ユーザーが取引手数料の支払いを望まない場合、理論的には、取引システムは運用上の課題に直面する可能性があります。しかし、ユーザーは取引を処理するために取引手数料を支払うことをいとわない可能性が高く、システムの継続性を確保します。

ブロックの高さは、採掘者が採掘し、取引を新しいブロックにパッケージ化する限り、2100万ビットコインの最大供給に達した後も引き続き増加し続けます。ブロックの高さ(総ブロック数)はビットコインの供給上限によって制限されません。

コンセンサス変更の可能性:コミュニティはコンセンサスルールの変更を提案することができます。例えば、必要に応じて新しいコインの生成を許可するために、ビットコインの総供給量を増やすなどの変更が考えられます。

マイナーはどのように報酬を受け取るのですか?

コインベーストランザクション:ビットコインブロックチェーンでは、マイナーの報酬は「コインベーストランザクション」または「ブロック報酬」として知られる特別な取引を通じて分配されます。この取引にはユニークな特性があります:

  1. ブロードキャストは必要ありません:コインベーストランザクションは、マイニングアルゴリズムによって自動的に作成される各ブロック内の最初のトランザクションであり、他のノードにブロードキャストする必要はありません。
  2. インプットなし:通常のビットコイントランザクションとは異なり、Coinbaseトランザクションにはインプットがありません(送信者なし)。マイナーに報酬を与える新しいビットコインを生成します。
  3. outputs: コインベーストランザクションは、新しく鋳造されたビットコインとブロックに含まれるすべての取引手数料を含む、マイナーのウォレットアドレスに報酬を出力します。

マイナーの収益はどのように計算されますか?

ブロックごとの収益計算:マイナーの収益は、ブロックが正常にマイニングされ、ネットワークのコンセンサスメカニズムによって確認されるたびに計算されます。ブロックをマイニングするマイナー(またはマイニングプール)は、ブロックに含まれるすべてのトランザクションからブロック報酬と累積トランザクション手数料を受け取ります。

報酬を受け取るプロセス: マイナーまたはマイニングプールがブロックを採掘し、ネットワークによって確認された後、ブロック報酬と取引手数料を受け取ります。これはコインベーストランザクションを介して実行され、手数料と報酬が未使用取引出力(UTXO)に変換され、マイナーのアカウントに入金されます。

ブロックは順次作成されますか、それとも並行して作成されますか?

連続的な作成:ブロックはブロックチェーン上で連続的に作成されます。前のブロックが正常にマイニングされ、チェーンに追加された後に、新しいブロックが作成されることができます。

トランザクションのパッケージ化

ブロックごとに複数のトランザクション: 通常、ブロックには複数のトランザクションが含まれます。マイナーは、トランザクションを個別にパッケージ化するのではなく、トランザクション手数料の収益を最大化するために、できるだけ多くのトランザクションを含めます。

ブロックスペースの利用

部分的に埋まったブロック:ほとんどのブロックは完全に活用されていません。ブロックが完全に埋まっているかどうかに関係なく、マイナーは難易度の要件を満たす有効なハッシュを見つけるとすぐに次のブロックの作業を開始します。

トランザクションなしでのマイニング

空のブロック: トランザクションが含まれていなくても、ブロックをマイニングすることができます。これらのブロックは空のブロックと呼ばれ、マイナーにシステム報酬を提供します。

ブロックチェーンのフォークの処理

最長チェーンルール:フォークが発生すると、ネットワークは最も累積されたプルーフオブワーク(通常は最長のチェーン)を持つチェーンをたどります。ノードは、どちらにより多くの作業が費やされているかが明らかになると、より長いチェーンに切り替わります。

二重支払いを防ぐ

ダブルスペンドの解決:

  • もしブロックに相反するトランザクション(ダブルスペンド)が含まれている場合、ブロックに含まれる最初の有効なトランザクションのみが有効と見なされます。他の相反するトランザクションは破棄されます。
  • もし2つの競合するトランザクションが異なるブロックに含まれている場合、最初に確認されるブロックの方が有効と見なされます。

詳細な二重支払い処理

検証プロセス:

  • ブロック間:同じコインを使用しようとする2つのトランザクションが別々のブロックに含まれる場合、最初に確認されたブロックのトランザクションが有効と見なされます。競合するトランザクションを含むブロックは拒否されます。
  • 1つのブロック内:2つの競合するトランザクションが同じブロックに含まれている場合、マイナーは1つだけを含めます。マイナーは通常、取引手数料(手数料が高いほど優先される)または取引の年齢(以前の取引が優先される)に基づいて選択します。

ユーザーは支払う取引手数料の額をどのように管理しますか?

取引手数料の計算:ユーザーは取引手数料を制御して、取引の確認を迅速化できます。料金は、次の式によって決定されます。

手数料=総入力-総出力-おつり

ユーザーは、入力金額、出力金額、およびお釣り金額を調整して取引手数料を設定します。

デジタル通貨マイニングプロセス

  1. マイニング機器を準備する: マイニングハードウェアまたは高性能コンピューティングデバイスをセットアップします。
  2. インターネットアクセスを確保する:マイニング機器をインターネットに接続してください。
  3. デジタルウォレットのダウンロード:デジタルウォレットを入手し、プライベートキーとパブリックキーを生成してください。
  4. マイニングを開始するには、ウォレットのマイニングボタンをクリックしてマイニングを開始してください。

プールでのマイニング

収益分配:プールでマイニングを行う場合、プールノードはブロック報酬を受け取ります。その後、プールは参加メンバーの計算能力に基づいて収益を分配します。この分配は、マイナーのウォレットへの送金を通じて実行されます。

利己的なマイニングとは?

利己的なマイニング:利己的なマイニングは、マイナー(またはマイニングプール)が新しいブロックを見つけるが、すぐにはそれをブロードキャストしない戦略です。代わりに、彼らは自分のチェーン(隠しチェーン)で個人的にマイニングを続けます。追加のブロックを見つけると、それらを一斉にブロードキャストします。これにより、他のマイナーの作業が無効になり、計算能力と報酬が利己的なマイナーに傾く可能性があります。ビットコインは、ブロードキャストプロトコルを改善することで、利己的なマイニングの影響 mitiGate.io ことができます。

トランザクションとブロックの受信時のノードの検証

トランザクションの検証:トランザクションがノードにブロードキャストされると、それがメンプールに追加されるべきかどうかを判断するために、いくつかのチェックを受けます。

  1. トランザクション形式:トランザクションデータ構造の正当性を検証します。
  2. トランザクション署名: トランザクション署名の真正性を検証します。
  3. 二重支払い:入力が以前にメンプールまたはブロックチェーンで支払われていないことを確認します。
  4. 入力と出力:総入力額が総出力額以上であることを確認してください。
  5. トランザクションスクリプト:スクリプトの実行と検証(主にスマートコントラクト内)。
  6. locktime:locktime条件(ブロックの高さまたは時間)が満たされているかどうかをチェックします。
  7. トランザクションのサイズと手数料:トランザクションのサイズと手数料が適切であることを確認してください。

ブロックの検証:マイナーノードが新しいブロックを受信すると、ブロックとそのトランザクションに対して詳細なチェックを行います:

  1. トランザクションの妥当性:ブロック内の各トランザクションを検証する(トランザクションの検証と同じチェック)。
  2. ブロック固有のチェック:
    • ブロック・サイズ: ブロック・サイズが許容範囲内であることを確認してください。
    • ブロック報酬:(新しく鋳造されたビットコインとトランザクション手数料を含む)ブロック報酬が正しいことを確認してください。
    • マークルルート:ブロックのマークルルートを計算および検証します。
    • timestamp: ブロックのタイムスタンプが適切な範囲内にあることを確認します。
    • 難易度目標: ブロックが現在の難易度目標を満たしていることを確認します。

11. references

[1] 講義12 |詳細なブロックチェーン技術(4):PoWコンセンサス-ブロックチェーンの詳細な説明-オタク時間:免責事項:

  1. この記事は[Gate.io 学ぶチームはそれを迅速に処理します。
  2. 免責事項:この記事に表現された意見は著者個人のものであり、投資アドバイスを構成するものではありません。
  3. 記事の翻訳は、Gate.ioの学習チームによって他の言語に行われます。特に言及されていない限り、翻訳された記事のコピー、配布、または盗用は禁止されています。

マイニングの謎を解明する

初級編7/15/2024, 6:30:04 AM
この記事では、ブロックチェーンにおける「マイニング」プロセスについて詳しく紹介します。伝統的な鉱業活動との類似性を引きながら、トランザクションの検証と新しい通貨の発行のために計算リソースを使用して数学的な問題を解決するデジタルマイニングの基本的な概念を説明します。

forward the original title ‘白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?’

ブロックチェーンに関連する最も馴染み深い概念の1つはおそらくマイニングです。多くの人々が何度もマイニングについて聞いたことがあるかもしれませんが、実際には何を意味するのかはよくわからないかもしれません。このセクションでは、通常のプログラムを中断して最初に「マイニング」を紹介します。

「プレーンブロックチェーン1:ビットコインの紹介(ブロックチェーン革命の先駆者で主権通貨の挑戦者)」からの内容の簡単な要約です。ここでは、中本哲史がビットコインの通貨システムを設計し、ブックキーピングの報酬を通貨発行とリンクさせました。このアプローチにより、通貨発行をブックキーピングプロセスで自動化することができ、通貨発行の問題を解決しながら、ブックキーパーが積極的に参加することを促します。

1. マイニングとは何ですか?

現実世界では、マイニングは鉱山から岩に隠された貴重な金属を掘り出すために、鉱夫がさまざまなツールを使用することを意味します。鉱夫はこれら自然に隠された希少な金属から価値を抽出し、物理労働を通じてその価値を得ます。

ブロックチェーンプロジェクトでは(通常デジタル通貨プロジェクト)、ネットワークノードは計算リソースを消費して問題を解決します。解決策を見つけると、ブロックをパッケージ化し、新たに発行された通貨の形で報酬を受け取ります。このプロセスは、鉱石から金などの貴金属を抽出することに類似しているため、「マイニング」と呼ばれています。ここで、ブックキーパーはマイナーであり、ハードウェアと電力を使用してブロックをパッケージ化するために競争し、新しい通貨が作成されます。

2. マイニングはなぜ必要ですか?

マイニングには主に2つの目的があります。最近の取引をブロックにまとめ、ブロックチェーンにリンクして確認すること、そしてブックキーパーに報酬を与えることで新しい通貨を発行することです。以下に、マイニングの詳細な機能が示されています。

  1. ブックキーパーの選択: 実際のブックキーパーを数多くの候補者から選択するためには戦略が必要です。マイニングの結果がこの選択の基準として使用され、すべての取引がすべての参加者によって認識され、ネットワーク全体でコンセンサスが達成されることが確認されます。
  2. トランザクションの検証:各ビットコインの取引は、ネットワーク内のマイナーによって検証される必要があります。このプロセスによって取引の妥当性が確認されます。
    • トランザクションのフォーマットとサイズが仕様に合致していることを確認する。
    • 関連する秘密鍵を保有するユーザーによって開始されたことを確認するために、各トランザクションの署名の有効性を検証します。
    • 支払いに使用されるトークンが二重に支出されていないことを確認し、入力金額が出力金額を超えていること(金額の一部が手数料として取られる)、
    • トランザクションが以前にブロックに含まれていないことを確認します。
  3. 新しい通貨の発行:マイニングは新しいビットコインが流通する方法でもあります。マイナーが新しいブロックを採掘に成功すると、報酬として一定量のビットコインを受け取ります。この報酬メカニズムは、マイニングに参加することを促すだけでなく、ビットコインの発行方法としても機能します。通貨の発行方法により、通貨の流通量が着実に制御された速度で増えることが確保され、インフレを管理するのに役立っています。
  4. 参加を促進する:報酬メカニズムは、通貨システムの維持に参加する人々を増やし、その持続的かつ堅牢な発展を促進します。
  5. ネットワークのセキュリティと分散化を強化するために、マイニングからの報酬は多数のマイナーを引き寄せ、分散した計算能力をもたらします。この分散化により、単一のエンティティが計算能力の50%を制御することはありませんので、システムの透明性とセキュリティが向上します。最長チェーンの原則に従うことで、さらにシステムのセキュリティが向上します。

3. マイナーたちはなぜマイニングに参加するのでしょうか?

マイニング参加者は、ブロックチェーンにブロックを正常にパッケージングすることで、大きな報酬を受け取るため、マイニングに参加する動機づけを受けます。これらの報酬は、主に2つの主要な源泉から提供されます:

  • ブロック報酬(新たに発行された通貨):通貨システムは自動的に新しい通貨を発行し、それは完全にマイナーに支払われます。例えば、ビットコインシステムでは現在、マイナーは1つのブロックごとに3.125ビットコインを受け取ります。1ビットコインが約$65,000で評価されていることを考慮すると、1つのブロックをパッケージ化することで20万ドル以上、約147万人民元を得ることができます。
  • ユーザーが支払う取引手数料:取引記録を保持するブロックの容量が限られているため、一部のユーザーは取引手数料を支払って、マイナーが取引を優先してより迅速な確認を行うようにインセンティブを与えています。ブロックに含めるトランザクションをプールから選択する場合、マイナーは手数料の高いトランザクションを選択する傾向があります。ブロックには何千ものトランザクションを含めることができ、これらのトランザクションからのすべての手数料はマイナーに送られ、別の重要な収入源となります。取引にビットコインを使用する人が増えるにつれて、ブロックに含めるための競争が激化し、ユーザーが喜んで支払う手数料が高くなります。

時間の経過とともに、ブロック報酬は減少します(例えば、ビットコインのハーフィングメカニズムにより、報酬はおおよそ4年ごとに半減されます)。最終的には、21億ビットコインが全てマイニングされた後、予想されるのは2141年頃で、自動ブロック報酬は存在しなくなり、取引手数料がマイナーの主な収入源となります。

ヒント

ビットコインは約10分ごとに新しいブロックを生成します。最初に、各新しいブロックが50ビットコインを生成します。この報酬は4年ごとに半減し、現在までに4回の半減イベントがありました。現在、各ブロックは3.125ビットコインを生成し、最新の半減は2024年4月に発生しました。次の半減は2028年ごろを予想しています。約2141年までに、ビットコインの発行上限に到達します。

取引手数料は供給と需要だけでなく、取引のサイズにも影響されます。手数料は取引がブロック内で占めるスペースに比例しています。

4. マイニングへの参加方法

マイニングに参加するマイナーにとって、マイニングは簡単です。デジタル通貨ウォレットクライアントをダウンロードし、クライアント内でマイニングボタンをクリックしてマイニングを開始します。

ブロックチェーンプロジェクトのブロック報酬には、通常、マイニングアルゴリズムがウォレットに統合されたスクリプトに記述されています。マイナーは単にボタンをクリックしてスクリプトを開始するだけです。

マイニングアルゴリズムは決定論的であり、マイナーがアルゴリズムを継続的に実行すれば、最終的に結果を得ることができます。しかし、計算リソースの違いにより、この結果を計算するために必要な時間はマイナー間で異なる場合があります。ノードが目標値を計算すると、その期間中の他のマイナーの努力は無駄になり、物理的なリソースの消耗によるマイナスのリターンが生じます。

無駄な労力を避けるために、マイナーはマイニングプールノードに参加して計算リソースをプールすることがよくあります。このノードは他のノードと同様に動作しますが、計算能力が大幅に向上しています。プールがブロックのマイニングに成功すると、報酬は参加マイナーの貢献した計算リソースに基づいて分配されます。ブロックチェーン上では、ブロックをパッケージ化するものとして記録されたマイナーはマイニングプールノードであり、個々のマイナーは通貨システムから直接ではなく、プールによって割り当てられた報酬のシェアを受け取ることに注意することが重要です。

高効率なマイニングチップを製造する企業であるBitmainは、マイニングプールの役割を固め、帳簿の中央集権化に貢献しています。

5. マイニングパズルの具体的な内容

ブロックチェーンプロジェクトが異なれば、マイニングパズルや難易度も異なる場合があります。ここでは、ビットコインを例にとります。ビットコインで使用されるマイニングアルゴリズムは、プルーフ・オブ・ワーク(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 = 10n = 10n = 10: 1 in 1,024
  • n=20n = 20n=20: 1 in 1,048,576
  • n=30n = 30n=30: 1 in 1,073,741,824
  • n = 40: 1 in 1,099,511,627,776
  • n=50n = 50n=50: 1 in 1,125,899,906,842,624

nが256になると、現在の人間の計算能力では、量子コンピュータを除いて、そのようなハッシュ値を見つけることは地球が存在しなくなる前に事実上不可能です。

sha-256の特性により、唯一の方法はブルートフォースです。これは、条件が満たされるまで、非常に多くのノンスを試行することを意味します。このため、マイニングには高性能なコンピューティング機器が必要です。

ノンスをブロックデータに追加し、それをsha-256を通して渡すことで生成されるハッシュ値を予測することはできないため、プロセスは完全にランダムです。たとえば、ターゲットのハッシュ値が10,000の場合、どのノンスがブロックデータと組み合わさって10,000未満のハッシュ値を生成するかはわかりません。この予測不可能でランダムな性質は、マイナーが条件が満たされるまで可能性を列挙し続けなければならないことを意味します。条件を満たす複数の値がある場合は、最小のハッシュ値が選択されます。なぜなら、より小さいハッシュ値は高い難易度と低い発生確率を示すからです。

生成されたハッシュ値が要件を満たすかどうかを検証することは簡単で、単一の比較操作のみが必要です。しかし、目標値以下のハッシュ値を見つけることは、総当たり列挙によってのみ実現できます。検証は簡単だが結果を見つけることが難しいというこの特性は、計算的非対称性として知られています。

6. マイニングアルゴリズムのコードシミュレーション

以下のコードは、マイニングプロセスをシミュレートします。まず、ブロックヘッダーデータ文字列「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()

上記の通り、ハッシュで先頭ゼロの数を増やす必要があると、必要な試行回数が著しく増加し、指数関数的な成長パターンをたどります。これは、マイニングの計算的な難しさとリソースの必要性を示しており、マイニングプロセスにおいて高性能なコンピューティングデバイスが必要であることを強調しています。

7. ダイナミック難易度調整

ブロックが約10分ごとに生成されるようにするために、ビットコインシステムはマイニングの難易度を調整します。この難易度調整メカニズムはビットコインシステムの重要な部分です。理想的には、最後の2016ブロックの生成にかかった時間は約2週間です。もしこれらのブロックが2週間未満で生成された場合、難易度は先頭のゼロの数を増やすことによって上昇します(ターゲット値を下げます)。逆に、2週間以上かかった場合、難易度は先頭のゼロの数を減らすことによって下がります(ターゲット値を上げます)。このメカニズムにより、ネットワークの総ハッシュレートが変動しても、ブロックを生成する時間が約10分に保たれます。

この難易度調整メカニズムは、ビットコインの創設者であるサトシ・ナカモトによって設計され、ネットワークの合計計算能力に自動的に適応するように計画されています。これにより、安定したマイニングペースが維持され、市場経済が乱れる可能性のある急速な通貨発行を防止します。

8. マイニングアルゴリズムの実行プロセス

異なるブロックチェーンプロジェクトには、さまざまなマイニングアルゴリズムがあります。ここでは、最も有名なものであるビットコインのマイニングアルゴリズムについて説明します。

ビットコインの基盤となるマイニングアルゴリズムの実行プロセスは次のとおりです:

  1. トランザクションの選択: メモリプールからいくつかのトランザクションを選択します(通常は手数料の高いものを優先します)。受信者がマイナーであり、トランザクション金額がブロック報酬に選択されたすべてのトランザクション手数料を加えた特別なトランザクション(通常はコインベーストランザクションと呼ばれます)を自動生成します。この特別なトランザクションを選択したトランザクションの先頭に配置して、ブロックのトランザクションセットを形成します。
  2. Merkleツリーの構築:トランザクションセットからMerkleハッシュツリーを構築します。Merkleツリーは、各葉ノードがトランザクションのハッシュを格納し、それを一意に識別およびインデックス化するバイナリツリーです。各上位ノードは、子ノードの結合ハッシュを格納し、最終的にルートノードに集約されます。ルートノードは、Merkleツリーおよびそれに関連するすべてのトランザクションを一意に識別します。
  3. ブロックヘッダの構築: マークルルートの値、ノンス、ブロックバージョン、前のブロックのハッシュ、タイムスタンプ、難易度ターゲット、およびノンスからブロックヘッダを組み立てます。ブロックヘッダのサイズは80バイトです。
  4. ブロックヘッダーのハッシュ化:ブロックヘッダーのノンス値を継続的に変更し、ブロックヘッダーの内容に対して二重SHA-256ハッシュ(つまり、SHA256(SHA256(block_header)))を実行します。結果のハッシュをネットワークの現在のターゲット値と比較します。結果がターゲット値より小さい場合 (最初の n ビットが 0 であることを示す)、パズルが解かれ、プルーフ オブ ワークが完了します。
  5. ブロックのブロードキャスト: 新しく採掘されたブロックを隣接するノードに送信し、そのブロックが正常に採掘されたことを知らせる。
  6. 検証と伝播:新しいブロックを受け取ると、他のノードはブロックヘッダーに対してダブルハッシュを実行してブロックハッシュを取得します。彼らはブロックハッシュの最初のnビットがゼロであることを検証し、ブロックを認識し、このブロックの計算を停止し、隣接するノードにそれを伝播させます。

ブロックヘッダー内の各フィールドのサイズは次のとおりです:

https://time.geekbang.org/column/article/5963

alt="">

マークルツリーの構造は次のようになっています:

大后端私房菜]. alt="">

9. マイニングにおける論争

マイニングに関連する主な論争は、ビットコインおよびその派生物で使用されているプルーフ・オブ・ワーク(PoW)アルゴリズムに関わるものです。これらのアルゴリズムは、マイナーに対して、ネットワーク全体で合意された問題を解くために多大な計算リソースを割り当てる必要があります。多くの人々が同時にこれらの計算に取り組んでいますが、問題を最初に解いた者だけが報酬を得ます。その他の参加者の計算および電気リソースは事実上無駄になり、追加の価値を生み出しません。

この資源の浪費を最適化するための主要な方法は2つあります:

  1. よりリソースを消費しないアルゴリズムに切り替える:例えば、イーサリアムは、POWアルゴリズムからプルーフオブステーク(POS)アルゴリズムに移行し、リソースの浪費を大幅に減らしています。
  2. アイドルの電力資源を利用する:マイニングノードは、風力などの再生可能エネルギー源をマイニング作業に利用する実験を行っています。もう1つの重要な進展は、無駄になっていた天然ガスの利用です。さらに、一部の機関では、ビットコインマイニングによって生成された余剰熱をリサイクルする方法を探っています。

10. 質問

マイニングの価値は何ですか?リソースの無駄のように見え、社会にとって意味がないようです。

この記事の「マイニングがなぜ必要なのか?」セクションを再検討すると、マイニングの直接的な意義は、デジタル通貨の発行を支援することです。マイニング報酬は、より多くの人々がデジタル通貨を維持することに参加するように促し、より安定したものにします。加えて、マイニングアルゴリズムは、デジタル通貨システム内でのトランザクションの一貫性を維持し、内部および外部攻撃に対してより堅牢でより強力にします。

マイニングの間接的な意義は、デジタル通貨そのものから派生しています。デジタル通貨は、中央集権化の欠点を回避しながら、セキュアな取引が中央集権化された機関の必要性なしに発生する、グローバルで信頼性の高い通貨システムを創造します。グローバルな性質により、効率的かつ低コストな国境を越えた取引も可能となります。

マイニングのリターンがコストを下回るまで減少し、マイナーがマイニングを停止し、取引が停止する地点に達する可能性はありますか?

マイニングの収益は時間とともに減少するシステムリワードに依存するという懸念が一般的です。しかし、マイニングは取引手数料からも大きな収入を生み出します。デジタル通貨がより広く受け入れられるにつれて、デジタル通貨取引市場も拡大します。この増加した取引量はブロックの含まれるための競争を激化させ、ユーザーは自分の取引を優先させるために支払いを意欲的に行うようになります。その結果、マイナーは依然として相当な取引手数料を稼ぎ続けることができ、取引処理の持続可能性が確保されます。

マイニングコストがブロックチェーン手数料を上回る場合、マイニングは継続できますか?

取引手数料はマイニングコストを補いますか?

はい、トランザクション手数料はマイニングのコストを補償するのに役立ちます。ブロック報酬が時間とともに減少するにつれて、トランザクション手数料はマイナーの重要な収入源となります。これにより、電力費が高くても、ユーザーがトランザクション処理のために支払う手数料によってマイナーは運営を維持することができます。

複数のマイナーが同時にパズルを解いた場合、何が起こりますか?

複数のマイナーが新しいブロックを同時にブロードキャストした場合、マイニング報酬は分割されますか?

いいえ。もし複数のマイナーがパズルを解いて新しいブロックを同時にブロードキャストした場合、ブロックチェーンに一時的なフォークが作成されます。以下がその動作方法です:

  1. 一時的なフォーク:一部のノードが同じ高さの2つの有効なブロックを受け取ると、両方のブロックを一時的に保存し、ブロックチェーンに一時的なフォークを引き起こします。
  2. フォークの解決: 新しいブロックがマイニングされると、ノードは最も長いチェーンに引き続き構築し続けます。ネットワークは最終的に単一のチェーンに収束し、より短いチェーンは破棄されます。
  3. メインチェーンの選択:ノードは最も蓄積された作業証明を持つ最長のチェーンを追います。最長のチェーンに自分のブロックが終わるマイナーは報酬を受け取り、他のブロックは「孤児」ブロックとなります。

例:

  • マイナーaとマイナーbは両方とも同じ高さでブロックを採掘し、それをブロードキャストします。
  • 一部のノードはマイナーaのブロックを最初に受け取り、他のノードはマイナーbのブロックを受け取ります。
  • 両方のチェーンは一時的に存在します。
  • 次のブロックがマイニングされ、マイナーAのチェーンに追加された場合、そのチェーンは最も長くなり、ノードはそれをメインチェーンとして採用します。
  • マイナーAが報酬を受け取り、マイナーBのブロックは破棄されます。

なぜ50%以上のハッシュパワーを持つノードが不正をしないのですか?

51%攻撃とは何ですか、そしてなぜスーパーノードは詐欺をしませんか?

51%攻撃は、単一の実体またはグループがネットワークの計算能力の50%以上を制御する場合に発生します。スーパーノードが通常のチートをしない理由は次のとおりです:

  1. 実用上の不可能性:総ネットワークハッシュパワーの51%を所有することは、ビットコインなどの主要な暗号通貨の規模と分散のために非常に不可能です。
  2. ネットワークの検証:スーパーノードが詐欺を試みても、すべてのノードがそれぞれのブロックを独立して検証します。無効な取引や二重支払いの試みはネットワークによって拒否され、スーパーノードの努力は無駄になります。
  3. 評判と経済的インセンティブ:スーパーノードは、ブロックチェーンを攻撃するよりも、ブロックチェーンの完全性を維持することでより多くの利益を得ます。攻撃が成功すると、暗号通貨の価値が下がり、攻撃者の投資に損害を与える可能性があります。
  4. 攻撃の種類:
    • double spend: 同じコインを2回使おうとすること。
    • トランザクションブロッキング:特定の取引がブロックに含まれないようにすること。
    • selfish mining: trying to gain more mining rewards by selectively revealing blocks.
    • タイムスタンプ操作:ブロックのタイムスタンプを変更してマイニングの優位性を得ること。
    • 空のブロック攻撃:トランザクションを持たないブロックのマイニングにより、ネットワークを遅くする。

なぜブロックチェーンは不正取引を防止するために固定されたブックキーパーを想定していないのか

ブロックチェーンは意図的な中断や不正取引をどのように防止していますか?

  1. 隣接ノードによる検証:ブロックが隣接ノードに配信される際に、これらのノードはブロック内のトランザクションをチェックします。無効なトランザクションがある場合、ノードはブロックを拒否し、それ以上プロパゲートしません。
  2. 合意メカニズム:ビットコインの合意メカニズムは、最長チェーンの原則に依存しています。すべてのネットワークノードは、最長の有効なチェーンを拡張しようとします。誰かが歴史的な記録(たとえば取引の削除)を変更しようとすると、改ざんされたブロックにリンクされたすべての後続ブロックを変更し、変更されたチェーンが現在のメインチェーンよりも長くなるようにする必要があります。これには膨大な計算リソースが必要であり、それは実質的に不可能です。

マイナーによる一貫性のないブロック配布の防止

  1. ブロック配布の一貫性:マイナーは短時間内に複数の有効なnonce値を見つけることができず、異なる正当なブロックを同時に異なるノードに配布することができません。不正なブロックは隣接するノードによって破棄されます。

トランザクションプール(メモリプール)とは何ですか?

定義と機能:ブロックチェーンネットワークにおいて、まだブロックに含まれていないすべての放送トランザクションは、ネットワークノードのメモリプール(メムプール)に一時的に保存されます。マイナーは、新しいブロックを構築するためにトランザクションを選択するために自分のメムプールを監視します。

トランザクション選択戦略:マイナーは、自分の戦略に基づいてメンプールからトランザクションを選択することができます。一般的には、手数料が高いトランザクションを優先しますが、一部のマイナーはトランザクションの年齢(メンプール内での経過時間)など、他の要素も考慮する場合もあります。

ビットコインシステムの収益源

誰が参加し、どのように稼ぐか:ユーザーとは別に、ビットコインシステムの主な参加者は、マイナー、開発者、ノードオペレーターの3人です。

  1. マイナー:マイニングを通じて報酬と取引手数料を獲得してください。
  2. 開発者やノードオペレーターは、一般的にビットコインシステムから直接収益を得ることはありません。彼らの貢献はしばしば理想主義的であり、システムの完全性を維持することを目指しています。彼らは寄付やスポンサーシップなどの他の手段を通じて収入を得ることがあります。彼らのマイニングへの参加は個々の好みによって異なります。

なぜGPUの価格が上昇しているのですか?なぜマイニング用のGPUは望ましくないのですか?

GPU価格の上昇:マイニング目的でのマイナーによるGPUに対する高い需要により、供給不足が発生し、価格が上昇しています。

マイニングgpus:マイニングgpusとは、以前に仮想通貨のマイニングに使用されたものです。これらのgpusは集中的な計算を行い、かなりの摩耗が生じます。性能が低下したため、ほとんどの人々が使用済みのマイニングgpusを購入することを好みません。

マイナーは完全な台帳データを保存する必要がありますか?

完全な冗長ストレージ要件:はい、マイナーはトークンが以前に使用されていないかを検証し、台帳のセキュリティと整合性を確保するために、全体のブロックチェーン台帳を保存する必要があります。ただし、非常に初期のブロックに関しては、マイナーはブロックのヘッダーのみを保存すればよく、ブロックの内容全体を保存する必要はありません。これにより、ブロックチェーンの効率を維持しながら、セキュリティを確保することができます。

ビットコインの供給限界に達した場合、どうなりますか?

2,100万ビットコインを超える自動報酬なし:ビットコインの総供給量が上限の2,100万ビットコインに達すると、システムはマイナーへの報酬として新しいビットコインを発行しなくなります。ユーザーが取引手数料の支払いを望まない場合、理論的には、取引システムは運用上の課題に直面する可能性があります。しかし、ユーザーは取引を処理するために取引手数料を支払うことをいとわない可能性が高く、システムの継続性を確保します。

ブロックの高さは、採掘者が採掘し、取引を新しいブロックにパッケージ化する限り、2100万ビットコインの最大供給に達した後も引き続き増加し続けます。ブロックの高さ(総ブロック数)はビットコインの供給上限によって制限されません。

コンセンサス変更の可能性:コミュニティはコンセンサスルールの変更を提案することができます。例えば、必要に応じて新しいコインの生成を許可するために、ビットコインの総供給量を増やすなどの変更が考えられます。

マイナーはどのように報酬を受け取るのですか?

コインベーストランザクション:ビットコインブロックチェーンでは、マイナーの報酬は「コインベーストランザクション」または「ブロック報酬」として知られる特別な取引を通じて分配されます。この取引にはユニークな特性があります:

  1. ブロードキャストは必要ありません:コインベーストランザクションは、マイニングアルゴリズムによって自動的に作成される各ブロック内の最初のトランザクションであり、他のノードにブロードキャストする必要はありません。
  2. インプットなし:通常のビットコイントランザクションとは異なり、Coinbaseトランザクションにはインプットがありません(送信者なし)。マイナーに報酬を与える新しいビットコインを生成します。
  3. outputs: コインベーストランザクションは、新しく鋳造されたビットコインとブロックに含まれるすべての取引手数料を含む、マイナーのウォレットアドレスに報酬を出力します。

マイナーの収益はどのように計算されますか?

ブロックごとの収益計算:マイナーの収益は、ブロックが正常にマイニングされ、ネットワークのコンセンサスメカニズムによって確認されるたびに計算されます。ブロックをマイニングするマイナー(またはマイニングプール)は、ブロックに含まれるすべてのトランザクションからブロック報酬と累積トランザクション手数料を受け取ります。

報酬を受け取るプロセス: マイナーまたはマイニングプールがブロックを採掘し、ネットワークによって確認された後、ブロック報酬と取引手数料を受け取ります。これはコインベーストランザクションを介して実行され、手数料と報酬が未使用取引出力(UTXO)に変換され、マイナーのアカウントに入金されます。

ブロックは順次作成されますか、それとも並行して作成されますか?

連続的な作成:ブロックはブロックチェーン上で連続的に作成されます。前のブロックが正常にマイニングされ、チェーンに追加された後に、新しいブロックが作成されることができます。

トランザクションのパッケージ化

ブロックごとに複数のトランザクション: 通常、ブロックには複数のトランザクションが含まれます。マイナーは、トランザクションを個別にパッケージ化するのではなく、トランザクション手数料の収益を最大化するために、できるだけ多くのトランザクションを含めます。

ブロックスペースの利用

部分的に埋まったブロック:ほとんどのブロックは完全に活用されていません。ブロックが完全に埋まっているかどうかに関係なく、マイナーは難易度の要件を満たす有効なハッシュを見つけるとすぐに次のブロックの作業を開始します。

トランザクションなしでのマイニング

空のブロック: トランザクションが含まれていなくても、ブロックをマイニングすることができます。これらのブロックは空のブロックと呼ばれ、マイナーにシステム報酬を提供します。

ブロックチェーンのフォークの処理

最長チェーンルール:フォークが発生すると、ネットワークは最も累積されたプルーフオブワーク(通常は最長のチェーン)を持つチェーンをたどります。ノードは、どちらにより多くの作業が費やされているかが明らかになると、より長いチェーンに切り替わります。

二重支払いを防ぐ

ダブルスペンドの解決:

  • もしブロックに相反するトランザクション(ダブルスペンド)が含まれている場合、ブロックに含まれる最初の有効なトランザクションのみが有効と見なされます。他の相反するトランザクションは破棄されます。
  • もし2つの競合するトランザクションが異なるブロックに含まれている場合、最初に確認されるブロックの方が有効と見なされます。

詳細な二重支払い処理

検証プロセス:

  • ブロック間:同じコインを使用しようとする2つのトランザクションが別々のブロックに含まれる場合、最初に確認されたブロックのトランザクションが有効と見なされます。競合するトランザクションを含むブロックは拒否されます。
  • 1つのブロック内:2つの競合するトランザクションが同じブロックに含まれている場合、マイナーは1つだけを含めます。マイナーは通常、取引手数料(手数料が高いほど優先される)または取引の年齢(以前の取引が優先される)に基づいて選択します。

ユーザーは支払う取引手数料の額をどのように管理しますか?

取引手数料の計算:ユーザーは取引手数料を制御して、取引の確認を迅速化できます。料金は、次の式によって決定されます。

手数料=総入力-総出力-おつり

ユーザーは、入力金額、出力金額、およびお釣り金額を調整して取引手数料を設定します。

デジタル通貨マイニングプロセス

  1. マイニング機器を準備する: マイニングハードウェアまたは高性能コンピューティングデバイスをセットアップします。
  2. インターネットアクセスを確保する:マイニング機器をインターネットに接続してください。
  3. デジタルウォレットのダウンロード:デジタルウォレットを入手し、プライベートキーとパブリックキーを生成してください。
  4. マイニングを開始するには、ウォレットのマイニングボタンをクリックしてマイニングを開始してください。

プールでのマイニング

収益分配:プールでマイニングを行う場合、プールノードはブロック報酬を受け取ります。その後、プールは参加メンバーの計算能力に基づいて収益を分配します。この分配は、マイナーのウォレットへの送金を通じて実行されます。

利己的なマイニングとは?

利己的なマイニング:利己的なマイニングは、マイナー(またはマイニングプール)が新しいブロックを見つけるが、すぐにはそれをブロードキャストしない戦略です。代わりに、彼らは自分のチェーン(隠しチェーン)で個人的にマイニングを続けます。追加のブロックを見つけると、それらを一斉にブロードキャストします。これにより、他のマイナーの作業が無効になり、計算能力と報酬が利己的なマイナーに傾く可能性があります。ビットコインは、ブロードキャストプロトコルを改善することで、利己的なマイニングの影響 mitiGate.io ことができます。

トランザクションとブロックの受信時のノードの検証

トランザクションの検証:トランザクションがノードにブロードキャストされると、それがメンプールに追加されるべきかどうかを判断するために、いくつかのチェックを受けます。

  1. トランザクション形式:トランザクションデータ構造の正当性を検証します。
  2. トランザクション署名: トランザクション署名の真正性を検証します。
  3. 二重支払い:入力が以前にメンプールまたはブロックチェーンで支払われていないことを確認します。
  4. 入力と出力:総入力額が総出力額以上であることを確認してください。
  5. トランザクションスクリプト:スクリプトの実行と検証(主にスマートコントラクト内)。
  6. locktime:locktime条件(ブロックの高さまたは時間)が満たされているかどうかをチェックします。
  7. トランザクションのサイズと手数料:トランザクションのサイズと手数料が適切であることを確認してください。

ブロックの検証:マイナーノードが新しいブロックを受信すると、ブロックとそのトランザクションに対して詳細なチェックを行います:

  1. トランザクションの妥当性:ブロック内の各トランザクションを検証する(トランザクションの検証と同じチェック)。
  2. ブロック固有のチェック:
    • ブロック・サイズ: ブロック・サイズが許容範囲内であることを確認してください。
    • ブロック報酬:(新しく鋳造されたビットコインとトランザクション手数料を含む)ブロック報酬が正しいことを確認してください。
    • マークルルート:ブロックのマークルルートを計算および検証します。
    • timestamp: ブロックのタイムスタンプが適切な範囲内にあることを確認します。
    • 難易度目標: ブロックが現在の難易度目標を満たしていることを確認します。

11. references

[1] 講義12 |詳細なブロックチェーン技術(4):PoWコンセンサス-ブロックチェーンの詳細な説明-オタク時間:免責事項:

  1. この記事は[Gate.io 学ぶチームはそれを迅速に処理します。
  2. 免責事項:この記事に表現された意見は著者個人のものであり、投資アドバイスを構成するものではありません。
  3. 記事の翻訳は、Gate.ioの学習チームによって他の言語に行われます。特に言及されていない限り、翻訳された記事のコピー、配布、または盗用は禁止されています。
今すぐ始める
登録して、
$100
のボーナスを獲得しよう!