要約:最近のBCHはネットワーク層の開発(Layer0)にフォーカスした結果、様々な技術が生まれていて、0-conf、つまり数秒で決済・コントラクト実行が可能になると思われます。
注意:本文は投資を推奨するものでも、他通貨と優劣比較するものでもないです。新技術Avalancheの解説が見たい人は上半分を読み飛ばして下さい。おひさです。少し前に沢山書いていたALISも、少々コードとエラーの魔力で引き離されていました。が、界隈の才能たちが見過ごしまくっている面白い話題があるので、撒き散らしたいなと思います。
そのトピックがどのくらい見過ごされているか、どうやって表現したら良いのか難しいんですが、
そういえば、僕、山が好きなんですよね。
エベレストとか
マッキンリーとか
BCHとか
が好きです。
40万をゆうに超えたBCHが8000円代まで落ちたのは他でもないハードフォークの時期ですが、これはなかなか面白い山で、技術進歩はチャートに関係無く、二回目の仲間割れに対するうんざり感がチャートから伝わってきます笑笑
クリプトではお金が露骨に関わるため、FaceBookの映画でも見られた”ザッカーバーグと不愉快な仲間たち”の物語よろしく、仲間割れが起こりやすい世界ではあるので、慣れましょうとしか言えないですが。
さて、最初BCHはUASF抗争でBTCとチェーンが別れて生まれた通貨で、今そのときの文脈を覚えている人もそんなに多くないんですが、今でも
Jihan WuとBitmainの開発陣、
Gavin Andressen、Peter Reizun、
そして、Bitcoin、Waves,Ethereumに影響を与えてきたEmin Gun Sierer
といったずっと前からクリプトの中で技術的に主導的な役割を果たしてきたグループによって開発が進められています。
簡単に言ってその方向性はヘンテコなものです。
特に①と②は他のプロジェクトとは全く異質なBCHのみの動きと言えるでしょう。(主観)
今クリプト・プロジェクトの多くはLayer2に向かっています。
on-chain処理とよばれるブロックチェーンに直接書き込む処理(Layer 1)を減らし、チェーンの外(Layer 2)での大量の取引を超効率的・セキュアに集約された結果のみをブロックに書き込むという方向性です。ビットコイン(BTC)で行われているLightning NetworkやEthereumで行われているPlasma、その他多くのサイドチェーンとステートチャンネルがそれです。
これは分散データベースの基本用語でBASEやEventual Consistencyと呼ばれる特徴を備え、「筋が良い」と思われる方向性でしょう。
BASEとは
だいたい使える(Basically Available)
整合性はめんどいけど(Soft-State)
最後には守る (Eventually Consisitent)
という遊助がブログに書いてそうなマイルドヤンキーなカンジの奴です。
これはネットワーク全体の整合性はとれないオフチェーン処理でも定期的にコミットして同期することで、バックを知らないユーザーには欠陥がバレない仕組みです。
そんな不良ファッションを割とガン無視しているのがBitcoin Cashですね。
皆上を目指す中、下を目指しています。
ブロックチェーン自体が割と何層かに分かれているのは、P2P通信のネットワークの上にコンセンサス・プロトコルが成り立っていて、その結果ブロックをみんなが認めるという仕組みであることからも想像つきますが、そのみんなが気持ち悪がる通信の層を掘り進めて、性能をアップさせる技術を進める謎な文明が生まれつつあります。
0-confとは、
「どうせトランザクションをネットワークに流せば、どうせブロックにいつかは入るんだから別にちゃんとマイニングノードに伝わってるの分かれば、もう支払い済みってことでいいだろ」という、これもこれでヤンキーぽい技術です。おかげで買い物が速い!!
コンセンサスが生まれる前のマイナーのメモリやTX伝播の様子から安全性を判断するのでネットワークよりっぽい技術ではあります。
ビットコイン(BTC)の場合は、RBFという制度があり、トランザクションをフィーの上乗せで料金変更できるトランザクションもばら撒けるので、いくつか承認を待たなければ安全ではありませんので、これは使えません。
さらに充分な分散性がないならば、次のような攻撃ができてしまいます。
①大手マイナーと結託
②トランザクションAを用いて買い物
③結託したマイナーに、もう0confで支払いに使われたトランザクションAを無視して、同じ権利(UTXO)から別の商品を買うトランザクションBを、先にマイニングしてもらう
④Aをスパム扱い
コレで、同じお札(UTXO)で2回買い物ができるHappyセットが生まれてしまいます。さらに、実は結託しないでも攻撃する方法があったりします。
これは二重支払いと呼ばれ、ビットコインのみならず全ての決済システムが防ぐ必要のある攻撃です。
0-confはだいたい大丈夫ですが、たまに事故ったりするので、ここは完璧に仕上げて暗号通貨界で一番速い決済を可能にしたいところ。
改良点
結局0-confの何が足りないところなのかといえば、マイナーは当然のこと、ネットワークに関する情報と意思表示が足りないところにあります。
ブロックチェーン関係の説明を聞いているとどんどん勘違いしがちになるのですが、色んなノードが1つのブロックチェーンを囲んでる図は基本的には間違いです。
実際は次のようにノードそれぞれに今のブロックチェーンの状態があります。なぜなら、多くのノードはブロック(のコピー)を受け取って自分で並べているからです。
同様に、各々が各々で持っているチェーンに各々が持っているトランザクションのプールに何を入れようか選んでいるのがマイナーの状態です。
マイナーがあらかじめ、先ほどのAとB、どっちを選ぶのか決めておき意思表示をすれば、それだけで0-confは安全になるのです。現に、善意あるマイナーによりそれは行われています。問題は善意のないマイナーによる行動をどうやってネットワークのルールに巻き込めるかです。
これを完璧に仕上げるのがAvalancheと呼ばれる技術。これは謎のチーム、Team Rocketによって発表され、Emin Gun Siererによって検証された、”ブロックチェーンそのもの”と並ぶプロトコル・ファミリーです。 Avalanche(<=WP)
BCHではこれをブロックチェーンと組み合わせて使います。彼が発表の冒頭で「よく分散プロトコルの研究者は、業界で新しいブレイクするーがあった!って言うけど、今回は自分だ」と自虐から始めたのが印象的でした笑
簡単に言えば、AとBどっちかをみんなで決めないといけないなら、多数派の選択を全員に伝染させるプロトコルと言えます。Avalancheは雪崩という意味です。
簡単そうじゃね?誰でもできそうじゃん。って思うかもですが、ここで言う多数派とはなんでしょう?なりすましによる多数派工作が可能なら、毎回なりすましをする人間にネットワークはオモチャにされてしまいます。
まず、適当な伝染であるGossipプロトコルを考えます。
これはランダムにノードから情報を受けとり、同じ情報を垂れ流すノードになることを意味しています。対抗した情報も確率的に伝播しますので、1回確定したステートはまたヒックリ返されます。
これを改造して、
①丁度良いタイミングで多数派状態を確定すること
②悪意のあるナリスマシ・サクラを無視できる
という特徴が揃えば、先ほどの同時にブロードキャストされた送金トランザクションA,Bのどちらをブロックチェーンに正式なものとして取り込むかをマイニング前に確定できます。
まずこのGossipプロトコルを時間を区切った際にどういうプロトコルになるか考えましょう。
簡単に説明すれば、
(0)色を聞かれるまで待つ。聞かれたら、聞いてきた人の色を自分の色にする。
(1)ランダムに選んだ相手に、色を聞く。相手が無色だったら相手を自分の色に染め、様々な相手の色が自分と違いまくっていたら、自分が相手の色に染まる。
を繰り返すだけです。
優しい世界ならこれだけでいいんですが、「人に色には染まらず、最初から色を決めて人に伝え続ける」というBotが大量にある事態に対して耐性がありません。実際には署名付きで投票を入れるでしょう。PoSでもPoWでもどちらでも実装可能です。
また、これだと最終決定が頻繁にひっくり返ってしまうかも知れませんし、ランダムな選抜を繰り返して、ループさせることでネットワーク全体の意志を問うほうがよいでしょう。次のように変更します。
事実上BFTアルゴリズムを導入したことになります。(Snowflake=雪粒プロトコル)
しかし、これでも少し問題が生まれてしまします。一度、支持者の数がある一定値(α・k)を上回ったからといってそれで意見変更させてしまうのってどうなんでしょう??重要なのは、他の選択肢よりも支持されている色に染まるということであり、凄く速く結果を決めてしまうことではありません。
ですから、コロコロ色を変えすぎることはせず、着実に支持者を雪だるまのように増やしていくプロトコルにします。それが次のスノーボール=プロトコルです。
よし!!完成??
では、結局どうやって、トランザクションに関してこの色分けゲームをしましょうか?トランザクションって色々な人が沢山送るじゃないですか!!??1個1個のトランザクションについて、この雪だるま毎回やります?頭おかしくなりそう。
結局、沢山のトランザクションをまとめて、合意するなら、それに合ったデータ形式を採用します。例えば、txAとその対立txをA'と書くとして、トランザクションの集合(A,B',C')をOKっていう色とトランザクションの集合(A,B',C',D)をOKっていう色ってほぼ同じサイドなので、後者の人は前者を承認することとします。こうすると、色に何の色が含まれたかという集合の包含関係がさっきの色の支持者比較に加わります。それが、これです。
これがAvalanche(雪崩)プロトコルです!!
この包含関係の定義にDAGが使えるのですが、少々複雑になってしまうので、割愛します。一番重要な部分に関しては説明できました。たぶん、これにより0-confでの二重支払いは完全に防がれるのではないでしょうか??
※ Q:これ色んなチェーンに適用可能だし、パクられないの??
A:パクられると思います。パクられるのはビットコインの宿命なので我慢して下さい。
Graphen 〜ぐらふぇん〜
これはブロック伝播を9倍以上速くする技術です。
上の0-conf完成はおおよそ、これは大きなブロックであることで達成できる大量トランザクション処理でこそ真価を発揮します。毎秒5トランザクションのために毎回Avalancheなんてやりたくないですからね。
このブロックの大きさに関しては考察が必要です。
Twitterで大石氏が言っていたことが割と長期的なTPS向上とアダプションに重要なことではあると思っていて、マシンスペックの向上によってブロックチェーン全体の同期が必要だったために、LNに無理があった現状は解決していくだろうという見通しです。
たしかにメモリや帯域幅、CPUの向上はLNのアダプションを利するものですが、これはビッグブロックの蓄積に関しても「問題を生まず、今の性能が続く」という利点をもたらします。
しかしながら、ストレステストでは6万以上のトランザクションを格納した巨大なBCHブロックの伝播は遅くなりがちになり、ネットワーク上の問題を引き起こしかねます。
ここでネットワークのブロック伝播の最適化を行う技術がGraphenです。
ブロックチェーンの伝播において、相手のメモリプール(txのたまり場)には自分の送りたいブロックに含まれるtx情報がほぼ入っているのにもかかわらず、txを全部情報として含んでいるという非効率が存在します。
だいたいコンピュータの世界では、「ほとんど0で埋まっているけどたまに値が入っている」という疎行列など、だいたい見当がつく場合に事案に応じて最適化する場合が非常に多いです。
相手の持ってないtx情報だけを効率的に伝えるのがGraphenです。
まず、多くのブロックチェーンではtxがidで整列されてなく、グチャグチャに近い状態で入れられているので番号順に並べます。これはCTORとよばれて、すくなくともこれでtxidの最小最大はすぐに求まります。
これを利用して、BloomFilterという特殊な集合要素判別器で受信側のチェックテーブルを素早く作成します。txは検証しなければならないため、ブロックにあるtxで自分が未検証なものを素早く特定する必要があり、「ないという場合は100%ない」と判別できるBloomFilterを使うことで、未検証なtxは素早く見つかります。
この技術はEOSでも使われているそうですが(未確認)、差分を求める技術をブロックチェーン同士で競っているとは、多くの人が知らない世界も多いですね。
Simple Ledger Protocolと WarmHoleはBCH上のスマートコントラクトの実行サポートで、前者はトークン発行、後者はBitmainが開発を行って一般スマートコントラクト実行をサポートします。
もし0-confと結びついたら、一瞬でスマートコントラクトを実行することができ、EOSに近いインパクトをもたらすと考えることもできますが、少々まだ雲行きが分からないので静観しています。
SpednはBitcoin ScriptへのC++ライクな言語からのコンパイルです。Bitcoinスクリプトは少々学習コストが高いことで有名で、完全にコントラクトがあるのはEthereumみたいな雰囲気になり、開発者がEthereumばっかりイジるようになった原因もある意味ここにある気もします。
人が読みやすい言語でBitcoin Scriptが書けるので期待しています。
以上です。お疲れ様でした。BCH文明はアップデートが多すぎて、追うのが大変ですね笑
著者:極度妄想(しなさい)