Scaling Bitcoin and Dev++ 2018参加レポート

Yuya
HashHub
Published in
16 min readOct 10, 2018

Scaling Bitcoin in 東京とBitcoin Edge Dev++へ参加してきたので、その様子と個人的に惹かれたセッション・プレゼンについて紹介したいと思います。

Bitcoin Edge Dev++<前半>

Dev++ではデジタル署名やビットコインのデータ構造、UTXOなどの基礎的なセッションから始まり、Bullet proofs、Taproot/Graftroot、Schnorr署名などのビットコインのプライバシー、セキュリティ向上のための応用技術、またクロスチェーンやライトニングネットワークなどの解説まで多岐にわたる内容でした。

各セッションは30分~60分単位で英語での解説でしたが、スライドは英語版、日本語版を同時に表示してくれたのでとても助かりました。またSlackのチャネルを使い、発表者がセッションをしていながらでも、リアルタイムに質問ができ、ビットコインコア開発者などが丁寧に回答してくれていました。

Dev++は前半の2日間あったので、以下にいくつか面白かったセッションについて紹介したいと思います。

Schnorr Signature

ビットコインを送金するためには「楕円曲線署名(ECDSA)」という署名方式が使われています。これに取って代わろうとしている方式が「シュノア署名(Schnorr Signature)」です。この署名はECDSAよりも多くのメリットがあり、その内の一つに、マルチシグに使うとECDSAよりもデータサイズが小さくできるというプロパティがあります。例えば、2-of-3マルチシグアドレスからコインを送金する場合、ECDSAでは2つの署名データが必要です。しかし、シュノア署名を使うことで、この2つの署名データを1つの署名データに纏めることができ、その分トランザクションのデータサイズを小さくすることが可能になります。

Blind Signature

ブラインド署名とは、メッセージの内容を知ることなく署名をする方法です。封筒の中にカーボン紙と書類を入れて封筒の上から署名をすると、カーボン紙を通して書類に署名がされるようなイメージです。ブラインド署名はAnonymous Ecashという中央集権型の仮想通貨のために発明されました。

ブラインド署名は、TumbleBitという匿名送金サービスのプロトコルに使われており、今回の発表者がそのプロトコルを開発したCommonwealth Crypto社のCTOであるEthan氏でした。

Bullet Proofs

ビットコインはFungibility(代替可能性)が低いと言われており、これはコインが過去の取引履歴を持ってしまうからです。例えば、過去に悪意ある取引に使われたコインが自分のウォレットに入ってしまい、そのコインで決済をしようとしても相手が受け付けてくれない可能性があります。

そこで匿名取引をするために発案されたのがConfidential Transaction(秘匿取引)です。しかし、この方法はとてもデータサイズが大きく、ビットコインには向いていません。そこで、このBullet Proofsを使うことでCTのサイズを小さくすることができるようになります。

Taproot/Graftroot

条件付きの支払いをする場合、例えば、(1)Alice&Bobの2-of-2マルチシグまたは(2)一定時間経過後にボブによるRedeemを考えます。通常は前者の2-of-2マルチシグによってコイン送金される場合が殆どで、後者の条件が実行されることはあまりありません(ヒューリスティック的にですが)。そのため、ビットコインでは不要な条件構文をスクリプトとしてブロックチェーンに埋め込み、データサイズおよびそのトランザクションの不要な一部分に対しても手数料を支払っていることになります。

そこで提案されたのがMAST(Marklized Abstract Syntax Trees)といわれる手法です。これは条件付きScriptをツリー構造にし、各条件文のハッシュを枝とすることで、ハッシュ木データのみをブロックチェーンに書き込むことでデータサイズを削減することができます。しかし、これにも問題があり、これを採用するにはすべてのトランザクションがMAST形式である必要があり、条件がない簡単なAliceからBobへ支払うというトランザクションにもダミーの条件文(32byte)を付与する必要があります。

MASTの課題を解決したのがTaprootです。これは上の例をとると、

P = Aliceの公開鍵 + Bobの公開鍵

Script = 一定期間後にBobの公開鍵、として以下のQを計算します。

Q = P + Hash(P || Script)*G

AliceとBobが協調して署名をする場合はQにサインをすることでコインを送金できます。また、協調できない場合は、P、script、witnessデータを公開することで一定期間後にBobの公開鍵に署名することでコインを送金できます。しかし、このTaprootでは条件分が一つしか使えません(例では「一定期間後にBobの公開鍵」という条件)。そこで提案されたのがGraftrootです。

Graftrootは委譲という考え方を使います。Taprootでは Q = P + Hash(P || Script)*G のQに署名をするとコインを送金できました。このQ生成時に

Hash(Q || Script2)

