月別アーカイブ: 2017年12月

ハードフォークはブロックチェーン社会で義経を逃す(ハードフォークの意義1)

日本人の判官びいきの源流、義経と弁慶をソフトフォークが殺す・・・。

弁慶のドット絵

 

妙な書き出しで始まりましたが、Ethereumのフォークについての話です。

最近はハードフォークが当たり前で、以前の大騒ぎは何だったのかという感じです。つい1年前までは、ハードフォークさせるなんて非国民、いや非ブロックチェーン民のような雰囲気が、日本国内ではありました。何故なら、非中央集権とはなんだったのか的な思想的な理由。

日本国内というのがミソで、海外の専門家はそう考える人ばかりではなさそうなんですよ。Ethereum開発者のVitalik Buterinも、ハードフォーク支持者です。今年の3月に、次のようなブログエントリを上げています。

http://vitalik.ca/general/2017/03/14/forks_and_markets.html

この中でVitalikは、ソフトフォークが正義という考え方が誤解に基づいていると説いています。上の段落から順に解説してみます。今回は、最初の<hr>タグまで。

まず、ソフトフォークとハードフォークが端的にどういうことをするのか、分かりやすい言葉で説明があります。

ソフトフォーク
valid とみなす transaction を減らすやり方。アップグレードなしでも、チェーン上にい続けることができる
ハードフォーク
フォーク 前まで invalid だった トランザクション も valid とするかもしれないので、ユーザーは フォークしたチェーンの上にいたければ、クライアントアップグレードが必要。

ということです。とても分かりやすいと思います。そして、ハードフォークにも2種類あるということです。

Strictly Expanded Hard Fork
validとみなされるトランザクションを拡張するハードフォーク。フォーク前のルールは、フォーク後のルールのソフトフォークにあたる
Bilateral Hard Fork
互換性のない2つのルールに分岐するハードフォーク

THE DAO事件の例でいえば、次のようになるかと思います。

ソフトフォーク
アタッカーのアドレス対象のトランザクションが、validではなくなる。現実には採用されなかった
ハードフォーク
実際にBilateral Hard Forkとして採用された。ETH/ETCとして2つのルールに分裂した

次に、ハードフォーク・ソフトフォークそれぞれの利点といわれるものが列挙されます。

ハードフォーク
  • 開発者が互換性の憂いなく存分に振るえる
ソフトフォーク
  • ユーザーに優しい。だってアップグレードが必要ないから
  • チェーンの分裂を起こしにくいから優れてる
  • miner と validator の同意さえ得れば済む。ハードフォークはユーザーのオプトインが必要。

と、ソフトフォークの利点ばかりが取り上げられがちなのに加えて、ハードフォーク支持者は”乗っ取りを企てている”と批判されたりすると、Vitalikはいいます。あるいは、チェーンの分岐を招くから悪いことだといわれると。確かにビットコインゴールドなど、乗っ取りしたかったかのようなハードフォークは存在します。しかし、それは絶対に防ぐべきことなのでしょうか?リアルワールドでは、善悪は白黒簡単にスイッチのように決められているでしょうか?

なんだか悪いようなことをする人たちにも人権はあるんではないだろうか?その「悪」の行為も、もしかして思わぬ副産物を生んだりするんではないだろうかという視点はいりませんか。政治とか社会って、そんなに単純に正義が決まるもんではない。そもそも、OSSにも息づくハッカー精神てのは、そういう態度のはずだったのでは???善とか悪の背後にある仕組みをハックして明らかにし、改造してしまえ!って態度だったはず。

私は、ブロックチェーンやスマートコントラクトでカッチリした契約社会になるのが、嫌なんですよ。そういう社会になると・・・

弁慶が勧進帳を偽造して義経を逃がせない、血も涙も物語性もない社会ということになるから

てめえらの血は何色だ!判官びいきの精神はどこへ行った!w

続く。

Block Gas Limitの設定の反映

前回のエントリで、Ethereumのブロックサイズを決めるBlock Gas Limit(BGL)はマイナーの投票で決められると書きました。しかし、投票結果がどう実際のブロックに反映されるのかがわからなかった。

そうしたら、偶然ピンポイントな回答が書いてあるエントリが見つかりました(感謝)

http://individua1.net/how-is-the-block-gas-limit-determined/

