Bitcoinプログラミングの入り口

今回はBitcoin AdventCalendarの記事の一つとなります。

Bitcoin Advent Calendar 2014 – Qiita

 

注意:以下の実験を真似する場合は必ずtestnet環境で行ってください。本物のbitcoinネットワークで行った場合、何か間違いがあれば、最悪持っているbitcoinを全部失います。

この記事に従って損失が出た場合、筆者は一切責任を負いません。

 

BitcoinやBlockchainのアルゴリズムや応用が分かった所で、Blockchainを利用したプログラミングへ進んでいきます。何事も作ってみないと本質は分からないというのが信条です。Ethereumのコードを読むということも考えましたが、まずは情報も一杯あってコードも枯れているBitcoinから初めてみることにします。

f:id:kurinkurin12:20140731231645p:plain

Bitcoinは上の図にあるように世界中に存在するマイニングノードがこれまでの全ての取引を記録したBlockchainと呼ばれるデータを保持しています。このマイニングを行うプログラムはWalletも兼ねており、Satoshi Nakamotoの論文を元に開発されました。

もちろんオープンソースでGithubで公開されています。

https://github.com/bitcoin/bitcoin

bitcoin-qtという名前のソフトウェアです。bitcoindという名前のコマンドラインで起動するデーモンプログラムもあります。

 

また、bitcoinにはSPV(simplified payment verification)と呼ばれる、マイニングを行わないノードも存在します。 スマホ等でよく使用されているbitcoin walletはこちらのSPVノードです。

SPVノードもオープンソース実装がたくさんあります。今回は以下のコードを使用します。

schildbach/bitcoin-wallet · GitHub

 

今回は、この二種類のノードをソースからコンパイルしてbitcoinのやりとりを行います。この環境が作れれば、後はソースコードを読んで、改造し、自分のbitcoinアプリケーションの開発ができるようになるはずです。

 

まずはbitcoin-qtをインストールしてみます。以下の作業は全て、Ubuntu14.04LTS上で行っています。

現在(2014.12.7)の最新バージョンはv0.9.3のようなので、そちらを使います。

まずは、Githubからclone !

git clone https://github.com/bitcoin/bitcoin.git

 

git branch -r でリモートのブランチをチェック

kurimoto@kurimoto-ubuntu:~/Develop/Bitcoin/bitcoin-qt/bitcoin$ git branch -r
origin/0.6.3
origin/0.7.2
origin/0.8.6
origin/0.9.3
origin/HEAD -> origin/master
origin/freenode-verf
origin/master

0.9.3をローカルに再現します。

git checkout -b My0.9.3 origin/0.9.3

doc/build-unixに従って、必要なライブラリをインストール

sudo apt-get install build-essential
sudo apt-get install libtool autotools-dev autoconf
sudo apt-get install libssl-dev

sudo apt-get install libboost-all-dev

sudo add-apt-repository ppa:bitcoin/bitcoin (libdb4.8インストールのため)
sudo apt-get update

sudo apt-get install libdb4.8-dev
sudo apt-get install libdb4.8++-dev

sudo apt-get install libminiupnpc-dev

sudo apt-get install libqt4-dev libprotobuf-dev protobuf-compiler

sudo apt-get install libqrencode-dev

ライブラリを準備できたらビルド開始

./autogen.sh

./configure

make

コンパイルが始まります。

sudo make install

インストール終了

 

コンパイルが通って、起動させたいところですが、ここで以下の事項に対する知識が必要です。

■bitcoin関連の開発において、以下の3つの実行環境でテストが行われます。

a. main or “production” network

b. test network(testnet)

c. regression test mode

aは所謂bitcoinネットワークです。実際に価値のあるbitcoinの送金等が行われているネットワークです。こちらはプログラムを完全に理解した人以外使用してはいけません。バグがあって、大きな額のbitcoinを知らない人に送金してしまったら、二度と戻ってきません。

bは上記のような開発時の難しさを避けるためにインターネット上に作られているtestnetです。ここでのbitcoinは価値を持ちません。通常はこちらを使いましょう。 -testnetで起動することでこちらに接続します。

