FLOCブロックチェーン大学校

マイページ
無料体験セミナー

ホワイトペーパー FLOC LOG

【日本語訳】イーサリアム(Ethereum/ETH)ホワイトペーパー全文

イーサリアム(Ethereum/ETH)のホワイトペーパー全文の日本語訳です。FLOCLOGではブロックチェーンを活用した様々なプロジェクトのホワイトペーパー日本語訳を閲覧できます。

原文:https://cryptorating.eu/whitepapers/Ethereum/Ethereum_white_paper.pdf

2009年1月初めてビットコインブロックチェーンをサトシナカモトが開始したとき、彼は同時に2つの急進的で、実験的なコンセプトを導入しました。1つ目が分散型のP2Pオンライン通貨で、銀行や発行体、もしくは裏付けとなる価値などなしに価値を維持する「ビットコイン」です。これまで、「ビットコイン」は通貨単位として、中央銀行なしでの通貨という政治的な側面とその異常な価格の変動という両面で多くの注目を浴びてきました。しかしながら、サトシの壮大な実験にはもう1つの同じぐらい重要なものがあり、それはトランザクションの順番を全員で合意できるProof-of-Workベースのブロックチェーンというコンセプトです。ビットコインは先入先出システムのアプリケーションと表現することができます。つまり、もしもとある組織が50BTC持っていた場合に、AとBに同時に同じ50BTCを送るトランザクションを行った場合、先に承認されたものだけが処理されます。2つのトランザクションのうち、どちらが先だったのかを決める本質的な方法はなく、これが分散型デジタル通貨の開発をこの何十年と妨げてきました。サトシのブロックチェーンは初めての信用できる分散型ソリューションでした。そして、現在ビットコインのテクノロジーの2つ目の部分と通貨以外にどうブロックチェーンというコンセプトを使うことができるのかというところに人々の関心は移ってきています。

一般的に言及されるブロックチェーン上のデジタル資産を使っているアプリケーションにはカスタム通貨と金融商品を表すもの(カラードコイン)、基盤となる物理デバイスの所有権を示すもの(スマートプロパティ)、ドメインネームのような代替不可能な資産を表すもの(Namecoin)などに加えて、分散型取引所、金融デリバティブ、P2Pギャンブル、そしてブロックチェーン上のIDや評価システムなどのさらに進歩したアプリケーションがあります。よく言われるもう1つの重要な分野が「スマートコントラクト」です。スマートコントラクトとは 、事前に指定された任意の規則に従ってデジタル資産を自動的に移動するシステムのことです。例えば、「Aは1日最大X円まで引き出すことができ、Bは1日最大Y円まで引き出すことができ、AとBが共同で引き出す場合には限度はなく、さらにAはBの引き出し権限を無効にすることができる」という文言の契約を締結した場合で説明します。この概念を論理的に拡張したものが、資産と組織全体の規約を暗号化した長期に渡るスマートコントラクトを活用した分散型自動組織(DAO)と呼ばれます。イーサリウムが提供しようとしているのは、任意の状態遷移機能を暗号化し、上記で説明したあらゆるシステムをユーザーが生み出すことができ、さらにまだ想像したことがないような多くのことを数行コードでロジックを書くことで実現できる、チューリング完全プログラミング言語が組み込まれたブロックチェーンです。

 

歴史

