通貨フォーマット
XRP Ledgerには2種類の通貨、XRPとトークンがあります。XRP Ledgerでは、これらの通貨のフォーマットは異なりますが、どちらも高精度です。
比較
以下の表は、XRP LedgerにおけるXRPとトークンの違いをまとめたものです。
XRP | トークン |
---|---|
発行者は存在しません。 | XRP Ledgerのアカウントから発行されます。 |
文字列形式で指定します。 | オブジェクト形式で指定します。 |
アカウントに記録されます。 | トラストラインに記録されます。 |
バーンするのみで作成することはできません。 | 自由に発行・償還が可能です。 |
最小値: 0 (負の値はありません) | 最小値: -9999999999999999e80 ゼロでない絶対値の最小値: 1000000000000000e-96 |
最大値 100000000000 (1011) XRP (100000000000000000 (1017) "drops") | 最大値 9999999999999999e80 |
最小の精度: "drop" (0.000001 XRP) | 小数点以下15桁の精度 |
凍結できません | 発行者は残高を凍結することができます |
送金手数料はかかりません。XRP同士の支払いは常に直接行われます | 間接的なパスを取ることができ、各発行者は一定の送金手数料を請求できます |
ペイメントチャンネルとエスクローで使用できます | ペイメントチャネルやエスクローには対応していません |
通貨額の指定
指定する通貨の適した形式を使用してください。
XRPの金額
XRPの金額はdropの値(1XRP = 1,000,000drop)で文字列フォーマットで表します。これは0.000001(百万分の1)のXRPと等価です。したがって、JSONで13.1 XRPを表示するには、次のように書きます。
"13100000"
XRPをオブジェクト形式で指定しないでください。
XRPの金額は負になることはありません。
トークンの金額
(代替可能な)トークンの金額を指定するには、Amountオブジェクトを使用します。これは、3つのフィールドを持つJSONオブジェクトです。
Field | 型 | 説明 |
---|---|---|
currency | 文字列 - 通貨コード | トークンの任意の通貨コード。XRP は使用できません。 |
value | 文字列フォーマット | トークンの金額を10進数で表します。1.23e11は123,000,000,000を意味します。e と E の両方を使用することができます。残高を表示する場合には負の値を指定することができますが、送信金額を指定する場合などには負の値を指定することはできません。 |
issuer | 文字列 | 一般的には、このトークンを発行するアカウントを指します。特殊なケースでは、トークンを保持しているアカウントを指します(例えば、Clawbackトランザクションの場合など)。 |
例えば、アカウントr9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59
によって発行された$153.75 USドルは、以下のように指定します。
{ "currency": "USD", "value": "153.75", "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59" }
金額なしでの通貨の指定
場合によっては、分散型取引所でオーダーブックを指定するときなど、特定の金額なしで資産(XRPやトークン)を定義する必要があります。
金額なしでトークンを記述するには、通貨オブジェクトとして指定し、value
フィールドを省略します。例えば
{ "currency": "TST", "issuer": "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd" }
XRPを金額なしで記述するには、JSONオブジェクトとしてcurrency
フィールドのみを指定してください。XRPのissuer
フィールドは含めないでください。例えば
{ "currency": "XRP" }
文字列フォーマット
XRP LedgerのAPIでは、XRPとトークンの両方で、通貨の金額を数値で表現するために、JSONのネイティブの数値ではなく文字列を使用します。これは、JSONパーサーが自動的にすべてのJSON数値を浮動小数点形式で表現しようとする可能性がある場合に、精度の低下を防ぐためです。String値の中では、数値はネイティブのJSON数値と同じ方法で処理されます。
- 10進数
- ゼロの接頭辞なし
- 小数点として
.
を含むことができます。例えば、½は0.5
と表されます - 負の金額は
-
から始まります E
またはe
は10の累乗(科学的記数法)を表します。例えば1.2E5
は1.2×105つまり120000
と同じです。負の指数も可能です。- カンマ(
,
)は使用しません。
XRPの精度
XRPは64ビットの符号なし整数と同じ精度を持ち、各単位は0.000001 XRPに相当します。XRPは整数計算を使用するため、1dropに満たない金額は切り捨てられます。
トークンの精度
トークンは、一般的に非常に小さい額や非常に大きい額で取引されるものを含め、さまざまな資産を表すことができます。このフォーマットは、科学的記数法と同様に、有効数字と10の累乗指数を使用します。このフォーマットは、指定された範囲内で有効数字の正負と指数をサポートしています。整数でない数の一般的な浮動小数点表現とは異なり、この形式ではすべての計算に整数演算を使用するため、常に小数点以下15桁の精度を維持します。掛け算と割り算には、最下位桁の丸めすぎを補正する調整があります。
XRP Ledgerのピアツーピアネットワークでトークンの金額を送信する場合、サーバは金額を64ビットのバイナリ値にシリアライズします。
ヒント: 分割不可能なトークンについては、非代替性トークン(NFT)をご覧ください。
通貨コード
HTTP / WebSocket APIは、2種類の通貨コードをサポートしています。
- 標準通貨コード:
"EUR"
や"USD"
のような3文字の文字列 - 非標準通貨コード:
"0158415500000000C1F76FFF6ECB0BAC600000000"
のような160ビットの16進数の文字列。これは一般的ではありません。
同じコードを持つトークンは、接続されたトラストラインを越えてrippling(波及)することができます。通貨コードには、XRP Ledgerに組み込まれた他の動作はありません。
標準通貨コード
通貨コードの標準フォーマットはUSD
のような3文字の文字列です。これはISO 4217 Currency Codesで使用するためのものです。以下のルールがあります。
- 通貨コードの長さは正確に3文字のASCII文字でなければなりません。すべての大文字と小文字、桁数、および記号
?
、!
、@
、#
、$
、%
、^
、&
、*
、<
、>
、(
、)
、{
、}
、[
、]
、および|
の組み合わせが利用可能です。 - 通貨コードは大文字と小文字を区別します。
- 通貨コード
XRP
(すべて大文字)は使用できません。ネイティブトークンとしてのXRPは通常、XRP Ledgerプロトコルでは通貨コードを使用しません。
プロトコルレベルでは、このフォーマットはシリアライズされ、0x00
で始まる160ビットのバイナリ値になります。
非標準通貨コード
また、015841551A748AD2C1F76FF6ECB0CCD000000
のような160ビット(40文字)の16進文字列を通貨コードとして使用することもできます。これが「標準的な」通貨コードとして扱われるのを防ぐために、最初の8ビットは0x00
にしてはいけません (MUST NOT)。
廃止予定: 一部の旧バージョンのripple-libでは通貨コードの種類として「有利子」または「マイナス利子」がサポートされていました。これらの通貨の先頭8ビットは0x01
です。マイナス利子/有利子通貨はサポートされなくなりましたが、レジャーデータにこのような通貨が現れることがあります。詳しくは、マイナス利子をご覧ください。