naoyaf.com

インターネットが好き

Ethereum(イーサリアム)はじめました

      2016/06/24

最近、ブロックチェーンを使ったサービスが様々なところで検討されていますが、いまいちどういったものなのかイメージがついていませんでした。

そこで、ブロックチェーンを活用したサービスが作れるEthereum(イーサリアム)を学ぶことで理解を深めていきたいと思います。

具体的には、Ethereumの技術入門書である「Ethereum入門」を手を動かしながら読み解いていきます。

さあはじめましょう。

まず最初に、Ethereum(イーサリアム)は、ビットコイン技術をベースにしたプロジェクトです。

その凄さや注目度については

・イーサリアムの衝撃-ビットコイン技術がもたらす社会基盤へのイノベーション
http://doublehash.me/ethereum-innovation/

・イーサリアムやべぇ。。。
http://horiemon.com/7176/

を読んで頂くと、分かるのではないでしょうか。

★Ethereum入門
http://book.ethereum-jp.net/content/index.html

この電子書籍の目的は

・Ethereumがどのように動作するのか
・Ethereumを用いてどのように分散アプリケーションを開発していくか

の2点となっています。

次にブロックチェーンの復習です。

ブロックチェーンはなぜ革新的なのか

Nakamoto氏の発明の本質は、いかなる中央機関も存在しないP2Pネットワーク上で、「合意」の形成を行うことを可能にしたことにあります。

さっそくですが、ブロックチェーンは P2Pネットワーク上で「合意」の形成ができるので、革新的なわけです。

順をおってみていきます。

なぜビットコインにおいてブロックチェーンが必要なのか?

従来のように中央管理機関が存在している通貨システムであれば、太郎は自ら生成したトランザクションの情報をその中央機関に送信し、その機関は受信したトランザクションの情報に基づいて、自ら管理する取引台帳にその情報を更新すればよいだけです。

一方、P2Pのネットワーク上で動作するビットコインは、代表して台帳を管理する中央機関(システム)が存在しません。

それは、従来の中央管理機関に代わるシステムがP2P上にも、必要なためです。

ブロックとは

ある時点からある時点までの間に行われたトランザクションの情報をまとめたパッケージ

チェーンとは

1つのブロックには前に作成されたブロックへの参照が含まれており、採掘を通じてブロック同士が繋がっていき、一本のチェーンとなります。

そう、これがブロックチェーン!

なぜEthereumが必要なのか

分散アプリケーションを開発する際の障壁を取り除いて、分散アプリケーションを開発しやすくするために、Ethereumは開発されています。

分散アプリケーションを作るための障壁とは

実装に相当の工数がかかります

ブロックチェーンを用いた合意形成がサービスのローンチ当初から安定して動作するためには、相当数の参加者が事前に集まっている必要があるからです。これは需要の少ないニッチなサービスを展開する際には、非常に致命的な問題になります。

要するに、めんどくさいのと、初期コストが高いのです。コストといっても「参加者がいる」ということなので、お金の問題ではありませんね。

Ethereumのアプローチ

Ethereumのプラットフォーム上で動作するよう開発された様々な分散アプリケーションは、Ethereumのブロックチェーンを共有して利用します。そのため利用者が少ないニッチな分散アプリケーションでも、分散システム上での「合意形成」が安定して動作することが可能です。

Ethereumのプラットフォームを利用することで、「合意形成に必要な十分な参加者を最初から用意する」というハードルが下がることになります。

内部通貨ether

etherはEthereum独自の内部通貨です。ビットコイン同様に通貨としての機能も果たしますが、

より重要な事はetherがEthereum内で分散アプリケーションやスマート・コントラクトを実行するための「燃料」の役割を果たす

Ethereumでは、分散アプリケーションを実行するためには、その処理の重さに応じた燃料が必要」とすることによって、Ethereum上で動作する分散アプリケーション間での計算資源の割り当ての平等性を確保しています。

とあるように、etherを対価として、アプリケーションを実行していくことになります。

単位はetherまたはETH

アカウントと呼ばれるオブジェクト

20バイトのアドレス(例:0x4c84913cc41f2aad9c24d82bfde598c91cdd33d3)

アカウントは4つの情報をもつ

nonce:そのアカウントが送信した累積トランザクション数
ether balance:そのアカウントが所有するether量
contract code:コントラクト・コード(EOAの場合は空)
storage:そのアカウントが保持する任意のデータ

#2つのタイプが存在する!(ココ重要)

Externally Owned Account(EOA)

ユーザーのようなもの。他EOAへの送金、新しいContractの作成、コントラクトコードの実行などを行う。

Contract

これが、分散アプリケーションを構築する上で重要な役割を果たします。

EOAからトランザクションを介して生成されます。Contractは一種の自動エージェントであり、EOAが発信するトランザクションをトリガに、コントラクト・コードを実行します。

よくわからないですね。。。

Contractは、オブジェクト指向言語での「クラス」に似たものと考えるとイメージがつかみやすいかもしれません。それぞれのContractは、各自にクラス変数に相当するような、内部状態を保持するストレージ部分と、メソッドに相当するような、実行コードである「コントラクト・コード」を持っています。

ここから重要なのですが、

Contractの特徴して、このContractを宛先としてetherを送金することができると同時に、コントラクトコードを実行することができるのです!!!

コントラクト・コードに様々な動作をプログラムすることで、そのContractにより名前管理やトークン管理のようなアプリケーションが実現できます。コントラクト・コードの実行は採掘者によって行われ、実行結果は公開元帳であるブロックチェーンに書き込まれていき、特定の中央機関なくアプリケーションが動作していきます。

つまり、分散アプリケーションを開発するとは、Contractをプログラムしていくことにほかならないのです!!!
ふ、ふう。やっと、ブロックチェーンを使ったサービス提供とはなんなのか?という具体的な問いの答えに近づいてきました。

今日はここまでとします!「Ethereum入門」では手を動かして実際にetherの採掘や送金をし、理解を深めることができます。これは次回まとめて書きます。

 - プログラミング , ,