に対して参加者(本例ではAliceとBob)が署名をします。このScript2が委譲された新しい抵当権となります。このScript2は、例えば、1週間後にCarolの公開鍵に対して署名ができたらコインの移動が可能というような条件を作ることができます。

LightningNetowrk/DLC

ライトニングネットワークの発明者であるタッジ氏によるLNとDiscrete log contractの解説です。

DLCはライトニングネットワーク上でスマートコントラクトを実現させるという言われ方がされますが、根本的には、Funding Txとして2-of-3マルチシグを作成し、条件つきのCommitment Txを複数作り、AliceとBobがそれぞれ保有します。一定期間後、オラクルがそのどちらかのCommitment Txに署名をすることで、ある条件により2-of-3マルチシグのコインをAliceまたはBobに送金するというものです。ライトニングを使うというよりは、ライトニングのようなScriptをつかってあるStatesを事前に作っておき、第3者がそのどちらかのStatesに署名をするというものです。DLCをLN上で実現することも可能です。それをNested Contractsとタッジ氏は表現していました。

また、ユースケースとしては未来価格による決済など予測市場での活用があります(例えば、ビットコインのヘッジ手段)。その実装、研究をDG LabとCrypto Garageが行っており、そのデモンストレーションなども行われました。

Scaling Bitcoin<後半>

後半のScaling Bitcoinでは、Bitcoinが抱えている最大の課題であるスケーリング問題について、それを解決させるための提案を世界中の天才たちが集まって発表しあうイベントです。世界中のユニークでクレイジーなビットコイン熱狂者が集まり、お互いの提案を披露しあいました。

正直、事前にプロポーザルの予習や、暗号知識(それもシュノア署名、アダプタ署名、ゼロ知識証明など)がないと理解するのはちょっと難しかったです。ただ、その会場にいるだけでも、自分が最先端の技術を目の当たりにしているという実感はものすごく感じました。

また、今回は会場の近くのホステルに滞在していたのですが、そこの4人部屋のうち3人が同じScaling Bitcoinに参加しているという偶然で、イベント後もホステルでビットコインについて語り合うことができました。この後半でも僕の個人的に興味を惹かれたプロポーザルについて簡単に紹介したいと思います。

Compact Multi-Signatures

署名サイズを圧縮することでブロックチェーンに保存するためのストレージサイズを削減するためのプロポーザルです。

ペアリングを使ったBLS署名を使うことで、マルチシグを圧縮できるというものです。仕組みについては専門的過ぎてここでは省略します(というか僕も分かりません)。しかし、このスキームを使うことでWitness部分のデータサイズを圧縮できてストレージ領域の節約ができるというものでした。

最後に、発表者であるDan Boneh氏は「このスキームが適用されることを望んでいますが、そのための実用化、政治的課題などさまざまな障害があると思うが、それを乗り越えるために彼らも喜んで今後も改善していきたい」という言葉で発表が終わりました。

Accumulator for UTXOs

UTXOのチェックをするには、ブロックチェーンをすべてダウンロードし、すべてのトランザクションをチェックする必要があります。そこで、この問題を解決するための方法を「UTXO Commitments」といい、現在はSPVクライアントがトランザクション検証でしようしているMerke TreeがこのUTXO Commitmentsの考え方を使っています。

このプロポーザルではMerkle Treeの代替としてRSA Accumulatorを使うことを提案していました。Accumulatorはハッシュ関数のような一方向性メンバーシップ関数です。アキュムレータを使うことで、あるグループに特定の文字列が入っているか否かを証明することができます。例えば、あるUTXOのグループ{tx1, tx2, tx3, tx4, tx5}があったとして、このグループにtx3が存在するかをグループの中身を公開することなく証明することができます(これをゼロ知識証明といいます)。アキュムレータはこのグループに任意の文字列を追加したり削除したりできるので、例えば、tx1が使用されたらUTXOではなくなるので、このグループから削除します。このアキュムレータを使うことでブロックの検証がものすごく速くなるそうです。

余談ですが、MITのタッジ(日本語がぺらぺらな人)も同じような解決策を持っており、今回の発表には間に合わなかったのですが、近いついに実装を含めた論文を発表するそうです。

将来はUTXOが紙一枚または、QRコードのみですべて表示できるようになるかもしれません。そんなことができたらとても面白いですよね。

Multi-party Channels in the UTXO Model

ローズビーフ@Lightning Labsのプレゼンです。相変わらずの早口で殆どの人が理解できなかったはず笑。内容はLightning Factoryについてでした。Lightning FactoryはChannel Factoryと似ていますが、Eltooを必要としており現状はSIGHASH_NOINPUTがアクティベイトされないと実現はできません。

仕組みとしては、Channel Factoryと似ており、ファクトリーを作る時に、例えば、4-of-4マルチシグでfunding txを作ります。この場合、この4者間で自由にチャネルの開閉がブロックチェーンに触れること無くできるというものです。

