# book_changes

[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/BookChanges.h)

 メソッドは、[分散型取引所（DEX）](/ja/docs/concepts/tokens/decentralized-exchange) のオーダーブックの変更に関する情報を、以前のレジャーバージョンと比較して提供します。これは「ローソク足」チャートの作成に役立つ場合があります。

### リクエストのフォーマット

リクエストの例:

WebSocket

```json
{
    "id": "example_book_changes",
    "command": "",
    "ledger_index": 88530953
}
```

JSON-RPC

```json
{
    "method": "",
    "params": [{
      "ledger_index": 88530953
    }]
}
```

コマンドライン

```sh
#Syntax: book_changes [<ledger hash|id>]
rippled book_changes 88530953
```

リクエストには以下のパラメーターが含まれます。

| フィールド | 型 | 必須? | 説明 |
|  --- | --- | --- | --- |
| `ledger_hash` | [ハッシュ](/ja/docs/references/protocol/data-types/basic-data-types#%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5) | いいえ | 使用するレジャーバージョンの32バイトの16進文字列。(詳しくは[レジャーの指定](/ja/docs/references/protocol/data-types/basic-data-types#%E3%83%AC%E3%82%B8%E3%83%A3%E3%83%BC%E3%81%AE%E6%8C%87%E5%AE%9A)をご覧ください。) |
| `ledger_index` | [レジャーインデックス](/ja/docs/references/protocol/data-types/basic-data-types#%E3%83%AC%E3%82%B8%E3%83%A3%E3%83%BC%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) | いいえ | 使用するレジャーの[レジャーインデックス](/ja/docs/references/protocol/data-types/basic-data-types#%E3%83%AC%E3%82%B8%E3%83%A3%E3%83%BC%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9)、または自動的にレジャーを選択するためのショートカット文字列。([レジャーの指定](/ja/docs/references/protocol/data-types/basic-data-types#%E3%83%AC%E3%82%B8%E3%83%A3%E3%83%BC%E3%81%AE%E6%8C%87%E5%AE%9A)) |


既知の問題
`rippled`のこのメソッドにいくつかの既知の問題があります。

- デフォルトまたはショートカット文字列を使用する代わりに、`ledger_index`または`ledger_hash`を明示的に指定する必要があります。([Issue #5034](https://github.com/XRPLF/rippled/issues/5034))
- JSON-RPC APIのレスポンスは、検証済みのレジャーをクエリする場合でも`validated`フィールドが欠落する可能性があります。([#5035](https://github.com/XRPLF/rippled/issues/5035))
- 最近閉じたレジャーをクエリする場合、成功したレスポンスが意図したデータの代わりにレジャーリクエストオブジェクトを返すことがあります。([#5033](https://github.com/XRPLF/rippled/issues/5033))
- 古いレジャーからデータをクエリする場合、サーバーが長時間（30秒以上）応答しない可能性があります。([#5036](https://github.com/XRPLF/rippled/issues/5036))


これらのバグはClioサーバーには適用されません。

## レスポンスのフォーマット

成功したレスポンスの例:

WebSocket

```json
{
    "result": {
      "type": "bookChanges",
      "ledger_hash": "7AB08A2415C10E07201521F3260F77ADFF4902A528EA66378E259A07767A24B9",
      "ledger_index": 88530953,
      "ledger_time": 771100891,
      "validated": true,
      "changes": [
        {
          "currency_a": "XRP_drops",
          "currency_b": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/CNY",
          "volume_a": "44082741",
          "volume_b": "158.6978676",
          "high": "277777.7777777778",
          "low": "277777.7777777778",
          "open": "277777.7777777778",
          "close": "277777.7777777778"
        },
        {
          "currency_a": "XRP_drops",
          "currency_b": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/XLM",
          "volume_a": "44191586",
          "volume_b": "217.6925474337355",
          "high": "202999.9948135647",
          "low": "202999.9948135647",
          "open": "202999.9948135647",
          "close": "202999.9948135647"
        },
        {
          "currency_a": "XRP_drops",
          "currency_b": "rf5YPb9y9P3fTjhxNaZqmrwaj5ar8PG1gM/47414C4100000000000000000000000000000000",
          "volume_a": "100000000",
          "volume_b": "1242.61659179386",
          "high": "80475.34586323083",
          "low": "80475.34586323083",
          "open": "80475.34586323083",
          "close": "80475.34586323083"
        },
        {
          "currency_a": "XRP_drops",
          "currency_b": "rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz/534F4C4F00000000000000000000000000000000",
          "volume_a": "33734",
          "volume_b": "0.1454210006367",
          "high": "231974.7481608686",
          "low": "231974.7481608686",
          "open": "231974.7481608686",
          "close": "231974.7481608686"
        },
        {
          "currency_a": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/CNY",
          "currency_b": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/USD",
          "volume_a": "158.6978670792",
          "volume_b": "21.76925474337",
          "high": "7.290000000001503",
          "low": "7.290000000001503",
          "open": "7.290000000001503",
          "close": "7.290000000001503"
        },
        {
          "currency_a": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/USD",
          "currency_b": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/XLM",
          "volume_a": "21.76925474337355",
          "volume_b": "217.6925474337355",
          "high": "0.1",
          "low": "0.1",
          "open": "0.1",
          "close": "0.1"
        }
      ]
    },
    "id": "example_book_changes",
    "status": "success",
    "type": "response",
    "warnings": [
      {
        "id": 2001,
        "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"
      }
    ]
  }
```

JSON-RPC

```json
200 OK

{
    "result" : {
       "changes" : [
          {
             "close" : "277777.7777777778",
             "currency_a" : "XRP_drops",
             "currency_b" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/CNY",
             "high" : "277777.7777777778",
             "low" : "277777.7777777778",
             "open" : "277777.7777777778",
             "volume_a" : "44082741",
             "volume_b" : "158.6978676"
          },
          {
             "close" : "202999.9948135647",
             "currency_a" : "XRP_drops",
             "currency_b" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/XLM",
             "high" : "202999.9948135647",
             "low" : "202999.9948135647",
             "open" : "202999.9948135647",
             "volume_a" : "44191586",
             "volume_b" : "217.6925474337355"
          },
          {
             "close" : "80475.34586323083",
             "currency_a" : "XRP_drops",
             "currency_b" : "rf5YPb9y9P3fTjhxNaZqmrwaj5ar8PG1gM/47414C4100000000000000000000000000000000",
             "high" : "80475.34586323083",
             "low" : "80475.34586323083",
             "open" : "80475.34586323083",
             "volume_a" : "100000000",
             "volume_b" : "1242.61659179386"
          },
          {
             "close" : "231974.7481608686",
             "currency_a" : "XRP_drops",
             "currency_b" : "rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz/534F4C4F00000000000000000000000000000000",
             "high" : "231974.7481608686",
             "low" : "231974.7481608686",
             "open" : "231974.7481608686",
             "volume_a" : "33734",
             "volume_b" : "0.1454210006367"
          },
          {
             "close" : "7.290000000001503",
             "currency_a" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/CNY",
             "currency_b" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/USD",
             "high" : "7.290000000001503",
             "low" : "7.290000000001503",
             "open" : "7.290000000001503",
             "volume_a" : "158.6978670792",
             "volume_b" : "21.76925474337"
          },
          {
             "close" : "0.1",
             "currency_a" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/USD",
             "currency_b" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/XLM",
             "high" : "0.1",
             "low" : "0.1",
             "open" : "0.1",
             "volume_a" : "21.76925474337355",
             "volume_b" : "217.6925474337355"
          }
       ],
       "ledger_hash" : "7AB08A2415C10E07201521F3260F77ADFF4902A528EA66378E259A07767A24B9",
       "ledger_index" : 88530953,
       "ledger_time" : 771100891,
       "status" : "success",
       "type" : "bookChanges"
    }
}
```

コマンドライン

```json
Loading: "/etc/opt/ripple/rippled.cfg"
2024-Jun-07 18:41:45.257772761 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005

{
    "result" : {
       "changes" : [
          {
             "close" : "277777.7777777778",
             "currency_a" : "XRP_drops",
             "currency_b" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/CNY",
             "high" : "277777.7777777778",
             "low" : "277777.7777777778",
             "open" : "277777.7777777778",
             "volume_a" : "44082741",
             "volume_b" : "158.6978676"
          },
          {
             "close" : "202999.9948135647",
             "currency_a" : "XRP_drops",
             "currency_b" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/XLM",
             "high" : "202999.9948135647",
             "low" : "202999.9948135647",
             "open" : "202999.9948135647",
             "volume_a" : "44191586",
             "volume_b" : "217.6925474337355"
          },
          {
             "close" : "80475.34586323083",
             "currency_a" : "XRP_drops",
             "currency_b" : "rf5YPb9y9P3fTjhxNaZqmrwaj5ar8PG1gM/47414C4100000000000000000000000000000000",
             "high" : "80475.34586323083",
             "low" : "80475.34586323083",
             "open" : "80475.34586323083",
             "volume_a" : "100000000",
             "volume_b" : "1242.61659179386"
          },
          {
             "close" : "231974.7481608686",
             "currency_a" : "XRP_drops",
             "currency_b" : "rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz/534F4C4F00000000000000000000000000000000",
             "high" : "231974.7481608686",
             "low" : "231974.7481608686",
             "open" : "231974.7481608686",
             "volume_a" : "33734",
             "volume_b" : "0.1454210006367"
          },
          {
             "close" : "7.290000000001503",
             "currency_a" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/CNY",
             "currency_b" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/USD",
             "high" : "7.290000000001503",
             "low" : "7.290000000001503",
             "open" : "7.290000000001503",
             "volume_a" : "158.6978670792",
             "volume_b" : "21.76925474337"
          },
          {
             "close" : "0.1",
             "currency_a" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/USD",
             "currency_b" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y/XLM",
             "high" : "0.1",
             "low" : "0.1",
             "open" : "0.1",
             "volume_a" : "21.76925474337355",
             "volume_b" : "217.6925474337355"
          }
       ],
       "ledger_hash" : "7AB08A2415C10E07201521F3260F77ADFF4902A528EA66378E259A07767A24B9",
       "ledger_index" : 88530953,
       "ledger_time" : 771100891,
       "status" : "success",
       "type" : "bookChanges"
    }
}
```

このレスポンスは[標準フォーマット](/ja/docs/references/http-websocket-apis/api-conventions/response-formatting)に従っており、正常に完了した場合は結果に次のフィールドが含まれます。

| フィールド | 型 | 説明 |
|  --- | --- | --- |
| `changes` | 配列 | このレジャーバージョンで更新された各オーダーブックの[Book Updateオブジェクト](#book-update%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88)のリスト。オーダーブックが更新されなかった場合、配列は空になります。 |
| `ledger_hash` | [ハッシュ](/ja/docs/references/protocol/data-types/basic-data-types#%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5) | このデータを取得する際に使用されたレジャーバージョンの識別ハッシュ。 |
| `ledger_index` | [レジャーインデックス](/ja/docs/references/protocol/data-types/basic-data-types#%E3%83%AC%E3%82%B8%E3%83%A3%E3%83%BC%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) | このデータを取得する際に使用されたレジャーバージョンのレジャーインデックス。 |
| `ledger_time` | 数値 | このデータを取得する際に使用されたレジャーバージョンの公式クローズ時間。[Rippleエポック以降の経過秒数](/ja/docs/references/protocol/data-types/basic-data-types#%E6%99%82%E9%96%93%E3%81%AE%E6%8C%87%E5%AE%9A)で表されます。 |
| `type` | 文字列 | 文字列`bookChanges`。これはオーダーブック更新メッセージであることを示します。 |
| `validated` | 真偽値 | *(省略可)* `true`の場合、検証済みのレジャーバージョンから取得されたことを表します。 |


### Book Updateオブジェクト

Book Updateオブジェクトは、1つのレジャーバージョンにおける1つのオーダーブックの変更を表し、次のフィールドを含みます。

| フィールド | 型 | 説明 |
|  --- | --- | --- |
| `currency_a` | 文字列 | オーダーブック内の2つの通貨のうちの最初の通貨の識別子。XRPの場合、これは文字列`XRP_drops`です。[トークン](/ja/docs/concepts/tokens)の場合、[base58](/ja/docs/references/protocol/data-types/base58-encodings)で表された発行者のアドレスの後にスラッシュ(`/`)が続き、その後に[通貨コード](/ja/docs/references/protocol/data-types/currency-formats#%E9%80%9A%E8%B2%A8%E3%82%B3%E3%83%BC%E3%83%89)が続きます。これは3文字の標準コードまたは20文字の16進コードになります。 |
| `currency_b` | 文字列 | オーダーブック内の2つの通貨のうちの2番目の通貨の識別子。これは`currency_a`と同じ形式ですが、`currency_b`はXRPになることはありません。 |
| `volume_a` | 文字列 - 数値 | このレジャーバージョンでこのオーダーブックの取引を通じて移動した最初の通貨（つまり`currency_a`）の総量、または *取引高*。 |
| `volume_b` | 文字列 - 数値 | このレジャーバージョンでこのオーダーブックの取引を通じて移動した2番目の通貨（つまり`currency_b`）の取引高。 |
| `high` | 文字列 - 数値 | このレジャーバージョンでこのオーダーブックの取引を通じてマッチしたすべてのオファーの中で最も高い取引レート。最初の通貨と2番目の通貨の比率として表されます。（つまり、`currency_a : currency_b`。） |
| `low` | 文字列 - 数値 | このレジャーバージョンでこのオーダーブックの取引を通じてマッチしたすべてのオファーの中で最も低い取引レート。最初の通貨と2番目の通貨の比率として表されます。 |
| `open` | 文字列 - 数値 | このレジャーバージョンでこのオーダーブックの取引を処理する前のオーダーブックの最初の取引の取引レート。最初の通貨と2番目の通貨の比率として表されます。 |
| `close` | 文字列 - 数値 | このレジャーバージョンでこのオーダーブックの取引を処理した後のオーダーブックの最初の取引の取引レート。最初の通貨と2番目の通貨の比率として表されます。 |


XRP-トークンのオーダーブックでは、XRPは常に`currency_a`で表されます。トークン-トークンのオーダーブックでは、発行者と通貨コードでアルファベット順に並べ替えられます。

XRPに関する取引レートは常に[XRPのdrop数](/ja/docs/references/protocol/data-types/basic-data-types#%E9%80%9A%E8%B2%A8%E9%A1%8D%E3%81%AE%E6%8C%87%E5%AE%9A)を使用して計算されます。例えば、XRPからFOOへのレートが1.0 XRP に対して 1 FOOの場合、APIによって報告されたレートは`1000000`（1 FOOあたり100万ドロップのXRP）になります。

## 考えられるエラー

* いずれかの[汎用エラータイプ](/ja/docs/references/http-websocket-apis/api-conventions/error-formatting#%E6%B1%8E%E7%94%A8%E3%82%A8%E3%83%A9%E3%83%BC)。
* `lgrNotFound` - `ledger_hash`または`ledger_index`で指定したレジャーが存在しないか、存在してはいるもののサーバが保有していません。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。