分散型デジタル通貨やその代わりとなる資産登録アプリのようなコンセプトはこの何十年も存在はしてきました。1980~90年代の匿名電子通貨プロトコルは、Chaumian blindingとして知られる原始的な暗号に依存していて、これは通貨に高度なプライバシーを提供するものの、このプロトコルは中央集権型の仲介者に依存してしまうため、多くの人からの注目を集めることには失敗しました。1998年に、Wei Daiのb-moneyは分散型コンセンサスと同様に、計算パズルを解くことを通してお金を発行するというアイデアを紹介した最初の提案となりましたが、この提案はどのようにして分散型のコンセンサスが実装されるのかという詳細に関しては不十分でした。2005年、Hal Finneyは「再利用可能なProof-of-Work」というコンセプトを紹介しました。このシステムは仮想通貨のためのコンセプトを生み出すために、b-moneyのアイデアとAdam Backの計算難易度の高いハッシュキャッシュパズルを一緒にしたものでした。しかし、信用されたコンピューターをバックエンドとして依存するという面で理想からは遠いものでした。
通貨は先入れ先出しのアプリケーションなので、トランザクションの順番は常にとても重要で、分散型通貨には分散型コンセンサスのためのソリューションが必要でした。ビットコイン以前の全ての通貨プロトコルが直面した大きな問題は、ビザンチン将軍問題を解決する安全なマルチパーティコンセンサスを生み出すために長年多くの研究が行われてきたものの、説明された全てのプロトコルは問題を半分しか解決できていなかったことです。こういったプロトコルでは、システム内の全ての参加者は互いを知っていて、「もしもN人が参加したら、そのシステムは最大でN/4人の悪意ある攻撃者まで耐えることができる」という形式でのセキュリティマージンを生み出しました。しかしながら、問題は匿名の設定では、このようなセキュリティマージンは、1人の攻撃者がサーバーまたはボットネット上に何千もの擬似ノードを作成し、これらのノードを使用して大多数のシェアを一方的に確保するシビル攻撃に対しては脆弱な点です。
サトシによって提供されたイノベーションはとてもシンプルな分散型コンセンサスプロトコルを組み合わせたアイデアで、ノードがシステムに参加するための権利をProof-of-Workというメカニズムによって手に入れる仕組みと毎10分ごとに「ブロック」内にトランザクションがあるノードが結合し、伸び続けるブロックチェーンというアイデアに基づいています。大量の計算能力を持っているノードは比例的に大きな影響を持ちますが、ネットワーク全体を上回るだけの計算能力を実現するのは、100万ノードをシミュレートするよりも困難です。ビットコインブロックチェーンモデルの未熟さと単純さにも関わらず、十分に良いものであることを証明してきていて、今後5年間で200以上の世界中の通貨とプロトコルの基盤となるでしょう。

 

状態遷移システムとしてのビットコイン

技術的な観点から、ビットコインの元帳は状態遷移システムと考えることができ、元帳には既存の全ビットコインの所有権の状態によって構成された「状態」と状態とトランザクションから新しい状態である結果をアウトプットする「状態遷移機能」があります。標準的な銀行システムにおいては、例えば、状態は残高で、トランザクションはAからBへX$移す要求で、状態遷移機能はAの口座からX$分の価値を減少させ、Bの口座の価値をX$分増加させることです。もしも、Aの口座にそもそもX$未満の価値しかなかった場合、状態遷移機能はエラーを返します。それゆえ、状態遷移機能は以下の式で表すことができます。

APPLY(S,TX) ­> S’ or ERROR

上記で説明した銀行システム:

APPLY({ Alice: $50, Bob: $50 },”send $20 from Alice to Bob”) = { Alice: $30, Bob: $70 }

Aの口座に50$ない場合:

APPLY({ Alice: $50, Bob: $50 },”send $70 from Alice to Bob”) = ERROR

ビットコインにおける「状態」は、ミントされまだ使用されていない全コイン(技術的に言うと、未使用のトランザクションアウトプット、もしくはUTXOと言う)の集合のことを指し、それぞれのUTXOは単位と必ず暗号的に生成された公開鍵である20バイトのアドレス[1]によって定義される、所有権を持っています。1つのトランザクションは1つ、もしくは多数のインプットを保有し、それぞれのインプットは既存のUTXOへのリファレンスとオーナーのアドレスと紐づいた暗号鍵によって生成された暗号化された電子署名が生成され、さらに状態に追加される1つ、もしくは多数のアウトプットを保有し、それぞれのアウトプットは新しいUTXOを持っています。

状態遷移機能はAPPLY(S,TX) ­> S’ 大まかに以下のように定義することができます。:

1. TX内の各インプットには
i. もしも、参照されたUTXOがS内にない場合は、エラーを返す
ii. もしも、提供された署名がUTXOの所有者のものとマッチしなかった場合は、エラーを返す
2. 全てのインプットUTXOの単位の合計が全てのアウトプットのUTXOの単位の合計よりも小さかった場合は、エラーを返す。
3. 全てのインプットを取り除いて、全てのアウトプットUTXOを追加して、Sを返す