しかし、Lightning Factoryのすごいところは第5者がビットコインを持っていなくても、この4者間グループに入ってライトニングが使えるのです。もちろん、この4-of-4マルチシグを解除することなくブロックチェーンにも触れることなく、というものです。すごい!!!詳細はホワイトペーパがつい先日公開されたのでこちらを熟読してみてください。

The GHOSTDAG Protocol

まずDAGについての前提知識ですが、有向非巡回グラフ(Directed Acyclic Graph)と言い、IOTAなどで使用されている暗号学を使ったプロトコルらしいです。

本提案ではまずビットコインのコンセンサスプロトコルを説明し、そのプロトコルによりスケールができないという問題提起から始まりました。そしてそのプロトコル「最長ブロックが正しいブロック」からDAGへ変更する、また、その決定を最長ブロックではなくK-Clusterというメソッドから選択させるという提案がなされました(以下の図参照)。

これはちょっと前提知識がなくまったく理解できませんでした。論文はここから参照可能です。

The State of Atomic Swaps

皆さんお馴染みのAtomic Swapsは上の図だと思います。しかし、これには大きな欠点があるのをご存知でしょうか?BobがHTLCアドレスに送金後、Aliceはレート状況によって償還をやめるといったことができ、このプロトコルはアンフェアと言える。という冒頭からこのセッションは始まりました。Aliceはいわゆるオプションがあるのでアンフェアなのです。

ここで提案されたのが、担保付トランザクションです。これはAliceがBobへ以下のようなトランザクションを作り半分だけ署名しBobへ渡すことで、Aliceは自身のライトコインを担保にSwapを執行させようと言うものです。BobがアリスのHTLCへ送金した場合、Aliceは自身が担保したライトコインを取り返す必要があるため、Swap執行の動機が生まれます。

発表者は最後にいくつかの未解決問題を提唱して発表は終わりました。その問題のうちの一つに「ブロックチェーンが異なる曲線間でScriptless Scriptが使えない」といういものです。

実はこの問題は解決されているというのが、最後の質疑応答にて質問者から指摘がありました。その方法はちょっと分からなかったので今後調査しようと思います。

さらにもう一つの質問で、「ペナルティーによってアリスのオプション取引は解決できていないのでは?」という鋭い質問がありました。確かに、BobがAliceのHTLCへ支払った後、もしライトコインの価値が0になった場合、アリスの担保である少量のライトコインすら無価値になってしまうので、アリスとしてはオプションを執行して交換しないということが可能になります。これにはプレミアムをビットコインにつけてAliceがセットアップすれば良いのでは?という内容で、ついに結論はでないまま本セッションは終わりました。

Statechains: Off-chain Transfer of UTXOs

サイドチェーンを使ったスケーリングの提案です。

Statechainsは、UTXOの所有権をサイドチェーンで管理することで、サイドチェーン上でUTXOの所有権を自由に移動できます。またライトニングネットワークは完全なトラストレスですが、ノードは常にオンラインである必要があり、またライトニングネットワーク参加者間でしかコインの送金ができません。しかし、Statechainsの場合、例えば、AliceのUTXOがStatechainsに移転した場合、その所有権をStatechainsにいないBobに移すことができます。

Federatedを信頼する必要がありますが、発表者であるRuben曰く、スケーリングとトラストはトレードオフであるという割り切った考え方を持っていました。ユースケースとしては以下が上げられていました。

・Off-chainでの価値移転

・LNのためのプラットフォーム

個人的なバイアスですが、彼の発表がすごく面白く、また知見のある方でした。今後の注目に期待されると思われます。

おまけ:Scripless Script, Adapter Signature

全セッションが終わった後は、それぞれ興味のあるワークショップに分かれて、講義形式でよりみっちりとビットコインに使われるまたは今後使われるであろう技術の勉強をしました。僕はScriptless Script, Adapter Signatureのワークショップへ潜入し、Andrew氏による講義を受けました。とてもハイレベルな講義かつ質問の応酬で圧倒されましたがとても有意義な時間でした。そのときの講義資料はここから参照可能です。

総評

個人的にスケーリングといったらライトニングネットワークだ!という固定概念がありましたが、まだまだオンチェーンでのスケーリング対策であったり、LNとは違ったオフチェーンによるスケーリング(statechainなど)など面白いものばかりでした。まだまだビットコインというミステリアスでエキサイティングな技術は始まったばかりで今後も向上、発展していくんだという感覚を感じられずにはいれませんでした。まさに新技術のエッジに立っているんだという展望がみることができたイベントで本当に楽しかったです。

参考

また、各プレゼンは以下より動画とtranscriptが見れるので是非興味のある方は見てみてください。

--

--