私たちは最近、オランダのロッテルダムでミートアップを開きました。幸運にも、Haskellのコンサルタント会社 Well-Typedの、IOHKのコンサルタント Edsko de Vries氏をお招きすることができました。氏は、カルダノのウォレットについて、特にその下にある数学とコインの選択の仕組みについて有益なプレゼンテーションを提供してくださいました。
UTxO
- UTxOはUnspent Transaction Outputの略です
- カルダノ ウォレットはUTxOモデルに基づいており、このウォレットは支払いに使用されます
- Edskoは現実の世界の「現金」設定からの取引について説明し、それをUTxOと比較しました
- この例では「ボブに70を支払いたいアリス」を使っています
- 画像でわかるように、これは現在自分の銀行口座で一般的に見られるもので、アリスの口座から70を取り、70をボブの口座に追加する取引が示されています
- これを現金に関連付けると、アリスが100持っていて、ボブがアリスに30を返すことができれば、二人は70の取引を完了することになります
- しかし、UTxOでは、ボブはおつりを出せません
- したがって、アリスがボブ70に与えるためには、アリスは自分の100を「崩す」ことで、70と30にします
- 100コインを「崩す」行為は、二重支出を避けるために必要です
- 50を2つにする際にも、これとまったく同じプロセスが行われます
- このプロセスはUTxOと呼ばれます
ダスト
- アリスが8の支払いを希望するシナリオを見てみましょう
- アリスは50と10を持ち、ボブには何もありません
- アリスは50か10のいずれかを崩すことを選択できますが、お分かりのように、為すべきことは、10を取って8と2にすることです
- しかし、これは、 ダスト 問題を引き起こします。2コインの値が非常に小さいためです
- 小さなコインをあまりにもたくさん持っていたくはないです
- 小さなコインはパフォーマンスにとって良くありません。当然のことながら、使いづらいのです
- 取引で使用できるコインの数にも制限があります。つまり、使えないコインで終わるということです
- カルダノ プロトコルには、取引手数料があり、取引のデータサイズに依存する変数になっています。これは、取引に多くのコインを使用すると、手数料が高くなる可能性があることを意味します
- したがって、この状況で好ましいのは、50を選び、それを壊して8を支払い、42をキープすることです
- 慎重でない場合、数多くの小さなコイン、すなわち ダスト と呼ばれるものを持って終わることになります
自己組織化
- このコインの選定はどのように行いますか?
- Edskoは、非常に単純なルールからどのようにして複雑なふるまいが生じ得るのかを説明しています
- 自然界や生物学では、鳥の群れを調べることができます
- リーダーの鳥は一羽もおらず、すべての鳥が自分のやり方で行動し、群れのグループ行動が出現します
- 彼らはこのことからインスピレーションを得て、ウォレットに小さなコイン、またはダストがたくさんある状況を避けようと模索しました
- これらの問題に対処し、解決策を見つけるために、多くのシミュレーションを行いました
- この図はコインの分布を示し、x軸はコインのサイズを示します
y軸は、私たちが持っている数を示します - 小さなグラフ内では、青い線は残高で、赤い線はウォレット内のコインの総数です
- コインの総数は、あなたが引き留めたいものです
- さっきの例に戻るために今明らかにすべきことは、常に最大のコインを取ることです(すなわち、50を取る)
- しかし、常に大き目のものを受け取る場合、ダストの数は依然として上昇し続け、コインの数は6万に成長します
- 「最大を先に」のシミュレーションを見 てみます
- 私たちを最初の自己組織化の原理に導きます。
自己組織化の原理# 1 : ランダムにコインを選ぶ場合、小さなコインがたくさんあるとまさにその小さなコインを選ぶ可能性が高い。
- 次のシミュレーションは、新しいポリシー「ランダム」(コインをランダムに選択するということです)を追加した場合に表示されます
- ダストが多い状況では、ランダムポリシーがそれらを使用しダストをクリーンアップすることが期待できます
- ランダム ポリシーが開始されると、急にドロップするのがわかります
- そこで、あなたは、小さなコインを使うことになるのだからランダム関数を使うことはおそらくベストだと考えます
- しかし、欠点があります。クリーンナップするわけですが、それがまたダストを発生させているからです
- シミュレーションを見ると、ダストが発生しているのを観察できます
自己組織化の原理# 2 : 価xの支払いをするたびに、ほぼ同等の価xのおつりのコインを生じさせるとしたら、サイズxの支払いを多数すれば、ウォレットにはサイズxのおつりのコインが多数存在するという結果を招く。
- Edskoは、Random-Improveコイン選択アルゴリズムについて説明します。これはカルダノと共に提案されているものです
- このアルゴリズムから、ダストの発生が大幅に減少していることがわかりました
- さらに多くのシナリオでテストされ、弾力性があり、良い結果を残していることが実証されました
- アリスが70支払おうとしている例に戻って、アリスがコインをランダムに選んでいると想像してみてください
- アリスが、例えば、300の価値のある非常に大きなコインを選択したとします
- 1つのオプションは、これをそのままにして、自分の検索を続けることです
- 2番目のオプションは、その時点であきらめてそのコインを使用することです
- 最初の選択肢は実際には良い解決策ではありません。なぜなら、最悪のシナリオでは、アリスはウォレットの中のすべてのコインを探し続け、良いもの(70に近いか同等のもの)を探すことになるからです
- このプロセスはもちろん非常に遅く、パフォーマンス的に良くありません
- 2番目のオプションに戻って、受け入れられると考えられるサイズの上限を設定すると(この例では支払い値の2倍に設定されます)、アルゴリズムは自己組織化を利用して、機能するソリューションを作成します
- 与えられたシナリオでは、アリスは自分のコインからランダムに選んで、70の値の2倍を上回り、140になるコインを選択すると、彼女はあきらめてそれらのコインを使用します
- これにより、私たちの3つ目の、そして最後の原理に到達します
- 非常にシンプルですがうまく機能するものです
自己組織化の原理 3 : 小銭の状況を改善するためにウォレットで追加のコインを検索することは、ウォレットに十分に小さなコインが含まれている場合にのみ有効である。
- しかし、正確には、ウォレットに小さなコインが多数含まれている場合、ランダムに選ばれたコインが、設定した上限値以上に合計を押し上げる可能性は低い。
ウォレットの残高
- コインの選択について学んだ後、Edsko はウォレットの残高についての発表に移りました
- ウォレットの残高は「 どれくらいのお金を持っていますか? 」という質問に関係します
- これは簡単な質問のように思えますが、実際はかなり複雑です
- IOHKには、暗号通貨のウォレットの証明についての45ページもの数学の文書がありますが、その大部分は残高に関するものです
- 残高の違いは、保留中の取引から生じる可能性があります
- 例えば、アリスがボブに70を送ったが、それはまだシステム内を通過していない、といった場合です
- ボブは70を獲得していないし、アリスは自分の残高と利用可能な残高を見せられます
- 現在残高は最後に記録された残高を示します
- 利用可能残高は、アリスがボブのための70を作るためにどのように100を崩さなければならなかったかを示します
- 最後に、合計残高です。ここには保留中の取引から戻ってくる「おつり」が含まれます
- この最終残高は私たちにとって「新しい」です。なぜなら、銀行口座では、取引からおつりが戻ってくるのを待つ必要がないためです
- これに加えて、実際には他に第4の残高があります…
- ブロックチェーンを使用すると、誰にでもトランザクションの詳細が送信されます
- 説明のためにあえていえば、米国とヨーロッパの間には1つの接続しかありません
- 上の画像に描かれた通りです
- あるシステム内のトランザクションが他の大陸に渡って伝播される場合です
- これは二重支出を避けるために重要です。誰もがどのコインが使われたのか知っていて、ユーザーはコインがすでに使用されたかを確認できます
- しかし、米国とヨーロッパのこのリンクが一時的に壊れたらどうなるでしょう? 起こっているトランザクションについて各地域の人々だけが知る状況です
- 切断されたシステムは、フォーク(分岐)につながるため良くありません
- もちろん、ある時点で、接続が復元されるでしょう。そしてこれがチェーン選択ルールが作動し始めるところです
- 最長チェーン選択ルールにより、長いチェーンが選択されます
- 短いチェーンにあったトランザクションは消失し、それらがチェーンに入るという保証はありません
- これは残高にとってどういう意味でしょう?
- 2つのシナリオを見てみましょう
- この最初のシナリオでは、1000で開始したとしましょう
- フォークが起こると、赤いチェーンがグレーアウトし、自分で100を獲得し、ここで10を使い、90をキープしているのがわかります
- おつりを取り戻した時の合計残高は1090でした
- しかし、この時点で、フォークは解決され、もう一方の長いチェーンが選択されました
- 短いチェーンに参加している人々の残高はどうなるのでしょう?
- 新しいチェーンに含まれる可能性はありますが、どちらのトランザクションも含まれていない可能性があり、その場合その残高は1000に戻ります
- 最初のトランザクションが含まれ、残高が1100である可能性もあります
- 最初のトランザクションが含まれていなければ、-10の2番目のトランザクションは通過できないことに注意してください
- しかし、慎重で安全なところでいえば、残高は1000です
- 2番目のシナリオでは、残高1000で同じ方法を開始しますが、そこでフォークに会います
- フォークの後、100を獲得しますが、200使います
- これは両方使うことを意味します
- フォークが解決した後、今度は何が起こるのですか?
- +100と-200の2つの取引は含まれる場合と含まれない場合があります
- 含まれる場合には、残高は900です
- 両方が含まれない場合、残高は1000です
*このシナリオでは、両方が含まていると仮定していますので、最良の推定値は900です
これらのトピックの詳細については、Edskoのブログの記事(英語)をご覧ください:
Self Organisation in Coin Selection
Semi-Formal Development: The Cardano Wallet
今回のカルダノの ミートアップ にご出席された方がいらっしゃれば、皆さんからのご連絡もお待ちしております! 下記にコメントを残してください。