最初のステップの前半は送金者が存在しないコインを使用することを防ぎ、後半は送金者が他人のコインを使うことを防ぎ、そして2つ目のステップは価値の保全を実行します。これを決済に使用するために、プロトコルは以下のようになります。アリスが11.7BTCをボブに送りたいとします。まず、アリスは彼女が最低でも11.7BTC分の利用可能なUTXOを保有しているかを確認します。現実的には、アリスはきっかり11.7BTCを手に入れられるわけではなく、彼女が受け取れる最小の値は6+4+2=12となります。それから彼女はそれらの3つのインプットと2つの合うプットのあるトランザクションを作り出します。最初のアウトプットはボブが所有者のアドレスでの11.7BTCで、2つ目のアウトプットはアリス自身が所有者として、0.3BTCはお釣りとしてそのまま残ります。

マイニング

もしも私たちが、信用できる中央集権サービスへのアクセスがあったら、このシステムの実装は簡単です。シンプルに上記で説明した通りにコーディングするだけで良いです。しかしながら、ビットコインでは私たちは分散化した通貨システムを築きあげようとしているので、トランザクションの順番について全員が確実に合意するためにコンセンサスシステムと状態遷移システムを組み合わせる必要があります。ビットコインの分散型コンセンサスプロセスはネットワーク内のノードが継続的に「ブロック」と呼ばれるトランザクションのパッケージを作り続けることが要求されます。このネットワークはだいたい10分に1ブロックを発行し、それぞれのブロックにはタイムスタンプ、ナンス、直前のブロックのハッシュ、そして直前のブロックまで行われた全てのトランザクションのリスクが含まれています。
時が経つとともに、ビットコインの元帳の最新のステータスを表すために継続的にアップデートされ、これは永続的で、成長し続ける「ブロックチェーン」になります。

このパラダイムでは、あるブロックが有効かを確認するアルゴリズムを以下のように説明します。

  1.  直前のブロックのハッシュ値が存在して、かつ有効かを確認
  2. そのブロックのタイムスタンプが直前のブロック[2]よりも大きく、かつ2時間以内の値であることを確認
  3. ブロックのProof-of-Workが有効かを確認
  4. S[0]を直前のブロックの最後の状態にする
  5. TXがブロックのN個のトランザクションを含んだトランザクションリストと推定
    For all i in 0…n-1, setS[i+1] =APPLY(S[i],TX[i])
    もしも、どれかのアプリがエラーを返した場合は、エグジットして、false(偽)という結果を返す
  6. True(真)という結果を返し、このブロックの最後にS[n]を状態として登録

必然的に、ブロック内のそれぞれのトランザクションは有効な状態遷移を提供しないといけません。その状態はブロック内でエンコードされていないことに注意してください。バリデーターノードによって記憶されるのは純粋に概要で、ジェネシスの状態から開始して、すべてのブロック内のすべてのトランザクションを順番に適用することによってのみ、任意のブロックに対して(安全に)計算することができます。さらに、マイナーがトランザクションをブロックに入れる順番も関係します。もしも、AとB、2つのトランザクションがブロック内にあり、BはAが作ったUTXOを使った場合、ブロックはAがBよりも前にある場合のみ有効と判断します。

ブロック承認アルゴリズムの面白い部分は「Proof-of-Work」というコンセプトです。その条件は全てのブロックのSHA256ハッシュが、256bitの数字として扱われ、動的に調整されたターゲットよりもその数字は小さくないといけず、この論文を書いている時点では約2190です。この目的はブロック作成を計算的に「難しく」することによって、シビルアタッカーがブロックチェーン全体を自分の好きなように再作成することを防ぐためです。SHA256が完全に予測できない疑似乱数関数として設計されているので、有効なブロックを生成する唯一の方法はトライアンドエラーを繰り返すことで、ナンスを増やしていって、ハッシュと一致するかを確認していきます。
現在のターゲットが2192だった場合、264回ためす必要があり、一般的に、このターゲットは2016ブロックごとにネットワークによって調整されるので、平均すると新しいブロックはどこかのノードによって10分に1回発行されています。マイナーのこの計算作業の補償を行うため、全ブロックのマイナーはマイナーに新しく25BTC(当時 現在は12.5BTC)を与えるトランザクションを入れる権利を得ます。さらに、あらゆるトランザクションにおいてアウトプットよりもインプットの方が大きい場合、その差は「トランザクション手数料」として、マイナーに渡ります。ちなみに、これはBTCが発行された時にしか発生しないメカニズムですが、ジェネシス状態ではコインは一切含まれていませんでした。

