HiÐΞClassic

ブロックチェーンのいろは#2

ばばdiy@ぱぺぽ@頼れるバディ型システムエンジニア
2 years ago
Notice ブロックチェーンを知る PoW お金の管理

ブロックチェーンをちゃんと学ぼうと改めて思いましたので、その記録を残しておこうと筆を執ってみました。技術よりというよりか思想や社会実装に向けて学びたいので、そのつもりで、読んでください。


Notice ブロックチェーンを知る

前回の続きからとなります。
PoWについて解説していきます。
その前に大事なので年表をもう一度載せておきます。

PoW

最後に解説するのが、みんな大好きProof Of Work(PoW)です。PoWはコンセンサス・アルゴリズムの1種と言われていますが、正確には、サービスの不正利用を抑制する仕組み(プロトコル)です。

もう少し噛み砕いた表現をすると、サービス提供者が特定の作業を利用者に要求し、その作業を完了した利用者のみがサービスを利用できるようにしたものです。
利用者が作業を完了した結果をサービス提供者が検証する必要があることから、作業完了の検証が作業そのものより比較的簡単でなければいけません。そのような作業をPoWの作業として利用します。

PoWは、善良な利用者にとってはそれほど影響がなく、不正な利用者には大きなデメリットとなるため、 不正利用の抑制に貢献します。不正な利用者とは、スパムメールの大量送信、ウェブサービスへ大量のリクエストを送り付けてサービスを妨害・停止に追い込むDoS攻撃などを行うユーザーのことです。
例えば、あるサービスを利用するために1秒かかるPoWが必要とした場合、メール送信する際に1秒かかることになります。善良な利用者は1秒待つだけですが、100万通のスパムメールの送信には100万秒かかることになります。サーバーへリクエストを送るのに1秒かかるとすると、DoS攻撃の場合は大量のリクエストを一度に送ることができず、サーバーをダウンさせることはできなくなります。

タイムスタンプのところで、新聞の話をしましたが、 新聞の代わりとなる仕組みとしてビットコインに採用されたのがPoWを使った合意形成です。 つまり、新聞のように広く大勢に配られるメディアの代わりに、ある一定量の作業をすることを価値の源泉と 考えることで、誰もが認める価値を示すことをできるようにしたわけです。

ビットコインで採用されているPoWは、ハッシュキャッシュ(X-Hashcash)と言われるもので、メール送信時にも利用されています。メールの送信時にある一定のコストを 払って(CPUパワーを使って)、ハッシュキャッシュ・タイムスタンプを付与してメールを送信します。 受信側は送信側を信用するためには、ハッシュキャッシュ・タイムスタンプを検証します。 ちなみに、年表に書き忘れましたが、ハッシュキャッシュは2002年にアダム・バックにより論文として発表されています。

PoWの作業をすることをマイニングともいい、一番最初に作業をやり終えブロックを生成すると、 新規発行のビットコインがもらえます。ビットコインと言えば一番有名なのがこの部分かもしれませんね。 ちなみに、各取引に設定してある手数料を獲得する権利も得ることができます。(後述するUTXO参照)

余談
ビットコインが得られるためPoWの作業を世界各地で競い合って大量の電力消費をしているので問題になっています。ただ、電力消費は解決に向かっているようです。以前のCoinpostの記事では、中国の規制強化の影響もあり、消費電力推定値も下がり始めている5年後のビットコインによる炭素排出量は3分の1、10年後にはゼロになると予想されるとありました。ビットコインもエコの時代に!


ビットコインでは、チェーン上へのブロック追加に関する合意形成を得る仕組みとして、 PoWでの作業を最初に完了させることによるルールに、より長いチェーンを正しいとするルールが 追加されて合計形成を行っています。
これをいわゆるナカモト・コンセンサスと呼んでいます。

上図のように、SHA-256という暗号学的ハッシュ関数を2回適用してtargetの値よりも小さいハッシュ値を全ての参加者が一斉に求めます。 ネットワーク上でPoWの合意が行きわたるには時間がかかります。色々なネットワークがあるので、 行き渡る前に次の合意形成がされてしまうこともあります。枝分かれしたチェーンが誕生してしまうため、 ビットコインではより長いチェーンを正しいというルールを設けています。より長いチェーンの方が、より多くの参加者が合意したチェーンであると言えるためです。
ビットコインでは、ブロックは平均10分間で生成され、このブロック生成のタイミングで取引の承認が行われたとみなします。 確率的には覆る可能性がありますが、それではいつまで経っても決済の確定ができないので、習慣的に 6承認1時間)経った取引は確定したとみなします。ここで破棄されたチェーンの方に組み込まれていた取引は、合意されたチェーン上に取り込まれていないため、その後、取り込まれることになります。

タイムスタンプのところであえて触れませんでしたが、分散型ネットワークにおいて物理的な時刻を軸とすることはできません。論理的なタイムスタンプ(前後関係のみを証明。タイムスタンプの章のリンキング)を用います。ただ、10分とか1時間とか上に記載しているので、「ブロックタイムスタンプ」と「ネットワーク調整時刻」という2つを以下のルールで利用して、物理的な時刻と同期も図っています。

