# 通貨フォーマット XRP Ledgerには2種類の通貨、XRPと[トークン](/ja/docs/concepts/tokens)があります。XRP Ledgerでは、これらの通貨のフォーマットは異なりますが、どちらも高精度です。 ## 比較 以下の表は、XRP LedgerにおけるXRPとトークンの違いをまとめたものです。 | XRP | トークン | | --- | --- | | 発行者は存在しません。 | XRP Ledgerのアカウントから発行されます。 | | 文字列形式で指定します。 | オブジェクト形式で指定します。 | | [アカウント](/ja/docs/references/protocol/ledger-data/ledger-entry-types/accountroot)に記録されます。 | [トラストライン](/ja/docs/references/protocol/ledger-data/ledger-entry-types/ripplestate)に記録されます。 | | バーンするのみで作成することはできません。 | 自由に発行・償還が可能です。 | | 最小値: `0` (負の値はありません) | 最小値: `-9999999999999999e80` ゼロでない絶対値の最小値: `1000000000000000e-96` | | 最大値 `100000000000` (1011) XRP (`100000000000000000` (1017) "drops") | 最大値 `9999999999999999e80` | | 最小の精度: "drop" (0.000001 XRP) | 小数点以下15桁の精度 | | [フリーズ](/ja/docs/concepts/tokens/fungible-tokens/freezes)できません | 発行者は残高を[フリーズ](/ja/docs/concepts/tokens/fungible-tokens/freezes)することができます | | 送金手数料はかかりません。XRP同士の支払いは常に直接行われます | 間接的な[パス](/ja/docs/concepts/tokens/fungible-tokens/paths)を取ることができ、各発行者は一定の[送金手数料](/ja/docs/concepts/tokens/fungible-tokens/transfer-fees)を請求できます | | [ペイメントチャンネル](/ja/docs/concepts/payment-types/payment-channels)と[エスクロー](/ja/docs/concepts/payment-types/escrow)で使用できます | ペイメントチャネルやエスクローには対応していません | 詳しくは [XRPとは?](/ja/docs/introduction/what-is-xrp)や[トークン](/ja/docs/concepts/tokens)をご覧ください。 ## 通貨額の指定 指定する通貨の適した形式を使用してください。 - [XRPの金額](#xrp%E3%81%AE%E9%87%91%E9%A1%8D) - [トークンの金額](#%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E9%87%91%E9%A1%8D) ### XRPの金額 XRPの金額はdropの値(1XRP = 1,000,000drop)で[文字列フォーマット](#%E6%96%87%E5%AD%97%E5%88%97%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88)で表します。これは0.000001(百万分の1)のXRPと等価です。したがって、JSONで13.1 XRPを表示するには、次のように書きます。 ``` "13100000" ``` **XRPをオブジェクト形式で指定しないでください。** XRPの金額は負になることはありません。 ### トークンの金額 [(代替可能な)トークン](/ja/docs/concepts/tokens)の金額を指定するには、Amountオブジェクトを使用します。これは、3つのフィールドを持つJSONオブジェクトです。 | `Field` | 型 | 説明 | | --- | --- | --- | | `currency` | 文字列 - [通貨コード](#%E9%80%9A%E8%B2%A8%E3%82%B3%E3%83%BC%E3%83%89) | トークンの任意の通貨コード。`XRP`は使用できません。 | | `value` | [文字列フォーマット](#%E6%96%87%E5%AD%97%E5%88%97%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88) | トークンの金額を10進数で表します。1.23e11`は123,000,000,000を意味します。e` と `E` の両方を使用することができます。残高を表示する場合には負の値を指定することができますが、送信金額を指定する場合などには負の値を指定することはできません。 | | `issuer` | 文字列 | 一般的には、このトークンを発行する[アカウント](/ja/docs/concepts/accounts)を指します。特殊なケースでは、トークンを保持しているアカウントを指します(例えば、[Clawback](/ja/docs/references/protocol/transactions/types/clawback)トランザクションの場合など)。 | これらのフィールド名は大文字小文字の区別があります。 例えば、アカウント`r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59`によって発行された$153.75 USドルは、以下のように指定します。 ```json { "currency": "USD", "value": "153.75", "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59" } ``` ### 金額なしでの通貨の指定 場合によっては、[分散型取引所](/ja/docs/concepts/tokens/decentralized-exchange)でオーダーブックを指定するときなど、特定の金額なしで資産(XRPやトークン)を定義する必要があります。 金額なしでトークンを記述するには、通貨オブジェクトとして指定し、`value`フィールドを省略します。例えば ```json { "currency": "TST", "issuer": "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd" } ``` XRPを金額なしで記述するには、JSONオブジェクトとして`currency`フィールドのみを指定してください。XRPの`issuer`フィールドは含めないでください。例えば ```json { "currency": "XRP" } ``` ## 文字列フォーマット XRP LedgerのAPIでは、[XRP](/ja/docs/introduction/what-is-xrp)と[トークン](/ja/docs/concepts/tokens)の両方で、通貨の金額を数値で表現するために、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ビットのバイナリ値に[シリアライズ](/ja/docs/references/protocol/binary-format)します。 **ヒント:** 分割不可能なトークンについては、[非代替性トークン(NFT)](/ja/docs/concepts/tokens/nfts)をご覧ください。 ## 通貨コード [HTTP / WebSocket API](/ja/docs/references/http-websocket-apis)は、2種類の通貨コードをサポートしています。 - **[標準通貨コード](/ja/docs/references/protocol/data-types/currency-formats#%E6%A8%99%E6%BA%96%E9%80%9A%E8%B2%A8%E3%82%B3%E3%83%BC%E3%83%89):** `"EUR"`や`"USD"`のような3文字の文字列 - **[非標準通貨コード](/ja/docs/references/protocol/data-types/currency-formats#%E9%9D%9E%E6%A8%99%E6%BA%96%E9%80%9A%E8%B2%A8%E3%82%B3%E3%83%BC%E3%83%89):** `"0158415500000000C1F76FFF6ECB0BAC600000000"`のような160ビットの16進数の文字列。これは一般的ではありません。 同じコードを持つトークンは、接続されたトラストラインを越えて[rippling(波及)](/ja/docs/concepts/tokens/fungible-tokens/rippling)することができます。通貨コードには、XRP Ledgerに組み込まれた他の動作はありません。 ### 標準通貨コード 通貨コードの標準フォーマットは`USD`のような3文字の文字列です。これは[ISO 4217 Currency Codes](https://www.xe.com/iso4217.php)で使用するためのものです。以下のルールがあります。 - 通貨コードの長さは正確に3文字のASCII文字でなければなりません。すべての大文字と小文字、桁数、および記号`?`、`!`、`@`、`#`、`$`、`%`、`^`、`&`、`*`、`<`、`>`、`(`、`)`、`{`、`}`、`[`、`]`、および|の組み合わせが利用可能です。 - 通貨コードは大文字と小文字を区別します。 - 通貨コード`XRP`(すべて大文字)は使用できません。ネイティブトークンとしてのXRPは通常、XRP Ledgerプロトコルでは通貨コードを使用しません。 プロトコルレベルでは、このフォーマットは[シリアライズ](/ja/docs/references/protocol/binary-format#%E9%80%9A%E8%B2%A8%E3%82%B3%E3%83%BC%E3%83%89)され、`0x00`で始まる160ビットのバイナリ値になります。 ### 非標準通貨コード また、`015841551A748AD2C1F76FF6ECB0CCD000000`のような160ビット(40文字)の16進文字列を通貨コードとして使用することもできます。これが「標準的な」通貨コードとして扱われるのを防ぐために、最初の8ビットは`0x00`にしてはいけません (MUST NOT)。 **廃止予定:** 一部の旧バージョンの[ripple-lib](https://github.com/XRPLF/xrpl.js)では通貨コードの種類として「有利子」または「マイナス利子」がサポートされていました。これらの通貨の先頭8ビットは`0x01`です。マイナス利子/有利子通貨はサポートされなくなりましたが、レジャーデータにこのような通貨が現れることがあります。詳しくは、[マイナス利子](/ja/docs/concepts/tokens/fungible-tokens/demurrage)をご覧ください。