マイニングの目的をより良く理解するため、悪意ある攻撃の時に何が起きているかについて説明します。ビットコインの基盤となる暗号は安全であると認識されているので、攻撃者は暗号によって直接保護されていないビットコインシステムの一部分である、トランザクションの順番をターゲットとします。攻撃者の戦略はシンプルで以下の通りです。

  1. いくつかのプロダクトのために取引所内の企業に100BTCを送金 (できれば、短納期なデジタル製品)
  2. プロダクトが届くのを待つ
  3. 自分自身が同じ100BTCを送る別のトランザクションを作成
  4. ネットワークに自分自身に100BTCを送っているトランザクションの方が先であると説得

ステップ(1) が実施されて、数分後マイナーはトランザクションをブロック内に含めます。今回はブロック番号270000とします。約1時間後、そのブロックの後に5ブロックがチェーンに追加され、それぞれのブロックが間接的にそのトランザクションを指しているため、そのトランザクションが「確認」されます。この時に、企業はその支払いを確定したものとして受け取り、商品を届けます。今回はデジタル製品の場合で考えているので、即座に商品は届きます。そうしたら、攻撃者は自分自身に100BTCを送る別のトランザクションを作ります。もしも、攻撃者がそのようなトランザクションを作成した場合は、そのトランザクションは処理されません。マイナーはAPPLY(S,TX) を行おうとして、UTXOを消費するTXがすでに存在しないことに気付くからです。その代わり、攻撃者はブロックチェーンの「フォーク」を作り、そのフォークチェーンは同じ269999ブロックを親とする別のバージョンの270000ブロックとなり、その違いは古いトランザクションの代わりに新しいトランザクションを使うところです。ブロックデータが違うので、これにはProof-of-Workを再度行うことが必要です。さらに、この攻撃者の新しいバージョンの270000ブロックは違うハッシュを持っているので、オリジナルブロックの270001から270005はこの新しい270000ブロックを指しません。なので、オリジナルチェーンと攻撃者のチェーンは完全に分離します。フォーク下場合のルールは最長のブロックチェーン(より多くのProof-of-Workが行われるチェーン)が正しいものと考えられます。そのため、攻撃者だけが270000チェーンに取り組んでいる間、正しいマイナーは270005チェーンに取り組みます。攻撃者が自身のブロックチェーンを最長にするためには、追いつくために攻撃者は自分以外の残りのネットワークをまとめた計算能力を上回るだけの計算能力を持つ必要があります。なので、こういった攻撃を51%攻撃と呼びます。


FLOCブロックチェーン大学校は、第一線で活躍する講師陣から体系的かつ実践的な知識や技術を学び、最短3ヶ月でビジネスパーソンやエンジニアとして活躍できるブロックチェーン総合スクールです。
5,000人を超える方が参加した、無料でブロックチェーンを100分で学ぶ「無料体験セミナー」も随時開催しています。
遠方で参加できない、日程が合わないという方にはWEB受講も行ってます。

最新記事・限定情報を配信してます

ブロックチェーン専門スクールで即戦力を身につけませんか?

FLOCブロックチェーン大学校は、技術者の育成から、ビジネススクール、検定試験によるアセスメントの構築、人材紹介、起業家育成などを通じ、ブロックチェーンのプラットフォームを構築しているブロックチェーンの総合スクールです。
無料体験セミナーは、ブロックチェーンの仕組みからブロックチェーンで変わる未来、ブロックチェーン技術を効率的に身につける方法について、100分で学べる体験講座です。遠方で参加できない方や、教室開催の日程で都合が合わない方にはWEB配信も行ってます。

無料体験セミナーを確認する

FLOC LOG カテゴリー

3分でわかるブロックチェーンホワイトペーパー体験セミナー動画でわかるブロックチェーンNEWS