アーパボー(ARPABLE)
アープらしいエンジニア、それを称賛する言葉・・・アーパボー(商標登録6601061)
ブロックチェーン

マイニングとは

今回はブロックチェーンとはの稿でご紹介したブロックチェーンの基本9ステップの中で「マイニング」に関する以下のステップを説明します。

❻マイナーがナンスを発見し
❼ブロックを生成
➑生成したブロックをネットワークに伝播、
➒ブロックチェーン確定

より明確にするために弊社で行われたライトニングトーク(ALT)における映像の1部をご覧ください。

 

(※)前回同様、ここで使用した資料は2020年~2021年に社内で行われたライトニングトークで使われたものを適宜流用します。

(※)説明は2008年「サトシ・ナカモト」が発表したビットコインに関する論文をベースに説明していきます。

マイニングとは

マイニングとは、ブロックチェーンの取引情報を台帳にまとめ、暗号パズルを解いて参加者の承認を得る事により新規発行された仮想通貨を取得することです。

ちょっと分かりにくいのでいくつかの要素に分解して説明しましょう。

目的

銀行のような中央集権型の管理者がいなくても作成した台帳に対して参加者全員の合意を得るためです。
※)マイニング作業による合意形成の手法(コンセンサスアルゴリズム)をPoW(プルーフオブワーク)と呼びます。

プルーフオブワークとは、直訳すると仕事の証明で「P2Pネットワーク環境の中で、熾烈な計算競争に勝った人が発言権を持つという合意形成の仕組み」です

前提

ブロックチェーン上で行われた取引情報(トランザクション)をブロックという単位に集積して記録することが前提となってます。

手段

目的を達成するために、コンピューターの演算能力を駆使して所定の暗号パズルを解くことです。
この暗号パズルというのは、作成したブロックのブロックヘッダ(80バイト)に対して決められた条件を満たすハッシュ値が見つかるまで計算を繰り返して、誰よりも早く「ナンス」を発見することです(詳細は後述)。
この作業を、大量の岩石の中から僅かな金を採掘するのに似ていることから、マイニングと呼び採掘作業を行っている個人やグループをマイナーと呼びます。

報酬

ナンスを発見して参加者全員の合意(承認)が得られたマイナーに対して、報酬として新規発行された仮想通貨が与えられます。

ビットコインの場合の報酬額
初めてマイニングが始まった2008年の報酬は50BTC(ビットコインの単位)で、4年ごとの半減期があり、2020年から4年間は6.25BTCが与えられます。
これがどのくらいの額かというと、2021年~2022年にかけて1BTCが400万円~600万円程度で推移していますので
一番早く暗号パズルを解いたマイナーには約3000万円の報酬が与えられます。
この報酬の獲得を狙い多くのマイナーは熾烈は演算競争が行なわれています。

ブロックチェーンの真正性を担保する仕組み

ここで、ブロックチェーンにに備わったデータの真正性を担保する仕組みを整理しておきましょう。

改ざん防止機能

  1. マークルルート
  2. ハッシュチェーンのデータ構造
  3. 公開鍵を利用したアドレス
  4. トランザクションごとの電子署名

等で改ざん防止支えられてます。
※)❶、❷に関する詳細はマークルツリーとはを参照のこと。
❸、❹に関する詳細はブロックチェーントランザクション2を参照のこと。

各ノードによるトランザクションデータ検証

トランザクションが作成されてネットワークに投入されると各ノード(参加者)がその正当性をチェックし、不正なものは全て捨てられます。

主なチェック項目は以下のとおりです。

❶データ構造の正当性
※)詳細は、ブロックチェーントランザクション1の「トランザクションのフォーマット(bitcoin)」を参照のこと。

❷2重支払防止
※)詳細は、ブロックチェーントランザクション2の「五条さんの主張を検証する3ステップ」参照の事)

  • INPUTに記載されているUTXOが本当にある
  • トランザクションスクリプトが正しいか
    INPUTに記載されたScriptSigがUTXOに記載されたScriptPubkeyで指定された
    使用条件を満たしているか?

❸INPUTの金額がOUTPUTの金額よりも大きいか
(ガス代があるためイコールにはならない)

マイナーがブロックを作成する手順

マイナーがブロックを生成する手順は主に以下のステップで行われます。

❶トランザクションプールからトランザクションをダウンロードします。

❷ブロックを作成するために以下の優先順位に従いトランザクションを選択します。

  • 生成時刻が古くてINPUTの額が大きい
  • 手数料の高いトランザクション(※)

