信じられない!Minecraftでビットコインマイニングを実現した驚愕のレッドストーンマシン!

信じられない!Minecraftでビットコインマイニングを実現した驚愕のレッドストーンマシン!

信じられない!Minecraftでビットコインマイニングを実現した驚愕のレッドストーンマシン!

Minecraftで最もレアなブロックは何だと思いますか?ダイヤモンド?古代遺構?ディープスレートで採掘できるエメラルドや金鉱石?…どれも違います!なんとビットコインなのです!

この動画では、コマンドやMODを一切使用せず、Minecraft内でビットコインマイニングを行う巨大なレッドストーンマシンを紹介しています。SoundTuMとArmadillo28による2年間にも及ぶ共同作業の成果です。本記事では、この驚くべきマシンの仕組み、ビットコインのマイニングプロセス、そして最も重要な収益性について詳しく解説します。

ビットコインマイニングの仕組み:SHA-256アルゴリズムとの戦い

まずは、ビットコインマイニングの基本的な仕組みを理解しましょう。

  1. ビットコインアカウントの作成とトランザクションデータのダウンロード: まず、ビットコインアカウントを作成し、過去すべてのトランザクションデータをダウンロードします。これは膨大なデータ量になります。

  2. ブロックのダウンロードとブロックヘッダーの作成: 次に、新しいトランザクションのグループである「ブロック」とメタデータをダウンロードします。タイムスタンプを追加し、80バイトの「ブロックヘッダー」にフォーマットします。

  3. SHA-256ハッシュ関数の適用: ブロックヘッダーをSHA-256アルゴリズム(米国家安全保障局が設計したアルゴリズム)で2回ハッシュします。SHA-256は、入力データから256ビットのランダムに見える数値を生成するハッシュ関数です。同じデータを入力すると常に同じ数値が出力されますが、数値を事前に予測することはできません。

  4. ターゲットとの比較: ビットコインネットワークからダウンロードしたメタデータには、256ビットの「ターゲット」数値が含まれています。ハッシュ値がターゲットより大きければ失敗です。ブロックヘッダーを調整し、SHA-256ハッシュ関数を再適用する必要があります。

  5. ブロックの承認と報酬: ハッシュ値がターゲット以下であれば、ダウンロードしたブロックはネットワークによって承認され、3.125ビットコインの報酬を得ることができます。このビットコインは、アカウントから引き出されるのではなく、その場で生成されるため、「お金の印刷」のようなものです。

つまり、ビットコインマイニングとは、ブロックヘッダーをハッシュし、調整し、再ハッシュすることを、ハッシュ値がターゲット以下になるまで繰り返す作業なのです。ネットワークが報酬を提供する理由は、このプロセスがトランザクションの偽造を非常に困難にするためです。詳細な説明は、動画説明欄に掲載されている関連動画を参照してください。

Minecraftにおけるビットコインマイニング:不可能を可能にするレッドストーン技術

それでは、Minecraftでこのプロセスを実現するにはどうすれば良いのでしょうか?まずは、ブロックヘッダーをゲームに取り込み、成功・失敗のシグナルをゲームから出力する必要があります。

先行研究として、Commander Redstoneが2021年にコマンドを使ったビットコインマイナーをMinecraftで構築しています。しかし、私たちの目標は、チートを使わずにサバイバルモードで理論上構築可能なものを作ることであり、彼の方法とは大きく異なります。彼の手法で注目すべきは、チャットログを活用したデータの入出力方法です。彼はPythonを使ってビットコインネットワークと連携し、ブロックヘッダーを準備し、プレイヤーボットでチャットにコマンドを入力することでデータを入力します。出力は、システム上のファイルに保存されたチャットログから成功メッセージをチェックすることで得られます。

データの入力:レクターンと16ページの本

私たちのデータ入力方法では、レクターンと15ページの本を使用しています。レクターンに置かれた本のページ番号によって、コンパレーターへの信号強度が変化します。驚くべきことに、ページ上・下キーを使って本のページを変更できることを利用し、16進数の信号を2つのキーだけで入力できます。

しかし、信号強度が1~15の範囲であるため、0を表現するには工夫が必要です。1を引くことで0~14を表現し、15は特別なシフト関数を使って解決しました。15の入力時に、書き込み信号をブロックし、信号減算を無効にします。その後、ページ上・下キーを素早く押すことで15を入力します。0の入力も同様の工夫を凝らして行います。

データ変換:16進数から2進数への変換

レクターンから出力されるのは16進数の信号強度ですが、マイニング回路は2進数で処理します。そこで、MatBatWingsの設計を参考に、16進数の信号を2進数に変換するレッドストーン回路を構築しました。この回路は、1つの16進数信号を入力として受け取り、4つの2進数信号を出力します。

さらに、マイニング回路は32ビットの数値を扱うため、8個の4ビット信号を32ビットに変換する「ディストリビューター」回路も作成しました。

SHA-256アルゴリズムの実装:膨大なレッドストーン回路