cはインターネット上のマイニングネットワークには繋げずに、自分で起動したbitcoindとプライベートなネットワークを作って実験する方法です。今回の記事では使用しません。

 

コマンドライン実行時に -testnet とオプションをつければtestnetで動作させることができますが、ここではbitcoin.confというコンフィグレーションファイルを使って設定する方法を取ります。

以下のページにtestnet用のbitcoin.confサンプルがありますので、これを変更して、~/.bitcoin/のディレクトリに置きます。

insight-api/bitcoin-testnet.conf at master · bitpay/insight-api · GitHub

この状態で起動すると、通常はオレンジのbitcoinロゴが緑のロゴとなって開始します。緑色はtestnetにつないでいることを示しています。

ブロックチェインの同期が始まります。結構な時間がかかります。ネット上にaddnode=blockexplorer.com を加えると書いてあったので、bitcoin.confに加えるとやや早くなりました。

 

マイニングするフルノードはソースからビルドして稼働することができました。次にAndroid上のSPVノードをソースからビルドして動作させます。

git clone https://github.com/schildbach/bitcoin-wallet.git

でソースをローカルに持ってきます。

mvn clean install でビルドが始まります。

無事にビルドが終わると wallet/target/wallet-4.08-test.apk

ができあがります。テストネット用のwalletです。

 

Android SDKをインストールすると使えるようになる、adbを使用してマニュアルインストールします(Androidは開発者オプションと身元不明のアプリのインストールの許可をオンにしておきます)。

adb install wallet-4.08-test.apk

これでUSBコードを通してAndroid端末にbitcoin SPV node walletがインストールされました。

Testnet3と表示されているアプリケーションアイコンをタップすると起動します。

f:id:kurinkurin12:20141207190029p:plain

 

testnet上のbitcoinは実験用としてしか価値がありませんので、以下のtestnet faucetで簡単に手に入れることができます。

TP’s TestNet Faucet

AndroidアプリのQRコードをタップした時に出てくるwallet のアドレスを上記HPで入力し、captchaの値を入力してsendボタンを押すと無事にAndroid walletにtestnet上のbitcoinが入金されました。

f:id:kurinkurin12:20141207190507p:plain

bitcoin-qtの方に戻り、受信ボタンを押して、Request paymentボタンを押すと、受信用QRコードが出ます。

f:id:kurinkurin12:20141207212620p:plain

Androidアプリからこのコードをスキャンして送金してみます。

送金するとblockchain netowrk上にトランザクションが広がります。まだマイニングによって承認されていません。アプリ側で未承認状態にあることが確認できます。

暫く待つと一つ目の承認がblockchain network上で行われ、アプリ上の表示記号が変わります。

それと同時にBitcoin-Qtの方で受金します。

f:id:kurinkurin12:20141207213857p:plain

こんな感じで無事bitcoinを受け取ることができました。

 

以上で、マイニングフルノードとSPVモバイルwalletをソースからコンパイルしてbitcoinのやり取りに成功しました。

 

あとは、ソースコードを解読するなり改造するなりしてbitcoinアプリケーションの開発が可能になります。

 

Let’s hack !!!

 

K.Kurimoto

Bitcoin2.0の本命 Ethereumとは何か

 

2014年 7月24日に博多図工室で開催した、Ethereum meetup Fukuokaでの発表 “Bitocoin2.0の本命 Ethereumとは何か?” の内容を公開します。

f:id:kurinkurin12:20140731193229p:plain
1)   Bitcoin2.0の動きが加速されています。その中でも最も注目を集めているEthereumプロジェクトについて、技術詳細にはあまり立ち入らず、”Ethereumが何であるのか”を伝えることをメインに説明します。
f:id:kurinkurin12:20140731193532p:plain
2)  まず最初にBitcoinの特徴を簡単に説明します。次にBitcoin2.0と言われる物が何であるのかを説明します。最後に、Bitcoin2.0のフレームワークとして非常に注目を浴びているEthereumについて説明します。
f:id:kurinkurin12:20140731194401p:plain

