Tangle(タングル)図解パート4 : 承認者と残高(バランス)と二重支払い

この記事は原題『The Tangle: an Illustrated Introduction Part 4: Approvers, balances, and double-spends』の翻訳です。
ご参考までに公開します。必要だと思われる部分には言葉や構成を補っています。私の力不足のため、えいやで翻訳されている部分もあります。

承認者と残高(バランス)と二重支払い

投稿者:Alon Gal
投稿日:2018年02月22日

これまでに、DAGやランダムウォークや様々なチップ選択の仕組みについて話してきました。今回はお金について話します。いよいよ「トランザクションAがトランザクションBを承認する」とはどういう意味なのかを説明する時がきました。

この連載のパート1の記事で述べたように、各トランザクションには「アリスはボブに10枚のIOTAを与えた」という形式の情報が含まれていますが、そもそもアリスは本当にIOTAを10枚保有していたのか、ということを確認するのは承認者の仕事です。ここで「IOTAってどこでから来たんだろう?」と不思議に思うかもしれませんが、「すべてのIOTAは、ジェネシス・トランザクションというTangleの中の一番最初のトランザクションで作られた」というのがその答えです。新たに追加してIOTAが作られることは決してありません。そのジェネシス・トランザクションから生まれたIOTAは、IOTAプロジェクトの最初の投資家たちの各アカウントに、それぞれの投資額分送られました。その後に投資家たちが各自のIOTAを売ることで、売買のネットワークが出来上がりました。

アリスとボブの話に戻って、簡単な例を見てみましょう。下の箱はトランザクションを表します。便宜上、そのトランザクションが発生する前と後のアリスとボブのアカウント内の残高も書いておきます。

何かの支払いをしたがっている、例えばチャーリーという人がいたとします。彼がチップ選択アルゴリズムを実行すると、アリスのトランザクションを承認する必要があることが分かったので、彼はアリスがボブに支払った10枚のIOTAを本当に所有していたのかを検証しなくてはなりませんが、これは真剣に取り組んだほうがいいでしょう。もし悪いトランザクションを承認してしまうと、自分のトランザクションがまったく承認されなくなってしまうからです。チャーリーは、アリスのトランザクションによって直接的及び間接的に承認された全トランザクションを、一番最初のジェネシス・トランザクションまで遡ってリストアップしなくてはならず、最終的に次のような長いリストができます。

  1. ジェネシスは15iを作ります。
  2. ジェネシスはボブに2i与えます。
  3. ジェネシスはアリスに8i与えます。
  4. ジェネシスはチャーリーに5i与えます。
  5. チャーリーはドンナに3i与えます。

もちろんこれは選択肢の一つにすぎません。アリスのアカウントの残高が10i、ボブの残高が0iとなるのであれば、いかなるリストでも許容できます。チャーリーは、リストの中の他のすべてのアカウントを追跡して、残高がゼロ未満になっていないことを確かめなくてはなりません。もしアカウントのどれか一つでも、トランザクションの前後の残高がマイナスだったら、チャーリーのトランザクションは無効となってしまいます。

では、アリスが自分の持っているより多くのIOTAを与えようとするケースを見てみましょう。

アリスは10枚のIOTAしか持っていないのに、ボブに100枚払ってしまうと、アリスのトランザクションとアリスのトランザクションを承認する将来の全てのトランザクションは、ネットワークによって無効と見なされます。マイナスの残高は許されません。

一つのトランザクションだけではなく、二つ承認する場合は、さらに興味深い状況となります。

上図の場合は、ボブがアリスの二つのトランザクションを承認したことは適切でした。なぜなら、アリアは十分なお金(IOTA)を持っていて、両方の支払いをしても残高がゼロ未満にならないからです。

もし支払い合計がアリスの保有分以上だったらどうなるでしょう?それを表したのが下図です。この場合は、ボブはアリスのどちらのトランザクションも承認できません。なぜならアリスの残高がマイナスとなってしまうからです。もしボブが承認してしまうと、IOTAプロトコルのルールを破ったことになり、誰もボブの新しいトランザクションを承認しなくなります。

この最後の状況がいわゆる二重支払いです。なぜならアリスはお金を2回支払っているからです。注意して欲しいのは、アリスはプロトコルを破らなかったことです。なぜなら彼女はそれぞれのトランザクションに対する十分なお金を持っていたからです。たぶん彼女は二重支払いをするつもりさえなく、間違ってトランザクションを2回送ってしまったのかもしれません。しかしながら、彼女はTangleの中に両立させることのできない2つのトランザクションの枝(branch:訳注=枝のような一連のトランザクションの連なり)を作り出したので、正直なIOTAユーザーたちに「どっちの枝を承認すべきなのか?」という問題を引き起こします。

この問題の解決方法が、再び前回学習した荷重ウォークです。やがてどちらかのトランザクションの枝の方がもう一方より重くなり、軽い方は今後承認されることなく見捨てられます。ということは、トランザクションは発行された直後は、たとえ複数の承認者がいたとしても確定されたとは見なされない、ということでもあります。というのも、そのトランザクションは、最終的に見捨てられるトランザクションの枝の一部になるかもしれないからです。自分のトランザクションが必ず確定されることということが分かるには、確定の信頼度が十分に高くなるまで待たなくてはなりません。これは次回の記事のテーマとなります。

いつもどおり私への質問は大歓迎です。ここかDiscordの@alongal#393まで連絡ください。

パート1:Tangleの紹介
パート2:新しいトランザクションの到着率と遅延時間とランダムウォーク
パート3:累積荷重と荷重ランダムウォーク
パート5:コンセンサスと確定の信頼度とコーディネーター

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です