いま、IOTAやByteballなどのDAG（有向非巡回グラフ）を利用した暗号通貨が注目されている。DAGはブロックチェーンを代替する仮想通貨の基盤技術で、これらの仮想通貨はBitcoinと同様に、中央管理者が存在しない分散型のネットワークを目指してつくられている。

DAGを利用した暗号通貨システムの特徴として、「マイナー（採掘者）がいない」「マイナーへの手数料が不要」「非同期承認なので承認時間が比較的早い」「オンチェーンでスケールする」などの特徴がある。Byteballなど別の理由で送金手数料が必要になる場合もある。

技術的な先進性があり将来性も期待できるため、これからDAG型暗号通貨は増えていく可能性が高い。そこで今回、ブロックチェーンを代替可能な技術として注目を集めているDAGの仕組みをなるべく非技術者が理解できるように紹介する。

DAGの仕組み

暗号通貨システムでは、支払われたはずのお金のデータが消えたり二重支払いが行われては困るので、その取引が正当であることを担保する仕組みが必要だ。Bitcoinではブロックチェーンとプルーフオブワーク（PoW）によるコンセンサスアルゴリズムで取引の正しさを担保してきたが、それと同様の役割を担うのがDAG（有向非巡回グラフ）を利用したシステムだ。

[caption id="attachment_12709" align="alignnone" width="1080"]

図１ 成長するDAG[/caption]

黄色 ： 新しく追加された取引ユニット

： 新しく追加された取引ユニット グレー : 古く未承認の取引ユニット

: 古く未承認の取引ユニット 緑 : ネットワークが合意に達したと考えられる取引ユニット

: ネットワークが合意に達したと考えられる取引ユニット ←矢印: 承認

図1,2,3に示したようなグラフをDAGという。図1中の四角が、DAG型暗号通貨のそれぞれのユーザーノードが発行した「取引を一つ収納したデータの単位」だ。横幅が時間の流れを示しており、図の左側が過去で右側が未来だ。より新しい取引が古い取引を承認(approve/confirm)する。その順番が逆になったり、ループしたりすることはない。

DAG型暗号通貨は細かい部分は異なったとしても、基本的にこのような構造を持っている。

[caption id="attachment_12708" align="alignnone" width="800"]

図2 IOTAのDAG（IOTA white paperより)[/caption]

[caption id="attachment_12707" align="alignnone" width="891"]

図3 ByteballのDAG(Byteball white paperより)[/caption]

DAG型の暗号通貨ごとに用語は異なるが、ここではDAGの１単位となるこの四角のことを「取引ユニット」と呼ぶことにする（IOTAでは「チップ」、Byteballの場合「ユニット」）。

DAGはブロックチェーンと同様に分散したノード間で取引記録を行っていく仕組みだ。ブロックチェーンでは取引がたくさん含まれた「ブロック」単位で記録と承認を行うが、DAGを使用する場合、承認される最小単位は取引がひとつ格納された「取引ユニット」になる。この取引ユニットに適切な重み付けを行い、正当な取引記録について合意したとみなすことで暗号通貨のやり取りをトラストレスに行うことができる。

DAGの取引はどう行われるか

新しい概念が多くDAGの仕組みは難しく感じるかもしれないが、実はBitcoinの「ブロックチェーン」よりもシンプルだ。

実際の取引を例にして説明しよう。ここでは、アリスが取引を作成し、それが他の人に承認され、ネットワーク上でアリスの取引が確定するまでのプロセスを追っていく。

1.アリスが取引ユニットを作る

アリスが、ボブが経営する東京のカフェでDAG型暗号通貨で支払う状況を想定する。支払いを行うために、アリスはボブへの送金データの入った取引ユニットを作ってDAGに記録することになる。アリスが取引ユニットに入れるのは、簡略化すると次のようなデータだ。

送金額と送金相手

アリスによる署名

１つ以上の、未承認の取引ユニットの承認

「送金額と送金相手」については説明不要だろう。次の「アリスによる署名」とは、この支払いがアリスによって作られたことを証明する電子署名だ。小切手に書かれたサインだと考えればいい。

最後の「１つ以上の、未承認の取引ユニットの承認」が少しややこしい。この文脈における承認とは、新しい取引ユニットが、過去の取引ユニットを正当なものだと認めることを意味する。すなわち、このケースではアリスが作成した取引ユニットが、過去に誰かが作成した取引ユニットを承認するということになる。