3) 「そもそも何故国はお金を発行できるのに、自分は発行できないのだろう?お金が発行できるといいな。」と子供の頃多くの人が一度は考えます。最近は電子マネーを発行する大企業も存在します。大きな組織、権威に支配されずにP2Pサーバーネットワーク上で取引認証できる電子通貨というものを多数のハッカーが夢見ました。

2008年にSatoshi Nakamotoがその夢を実現する論文を発表しました。Satoshi Nakamotoは偽名で、誰なのか未だに分かっていません。

 

f:id:kurinkurin12:20140731225839p:plain

4)Bitcoinの特徴をここに上げています。特定組織の発行者がおらず、認証サーバーはP2Pネットワークに存在しています。認証サーバーソフト(財布ソフトも兼ねる)はオープンソースで公開されており、そのソフトウェアを自分のコンピュータで実行してP2Pネットワークに接続することで自分も認証サーバーの一部となります。

認証作業はマイニングと呼ばれるある種の演算競争で、その競争に勝った人は新規発行のビットコインをもらう事ができます。これがビットコイン発行の唯一の方法です。

色々議論はありますが、現在の所、決済コストは格安です。決済に国家が関与しない電子通貨なので国境を越えて簡単に決済が可能です。決済が格安なことを合わせて、少額でも商売できる世界単一市場を生み出します。新しいビジネスの決済はコンピュータやスマホ上で簡単に決済できます。

 

f:id:kurinkurin12:20140731230739p:plain

5) 誰もが参加できるP2Pネットワークで実現と聞くとエンジニアなら色々疑問を抱きます。

 

 

f:id:kurinkurin12:20140731230949p:plain

6)  ソフトウェアデータですので、Aさんのお金をBさんが勝手にデータをねつ造して使用するようななりすましが簡単にできそうな気がします。これをどうやって防いでいるのでしょう?

AさんがBさんに1万円分の支払いをする前に、PC上のデータを複製しておいてCさんに対しても、すでに持っていない1万円を払う事が簡単にできそうな気がします。

またP2Pノードがネットでつながっていたとしても支払いしたことが届くのには時間差があります。そのような時間差を利用したずるができそうな気もします。

BitcoinはBlockchain technologyを用いて解決します。以降で、厳密さを無視して簡単にBlockchain technologyを説明します。

 

f:id:kurinkurin12:20140731231645p:plain

7) P2Pネットワークに接続されている全ての認証サーバーは、Bitcoinが誕生して以来の全ての取引(transaction)の記録を持っています。10分間に行われたtransactionに対して認証を行い、認証された10分間のトランザクション記録を後ろに繋いで行きます。P2Pなので時々あるノードとあるノードの持っているデータが異なるというタイミングが存在しますが、一定時間で世界中のノードの持つtransactionの記録が一意に収束するようになっています。

 

f:id:kurinkurin12:20140731232354p:plain

8)先に述べたように、電子データの通貨ですのでなりすましが簡単にできそうな気がします。それに対してはデジタル署名という技術者には良く知られたテクノロジーを用いて不可能にしています。

 

f:id:kurinkurin12:20140731233000p:plain

9)本人が複製して二重使用することが容易にできそうな気がします。

P2Pではなく神様サーバーが存在するシステムであれば、AさんがBさんに1万円払った時に、神様サーバーにtransactionが届いたタイミングでAさんの持ち分を1万円減らし、Bさんの持ち分を1万円増やせば二重使用は防げます。P2Pの場合は神様サーバーがいないので非常に難しい問題となります。

Bitcoinでは、これまでのtransaction全ての記録を認証サーバーが保持することによって二重使用を防いでいます。

しかし、P2Pネットワークですので、transaction記録をねつ造できるような気もします。Bitcoinでは約10分かかる重い演算を認証サーバー同士で競い合います。競争に勝った認証サーバーのデータが全ての認証サーバーにブロードキャストされます。重い演算を解かねばならないため、大量のアカウントを作って認証サーバー網を支配することが不可能となり、CPUパワーの51%を取らない限り支配できません。

 

f:id:kurinkurin12:20140801000146p:plain

