通貨フォーマット

XRP Ledgerには2種類の通貨(XRP発行済み通貨)があります。XRP Ledgerでは、これらの通貨のフォーマットは異なりますが、いずれの通貨も高精度です。

文字列フォーマット

XRP Ledger APIs generally use strings, rather than native JSON numbers, to represent numeric amounts of currency for both XRP and issued currencies. This protects against a loss of precision when using JSON parsers, which may automatically try to represent all JSON numbers in a floating-point format. Within the String value, the numbers are serialized in the same way as native JSON numbers:

  • Base-10.
  • Non-zero-prefaced.
  • May contain . as a decimal point. For example, ½ is represented as 0.5. (American style, not European)
  • May contain E or e to indicate being raised to a power of 10 (scientific notation). For example, 1.2E5 is equivalent to 1.2×105, or 120000.
  • No comma (,) characters are used.

XRPの精度

XRPの精度は、64ビット符号なし整数と同等であり、各単位は0.000001 XRPと同等です。プロパティは次の通りです。

  • 最小値: 0
  • 最大値: 100000000000(1011)XRP
    • "100000000000000000"(1017) dropのXRP
  • 0.000001(10-6)XRPに近い精度
    • "1" dropのXRP

発行済み通貨の精度

XRP Ledgerの発行済み通貨は、以下の精度のカスタムフォーマットで表現されます。

  • 非ゼロの最小絶対値: 1000000000000000e-96
  • 最大値: 9999999999999999e80
  • 最小値: -9999999999999999e80
  • 10進15桁の精度

発行済み通貨の計算

[ソース]

発行済み通貨額フォーマットの図

rippled内部では発行済み通貨の数値はカスタムの数値フォーマットで表現されます。このフォーマットではさまざまな資産(一般的にごく小さな単位または極めて大きな単位で測定される資産を含む)を保管できます。このフォーマットでは、有効数字と10のべき乗の指数を科学的記数法と同様の方法で使用します。このフォーマットは、指定された範囲内のプラスまたはマイナスの有効桁数と指数に対応しています。非整数値の一般的な浮動小数点表記とは異なり、このフォーマットでは整数を用いて計算します。このため、常に15桁の精度が維持されます。乗算と除算には、最下位の有効数字の丸め過ぎを補う調整機能があります。

「任意精度」の数値フォーマットとは異なり、カスタムフォーマットは64ビットの固定サイズで格納できます。このようにシリアル化される場合、このフォーマットは「非XRP」ビット、符号ビット、有効桁数、指数で構成されます。これらは次の順で表示されます。

  1. 発行済み通貨額の1番目のビット(最上位ビット)は、XRPの額ではないことを示す1です。(XRPの額である場合、最上位ビットは常に0に設定され、このフォーマットからXRPの額が区別されます。)
  2. 符号ビットは、金額のプラスマイナスを示します。標準的な2の補数で表される 整数とは異なり、1 はXRP Ledgerフォーマットではプラスを示し0はマイナスを示します。
  3. 次の8ビットは、指数を符号なし整数で表しています。指数は、小数点以下桁数(有効桁数に乗算する10のべき乗)を-96以上+80以下の範囲で示します。ただしシリアル化では、この指数に97を加算して符号なし整数としてシリアル化できるようにします。したがってシリアル化された値が1の場合は指数-96、シリアル化された値が177の場合は指数80を示します。
  4. 残りの54ビットは、有効数字を符号なし整数で表します。シリアル化では、値0の特殊なケースを除き、この値は10151000000000000000)以上1016-1(9999999999999999)以下の範囲で正規化されます。値0の特殊なケースがあります。この場合符号ビット、指数、および仮数はすべてゼロであるため、64ビット値は0x8000000000000000000000000000000000000000としてシリアル化されます。

通貨コード

XRP LedgerのXRP以外の通貨には160ビットの通貨コードがあります。rippledAPIでは、標準マッピングを使用して3文字のASCII文字列(大文字と小文字の区別あり)が160ビットの通貨コードにマッピングされます。通貨コードXRPは発行済み通貨には使用できません。同一コードの通貨は接続トラストラインを通じてrippleできます。通貨コードには、XRP Ledgerに組み込まれるその他の動作はありません。

標準通貨コード

標準通貨マッピングによりビットが次のように割り当てられます。

標準通貨コードのフォーマット

  1. 最初の8ビットは0x00でなければなりません。
  2. 次の88ビットは予約済みであり、すべて0です。
  3. 次の24ビットは3つのASCII文字を表します。 ISO 4217 コードまたはよく利用されている疑似ISO 4217コード(BTCなど)の使用が推奨されます。ただし、すべての大文字と小文字、桁数、および記号?!@#$%^&*<>(){}[]、および|の組み合わせを使用できます。通貨コードXRP(すべて大文字)はXRP用に予約されており、発行済み通貨には使用できません。
  4. 次の40ビットは予約済みであり、すべて0です。

通常、XRP額の指定時には通貨コードは使用しません。フィールドにXRPの通貨コードが指定されている稀なケースでは、通貨コードのバイナリ形式はすべてゼロになります。

非標準通貨コード

通貨コードとして160ビット(40文字)16進文字列(例: 015841551A748AD2C1F76FF6ECB0CCCD00000000)を使用して、その他のタイプの通貨を発行することもできます。異なる通貨コードタイプとして扱われないようにするには、先頭8ビットが0x00であってはなりません。

廃止予定: 一部の旧バージョンのripple-lib では通貨コードタイプとして「有利子」または「マイナス利子」がサポートされていました。これらの通貨の先頭8ビットは0x01です。マイナス利子/有利子通貨はサポートされなくなりましたが、レジャーデータにこのような通貨が現れることがあります。詳しくは、マイナス利子を参照してください。