# 基本的なデータ型

さまざまなタイプのオブジェクトがそれぞれ異なる方法で一意に識別されます。

[アカウント](accounts.html)は[アドレス][]で識別されます。例えば、`"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"`など。アドレスは常に「r」で始まります。`rippled`メソッドの多くは、16進数表記に対応しています。

[トランザクション](transaction-formats.html)は、トランザクションのバイナリフォーマットの[ハッシュ][]で識別されます。また、トランザクションは送信アカウントと[シーケンス番号][]でも識別できます。

閉鎖された各[レジャー](ledger-data-formats.html)は、[レジャーインデックス][]と[ハッシュ][]値を保有します。[レジャーを指定する](#レジャーの指定)場合、いずれか1つを使用できます。

## アドレス
[アドレス]: #アドレス

{% include '_snippets/data_types/address.ja.md' %}
<!--{#_ #}-->


## ハッシュ
[ハッシュ]: #ハッシュ

{% include '_snippets/data_types/hash.ja.md' %}
<!--{#_ #}-->

### ハッシュプレフィクス
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/HashPrefix.h "Source")

多くの場合、XRP Ledgerではオブジェクトのバイナリデータに4バイトのプレフィクスを付けてからハッシュを計算するため、異なるタイプのオブジェクトが同じバイナリフォーマットである場合でも、異なるハッシュが設定されます。既存の4バイトコードは、ASCIIでエンコードされた英字3文字の後に0バイトが続く構成となっています。

ある種のハッシュは、APIの要求と応答に使用されます。またある種のデータに署名するときの最初のステップで計算されるだけのものや、より高度なハッシュを計算するためのものもあります。XRP Ledgerで使用されるすべての4バイトのハッシュプレフィクスは以下の表の通りです。

| オブジェクトタイプ                           | APIフィールド                           | ハッシュプレフィクス（16進数） | ハッシュプレフィクス（テキスト） |
|:--------------------------------------|:-------------------------------------|:------------------|:--|
| コンセンサスの提案                    | なし                                  | `0x50525000`      | `PRP\0` |
| レジャーバージョン                        | `ledger_hash`                        | `0x4C575200`      | `LWR\0` |
| レジャー状態データ                     | `account_state` （[レジャーヘッダー][]内） | `0x4D4C4E00`      | `MLN\0` |
| レジャーデータ内部ノード                | なし                                  | `0x4D494E00`      | `MIN\0` |
| レジャーデータ内部ノード（[SHAMapv2][]） | なし                                  | `0x494E5200`      | `INR\0` |
| Payment Channelのクレーム                 | なし                                  | `0x434C4D00`      | `CLM\0` |
| 署名済みのトランザクション                    | トランザクションの`hash`               | `0x54584E00`      | `TXN\0` |
| メタデータを持つトランザクション             | なし                                  | `0x534E4400`      | `SND\0` |
| 未署名のトランザクション（シングル署名） | なし                                  | `0x53545800`      | `STX\0` |
| 未署名のトランザクション（マルチ署名）  | なし                                  | `0x534D5400`      | `SMT\0` |
| 検証の投票                       | なし                                  | `0x56414C00`      | `VAL\0` |
| バリデータサブキー認証（「バリデータマニフェスト」） | なし                  | `0x4D414E00`      | `MAN\0` |

[レジャーヘッダー]: ledger-header.html
[SHAMapv2]: known-amendments.html#shamapv2

[レジャーオブジェクトID](ledger-object-ids.html)も似た方法で計算されますが、ここで説明したプレフィクスの代わりに「スペースキー」という2バイトのプレフィクスを使用します。


## アカウントシーケンス
[シーケンス番号]: #アカウントシーケンス

{% include '_snippets/data_types/account_sequence.ja.md' %}
<!--{#_ #}-->


## レジャーインデックス
[レジャーインデックス]: #レジャーインデックス

{% include '_snippets/data_types/ledger_index.ja.md' %}
<!--{#_ #}-->


### レジャーの指定

APIメソッドの多くは、レジャーのインスタンスを指定する必要があります。その場合、共有されたレジャーの特定バージョンで最新と見なされるデータで指定する必要があります。レジャーバージョンを受け入れるコマンドは、すべて同様に機能します。使用するレジャーを指定するには、以下の3つの方法があります。

1. `ledger_index`パラメーターにレジャーの[レジャーインデックス][]を指定します。閉鎖された各レジャーには識別用のレジャーインデックスが付いていて、その前に検証されたレジャーより1つ大きい番号になります。（最初のレジャーのインデックスは1です。）
2. `ledger_hash`パラメーターにレジャーの[ハッシュ][]値を指定します。
3. `ledger_index`パラメーターに以下のいずれかのショートカットを指定します。
    * `validated`: ネットワーク全体で検証された最新のレジャー
    * `closed`: 変更できないように閉鎖され、検証を提案されている最新のレジャー
    * `current`: サーバーで現在処理中のレジャーバージョン

上記3つのフォーマットすべてを受け入れる、廃止予定の`ledger`パラメーターもあります。このパラメーターは使用*しないでください*。今後予告なしに廃止される可能性があります。

レジャーを指定しない場合、デフォルトで`current`（処理中）レジャーが選択されます。レジャーを指定するフィールドを複数指定した場合、廃止予定の`ledger`フィールドが最初に使用され（存在する場合）、`ledger_hash`に戻ります。`ledger_index`フィールドは、他の2つのフィールドがいずれも存在しない場合を除いて無視されます。

**注記:** レジャーを指定する際に上記のデフォルトの動作に頼らないでください。変更される場合があります。可能であれば、常に要求にてレジャーバージョンを指定してください。


## 通貨

XRP Ledgerには2種類の通貨があります。XRPとその他のあらゆる通貨です。この2つには多くの相違点があります。

| `XRP`                                                           | 発行済み通貨 |
|:----------------------------------------------------------------|:-----------|
| 発行者なし                                                  | 必ずXRP Ledgerアカウントが発行 |
| 文字列として指定                                           | オブジェクトとして指定 |
| [アカウント](accountroot.html)内で追跡 | [トラストライン](ripplestate.html)内で追跡 |
| 作成は一切不可、消却のみ可能                     | 自由に発行または清算可能 |
| 最大値: `100000000000`（`1e11`）                           | 最大値: `9999999999999999e80` |
| [「drop」](#xrp)（0.000001 XRP）に近い精度            | 10進15桁の精度で非ゼロの最少絶対値は `1000000000000000e-96` |

**注意:** XRP Ledgerでは、通常の浮動小数点数とは異なる精度の小数点計算を使用するため、通貨額は常に文字列として表されます。

### 通貨額の指定

一部のAPIメソッドでは、通貨額を指定する必要があります。取扱通貨がネットワーク固有のXRP通貨であるかその他の通貨単位（_イシュアンス_）であるかによって、指定方法が大きく異なります。

#### XRP
[XRPのdrop数]: #xrp
[XRP、drop単位]: #xrp

XRPの額は文字列で表します。（XRPの精度は64ビット整数と同等ですが、JSON 整数は32ビットに制限されるため、JSON整数で表す場合はXRPがオーバーフローする恐れがあります。）XRPは正式には「drop」で指定します。これは0.000001（百万分の1）のXRPと等価です。したがって、JSON文書で1.0 XRPを表示するには、次のように書きます。

```
"1000000"
```

**XRPをオブジェクトに指定しないでください。**

単体テストでは、XRPの値（dropではありません）を小数点を使用して指定できます。例えば、「1.23」は1.23 XRPを意味します。それ以外のすべての場合では、XRPは常にdrop単位で指定し、小数点は使用しません。例えば、「1230000」は1.23 XRPを意味します。

#### 非XRP

XRP以外の通貨（法定通貨としてのドル、貴金属、暗号資産、その他のカスタム通貨を含む）を指定する場合、通貨指定オブジェクトを使用して指定する必要があります。以下は、3つのフィールドを持つJSONオブジェクトです。

| `Field`    | 型                       | 説明                        |
|:-----------|:---------------------------|:-----------------------------------|
| `currency` | 文字列 - [通貨コード][] | 通貨を発行するための任意コード。`XRP`は使用できません。 |
| `value`    | 文字列                     | 通貨の金額を表す引用符付き10進数表記。これには科学的記数法が含まれ、例えば`1.23e11`は123,000,000,000を意味します。`e`と`E`のどちらも使用できます。 |
| `issuer`   | 文字列                     | 通貨を発行する組織の一意のアカウントアドレス。つまり、通貨を清算できる個人または企業です。 |

**注意:** これらのフィールド名は大文字小文字の区別があります。

例えば、アカウント`r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59`によって発行された$153.75 USドルは、以下のように指定します。

```
{
    "currency": "USD",
    "value": "153.75",
    "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"
}
```

単体テストでは、非XRP通貨の金額値をスラッシュで区切られた文字列で指定できます。例えば、`"amount/currency/issuer"`のフォーマットになります。その他すべての場合では、前述のJSONオブジェクトのフォーマットを使用する必要があります。

#### 金額なしでの通貨の指定

XRP以外の通貨を金額なしで指定する場合は（主に、通貨取引オファーのオーダーブックを定義する場合など）、上記のように指定しますが、`value`フィールドは省略します。

XRPを金額なしで指定する場合は（主に、オーダーブックを定義する場合など）、JSONオブジェクトとして指定しますが、使用するフィールドは`currency`フィールド _のみ_ です。XRPの場合は`issuer`フィールドを指定してはいけません。

最後に、支払いの受取人アカウントが複数のイシュアー（通貨発行者）を信頼している場合は、受取人が受け入れているイシュアーがどのように組み合わされても支払いが行われるように指定できます。これを行うには、受取人アカウントのアドレスをJSONオブジェクトに`issuer`値として指定します。

### 通貨コード
[通貨コード]: #通貨コードs

{% include '_snippets/data_types/currency_code.ja.md' %}
<!--{#_ #}-->


## 時間の指定

`rippled`サーバーとそのAPIでは、時間を符号なし整数で表します。この数値は、「Rippleエポック」である2000年1月1日（00:00 UTC）から経過した秒数を表しています。これは[UNIXエポック](http://en.wikipedia.org/wiki/Unix_time)と同様に機能しますが、RippleエポックはUNIXエポックより946684800秒遅れています。

Rippleエポック時間を32ビット変数でUNIXエポック時間に変換しないでください。整数のオーバーフローが発生する恐れがあります。

<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}			
{% include '_snippets/tx-type-links.md' %}			
{% include '_snippets/rippled_versions.md' %}