10) 前ページの10分間の演算競争に勝った認証サーバーは報酬としてBitcoinを貰います。認証演算がBitcoinの採掘となるためマイニングと呼ばれます。これを組み込んだシステム設計こそがBitcoin最大の発明です。Bitcoinを欲しいと思う人が参加して自然と世界中に認証サーバーネットワークが構築されました。

 

 

f:id:kurinkurin12:20140801001416p:plain

11)良いテクノロジーを開発したとしてもイノベーティブな新技術を使用してもらうことは非常に難しいことです。Bitcoinは巧妙なインセンティブ設計をシステムに組み込み、誰もが実現を疑うような技術を世界に広めることに成功しました。

 

f:id:kurinkurin12:20140801001724p:plain

12)ここからBitcoin2.0の説明を始めます。

 

f:id:kurinkurin12:20140801001946p:plain

13) Bitcoinは技術イノベーションと、主に価格の乱高下で大きな話題となりました。世界中の人がBitcoinという技術があることを知りました。

 

f:id:kurinkurin12:20140801002203p:plain

14)権威者無しのP2Pネットワークによる通貨が実際に稼働してることと、国家を超えて簡単決済することに多くの人が驚きました。

 

f:id:kurinkurin12:20140801004305p:plain

15)新しい通貨として話題となりましたが、通貨だけでなく、その裏側にある技術 ー P2Pネットワークで一意な取引(transaction)記録できるシステムに大きなイノベーションがあるのではないかと一部の人達は考えました。

 

f:id:kurinkurin12:20140801004541p:plain

16) Bitcoinの裏側にあるテクノロジー Blockchainを通貨以外の物に適用しようという動きが広がっています。このような動きをBitcoin2.0と呼びます。Bitcoin2.0というとBitcoinを置き換える進化させた技術のように思う人も沢山いますが、そうではなく、新しい適用分野に向けた動きの総称です。

 

f:id:kurinkurin12:20140801190041p:plain

17) コンピュータ上のトランザクションを利用しようというアイデアはかなり古くから存在しました。 Smart Contractと呼ばれる、ソフトウェア上での契約を結ぶ提案が色々行われています。

 

f:id:kurinkurin12:20140801190749p:plain

18) Smart propertyとは、smart contractの一種で実体のあるデバイスの所有権をBlockchain Technologyを用いてコントロールするコンセプトです。

 

f:id:kurinkurin12:20140801192825p:plain

19) 今回は詳細の説明はしませんが、例として車の所有権をコントロールする図を載せました。ここでidentification keyやownership keyは実際の鍵ではなく、Bitcoinに於ける秘密鍵のようなものだと思ってください。identification keyはメーカーが車そのもの一つづづに作る鍵、ownership keyは現在の所有者が持つ非常に小さな額のBTCです。

 

f:id:kurinkurin12:20140801193204p:plain

20) ここでは車を売り買いするときのトランザクションが示されています。代金(仮想通貨)と所有権がソフトウェア上で同時に入れ替わります。

 

 

f:id:kurinkurin12:20140801193416p:plain

21)このような契約は、これまでの書類での契約と何が変わるのかと疑問を抱く人もいると思います。重要なのは、代金と所有権の入れ替わりが自動執行されることです。Smart contractの効用がどれぐらいかと考えるかは人によって大きく異なります。ある人達は社会を変えるぐらいのインパクトと感じますし、ある人達は人間社会に適用するのは難しいと感じます。
大きなインパクトを感じている人達の意見は、信用度の低い相手とも契約が行えることに大きな意義があるというものです。例えば、日本にいながら、サンフランシスコの車を購入してロスアンゼルスの人に販売するようなことが可能になると考える人もいます。
これらは”Decentralized”とか”minimize trust”と呼ばれるコンセプトにつながって行きます。システムから人間的な信用度に基づく部分をできるだけ外し、あまり親しくない人とも取引できるようにすることを”minimize trust”と呼んでいます。”Decentralized”はさらにそれを進めて、システムの中でどこかに集中する権利をなくし、システムを使用する個々の人が関連する人とのみ直接インタラクションするようなシステムを理想とする考え方です。

 