データが入力されると、いよいよSHA-256アルゴリズムの実装に取り組みます。基本的な構成要素として、以下のものを使用しました。

  • シフトレジスター: データを1ビットずつシフトするレジスター。
  • ビット単位XORゲート: 2つの入力ビットが異なる場合に1、同じ場合に0を出力するゲート。
  • マルチプレクサ: 2つの数値から1つを選択する信号。
  • 32ビット加算器: 32ビットの数値を加算する加算器。
  • 多数決ゲート: 3つの入力のうち、2つ以上が1の場合に1を出力するゲート。
  • 選択ゲート: 3つの入力から1つを選択するゲート。

SHA-256は512ビット単位で入力を読み込みます。まず、最初の512ビットのチャンクを「W」と呼ばれるシフトレジスターにロードします。このレジスターの出力は、「ラウンド関数」と呼ばれる回路群に入力されます。ラウンド関数の出力はWの最初のセルに戻り、フィードバックループを形成します。この回路を64回クロックすることで、元のチャンクに基づく64個の異なるW値が得られます。この構成全体を「エクスパンダ」と呼びます。

エクスパンダからの64個のW値、NSAが定義した64個の定数K、そして状態レジスター(8個の32ビット数値、合計256ビットで最終出力)を用いて「コンプレッサ」回路が動作します。コンプレッサはエクスパンダと同様に、状態レジスターを2つのシフトレジスター(ワーキング変数)にコピーし、W、K、ワーキング変数をラウンド関数に入力します。このラウンド関数は2つの出力を持ち、それぞれシフトレジスターの始めに接続されています。64個のWとKがあるため、ワーキング変数も64回クロックされます。コンプレッサが処理を終えると、ワーキング変数を状態レジスターに加算します。

この一連の処理は、ブロックヘッダー全体の2つのチャンクに対して行われます。最初のハッシュでは状態レジスターに出力が得られ、その出力を新たな最初のチャンクとして、再度同じ処理を行います。2回目のハッシュの結果が最終的なハッシュ値となります。

高速化のための工夫:コンパレータープライミングとパイプライン処理

SHA-256アルゴリズムは、高速に処理する必要があります。なぜなら、ブロックマイニングには10分程度の時間制限があるからです。この時間制限をクリアするために、いくつかの工夫をしました。

まず、加算器は、コンパレータープライミングという技術を用いて、処理時間を0ティックに高速化しました。コンパレーターは通常、入力の変化後2ティックかけてオン・オフを切り替えます。しかし、短いパルス信号を与え、2ティック後にコンパレーターの電源をオン・オフすると、入力の変化が即座に伝播します。これを複数のコンパレーターに適用して、高速な加算器を実現しました。ただし、繰り上がり処理は下位ビットから上位ビットへ順次伝播する必要があるため、バブルカラムを利用して各桁に適切な遅延を与えています。

さらに、論文で発見したパイプライン処理をコンプレッサのラウンド関数に適用しました。これにより、3つのラウンドを同時に処理できるようになり、全体の処理時間を短縮しています。

ターゲット値の生成:RAMとエンディアンの変換

SHA-256ハッシュ値を算出後、ターゲット値と比較する必要があります。ターゲット値はブロックヘッダーのnBitsという数値から生成します。この数値はターゲット値の圧縮バージョンであり、RAM(レッドストーンレジスターとデコーダー)を用いて32バイトのRAMを作成し、nBitsの数値を4バイトに分割してRAMに書き込み、ターゲット値を生成します。

エンディアンについて:SHA-256はビッグエンディアン、ビットコインはリトルエンディアンを使用するため、バイトの順序を入れ替える必要があります。回転回路を利用することで、バイトの順序を反転し、同時に状態レジスターを64ブロック分下げてターゲット値と位置を合わせます。

出力と収益性:そして、現実的な課題

ハッシュ値とターゲット値の比較には、無限に拡張可能なウォールストーン回路を使用します。比較結果(成功・失敗)はチャットログに出力され、Pythonプログラムでビットコインネットワークに送信されます。成功時は、飼いならしたペットに金床を落とすことでチャットログに死亡メッセージを出力します。

収益性について: 計算によると、このマシンは1年間稼働させても、ほとんど収益は得られません(2008年7月時点のジンバブエセント単位で)。これは、マシンが非常に低速であるためです。さらに、電気代やPC、Minecraft自体の購入費用も考慮しなければなりません。

まとめ:Minecraftとビットコインの融合:技術的挑戦と可能性

このプロジェクトは、Minecraft内でビットコインマイニングを行うという、極めて野心的なレッドストーンプロジェクトです。経済的な収益は期待できませんが、Minecraftというゲーム環境内で現実世界の暗号通貨技術を再現したという点で大きな意義があります。また、SHA-256ハッシュ関数単体としても使用可能です。動画説明欄には、詳細な情報や関連リソースへのリンクが掲載されていますので、ぜひご覧ください。

本記事が、Minecraftとビットコインの融合による驚愕のレッドストーンマシンの理解に役立てば幸いです。