取引ユニットが「正当なものである」というのは、たとえば支払いを行ったらアリスの財布から支払い金額がちゃんと減り、かつアリスの財布の中身がマイナスにならない、というようなことを意味する。デジタルなお金の場合は、実物の財布と紙幣ではなく、ウォレットソフトとデジタル信号（トランザクション）を使うので、実物のお金であれば『当たり前のこと』を検証する必要がある。そうしないと、お金を無限に増やすようなことができてしまう。

さて、アリスの取引ユニットはDAG上にブロードキャスト（ネットワーク上の不特定多数に送信されること）された。しかし、まだアリスの取引は承認されていない。

2.アリスの取引ユニットが他の取引ユニットに承認される

アリスの取引が行われた少し後、全く別の場所でキャロルがチャーリーに送金を行っている。アリスとキャロルはDAG型暗号通貨を利用していること以外、お互いに何のつながりもない赤の他人だ。

しかしキャロルは取引ユニットを作る際、未承認の取引ユニットの承認を自分の取引ユニットに含めなければいけない。そこで彼女はDAGにブロードキャストされているが、まだ承認されていないアリスの取引ユニットを選んで、正当なものかどうか検証し、承認した。

つまりこの時初めて、アリスの取引ユニットは、キャロルの取引ユニットによって正当なものであると認められたことになる。

実際のところDAG型暗号通貨の取引で、ミクロの視点で起こっていることはこれだけだ。誰かが取引ユニットを作り、他の誰かの取引ユニットを承認する。その取引ユニットを更に別の誰かの取引ユニットが承認する。これをいつまでも繰り返すので、新しく作られた取引ユニットは常に承認され続ける。ブロックチェーンでは取引当事者と承認者が異なるが、DAG型暗号通貨では取引当事者が承認作業も行うのだ。

この流れを俯瞰でとらえたのが図１だ。黄色の四角が新しい取引ユニットを示している。新しい取引ユニットが常に更に新しい取引ユニットによって承認される様子をアニメーションで示した。異なる時間に発生する取引ユニット群が、承認・被承認の関係を示す矢印でつながれ一方向に伸びていくグラフ、それがDAGだ。

3.アリスの取引ユニットが確定する

アリスの取引ユニットに話を戻そう。

アリスの取引ユニットはキャロルに承認を受けたものの、ネットワーク全体に承認を受けたわけではない。なぜなら、現段階ではアリスの取引を他のノードは検証しておらず、キャロルのノードをアリスが不正に操っている可能性も排除出来ないからだ。

そこでDAGでは、他の取引ユニットによって「間接的に承認される数」で取引ユニットに重み付けし、その重み付けを利用して取引ユニットの正当性と確定性を判断することにした。つまり自分の取引ユニットを承認した取引ユニットが更に承認される、ということが何度も繰り返されることで重み付けが増えていくことになる。

図１で任意の一つの取引ユニットに注目してみると、時間が経つに連れて間接的に承認される数が増えていくのが分かる。

重み付けのしきい値には暗号通貨ごとに異なる上、本質的にはユーザーが自由に選ぶことが可能だ。だが、ひとつの目安として『殆どの未承認取引ユニットが間接的に取引ユニットを承認した時』を挙げておこう。

この例を図１に緑色の四角で示した。緑色の四角から逆方向に矢印をたどれば、全ての未承認の取引ユニットにつながっていることが分かるだろう。この状態になれば、アリスの取引ユニットは今後DAGが成長し続ける限り一定のスピードで重みを増しつづけることになる。

取引の確定と改ざん耐性

間接的な承認の数が取引ユニットの確定に関わる理由は２つある。

１つ目は、間接的に承認が進むほど、過去に遡って取引を改ざんしたり消したりすることが難しくなるからだ。これは取引ユニットに含まれる署名とハッシュによる。詳細の仕組みはブロックチェーンとそれほど変わらないので解説を省略するが、一度ブロードキャストして他の取引ユニットに承認された取引を改ざんするには、自分を直接的かつ間接的に承認した子ユニットの全ての秘密鍵が必要になる（IOTAの場合はそれに加えてPoWも必要だ）。

つまり取引を改ざんするためには、取引ユニットが充分に承認されると、分散化されていているすべてのノードの秘密鍵を手に入れなければならない。ネットワークが大きくなればなるほど、取引の改ざんが困難になる。

もう1つの理由は二重支払い耐性で説明できる。実は先ほどのアリスの取引ユニットが二重支払いを企図した不正な取引であったとしても、DAGへのブロードキャストは可能だ。しかし利己的な取引ユニットはアリスの取引ユニットを承認しないだろう。なぜなら、正常なノードがネットワークの大半を占めるならば、不正なユニットを承認した取引ユニットは、他のユニットに承認されにくくなると考えられるからだ。