どうやら、「最新のブロックの採掘に成功したマイナーの設定が、次のブロックのBGLとして採用される」という仕様らしいです。そして、1回で動かせるのは前回のBGLの1/1024だけらしいです。増加に投票することも減少に投票することもできるようです。

ここで、マイニングプールの投票行動を知ることができます。

https://www.etherchain.org/tools/gasLimitVoting

表中の項目は推測ですが、左から

  • Vote Up リミット増加に投票した回数
  • Vote Down 同じく現象への投票回数
  • Largest Upvote 増加へ投票して最大どれだけのガスリミットになったか。
  • Lowest Downvote 同じく減少へ投票して最小どれだけのガスリミットになったか

と思われます。

現状、BGLは800万程度で推移しているようです。

アタックがあるとマイナーにBGLを変化させる要請があったりするようです。

Ethereumがトランザクションの過半数を占めているらしい

ビットコインはスケーラビリティの問題に行き当たっており、その解決のためブロックサイズをどうするかという論争が延々と続きました。そして、方針の違いからハードフォークを起こしました。いまではハードフォークは、スケーラビリティと無関係の動機からも起る様になっています。

ビットコインとその分派のブロックサイズ

下記のようになっています。

  • ビットコインアンリミテッド 可変(市場にゆだねる)
  • ビットコインコアのSegWit導入 (ブロックウェイトが4Mまで)
  • ビットコインクラシック 2M
  • ビットコインキャッシュ 8M

最近ハードフォークしたゴールドなどについては調べてないのですが、ブロックサイズとスケーラビリティというのは、厄介な問題であり続けてきたわけです。

じゃあ、Ethereumはどうなのか?Contractに欠陥があって大金が盗まれたりしていますし(これはスケーラビリティと無関係)、最近はICOがあると混雑することもあるようです。しかし、ビットコインのようには騒ぎになっていないように見えます。

http://www.trustnodes.com/2017/11/22/ethereum-now-handles-transactions-digital-currencies-combined

ここを見ると、驚いたことに暗号通貨のトランザクションの過半数をEthreumのトランザクションが占めていることになってます。ちょっと驚きました。Ethereumがどうして多くのトランザクションをさばけているのか?スケーラビリティでビットコインのような論争に陥っていないのはどうしてなのか?とても興味の沸くところです。

やはりブロックサイズがスケーラビリティにとって影響の大きなところなので、Ethereumのブロックサイズがどうなっているか調べました。

Block Gas Limit

結論からいうと、Ethereum にはBlock Gas Limit というものが存在します。Gas Limitには2種類あって、それは Transaction Gas Limit と Block Size Gas Limit です。

Transaction Gas Limit
ユーザーがトランザクションをEthereumに送るときに設定する、消費されるGasの制限値。無限にGasが消費されて無一文になるのを防ぐためのものです。
Block Gas Limit
ひとつのブロックに含めることができるGasの合計量。マイナーによる設定値

ひとつのブロックに含むことが出来るトランザクションは、Transaction Gas Limitの合計がBlock Gas Limit以下に制限されるわけです。

A~Eの5つのトランザクションがあって、それぞれのTransaction Gas Limit が10、20、30、40、50であるとします。そのとき、Block Gas Limit = 100であるなら、ブロックに入れられるトランザクションは、

A(10)+B(20)+C(30)+D(40)、B(20)+C(30)+E(50)、D(40)+E(50)

などになります。

そして、Block Gas Limitはマイナーがクライアントで指定します。Gethの場合、–targetgaslimitオプションになります。

マイナーが上記オプションで指定することがBlock Gas Limitへの投票となるらしい・・・のですが、単なる多数決なのか何なのか、調べないとよくわかりません。

Bitcoin Unlimited どう違うのか?

この仕組みは、Bitcoin Ultimateのエマージェントコンセンサスと似ています。エマージェントコンセンサスも、マイナーがブロックサイズに影響のあるいくつかのパラメーターを指定して、あとは市場でブロックサイズが調節されます。

どちらにしても、固定されないブロックサイズを持ったチェーンがどのように機能しているのか、興味深いです。Ethereumが、攻撃されながらもトランザクションを大量に処理できているのはなぜか?これは実は、技術にとどまらない本質が潜んでいそうです。

この後も掘り下げていきます。