最終更新:
編集

RippleState

[ソース]

RippleStateのレジャーエントリは、2つのアカウント間のトラストラインを表します。各アカウントは限度額やその他の設定を変更できますが、残高は共通の値です。完全にデフォルトのトラストラインは、存在しないトラストラインと同じとみなされ、自動的に削除されます。

高位vs低位アカウント

RippleStateエントリは、任意のアカウントペアに対して1通貨につき1つだけです。XRP Ledgerではどのアカウントも特権を持たないため、RippleStateエントリはアカウントアドレスを数値順にソートし、正規の形式を保証します。デコードしたときに数値が小さい方のアドレスが"低位アカウント(low account)"、もう一方が"高位アカウント(high account)"とみなされます。トラストラインの純残高は、低位アカウント基準で保存されます。

トラストラインの残高の"issuer"は、残高がプラスかマイナスかによって異なります。もしRippleStateエントリが正の残高を示していれば、高位アカウントが発行者です。残高がマイナスの場合、低位アカウントが発行者です。多くの場合、発行者の限度額は0に設定され、もう一方のアカウントの限度額はプラスに設定されていますが、限度額既存の残高に影響を与えることなく変更される可能性があるため、これは信頼できません。

RippleStateのJSONの例

{
  "Balance": {
    "currency": "USD",
    "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
    "value": "-10"
  },
  "Flags": 393216,
  "HighLimit": {
    "currency": "USD",
    "issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
    "value": "110"
  },
  "HighNode": "0000000000000000",
  "LedgerEntryType": "RippleState",
  "LowLimit": {
    "currency": "USD",
    "issuer": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
    "value": "0"
  },
  "LowNode": "0000000000000000",
  "PreviousTxnID": "E3FE6EA3D48F0C2B639448020EA4F03D4F4F8FFDB243A852A0F59177921B4879",
  "PreviousTxnLgrSeq": 14090896,
  "index": "9CA88CDEDFF9252B3DE183CE35B038F57282BC9503CDFA1923EF9A95DF0D6F7B"
}

RippleStateのフィールド

共通フィールドに加えて、RippleStateエントリは以下のフィールドを使用します。

名前JSONの型内部の型必須?説明
BalanceオブジェクトAmountはい低位アカウントからみたトラストラインの残高。残高がマイナスの場合、低位アカウントから高位アカウントに対して通貨が発行されています。この場合のイシュアーは常に中立値ACCOUNT_ONEに設定されます。
Flags数値UInt32はいこのオブジェクトに対して有効になっているブールオプションのビットマップ。
HighLimitオブジェクトAmountはい高位アカウントがトラストラインに設定した限度額。issuerは、この限度額を設定した高位アカウントのアドレスです。
HighNode文字列UInt64はい(一部の履歴レジャーでは省略されます)高位アカウントの所有者ディレクトリが複数ページで構成されている場合に、このオブジェクトにリンクしているページを示すヒントです。
HighQualityIn数値UInt32いいえ(省略可)暗黙の比率(HighQualityIn:1,000,000,000)で整数として高位アカウントにより設定された着信品質。値が0の場合は10億または額面価格と同等です。
HighQualityOut数値UInt32いいえ(省略可)暗黙の比率(HighQualityOut:1,000,000,000)で整数として高位アカウントにより設定された発信品質。値が0の場合は10億または額面価格と同等です。
LedgerEntryType文字列UInt16はい0x0072が文字列RippleStateにマッピングされている場合は、このオブジェクトがRippleStateオブジェクトであることを示します。
LowLimitオブジェクトAmountはい低位アカウントがトラストラインに設定した限度額。issuerは、この限度額を設定した低位アカウントのアドレスです。
LowNode文字列UInt64はい(一部の履歴レジャーでは省略されます)低位アカウントの所有者ディレクトリが複数ページで構成されている場合に、このオブジェクトにリンクしているページを示すヒントです。
LowQualityIn数値UInt32いいえ(省略可)暗黙の比率(LowQualityIn:1,000,000,000)で整数として低位アカウントにより設定された着信品質。値が0の場合は10億または額面価格と同等です。
LowQualityOut数値UInt32いいえ(省略可)暗黙の比率(LowQualityOut:1,000,000,000)で整数として低位アカウントにより設定された発信品質。値が0の場合は10億または額面価格と同等です。
PreviousTxnID文字列Hash256はい最後にこのオブジェクトを変更したトランザクションの識別用ハッシュ。
PreviousTxnLgrSeq数値UInt32はい最後にこのオブジェクトを変更したトランザクションが記録されたレジャーインデックス