f:id:kurinkurin12:20140801194244p:plain

22)Bitcoin2.0のプロジェクトは多数の物が存在しています。上記のものの中には既にサービスインしている物もあります。

 

f:id:kurinkurin12:20140801194953p:plain

23) Bitcoin2.0のプロジェクトの中で最も古くからサービスインしているものがNamecoinです。名前登録データベースをBlockchain Technologyを用いて実現するものですが、特にDomain Name登録で使用されています。Domain Name登録は、ある名称は最初にとった人の物となります。また名称自体の売買が可能です。これはBlockchain technologyそのものです。

 

f:id:kurinkurin12:20140802175020p:plain

24) http://***.bitというドメインネームの登録ができます。***.bitを見るためにはブラウザにadd-onをインストールする必要があります。ここで重要なことは ***.bitというドメイン名はICANNの支配の及ばない所に存在していることです。

 

f:id:kurinkurin12:20140802175425p:plain

25) 権威の外に存在していることは非常に重要なことです。例えば、仮にどこかで独裁政権がICANNに対して力を持ったとすると、独裁打倒の運動のHPがあったとしてもその登録を勝手に他に譲る事が可能になります。***.bitは誰も具体的な権威者が存在せず、皆がmining serverを自主的に提供することによって機能しています。このシステムに意義を感じ参加する人がいる限りシステムをストップすることができません。

 

f:id:kurinkurin12:20140802180004p:plain

26) Namecoinの最初の立ち上げは、Bitcoinのような専用マイニングサーバーアプリを開発して、自主的な参加者達がP2P認証サーバーネットワークを立ち上げました。

 

f:id:kurinkurin12:20140802182028j:plain

27)ColoredCoinsも既にサービスが始まっています。デジタルトークンを実現するものです。ColoredCoin一つが何を表すのかを発行者が決めます。非常に小さな額のBitcoinを一つのColoredCoinにします。先ほど説明したSmartPropertyを実現したものとも言えます。

 

f:id:kurinkurin12:20140802182329j:plain

28) ColoredCoinsはBitcoin上にメタプロトコルを実装して実現しました。既に立ち上がっているBitcoinP2P認証サーバーネットワークを利用しています。

 

f:id:kurinkurin12:20140802182857j:plain

29) MaidSafe, Storjは分散型のクラウドストレージです。

 

f:id:kurinkurin12:20140802183159j:plain

30) 様々なBitcoin2.0プロジェクトがサービスインしていたり、開発中だったりしますが、現状Bitcoin2.0の立ち上げ方法には3つの方法があります。

①Namecoinが行ったように独自のP2P blockchain サーバーネットワークを立ち上げる。これはBlockchainをアプリケーションに適合したものにモディファイしたりできますので、自由に実現したいことができますが、賛同してP2Pサーバーを立ち上げる人を巻き込まねばならない(少人数であれば51%アタックに弱くなる)、P2Pサーバーネットワークソフトウェアの検証が大変と、大きな労力がかかります。

②ColoredCoinsが行ったようにBitcoin上にメタプロトコルを作る方法があります。これは様々なことが実現できますが、P2P認証サーバーネットワークは既に立ち上がっているBitcoinの物を使用しますので、立ち上げの労力は軽くなります。しかし、SPV(Simplified Payment Verification)が使用できない等、①と比較するとできることの自由度が減ります。

Bitcoinスクリプトを利用する方法もあります。Bitcoinスクリプトシステムであり、通常のBitcoinの支払いも、実際はスクリプト実行です。この部分を書き換えることによって実現できることもあります。3つの方法の中でもっとも簡単ですが、スクリプトでできることには制限があります。

 

f:id:kurinkurin12:20140802184539j:plain

31) Bitcoinスクリプトには以下のような欠点が存在します。

①Turing完全性の欠如。ループ等が存在しません。

②Value-Blindness。 支払い量を細かくコントロールできません。ある条件の元に支払い量を変えるというようなことをしたい場合、値の異なるトランザクションを全て用意しておいてどれかを選ぶというようなことをする必要があります。