(※)ウオレットにもよりますが、通常手数料(ガス代)には3つの選択肢があり、高い手数料を払った方が早く取引が成立します(これをファイナライズと呼びます)

❸Generationトランザクションを追加してマイニングに成功した時の自分宛ての報酬を設定します。
この時INPUTはUTXXOのかわりにcoinbase、あるいは空白にしたりします。

❹ブロックヘッダを構築するためにマイニングを行いナンスを発見したらブロックが完成します。

マイニングによる参加者全員の承認

❶ブロックの作成

コンセンサスアルゴリズムの1種であるPoW(Proof of work)を実現する為、所定の条件を満たすナンスを最初に発見して新しいブロックを作成します。

❷ブロックの検証

新しいブロックがネットワークに投入されると参加者(各ノード)はその妥当性を検証し、正しければ自分が保有する台帳に登録します。

❸ブロックチェーンの確定

多くのマイナーにより作成された新しいブロックは、約10分に1回の割合でネットワークに投入されていきます。

ブロックチェーンのように自律分散型のネットワークでは、新しいブロックが同時多発的に発生することがあり、台帳にあるブロック群と連結していく中で複数の新しいチェーンが生じてしまうことがあります。

その場合のルールとしては

  • 常により長いチェーンが選択され、短いチェーンは捨てられる
  • 新しいブロックが6個以上つながったら正しいものとして確定する
    (すなわち新しいブロックは約60分後に確定します)

まとめ
(ブロックチェーンの真正性担保)

これら全体を分かりやすく理解するために、弊社で行われたライトニングトーク(ALT)における映像を以下にピンポイントでご紹介します。

 

ナンスとは

既に説明しましたようにブロックチェーンでは「暗号パズルに勝った人のブロックが正当化され、褒章金ももらえる」という仕組みがありました。

この暗号パズルというのは、実際には「ハッシュ値の計算」です。

ブロックのヘッダ構造の中にナンス(Nonce)と呼ばれる4バイトの領域があります。

ナンスとはNumber used once(一度だけ使われる使い捨ての数字)の略で、ここに繰り返し数値を入力してハッシュ値を計算します。

ナンスは以下の手順で求めます。

❶ヘッダのNouceにある値を書き込み、

❷それを含んだロックヘッダ全体(80バイト)のハッシュ値を計算し、

❸その値があらかじめ定められた値であるTARGET(Dificluty bits)より大きければ❶に戻りもう一度やり直し、小さければパズルが解けた、つまり設定された条件を満たすNonce値が発見できたことになります。

実際のハッシュ値はSHA256を2回かけているだけなので、誰でもが簡単にブロックの正当性を確認することができます。

但し、このブロックが正式に台帳として確定するにはその後1時間ほど待つ必要があります。

採掘難易度 Bitsの干渉

あらかじめ定められた値であるTARGETを下回るナンスを発見すると説明しましたが、実際にこのTargetとは何なのでしょうか?

上の図のとおり、ブロックヘッダにはBitsという4バイトの採掘難易度が設定されてます。

採掘難易度の呼び方には、Dicciculty Taget, Difficulty Bits,あるいは単にDifficultyとかDiff等がありますが、ここではでは,Blockchain wikiの記述に従いBitsとしてます。

採掘難易度とは、所定の条件を満たすハッシュ値を発見する難易度のことで、ナンスを発見する間隔が平均10分になるように自動調整されます。

何故ナンスの発見にこのような指標による干渉を受けるのでしょうか。
それは、ハッシュ値を計算する能力であるハッシュレートが、技術革新やマイナーの工夫により次第に向上して放っておくとブロックを生成する感覚がどんどん短くなってきてしまうからです。
2022年2月10日時点の過去3年間のハッシュレートは以下のとおりです。
(出典:Blockchain .com)

その為、2016ブロックごとに採掘難易度が自動調整されます。発見間隔が既定の10分より短ければdiffが上がり、10分より長ければdiffが下がるという調整が入るわけですね。

1ブロックが約10分で生成されるので2016ブロック生成するのにかかる時間は20160分、即ち約2週間に一度Bitsの値が自動的に再計算されます。

まとめ
マイニングの流れをイメージしよう

マイニングに関してこれまで説明してきたことを直感的にイメージするために以下の動画をご覧ください。(弊社ライトニングトークの映像の一コマです)

 

(アーパボー)