Ethereum Beige Paperを日本語に訳してみる

最近ブロックチェーン(Ethereum)の勉強を初めて、簡単なDApp(分散型アプリケーション)を作ってみたりしてるんだけど、ブロックチェーンの難しい部分をうまい具合にライブラリがラップしてくれてて思った以上に楽に作れてしまう。

それ自体はとてもうれしいんだけど、もっとEthereumの根幹の部分を知っておきたいなと思って、EthereumのBeige Paper(技術仕様みたいなもの)を読むことにした。

(ほんとはYellow Paperというのが一番詳細に書かれているものなんだけど、数式が多くて文系の僕には辛そうだったから、より一般向けであるBeige Paperを選んだ。無念)

といっても全部英語だし長さもあるから読んでると眠くなってしまう。

そこで、日本語訳してブログに書かなきゃいけないとなれば否が応でも読むであろう、と思ってこの時給が発生しても良いくらいの辛いタスクを自分に課した次第でござる。

それではどうぞ!

* 一度に全部は無理なので、順々に訳していってこの記事を更新していくという形にします。
* 僕自身この文書を理解しているわけではなく、皆さんのように理解しようとしている一人です。間違った訳があるかもしれないのであしからず。
* 原文


要約

Ethereum Protocolは決定論的、しかし実際には無限の状態機械であり二つの基本的な機能があります。一つはどこからでもアクセス可能なシングルトンの状態であること、二つ目はその状態に変化を与える仮想機械(VM)であることです。本書はこれら二つを構成するそれぞれの要素について説明するものです。

1 ビットコインを一つのコンピューターとして考える

EthereumはBitcoin由来の分散型台帳モデルを仮想コンピューターに応用したもので、Bitcoinのトランザクションのような確実性をマシンレベルのオペコードに与えます。Bitcoinの取引がコンセンサスメカニズムによって確実でタイムスタンプが正しいことと同じように、Ethereum上で実行された命令は確実に実行されます。

言い換えると、Ethereumブロックチェーン上で実行されたプログラムは基本的に止めることが不可能です。これはEthereumではバグが起こり得ないという意味ではなく、Ethereumプログラムは外部要因に阻害されることなく実行されることが保証されている、という意味です。これは、暗号学の上に成り立っているブロックチェーン固有のセキュリティによる特徴です。

1.1 固有通貨

Ethereumは通貨としての利用を第一に考えられているわけではなく様々な利用法があります。そのため、計算力の利用過多によるネットワークの破綻を防ぐために基本的なネットワークコスト単位が存在します。これは「ガス」と呼ばれ、詳しくは第3章で説明します。ガスはEtherでのみ買うことができます。Ethereumにおける最小通貨単位はWeiで、1Weiは10e-18Etherです。Ethereumでのすべての通貨取引は内部的にはWeiで数えられます。また、Szabo、Finneyという単位もあり、それぞれ10e-6Ether、10e-3Etherに相当します。

Ethereumネットワークに対して、固有通貨であるEtherのみが力を持ちます。計算力を意味するGas、それを唯一購入できるEtherをどの程度支払うことができるかが、システムができることを決定します。

2 メモリとストレージ

2.1 ワールドステート

「ワールドステート」(全体的な状態)はブロックによって区分されます。ある新しいブロックはつまり、ある新しいワールドステートであるということです。ワールドステートというのはRLPを利用して、以下の2つのマッピングで構成されています。

  1. アドレス

  2. アカウントの状態
この情報はマークルパトリシアツリーとして、バイト配列とバイト配列のマッピングを行うデータベースに保存されます。結局、状態というのは状態データベースに存在するリレーション全てのことを指します。

2.1.1 マークルパトリシアツリー

マークルパトリシアツリーはマークルツリー(ハッシュ木)を応用したもので、各ノードがハッシュ値ではなくハッシュ値のそれぞれの文字を表しています。これにより、状態データ全体が各データへのパスを表すだけでなく、あるデータが実存したかどうかを暗号学的に証明します。言い換えると、通常のマークルツリー(ハッシュ木)とパトリシアツリー(基数木)を組み合わせることによってブロックチェーンを有効なものにします。Ethereumにおける全ての検索・並び替えアルゴリズムはこの厳重に正しいデータベースを通して行われるので、情報の正確さが保証されます。下の図は16進数のaと4から始まる探索木の例です。

ツリーに関する用語

  • ルートノード
  • ツリーのルートノード。
  • 子ノード
  • ルートを一番上と見たときに、あるノードの下についているノード。
  • 親ノード
  • 子ノードの逆。あるノードの上についているノード。
  • 兄弟ノード
  • 同じ親ノードを持つノード。
  • 子孫ノード
  • あるノードから下方向にたどった時に行きつくノード。
  • 先祖ノード
  • あるノードから上方向にたどった時に行きつくノード。
  • 葉ノード
  • 子ノードを持たないノード。
  • 枝ノード
  • 少なくとも一つは子ノードを持っているノード。
  • ディグリー(度数)
  • ノードから伸びるツリーの数。
  • エッジ
  • ノードとノードのつなぎ目
  • パス
  • あるノードからある子孫ノードへ行きつくときの経路。
  • レベル
  • あるノードのレベルとは、そのノードとルートノードの間にあるノードの数+1。
  • ノードの高さ
  • あるノードの高さとは、そのノードより下にある葉の中で一番下にある葉とそのノードとの間にあるエッジの数。
  • ツリーの高さ
  • ルートノードの高さ。
  • 深さ
  • あるノードの深さとは、そのノードとルートノードととの間にあるエッジの数。
  • 0つ以上のつながっていない木の集合。

2.1.1 RLPエンコーディング

To be continued...