③Lack of State。Bitcoinスクリプトは支払いをするかしないかを選択するのみであり、状態の概念がありません。例えば、1日後にある条件が成立して、さらに2日後にある条件が成立した時に支払いが行われるというようなことができません。

④Blockchain Blindness。ブロックチェインの値を見る事ができません。乱数の素として使用できるものがありません。

 

f:id:kurinkurin12:20140802185016j:plain

32)以上見て来たように、新たにP2P blockchainサーバー網を立ち上げるのであれば何でもできますが、非常に難しいです。逆にBitcoinスクリプトBitcoin上のメタプロトコルを利用する方法は簡単ですが、できることに制限があります。

このトレードオフを解決するのがEthereumです。

 

f:id:kurinkurin12:20140802185227j:plain

33) Bitcoin2.0のフレームワークとなるEthereumについて説明します。

 

f:id:kurinkurin12:20140802185355j:plain

34) Ethereumとは何か? いきなり結論を書くと、Smart contractとDecentralized Applicationのプラットフォームとなるものです。インターネットの構造を変え、社会の構造を変えることを目標としています。

この言葉を聞いても???となると思いますが、非常に大きなパラダイムシフトにチャレンジするコンセプトなのでこれから少しづつ説明していきます。

 

f:id:kurinkurin12:20140802190021j:plain

35) Ethereumをテクノロジー的に説明するとTuring完全なプログラミング言語を実行できる仮想マシンをBlockchainに組み込んだものとなります。

 

f:id:kurinkurin12:20140802190250j:plain

36) Ethereumには2種類のアカウントが存在します。外部アカウントはBitcoinのアカウントのようなもので、秘密鍵•公開鍵によってコントロールされます。外部アカウントはEtherと呼ばれる暗号通貨のバランスシートや状態を保持するストレージを持っています。

もう一つ、Contractアカウントと呼ばれるアカウントがあります。こちらは外部アカウントには存在していない、ユーザが記述したcontract codeが含まれます。他のアカウントからメッセージが送られてくると起動します。Contractアカウントにはkey/valueストアが存在しており、長期に渡って状態を保持できます。

 

f:id:kurinkurin12:20140802191141j:plain

37) これはColoredCoinsのようなデジタルトークンを実現するcontract codeの一例です。

from = msg.senderは、このcontract codeをmessageを送って起動した送付元アカウントの公開鍵がfrom変数に入るということです。

to = msg.data[0]は、messageの最初の引数の値をto変数に代入します。messageの送付者はこの引数には送り先の公開鍵を入れます。

value = msg.data[1]は、messageの二番目の引数の値をvalue変数に代入します。messageの送付者はこの引数にはいくつのデジタルトークンを送るかを入れます。

contract.storageはこのcontractアカウントが持っているkey/valueストアです。最後の3行で、送り主が送付しようとしている個数以上のデジタルトークンをきちんともっている場合に、送り主のデジタルトークンを減らし、送り先のデジタルトークンを増やします。

このような単純なコードでColoredCoins相当のコア部分が実現できます。

 

f:id:kurinkurin12:20140802191946j:plain

38) contract codeを書く事で実現できる例としては以下のような物があります。

①金融デリバティブ。仮想通貨は価格のボラタリティが高く、ビジネスに使用することが難しい状態です。例えばUS$との変動をヘッジするようなコントラクトを書く事ができます。

②名前登録システム。Namecoinのような物を実現します。Yahooオークションのように、オンライン上のIDに対して評判システムを連携させるような物が有効だと考えられます。

③誰もが自分のディスクを貸し出すDropbox的なサービス。

④多段のMultisig。Bitcoinと異なり、EthereumはStorageを持っていますので途中の状態を保持できます。3人がOKを出したら取引開始というようなcontractで、3人が時間差を持ってOKを出すようなことに対応するものが簡単に記述できます。

複数署名エスクローエスクロー取引も複雑なスキームが記述できます。

⑥参加型クラウドコンピューティングSETI@Homeのような皆が参加する計算問題をcontractを使用して実現できます。