以上の理屈で、不正な取引ユニットにつながったDAGは成長せず、間接的な承認数が増えることもない。そのため我々は重み付けによって不正な取引ユニットを排除することができる。また、DAGにBitcoinにおける51%攻撃のような攻撃ベクトルがあるか、それが何%になのかについては、今後検証が進むにつれ判明することだろう。

以上がDAGを使用した暗号通貨の基本的な仕組みである。ただし暗号通貨の種類によって実際の中身は変わってくる。たとえばIOTAでは承認の際に取引の発行ノードがPoWを行う必要があり、その代わり手数料を支払う必要はない。ByteballではPoWを行わないかわりにスパム対策として手数料を回収し、その一部を将来自分を承認するユニットに支払い、残りをDAGを健全に保つためのMainChainというシステムを監視する12のノードに支払うという仕組みを採用している。

詳しく知りたい方は、それぞれの暗号通貨が詳細な内容を記述したホワイトペーパーを作成しているので参照されたい。

DAGの利点

スケーラビリティの根本的な解決

DAG型暗号通貨では、理論上、Bitcoinにおけるオンチェーン取引のスループット限界のようなスケーラビリティの課題は発生しない。

ビットコインでは、取引作成しブロードキャストする主体（ユーザー）とそれを承認する主体（マイナー）が別だ。そのため、ユーザーが増えて取引が増加し続けると、それらの取引をマイナーが捌けなくなるという構造的な問題がある。

一方DAG型の暗号通貨は、取引を行ってブロードキャストする主体とそれを承認する主体は同じだ。ということは極端な話、取引が無限に増えたところで、増えた分の承認を増えた取引ユニット”自身”が行うのでネットワークの処理能力が足りなくなることがない(実際に取引量が無限に増えると、先にネットワークのスループットの方が問題になるだろうが)。

これがDAG型暗号通貨がオンチェーンでスケールしていると謳う所以であり、ブロックチェーンには決してない利点だ。

短い承認時間

DAGは非同期のシステムのため、承認時間を短くすることができる。ビットコインの場合、約十分に１つ作成されるブロックに自分のトランザクションが取り込まれるのを待ち、承認される必要があった。そしてそれを全てのノードが共有して次のブロックを作り始める同期型のシステムだった。

DAGでは自分の取引ユニットが無数の新しい取引ユニットのどれかに承認されれば良いので、短時間で承認されることが可能だ。あくまで参考だが、Byteballの場合はネットワークが正常な状態で30秒程度で承認されるとホワイトペーパーに記述がある。

一方、承認は確率的に行われるため、DAGが十分に成長しておらず新規取引ユニットが少ない場合や、接続しているノードに問題がある場合なかなか承認が行われないこともある。特にノードが少ないネットワークの初期段階は承認が行われるまでの時間はまちまちなので注意が必要だ。

弱点・課題

100%安全なシステムは存在しない。51%攻撃について上でも少し触れたが、DAG型の暗号通貨への攻撃方法の研究はBitcoinのそれに比べると、当然だが進んでいない。また保守的な言説になるが、Bitcoinには誕生からこれまで多くの攻撃に晒されながらも一度もダウンすることなく稼働し続けてきた実績があり、それと比べるとDAG型暗号通貨の信頼性は十分実証されているとはいえない。

たとえばIOTAは2016年の7月から稼働しているが、ネットワークへの初期段階での攻撃を防ぐためCoordinatorという中央集権的な仕組みを一部に残している。CoodinatorはDAGの健全性を監視して定期的に正統なDAGのスナップショット（マイルストーン）を作成している。これは今後ネットワークが十分に成長したら取り除かれる「補助輪」のようなものだ。一方のByteballは2016年の12月に稼働し始めたばかりである。

Bitcoinの問題点についても時間が経つに連れて露わになってきた経緯があり、DAG型の個別の暗号通貨の問題点も今後明らかになっていくだろう。

最後に、どのDAG型通貨も実際の応用についてはまだまだこれからである（ただしこれはほとんど全ての暗号通貨についてもあてはまることだが）。実績が無いことは不安点でもあるが同時に新技術ならではの可能性と表裏一体でもある。DAG型暗号通貨の今後に期待したい。

IOTA公式サイトThe Tangle /IOTAホワイトペーパーv1.1Byteball公式サイトByteball ホワイトペーパー