RippleStateのフラグ

RippleStateエントリは以下のフラグをFlagsフィールドに設定することができます。

フラグ名16進数値10進数値対応するTrustSetフラグ説明
lsfAMMNode0x0100000016777216(なし)このトラストラインがAMMアカウントに紐づくことを表します。
lsfLowReserve0x0001000065536(なし)このRippleStateオブジェクトは低位アカウント所有者の準備金に資金を供給します
lsfHighReserve0x00020000131072(なし)このRippleStateオブジェクトは高位アカウント所有者の準備金に資金を供給します
lsfLowAuth0x00040000262144tfSetAuth低位アカウントにより、高位アカウントが低位アカウントのイシュアンスを保有することが承認されています。
lsfHighAuth0x00080000524288tfSetAuth高位アカウントにより、低位アカウントが高位アカウントのイシュアンスを保有することが承認されています。
lsfLowNoRipple0x001000001048576tfSetNoRipple低位アカウントで、このトラストラインから、同じアカウントのNoRippleフラグが設定されている他のトラストラインへのRipplingが無効化されています
lsfHighNoRipple0x002000002097152tfSetNoRipple高位アカウントで、このトラストラインから、同じアカウントのNoRippleフラグが設定されている他のトラストラインへのRipplingが無効化されています
lsfLowFreeze0x004000004194304tfSetFreeze低位アカウントがトラストラインを凍結しており、高位アカウントから資産を移動できません。
lsfHighFreeze0x008000008388608tfSetFreeze高位アカウントがトラストラインを凍結しており、低位アカウントから資産を移動できません。

トラストラインによって接続された2つのアカウントは、TrustSetトランザクションを使用して、それぞれの設定を変更することができます。

RippleStateの準備金

RippleStateエントリは、接続するアカウントの一方または両方の所有者準備金の対象の1つとしてカウントされます。一般的なケースでは、トークンの所有者は準備金を支払う必要があり、トークンの発行者は準備金を支払いません。

特に、そのアカウントがトラストラインをデフォルト以外の状態に変更した場合、そのエントリはアカウントの準備金にカウントされます。lsfLowReserveフラグとlsfHighReserveフラグは、どのアカウントが所有者の準備金に責任を持つかを示します。プロトコルはトラストラインを変更すると自動的にこれらのフラグを設定します。

トラストラインのデフォルト以外の状態に反映される値は以下の通りです。

高位アカウントに責任がある場合の条件低位アカウントに責任がある場合の条件
Balanceがマイナスである(高位アカウントが通貨を保有している)Balanceがプラスである(低位アカウントが通貨を保有している)
HighLimit0ではないLowLimit0ではない
LowQualityIn0でも1000000000でもないHighQualityIn0でも1000000000でもない
LowQualityOut0でも 1000000000でもないHighQualityOut0でも1000000000でもない
lsfHighNoRippleフラグがデフォルト状態ではないlsfLowNoRippleフラグがデフォルト状態ではない
lsfHighFreezeフラグが有効であるlsfLowFreezeフラグが有効である

**lsfLowAuth**フラグと **lsfHighAuth**フラグは無効にできないため、デフォルト状態に不利に作用することはありません。

2つのNoRippleフラグのデフォルト状態は、対応するAccountRootオブジェクトのlsfDefaultRippleフラグの状態によって異なります。DefaultRippleが無効の場合(デフォルト)、アカウントのすべてのトラストラインのlsfNoRippleフラグはデフォルトで 有効 となります。アカウントがDefaultRippleを有効にすると、アカウントのトラストラインのlsfNoRippleフラグはデフォルトで 無効 となります(Ripplingが有効になります)。

注記: rippledバージョン0.27.3(2015年3月10日)にてDefaultRippleフラグが導入される前は、すべてのトラストラインはデフォルトで両方のNoRippleフラグが無効になっていました(Ripplingは有効)。

XRP Ledgerは遅延評価を使用して所有者準備金を計算しています。つまり、アカウントがDefaultRippleフラグを変更してそのすべてのトラストラインのデフォルト状態を変更しても、変更後しばらくの間はアカウントの準備金が同じ状態で維持されます。アカウントがトラストラインを変更すると、プロトコルは個々のトラストラインがデフォルト状態にあるか否かや、所有者準備金への資金供給の必要性を再評価します。

RippleState IDのフォーマット

RippleStateオブジェクトのIDは、以下の値がこの順序で連結されているSHA-512ハーフです。

  • RippleStateスペースキー(0x0072
  • 低位アカウントのAccountID
  • 高位アカウントのAccountID
  • トラストラインの160ビットの通貨コード