予測市場。 予測に対してお金を集めるようなことが簡単に実現できます。

Ethereumは状態を持っていて、Turing完全な言語でcontractを記述できるため複雑な契約を実現できます。アプリケーション毎にP2Pサーバー網を立ち上げることなく、EthereumのP2Pサーバー網を使用して様々なcontractを実現できるため、smart contractのプラットフォームとなります。

 

 

f:id:kurinkurin12:20140802193057j:plain

39) Ethereumはsmart contractとdecentralized applicationのプラットフォームだと最初に説明しました。ここからはDecentralized applicationプラットフォームについて説明していきます。

Decentralized Applicationとは、誰でも参加したい人が参加してシステムの一部になるようなアプリケーションのことです。BitcoinBitTorrentをイメージすると分かりやすいです。どちらもアプリケーションのユーザでありながらシステムの一部となっています。会社や国のような権威が存在しません。このようなアプリケーションが大量に出てくるプラットフォームとなることを目的としています。

 

f:id:kurinkurin12:20140802193814j:plain

40)ここでは重要な概念Decentralized Autonomous Organization(DAO)について説明します。contractによって人々がつながっている仮想的なエンティティで、67%以上のメンバー、またはシェアホルダーがファンドを使ったり、contractコードを書き換える権利をもつものです。参加者が株主のように異なる権利割合を持っている営利組織の場合はDecentralized Autonomous Company(DAC)と呼ばれたりもします。

例えばネット上のcontractで結ばれたDACで、有料のDecentralized Applicationを開発し、利益をcontractに従って分配するようなものをイメージすることができます。

 

f:id:kurinkurin12:20140802194338j:plain

41) 仮想通貨を用いたプロジェクトにおいて、従来のIPOと異なるタイプのIPOと呼ばれる手法が取られ始めています。

例えば、cryptcurrency(Bitcoin等)で予算を集めてサービスの開発。サービス開始前に、サービスで使用するcryptcurrencyを発行。サービスの人気ができると発行したcryptcurrencyの価格が上がる等、様々な手法が行われています。

Cryptcurrencyを利用して世界中から予測市場的な資金集め->DAOで開発->CryptEconomic的なIPOという手法は、未だ様々な不明点が残っていますが、現在のVCから資金を集め、NASDAQのような市場に上場する方法と比較して実行のハードルがかなり低くなるため、イノベーションが加速することが予測されます。

 

f:id:kurinkurin12:20140802194854j:plain

42)  最近、Ethereum.orgのCTO Dr.Gavin woodから “Web3.0″のコンセプトが発表されました。こちらはまだ詳細は発表されていません。

Swarmと呼ばれるBitTorrentのようなモジュールと、Whisperと呼ばれるP2P messagingモジュールとEthereumを使用してインターネットの構造を変えることを目的としています。

BitTorrentは従来のFTPを代替するもので、人気のあるファイルであればあるほどダウンロードが早くなるという特徴を持っています。例えばUbuntuの新バージョンが公開される日は非常に沢山のダウンロードが発生します。AさんがUbuntuBitTorrentを使用してダウンロードした場合、AさんのPC上ではBitTorrentが起動しており、他の人へダウンロードしたUbuntuバイナリーを配布する機能が動作しています。BさんがUbuntuバイナリーをダウンロードしようとした時に、Aさんのようにすでにバイナリーを持っていてダウンロードに協力してくれる人達を探し、分散的にダウンロードを実行することにより、人気のあるファイルであればあるほど、高速にダウンロードすることができます。

Swarmはこのような構造を持ったモジュールで、Webのstaticなデータの配布に使用します。

WhisperはP2P messaging機能で、Webの動的なやり取りを担います。

そして、EthereumがクリティカルなTransactionを担います。

P2Pのプロダクトは沢山出て来ており、最近は中央集権的なサーバーが全く必要のないP2Pアプリケーションもいくつか出て来ていました。Blockchain Technologyは、クリティカルなトランザクションを実行するという、中央集権サーバーの無いP2Pインターネットを実現するための最後のパーツを埋めました。今こそインターネットの構造を再構築していくタイミングです。

 

