CTORとグラフェンについて

11月15日にアップグレードを終えたビットコインキャッシュは新しいトランザクション格納方式CTOR(Canonical Transaction Ordering)が有効化されました。前回のブログで簡単に説明したように、CTORとはアルファベット順の事でした。では、実際にトランザクションの並び方を比較したものを見て本当にアルファベット順に並んでいるところを確認して見ましょう。

下の画像はアップグレード前と後のビットコインキャッシュ(BCH)のブロックの中身を表示したものです。従来のブロックはトランザクションの順番がランダムである事に対して、CTORではアルファベット順に並んでいる事が確認できます。(数字を先に0から9に並べ、その後にa-zの順に並びます。)

アップデート前のブロック(ブロック高556765)
トランザクションの順番がバラバラである事が確認出来る

CTRO BeforeFork

アップグレード後のブロック(ブロック高556811)
トランザクションがアルファベット順に並んでいる事が確認出来る。

CTOR AfterFork

CTORが何故ビットコインキャッシュのスケーリングの役に立つのか?

今回はこのCTORがどのようにビットコインキャッシュのスケーリングと関係するのかを簡単に説明します。最初にそれを理解する為に、今のビットコインのマイニングとブロック伝播の問題について少しだけ理解しておく必要があります。

マイニングとメモリープール

メモリープールという言葉をご存知でしょうか?ビットコインは沢山のマイナー達のネットワークで構成されています。それぞれのマイナーはそれぞれメモリープールと呼ばれる領域を持っており、この中にネットワーク上に送信されるトランザクションを集めて次のブロックに含まれるトランザクションのリストを作っています。

およそ10分毎に沢山のマイナー達の中から誰か一人が非常に解くことが難しい数学パズルの回答を探し出すと、回答を解いたマイナーが自分のメモリープールから当選ブロックを構築し公開する事でブロックリワードと呼ばれる報奨金を受け取ります。これがマイニングの最も基本的な仕組みです。

ブロックのプロパゲーション

この新しいトランザクションが入った当選ブロックは、ネットワーク上の全ての他のマイナー達にブロードキャスト(ネットワーク内にいる全員に同じデータを送る事)されます。他のマイナー達は、このブロックの延長に繋ぐための新しいブロックのマイニング作業に取り掛かる為に、この当選ブロックを受け取ります。

この時、ブロックがブロードキャストされネットワーク全体に伝わることを「ブロックのプロパゲーション(伝播)」と呼びます。

問題点

ブロックのプロパゲーションを効率化させる上で問題となっている点の一つに、ノード(マイナー)はそれぞれの自分のメモリープールの中に当選ブロックに含まれる内容とほぼ同じ、「新しいトランザクションのリスト」を持っているのに、ネットワーク上の一人のマイナーが当選ブロックを見つけた際にもう一度それを受け取らなければならない無駄がある、と言う点が挙げられます。

ブロックプロパゲーションの効率化

この処理をより効率良く行う為に、X-Thin、コンパクト・ブロックス、グラフェンなどのいくつかの方法が提案されてきました。コンパクト・ブロックスはビットコイン・コア (BTC) によって2015年から採用されている方法です。これは2017年8月1日のビットコインキャッシュ(BCH)の誕生以前から存在しますのでコンパクト・ブロックスはビットコインキャッシュ(BCH)にも受け継がれています。

X-Thin、コンパクト・ブロックス、グラフェン。これらの方法はどれも基本的に同じ目的を持つものです。既にメモリープールの中にあるトランザクションのデータを再利用して、同じデータを二回やりとりする無駄を省こうとするものです。これによってブロックがネットワークを伝播する時間を大きく短縮する事ができスループット(時間当たりの処理能力)を向上する事ができます。

この中でもグラフェンは、元ビットコイン・コアのリードデベロッパーであるギャビン・アンドレセン氏によって提案されている方法で、現在最も効率が良い方法です。ビットコインキャッシュ(BCH)は順次グラフェンにアップグレードする事になっていて、ビットコインキャッシュ(BCH)のクライアントの一つBitcoin Unlimitedは2018年の7月から既にグラフェンを導入しています。

graphene

CTORとグラフェン

CTORはこのグラフェンとどう関係あるのでしょうか。

従来のコンパクト・ブロックスはトランザクションIDのリストを短縮する事で単純化してプロパゲーション効率を向上させていますが、グラフェンではトランザクションIDの短縮リストを受け取る代わりに、ブルームフィルターを使いプロパゲーション効率を高める仕組みです。ブルームフィルターを使う事でブロックに格納するべきトランザクションを知る事は出来ますが、トランザクションの順番はブルームフィルターだけではわかりません。そこでトランザクションの順番が書かれた情報を別途受け取るのですが、このトランザクションの順番に関する情報がグラフェンの85%を占めています。

グラフェンブロックの中
graphene-before

85%とは非常に大きな割合ですが、なぜトランザクションの順番を渡す必要があるのでしょうか?上の図の様にマイナー達は皆、それぞれが持つメモリープールの中に他のマイナーと同じ新しいトランザクションのリストを持っています。しかし、それぞれのマイナーはトランザクションを見つけた順に格納していくため、リスト内のトランザクションの順番はネットワーク内のメモリープール同士で統一されていません。メモリープールの中に持っているトランザクションの内容は同じですが、その順番はバラバラ、という状況になります。当選したマイナーからのメッセージを受け取った他のマイナーが、自分のメモリープールから当選したマイナーと同じ内容のブロックを構築する為には、トランザクションの順番を知る必要があるのです。

そこで考えられたのが「ブロックに入るトランザクションの順番はアルファベット順にする」というルールです。このルールが全てのマイナーの間で取り決められていれば、トランザクションの順番に関するデータをやり取りする必要がなくなります。それぞれのマイナーが自分のメモリープール内のトランザクションIDをアルファベット順に並べてブロックを再現する事が出来るからです。この「ブロックに入るトランザクションの順番はアルファベット順にする」と言うルールがCTORです。

CTORによってグラフェンに含まれるトランザクションの順番が書かれたデータ、グラフェンブロックのデータ量の約85%を削減する事が可能となり、グラフェンのパフォーマンスを約7倍改善する事が出来ます。

CTORによってグラフェンのパフォーマンスが約7倍改善
graphene-after

Decentralized ThoughtからCTORとグラフェンについての大変わかりやすい動画がリリースされています。この動画に日本語字幕が入りましたのでぜひご覧ください。

日本語字幕が選択可能です。自動的に字幕が表示されない場合は設定から選んでください。

2019年1月9日(水曜日)