NoRippleフラグについて

Ripple Consensus Ledger(RCL)において、”NoRipple”フラグはトラストラインの設定です。アドレスが2つのトラストラインでNoRippleフラグを有効にすると、サードパーティからの支払いは、それらのトラストライン上のそのアドレスを通して「リップル」できません。これにより、流動性プロバイダーが同じ通貨の異なる発行者間で予期せず残高が移動するのを防ぐことができます。

背景

「リップリング」は、支払いを行うために複数のトラストラインがアジャストされたときに発生します。例えば、アリスがチャーリーからお金を借りていて、さらにアリスがボブからもお金を借りている場合、あなたはそれをRipple上のトラストラインで次のように表すことができます:

Charlie --($10)-- Alice -- ($20) -- Bob

もし、ボブがチャーリーに3ドルを支払いたいとしたら「アリス、君が私に借りている3ドルをチャーリーに払ってくれ。」と言うことができます。アリスはボブからの負債の一部をチャーリーに移します。結果的に、Rippleのトラストラインはこのようになります:

Charlie --($13)-- Alice --($17)-- Bob

2つのアドレスがそれらの間のトラストラインの残高を調整することによって、お互いに支払いを行うこのプロセスを「リップリング」と呼びます。これは Ripple Consensus Ledger の有用で重要な機能です。リップリングは、同じ通貨コードを使用するトラストラインによってアドレスがリンクされている場合に起こります。発行者が同じである必要はありません: 実際、大規模なチェーンは常に発行者の変更を伴います。

正当化

時には、あなたは残高がリップルすることを望まないことがあります。例えば、このようにエミリーが2つの異なる金融機関によって発行されたお金を持っているとします。

Charlie --($10)-- Institution A --($1)-- Emily --($100)-- Institution B --($2)-- Daniel

今、チャーリーはエミリーのアドレスを通じて、リップリングによってダニエルに支払いを行うことができます。例えば、チャーリーがダニエルに10ドルを払うとすると:

Charlie --($0)-- Institution A --($11)-- Emily --($90)-- Institution B --($12)-- Daniel

これはチャーリーやダニエルを知らないエミリーを驚かせるかもしれません。さらに悪いことに、もし金融機関Aが彼女のお金を引き出すために金融機関Bよりも高い手数料を彼女に請求したら、この費用をエミリーが負担する可能性があります。このシナリオを回避するために、NoRippleフラグが存在します。もし、エミリーが両方のトラストラインにNoRippleフラグを設定すると、支払いはその2つのトラストライン上で彼女のアドレスを通じてリップルすることができません。

例えば:

Charlie --($10)-- Institution A --($1, NoRipple)-- Emily --($100,NoRipple)-- Institution B --($2)-- Daniel

こうして、エミリーのアドレスを介したリップリングで、チャーリーがダニエルに支払う上記のシナリオは不可能になります。

仕様

NoRippleフラグは、特定のパスが支払いに使われないように、それらのパスを無効にします。パスがそのアドレスに対してNoRippleが有効なトラストラインを通じてアドレスノードから入りそして出る場合にだけ、そのパスが無効であるとみなされます。

Diagram demonstrating that NoRipple has to be set on both trust lines by the same address to do anything

技術的な詳細

NoRippleの有効化/無効化

NoRippleフラグは、そのアドレスがトラストライン上でプラスまたはゼロの残高を持つ場合にのみ、そのトラストライン上で有効にすることができます。これは、この機能をトラストライン残高が表す債務をデフォルトするために悪用できないようにするためです。(もちろん、そのアドレスを放棄することでデフォルトすることはできます。)

rippled APIでは、tfSetNoRippleフラグを指定してTrustSetトランザクションを送信することで、NoRippleフラグを有効にすることができます。tfClearNoRippleフラグを使用して NoRipple を無効(リップリングを有効)にすることができます。

RippleAPIでは、トラストラインの ripplingDisabled フィールドが true に設定されたTrustlineトランザクションを送信することにより、NoRippleフラグを有効にすることができます。

NoRippleステータスを調べる

相互に信頼する2つのアカウントの場合、NoRippleフラグはアカウントごとに個別に追跡されます。

rippled APIでは、account_linesメソッドを使用して、アドレスに関連付けられたトラストラインを調べることができます。各トラストラインについて、no_rippleフィールドは、現在のアドレスがそのトラストライン上で NoRipple フラグを有効にしているかどうかを示し、no_ripple_peerフィールドは、カウンターパーティーが NoRipple フラグを有効にしているかどうかを示します。

RippleAPIでは、getTrustlinesメソッドを使用して、アドレスに関連付けられたトラストラインを調べることができます。各トラストラインについて、ripplingDisabledフィールドは、現在のアドレスがそのトラストラインで NoRipple フラグを有効にしているかどうかを示します。counterparty.ripplingDisabledフィールドは、カウンターパーティーが NoRipple フラグを有効にしているかどうかを示します。


注意:

本ドキュメントは、リップル社が公式サイトで公開している『Understanding the NoRipple Flag』を私が個人的に翻訳したものです。注意して頂きたいのは、当方は現役のエンジニアではありませんし、Rippleについての技術的な探求心があるわけでもありません。誤訳などの間違いがあるかもしれないため、公式サイトの英語で書かれた原文もあわせて読むことをお勧めします。