f:id:kurinkurin12:20140802195851j:plain

43)  browserの開発が予定されています。この図のアドレスバーには http://**** の代わりに  eth://****が入力されています。Etehreum organizationの図が示されていますが、それぞれの個人のプロフィール部分は各人のPCからデータが送られています。

現在はインターネットを使用するためには大きな組織に依存せざるを得ない構造になっています。大量のアクセスがあるHPはgoogleamazonのような高性能なサーバーでホスティングする必要があります。また、例えばGoogleはAさんが”30代、男性、映画好き”であることを把握しています。このようにインターネットは大きな組織が支配できる場所になっており、そしてSnowdenの事件のように(真偽•詳細は不明ですが)、その上にアメリカ政府が支配できるような構造となっています。

そもそもインターネットはTCP/IPを用いてボトムアップな構造で作られました。そして、インターネット以前は世界中から優秀な人が集められて、新技術の規格が作られて世界中に技術が広まって行く時代でしたが、インターネット発達後はネット上で気の合う仲間がプロダクトを開発し、人気があれば勝手に広まって行くようなボトムアップな世界に変化しました。この事がイノベーションの加速を引き起こしました。Ethereumは、現状のインターネットの構造をDecentralizeすることによって、さらに次の世界への変化を起こします。

 

f:id:kurinkurin12:20140802201115j:plain

44) Dr.Gavin Woodは、”もし何かを信じる必要があるのならば、組織ではなく、個人を信じよう!”とWeb3.0のプレゼンテーション中に述べました。

このようにEthereumは不必要に固定化された権威を無くし、より個人の活動に焦点をあてた世界へ進めることを哲学としています。

 

f:id:kurinkurin12:20140802201701j:plain

45) EPOCH TIMESには(http://www.theepochtimes.com/n3/665367-bitcoin-2-0/) では、組織の肩書きで語る時代から、個人と個人が話す古い村の時代に連れ戻すというEthereumの記事が載っています。

 

 

f:id:kurinkurin12:20140802201944j:plain

46) ここから先は私の個人的な感想です。

Ethereumを使ったアプリケーションは沢山思いつきます。例えば人々が勝手に増殖させていくP2P meshインターネット。負担額やメリット、利益等のバランスの取れたインセンティブ設計が重要だと思います。このようにEthereumは市民から発生するイノベーションのハードルを下げるという性質を持っています。Make Cultureや Share Cultureと親和性が高いと感じます。

 

f:id:kurinkurin12:20140802202319j:plain

47) 良いことばかりを説明してきましたが、個人的にはまだ気になる点がいくつかあります。最初に、まだ正式リリース前でPoC5(Proof of Concept5)というバージョンです。正式リリースにたどり着くのにどれぐらいの時間がかかるのか気になります(公式には2014/2015の冬にリリースと発表されています)。

また、Ethereumがインターネットの基盤となった場合、世界中からの大量のアクセスに対してスケーラビリティがあるのかも気になります。BitcoinでもBlockchainのサイズの増大は問題となりつつあります。Ethereumにおいて、この問題がどれぐらいであるのか知りたいというのが私が現在Ethereumを勉強している理由の一つです。

最後に実装のデバッグの大変さが存在します。Bitcoinでも安定稼働するのに時間がかかりました。Turing完全な言語を組み込んだBlockchainの安定稼働までどれぐらいの時間がかかるのかも気になります。

 

f:id:kurinkurin12:20140802202843j:plain

48) 気になる点をいくつか上げましたが、私にはEthereumは非常に魅力的なものです。

かつてストールマンgccglibcを開発し、フリーソフト運動を開始したことによって大企業にしか作れなかった大規模ソフトが組織の力無しでも開発可能になりました。

その後、リーナスがLinuxとgitを開発し、ネットワーク上でバザール開発するというさらに進んだボトムアップ手法を確立しました。

私にはEthereumが目指すDecentralizedな世界は、さらに個人の活動に焦点をあてた魅力的なものに写ります。

 

f:id:kurinkurin12:20140802203235j:plain

49)     Decentralize!!!

 

K.Kurimoto