kawangoとの議論
数日前からtwitter上で何故かkawangoとbitcoin、blockchainで議論してる。 それが自分の中のモヤモヤした部分を認識させてくれたので、ちょっとメモ的に記録しておくことにした。 まとまってない部分も多いので、しばらくしたら言う事が変わっているかもw ch.nicovideo.jp
このkawangoのブログ、去年の五月に書かれてる。その頃、自分はbitcoinのエネルギー効率の悪さ、bitcoin価格上昇の根拠の無さ、初期に大量保有している人が誰だか分からないこと、なんかを挙げてビットコインに批判的な事を言ってた。bitcoinについてnegative、blockchainのポテンシャルにpositiveというスタンスの人間は周りに全然いなくて、誰とも話が通じなかったんだけど、そんな状況でいきなりbitcoinの問題点を指摘したkawangoのブログが出て来て驚いた記憶がある。 当時はこのブログの前半は「やっぱりそうだよなー」と思いながら読んでたんだけど、取引所うんぬん以降は良く理解せずに流してた。 で、twitter上でkawangoと議論していて、後半部分の意味が分かって、bitcoinについて自分が見逃していたポイントがクリアーになってきた。
@kurihei そうですよ。思い込んでいるというか、確信犯で詐欺的なプロパガンダをするなということなんですけどね。でも、どうやら本当に思い込んでいるひとも多そうですが。
— kadongo38 (@kadongo38) April 4, 2015
結局、取引所の部分は取引所内で閉じた、サーバー型仮想通貨に過ぎず、しかも民間企業。システムとしての脆弱性が集まってる。やりたい放題だし、企業間競争の中にいる。って指摘。 こういう周辺部分の脆弱性は自分は全然考えた事が無かった。取引所の実装については自分は知らないんだけど、以下、kawangoの指摘が正しいと想定した場合の議論。 blockchainはエネルギー効率悪いので国際送金にだけ使って、普通の通貨のsuicaみたいなサーバー型仮想通貨と連携すればいいんじゃね?とか適当なこと過去に言ってたけど、そんなものできない or それやるとその部分に脆弱性ができてしまいそう。
ここからがこのエントリの本題
kawangoがブログの最後で指摘しているのは、「民衆のお金みたいな宣伝がなされてるけど、民間企業のお金やで」ってこと。要するにAppleやgoogleにやられちゃうやろ、ってこと。 「bitcoinのtransactionが取引所とマイニングプールに収束していく」かどうかは、他のストーリーもあり得ると思うのだけど、いずれにしろ、「民衆のお金じゃなくて、民間企業のお金だ!」ってのは説得力がある。
しかし、自分はblockchainは民間企業を超えた社会基盤になる可能性を感じている訳で、何かが違う。kawangoのブログに論理的な欠点があるか、自分の考えに欠点があるか。。。(kawangoは現行bitcoinについてのみ言っているので、その差をはっきり認識する事が未来に繋がる)
kawangoのブログは他の将来ストーリーはあり得ると思うんだけど、論理的な欠点は無さそう。。。 自分は、いつもblockchainの可能性を話すんだけど、必ず、通貨発行益を如何に手に入れるかの話にすり替えられてイライラしてる。。。 民間企業blockchainは、それはそれでいいと思うんだけど、あんまり面白くないなー。。。 blockchainのアプリケーションは個人的に通貨よりも通信関連だと思っていて、クラウドベンダーの垣根を超えたインタラクションができたら面白いと思っているのに、成立しないな。。。 blockchainのインセンティブの正当な公的な付け方って何なのだろう???
とか色々考えていて、仮に公的なblockchainが成立するとしたらどういうものか思考実験したのが以下のようなこと。
(1)Blockchainの本当の価値は「P2Pネットワークで成り済ましできないネット上のID生成とID間の一意なtransaction記録」。本来はそこでお金を取って、blockchainを維持しているマイナーはそのお金を競うというのが正しい姿。その上のアプリケーションは民間企業の競争で、基盤層は公共というのは社会的に説明が付く。クラウドベンダーがIDをかき集めて、圧倒的な競争優位にいるのだけども、公共blockchainがあればよりフェアな競争が加速されてイノベーション創出が加速する。
(2)(1)みたいな物が成立するためには、サステナブルなblockchain維持費をID生成とtransaction記録で取る必要がある(もしくは、その上で動いてるアプリケーションから取るか)。そして、マイナー間で競争させて51%ルールを破られないようにしないといけない。
(3)blockchain上の価値(bitcoinならbitcoin価格)はblockchainが関与する所ではない。
(4)アプリケーション層の価値と社会基盤の価値をごっちゃにしてるシステムを、きちんと分離したシステムにしないといけない
(5)公的なblockchain運営が腐敗しやすいことは考慮しないといけない。
まだまだボンヤリしてるけど、こんな感じかなー。 これもあくまで一つのパターンに過ぎないんだろうけど、とりあえず公的と言うには最低限これぐらいいるかと思った。マイナーがお金を競っている時点で公的なのかっていう疑問は残るけど。 (2)も今の所、良い形を思いつかない。そもそもblockchain維持費がとんでもなく高かったら、それを超える魅力を持つアプリケーションも無くなってしまう。 自分は別にblockchainで社会正義を行いたい訳では無いので、民間企業blockchainの相乗りと考えてEthereumのアプリケーションを開発するのでもいいのだけど(もちろんその時は厳しい価格negotiationは必要)、プロパガンダか本当に公共なのか、公的な物と民間企業的な物の違いを認識しておきたいとは思った。それができれば欺瞞な理論は論破していけるんじゃないかな。
P.S. 瞬時に換金できて正当性を監視できる取引所を創る とか ビットコイン技術だけで成り立つ市場を創る(取引所がいらない) とか ゆっくりDecentralizedな取引所のみ(そういうものがあれば)しか法律で許さないとか ビットコインが民衆の通貨として生き延びるストーリーは色々あるよ。 現行ビットコインは価値創出できているので、しっかり対応していけば可能性はある。自分は通貨以外のblockchainアプリケーションに興味があって、それが公的な物か民間企業なのかに興味があるってこと。
2015年のbitcoin
Bitcoinについてモヤモヤしている。はっきりした事が分からない状態なのでこっちに書きます。後で消すかも。すごくまとまって無いエントリー。
bitcoin価格が大暴落だ。
自分は元々、bitcoin適用が広まればbitcoin価格が上がるということに「本当かなぁ?」という疑問を持っていたので、大した量を持っていない。多くの価格上昇を力説する人達の根拠の一つは取引が増えて通貨流速が増えれば全体量は増えないので単価が上がるというものだ。
自分はbitcoinは決済手段だと思っていて、国境を越える決済を行うタイミングでbitcoin購入または売却して手元に持たなければいいんじゃないの?とか思ったりしてる。何と言っても電子通貨なので欲しいときにボタンを押せば買える訳だし、ボタンを押せば売却できる。ボタンを押す事さえ意識しないシステムだって作れる。blockchainの承認は現在1blockに組み込まれるのに10分、その後6個ブロックがマイニングされれば、ほぼ確定と考えて1時間と見られている。
そこら辺も改良していこうと色んなアプローチがある。
| Toward a 12-second Block Time -
地球全体にマイニング結果を広めるのにかかる時間があるので、51%ルールを弱めないためには最低限の秒数は必要になるみたい。いずれにしろここら辺が改良されれば、多少通貨流速が増えた所でbitcoinを懐に保持し続ける人がいなければ結構な流速まで単価上がらなくてもなんとかなるんじゃないかな(計算してないので、はっきりとは言えないけど)。
そこら辺のことよりも、自分が気になるのはblockchainネットワークが維持されるのか、適用が広がるのかという部分。
マイニングファームが経済的に立ちいかなくなってきてるっぽい。
CoinTerra Silent Amid Alleged Cloud Mining Payout Freeze
ここら辺の話は以前からされていて、bitcoin単価が上がる事が前提でマイニング業者が回っているので、単価安定する前にクラッシュが沢山起きるだろうという予測は結構あった。
Bitcoinゴールドラッシュの勝者は誰か? (4ページ目):日経ビジネスオンライン
さて、ここからが本題。
仮にbitcoin単価上昇を前提にしたビジネスが全部はじき出されたとして、bitcoinエコシステムはどういう安定点を目指すのかというのが個人的にもっとも気になる所。2015年にそれが起きるかどうかはまだ分からないけど、どういう方向に向かうのか安定点がチラリと垣間見えるのがbitcoinの2015年じゃないかなというのが個人的な全く根拠の無い予想。
自分はblockchainテクノロジーの素晴らしさは多いに感じていて、色んな分野に適用すると世の中良くなると思っているんだけど、本質的な欠点は消費電力の大きさ(地球全体でblockchainシステムが使用するエネルギーの大きさ)だと思っている。
なので、それ以上の価値がある所がblockchainの適用場所だと思っているし、消費電力を低くすることができれば適用場所が広がると思っている。通常、計算量に対して消費電力を減らすにはASIC化がもの凄く有効なんだけど、最先端プロセスでチップを開発するのはもの凄いコストが掛かるし、プロセスが進めば進む程コストもうなぎ上りだ。bitcoinの場合は、計算の難しさをチートしないために利用しているので、ASIC化して計算性能が上がればdifficultyが上がって結局電力を使う方向に向かう。なのでマイナーの数が減れば全体の消費エネルギーは減るが51%ルールのリスクが上がる。
マイナーは手数料の高い物からマイニングすることができる(ここら辺あまり詳しくないので怪しい)ので、将来のbitcoin価格が上昇しない状況では、消費電力とASIC開発費はマイニング手数料に載って来る気がする。ASIC化にはもう一つ別の問題があって、開発費が高騰すると、それを賄える会社がどんどん減って行って独占の問題が出て来る。どこか一社だけが圧倒的な高性能なチップを開発したら、チップ価格が猛烈に高くなる可能性があって、結局それが手数料に載って来る。等々。
こんな感じのトレードオフが沢山あって、果たしてこのバランスが最後にどこで落ち着くのか(もしくは落ち着かないのか。破綻するのか)。bitcoin価格上昇前提にしたマイナーがはじき出される事で色んなステークホルダーに色んな変化が出るんじゃないかと思っていて、大きなヒントが表面化してくる年になるんじゃないかというのが根拠の無い予想。
理想的には、blockchainテクノロジーが社会基盤として認識されて、それに見合う程度のエネルギーの代金を皆が負担し合って、独占しないような競争が働きつつもエコな新しい社会システムを作るって所なんだけど。
(そしてチラリと頭によぎるのは、マイニングASICもオープンソースハードウェアでコミュニティ開発になったりする可能性。)
P.S. Bitcoinには消費電力の他にもう一つ根本問題があると思っていて、それは初期に大量にBitcoinを持っている人が誰なのか分からないと言う所。これもどこかのタイミングで大きな問題として浮上してくるんじゃないかなって想像してる。
Bitcoinプログラミングの入り口
今回はBitcoin AdventCalendarの記事の一つとなります。
Bitcoin Advent Calendar 2014 - Qiita
注意:以下の実験を真似する場合は必ずtestnet環境で行ってください。本物のbitcoinネットワークで行った場合、何か間違いがあれば、最悪持っているbitcoinを全部失います。
この記事に従って損失が出た場合、筆者は一切責任を負いません。
BitcoinやBlockchainのアルゴリズムや応用が分かった所で、Blockchainを利用したプログラミングへ進んで行こうと思います。何事も作ってみないと本当には分からないというのが信条です。Ethereumのコードを読むということも考えましたが、まずは情報も一杯あってコードも枯れているBitcoinから初めてみることにします。
Bitcoinは上の図にあるように世界中に存在するマイニングノードがこれまでの全ての取引を記録したBlockchainと呼ばれるデータを保持しています。このマイニングを行うプログラムはWalletも兼ねており、Satoshi Nakamotoの論文を元に開発されました。
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と表示されているアプリケーションアイコンをタップすると起動します。
testnet上のbitcoinは実験用としてしか価値がありませんので、以下のtestnet faucetで簡単に手に入れることができます。
AndroidアプリのQRコードをタップした時に出てくるwallet のアドレスを上記HPで入力し、captchaの値を入力してsendボタンを押すと無事にAndroid walletにtestnet上のbitcoinが入金されました。
bitcoin-qtの方に戻り、受信ボタンを押して、Request paymentボタンを押すと、受信用QRコードが出ます。
Androidアプリからこのコードをスキャンして送金してみます。
送金するとblockchain netowrk上にトランザクションが広がります。まだマイニングによって承認されていません。アプリ側で未承認状態にあることが確認できます。
暫く待つと一つ目の承認がblockchain network上で行われ、アプリ上の表示記号が変わります。
それと同時にBitcoin-Qtの方で受金します。
こんな感じで無事bitcoinを受け取ることができました。
以上で、マイニングフルノードとSPVモバイルwalletをソースからコンパイルしてbitcoinのやり取りに成功しました。
あとは、ソースコードを解読するなり改造するなりしてbitcoinアプリケーションの開発が可能になります。
Let's hack !!!
インターネットの再構築
Gavin WoodがWeb3.0のコンセプトを発表した時にかなり衝撃を受けました。
Ethereum(3) Bitcoin2.0の本命 Ethereumとは何か - Tech と Culture
これは衝撃を受ける人と、意味が無いと感じる人に分かれるんじゃないかなーと思います。自由主義者は大体衝撃を受けると思うんだけど、ハッカーは自由主義者が多いので、開発は加速していくだろうなーと予想。
自分は、何が何でも徹底的にDecentralizeとは思ってなくて、本当に必要な重要な部分だけを徹底的にDecentralizedしたシステムが理想型だと思っています。
Bitcoinは、Proof of WorkをベースにしたDecentralizedなシステムで、エネルギー効率は悪いと思うんだけど、それ以上に効率の悪い国家や銀行がライバルだったので、国際通貨として存在感を強めつつある。
結局、Decentralizedなシステムはエネルギー効率の悪さを上回る存在価値を見いだせる分野にのみ広まって行くんじゃないかな。と言っても、”国際通貨”が関与しない分野があるのかって感じなんだけど。
そして、Decentralizedなシステムが存在価値を上げるのではないかとタレントが集合し始めている部分が、”通信=インターネット"。元々インターネットの思想がボトムアップで勝手にノードを追加しても動作して国家を飛び越えるという物だったんだけど、NSAの事件の後、インターネットは大企業が支配して、その上に国家があるというイメージが強烈になってしまった。逆にDecentralizedシステムにとってはビジネス的に成立しそう(お金を払う人がいそう)なマーケットが出来上がったという訳。
もちろん、それだけでなくて、Decentralizedなネットワークの利点という部分が技術優位性をもたらす可能性もある。
そんな状況になって色んな所が動きを開始してる。
IBMもblockchainを使ったネットワークの再構築をうたい始めた。
IBM - Device democracy - United States
BitPayもネットワーク再構築のプロジェクトの発表。
BitPay Project Decentralises Networks with Bitcoin Technology
"通貨"と"インターネット"を変えるってのがどれだけのインパクトか。単なるテクノロジーではなく、ライフスタイルを変えるぐらいじゃなくて、時間をかけて文化を変える。
Blockchainが世界を変える。
Proof of me
以下のブログ記事でも色々書きましたが、Bitcoinの裏側で用いられているBlockchain Technologyは権威者のいないP2Pネットワーク上でクリティカルなトランザクションを実行することができます。
Ethereum(3) Bitcoin2.0の本命 Ethereumとは何か - Tech と Culture
その性質を通貨以外の物に適用するBitcoin2.0という動きは海外で加速しています。
日本でもビットコイン本やブログで有名な大石さんと北海道のエンジニアの須藤さんがブロックチェイン上に短いメッセージを埋め込むことができる proof of meというサービスを立ち上げました。
現在は基本機能のプロトタイプのみですが、これから色々サービスが創られていく予定です(私も少し関わってます)。Blockchain上にメッセージを残すということは、あるタイミングであるメッセージが存在していたということをアルゴリズムで保証されるということです。
あるタイミングでの存在証明は、現在でもお金を払って行っている人たちや、証明をビジネスにしている人たちがいます。それをBlockchainを用いてSmart Contractで実現するということは
•人間の手間が入らず自動執行される(簡単に登録できる)
•現在より低価格で実現できる
という性質を持つことになります。
それによって、現在の存在証明ビジネスを使いたいけど、手間を考えると使えないと考えていた層が簡易に使用できるようになります。今まで無かったマーケットが立ち上がり、社会はより良い方向へ向かうことになります。
Bitcoinのブロックチェインを使っているので、誰かがP2P認証網の51%を握る or 認証コンピュータが世界から一つも無くなる or 誰かがBlockchainアルゴリズムを破る が起きない限り数学的に存在証明されます。現在は法的根拠にはならないかもしれませんが、Blockchain technologyの意味が社会に認知されるとともに法的な根拠になっていくと自分は思っています。
いよいよ日本でもBitcoin2.0が動き出しているという感じです。
Decentralize Technology
Decentralizeな世界を作るテクノロジーを紹介したページ。
21 Technologies That Will Decentralize the World - Shareable
主に、P2P meshネットワーク関連、 Bitcoin(Blockchain)関連、IoT関連、 農業関連の技術が並んでいる。最初、なんで農業関連が入るんだろうと不思議だったけど、地産地消で、かつ自分の食べる物を自分で育てるようなこともDecentralizeな世界と捉えているみたい。ここら辺は個人の世界観が垣間見えて面白い。
1位はOpenGarden
以下のTechCrunchにも出てきたメッシュネットワーク構成アプリ。
Google Glassはインターネット接続が面倒, メッシュネットワーク(Open Garden)を使えば簡単 - TechCrunch
西海岸には結構ユーザーいるみたいで、面白そうなのでだいぶ前にアプリ入れてみたけど、周りに全然使っている人がいなくてショボーンとなった。
Ethereum始め,bitcoin, namecoinと聞いたことあるPjが並ぶなかで、おっ、と思ったのが、2位のcommotion router。 RasPiでも使えて、P2P mesh網を作れるそうだ。
https://commotionwireless.net/
ライセンスもAGPLでかなりいい感じ。
色んなユースケースが思いつく。