ルール

  • 過去11ブロックのブロックタイムスタンプの中央値より未来であること
  • ネットワーク調整時刻より2時間未満であること

  • ブロックタイムスタンプ
    ブロックに紐付く物理的なタイムスタンプ。ブロックのハッシュ値を計算する際の入力となる。
  • ネットワーク調整時刻
    P2Pネットワークで自身が接続している全ノードが返す物理的なタイムスタンプの中央値

このような仕掛けで、現実の時刻と同期をとりながら、10分に一度、ビットコイン内の論理的な時刻の針が進みます。そして、ブロック生成時間が10分になるように、2016ブロック生成するたびに(2週間に一度)、PoWの難易度を調整を繰り返して作業量を一定に保ち続けているので、ノード参加者が増えて全体の処理能力が増えてもPoWの時間は概ね10分になっています。PoWの何が凄いかというと、いままでは、検証は正確にしっかりと!という考え方から、だいたいでいいじゃない?みたいな考え方を取り入れたところです。こうすることによって、P2Pネットワークにおけるビザンチン将軍問題に現実的な解を与えました。

お金の管理

年表にはないのですが、PoWの説明を書いていてお金の管理方法の話はしておかないと思い追加しました。 ブロックチェーンにおけるお金の管理方法は、大きく2つに分かれます。

残高管理方法

  • UTXO
    Unspent Transaction Outpout、未使用のトランザクションアウトプットと言われています。
    銀行のように残高をそのままデータとして管理するのではなく、入出金という取引データを基にし、特定のアカウントに紐づいていて、まだ利用されていない仮想通貨を合計して残高を管理する方法です。
    ビットコインやクアンタム、イーサリアムのセカンドレイヤー技術である「Plasma」などで採用されている仕組みで、プライバシーが保護される、同時並行に処理できるなどのメリットがあるが、処理が非常に複雑でスマートコントラクトの実装がしにくいなどのデメリットもある。
  • アカウントベース
    暗号通貨やトークンは、特定のアカウント内の残高(balance)として管理されます。また、アカウントは対応する秘密鍵やスマートコントラクトによって制御可能です。
    イーサリアムやEOSのようなスマートコントラクトプラットフォームでは、アカウントベースが採用されているケースがほとんどです。
    様々なスマートコントラクトが実装しやすいメリットがありますが、実行時の状態に依存するので同時並行処理には気を付けないといけません。同じアドレスを使いまわすため、プライバシーは高くないのがデメリットです。

UTXOとアカウントベースの大きな違いとしては、UTXOはトランザクション処理の結果を正確に指定できる一方、アカウントベースの場合はトランザクションの結果が、実行時の状態に依存する点が挙げられます。 UTXOはステートレス、アカウントベースはステートフルといえます。

ビットコインはUTXOなので、もう少し解説をしておきます。UTXOは分割できません。UTXOをINPUTとして利用した場合、すべて使い切る必要があります。利用したBTCの残りは自分宛のUTXOを生成します(おつりを新たなUTXOに入れるイメージ)。また、この取引を安全に行うために公開鍵暗号方式も用います。以下に、例を挙げて説明します。

ルールとして、入金<出金のトランザクションは生成できません。また、入金-出金の差額はトランザクションの手数料となり、PoWを行う際の手数料として徴収されます。 上図は、アリスの100コインをボブに50コイン送金する場合の例です。Tx10で出力の100コインはアリスの公開鍵でロックされていますので、アリス以外は使用できません。ボブに50コイン送金するために、Tx10の100コインをアンロックして、Tx11生成時にアリスの秘密鍵で電子署名します。Tx11にはボブへの50コイン送金、自分宛に40コイン送金(おつり)、差額10コインはTx手数料となります。 残高を知るためには、ボブ、アリスそれぞれの未使用のUTXOの総和を求める必要があります。残高を知るのは大変ですが、こうすることで、残高を気にすることなく、Txのインプットとアウトプットだけの差を気にすればよくなるため、二重支払を防止することができるようになります。

Tx手数料は、PoWでブロックを新たに生成した人が徴収する権利を得ます。手数料が高ければブロックに積極的に取り込んでもらいやすくなるので、Txが成立するまでの時間が短くなります。

ここまで、ひとまず、ビットコインの大まかな仕組みと、使用されている技術を見てきました。次回からはなぜこんなにみんながブロックチェーンに期待を寄せているか?インターネット以来の発明と言われているかを解説してきます。

ブロックチェーンのいろは#2


コメント
いいね
投げ銭
最新順
人気順
ばばdiy@ぱぺぽ@頼れるバディ型システムエンジニア
2 years ago
コメント
いいね
投げ銭
最新順
人気順
トピック
アプリ

Astar Network

DFINITY / ICP

NFT

DAO

DeFi

L2

メタバース

BCG

仮想通貨 / クリプト

ブロックチェーン別

プロジェクト

目次
Tweet
ログイン