Proof of Work:マイニングと難易度調整
PoWマイナーを実装し、ノンス探索と目標難易度を理解します。
「Proof of Work:マイニングと難易度調整」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
Proof of Workとは
Proof of Work(PoW)では、ブロック生成者がブロックを追加するために、計算コストの高いタスクを実行する必要があります。これによりスパムを抑止し、チェーンの書き換えを高コストにします。証明の検証は安価で、1回のハッシュ計算で済みます。作業の実行には多数のハッシュ計算が必要です。
マイニングの課題
BitcoinのPoWでは、SHA256d(block_header) < target となるnonceを見つけます。targetは256ビットの数値です。targetが小さいほど、ハッシュ出力に必要な先頭ゼロが増えるため、有効なnonceは見つかりにくくなります。
PythonによるPoWデモ
import hashlib def mine(data, difficulty): target = "0"*difficulty nonce = 0 while True: h = hashlib.sha256(f"{data}{nonce}".encode()).hexdigest() if h.startswith(target): return nonce, h nonce += 1 nonce, h = mine("block data", 4) print(nonce, h) # hash starts with "0000"
難易度のtarget
Bitcoinのブロックヘッダーには、現在のtargetをエンコードした「bits」フィールドがあります。Target = coefficient * 256^(exponent-3)。例: bits=0x1703a30c → target = 0x03a30c * 2^(8*(0x17-3)) = 約72個の先頭ゼロビットを必要とする256ビットの数値です。
難易度調整
Bitcoinは2,016ブロックごと(約2週間ごと)に難易度を調整します。Targetの調整: new_target = old_target * (actual_time / 2016 * 10 minutes)。ブロックの平均生成時間が10分より短ければtargetは下がり、難しくなります。長ければtargetは上がり、簡単になります。これにより、ブロック生成時間を約10分に維持します。
ハッシュレートとセキュリティ
ネットワークのハッシュレート(H/s)は、マイニングの総計算力を測定するものです。ハッシュレートが高いほど、有効なnonceを偶然見つける単位時間あたりの確率は低くなります。k個のブロックを書き換えるには、攻撃者はk*10 minutesに比例する時間にわたって、ネットワークのハッシュレートの50%超を維持する必要があります。
51%攻撃
ハッシュレートの50%超を持つ攻撃者は、次のことができます: (1) 秘密のフォークをマイニングする、(2) トランザクションを含めたり除外したりする、(3) 支払いが承認された後に、より長いチェーンを公開して二重支払いを行う。できないこと: 他者のコインを盗む、何もないところからコインを作る、チェーンの深い位置にあるトランザクションを取り消す。
ASICマイニングと集中化
BitcoinのSHA256dマイニングは、ASIC(Application-Specific Integrated Circuits)に支配されています。ASICは、単一のハッシュ関数に最適化されたチップです。ASICはCPUより10^6倍効率的です。そのためマイニングが大規模なデータセンターに集中し、中央集権化への懸念が生じています。
メモリハードPoW
Ethereumでは、以前Ethash(現在は非推奨)を使用していました。これは大規模なDAGデータセットを必要とする、メモリハードなPoWです。メモリハード性はASICへの耐性になります(メモリ帯域幅を低コストで最適化するのは困難です)。MoneroはRandomX(CPU最適化、ASIC耐性)を使用しています。ZcashはEquihash(メモリハード)を使用しています。
セルフィッシュマイニング
セルフィッシュマイニング戦略では、見つけたブロックを公開せずに保持し、2つ目のブロックをマイニングしてから、両方を同時に公開します。タイミングが適切であれば、正当なマイナーは孤立したブロックに対して行った作業を無駄にします。平均的に利益を得るには約33%のハッシュレートが必要であり、51%ではありません。
Proof of Stakeという選択肢
Proof of Stake(PoS、The Merge後のEthereumで使用)は、ハッシュ計算の作業をステークされた暗号資産に置き換えます。バリデーターは、ステーク量に比例してブロック提案者に選ばれます。PoSのエネルギー消費量はPoWより99.95%少なくなります。トレードオフとして、異なる信頼の前提と攻撃の経済性があります。
確認問題
Bitcoinの難易度調整は、何を維持しようとしていますか。
まとめ
PoWでは、SHA256d(header) < target となるnonceを見つける必要があります。難易度は2,016ブロックごとに調整されます。ハッシュレートの51%により、二重支払い攻撃が可能になります。BitcoinのマイニングはASICに支配されていますが、メモリハード関数はASICに耐性があります。次は、Bitcoin ScriptとUTXO署名です。
よくある質問
「Proof of Work:マイニングと難易度調整」レッスンは無料ですか?
はい。「Proof of Work:マイニングと難易度調整」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「Proof of Work:マイニングと難易度調整」で何を学びますか?
PoWマイナーを実装し、ノンス探索と目標難易度を理解します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Proof of Work:マイニングと難易度調整」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ハッシュチェーンとブロック連結
- Merkle木:大規模環境でのトランザクション完全性
- Proof of Work:マイニングと難易度調整
- Bitcoin ScriptとUTXO署名検証