📚

xrpl.jsでAPIバージョンを指定する

2024/11/06に公開

xrpl.js

xrpl.jsはXRP Ledgerとのやりとりを行うためのJavaScript/TypeScriptライブラリです。
コミュニティによって最も活発に開発が行われているクライアントライブラリの一つであり、XRPL開発を始めるにあたっては一番おすすめのライブラリです。

APIバージョン

XRP Ledgerのコアコードであるrippledのバージョン2.0.0においてAPIバージョン2が導入されました。

https://github.com/XRPLF/rippled/blob/develop/API-CHANGELOG.md#api-version-2

rippledで利用されるデフォルトのAPIバージョンは1ですが、xrpl.jsの4.0.0以降ではAPIバージョン2がデフォルトとなっています。

https://github.com/XRPLF/xrpl.js/blob/main/packages/xrpl/HISTORY.md#400-2024-07-15

xrpl.jsにおいてもAPIバージョン1を利用したまま開発を行うにはどのようにすればよいでしょうか?

APIバージョン2(デフォルト)を利用する

まずは比較のため、デフォルトのAPIバージョン2を利用する場合のコードを見ていきましょう。

import { Client } from "xrpl";

const client = new Client("wss://xrplcluster.com");

await client.connect();

const response = await client.request({
  command: "account_info",
  account: "rQQQrUdN1cLdNmxH4dHfKgmX5P4kf3ZrM",
});
console.log(response.result)

xrpl.jsを触ったことがある人にとっては最も基本的なコードであることが分かると思います。

APIバージョン1を利用する

リクエスト毎にAPIバージョンを指定する

各リクエストのパラメータにapi_versionを指定することでAPIバージョンを指定することができます。

import { Client } from "xrpl";

const client = new Client("wss://xrplcluster.com");

await client.connect();

const response = await client.request({
  command: "account_info",
  account: "rQQQrUdN1cLdNmxH4dHfKgmX5P4kf3ZrM",
  api_version: 1, // 追加
});
console.log(response.result)

全てのリクエストにAPIバージョンを指定する

リクエストがデフォルトで利用するAPIバージョンの情報はClientクラスのインスタンスに格納されています。
これを変更することでAPIバージョン1を利用することができます。

import { Client } from "xrpl";

const client = new Client("wss://xrplcluster.com");

client.apiVersion = 1; // 追加

await client.connect();

const response = await client.request({
  command: "account_info",
  account: "rQQQrUdN1cLdNmxH4dHfKgmX5P4kf3ZrM",
});
console.log(response.result)

APIバージョン1のみをサポートするネットワークを利用する場合

apiVersionが1のみをサポートするネットワークを利用する場合、client.apiVersion = 1;client.connect()よりも前で設定する必要があります。

これはclient.connect()の処理内でclient.apiVersionが利用されており、client.apiVersion = 1;client.connect()よりも後に設定するとclient.connect()の処理でapiVersion=2としてリクエストが行われるためです。

ダメな例
import { Client } from "xrpl";

const client = new Client("wss://xrplcluster.com");

await client.connect(); // apiVersion=2として処理されてしまう

client.apiVersion = 1; // ❌

const response = await client.request({ // apiVersion=1
  command: "account_info",
  account: "rQQQrUdN1cLdNmxH4dHfKgmX5P4kf3ZrM",
});
console.log(response.result)
正しい例
import { Client } from "xrpl";

const client = new Client("wss://xrplcluster.com");

client.apiVersion = 1; // ⭕️

await client.connect(); // apiVersion=1

const response = await client.request({ // apiVersion=1
  command: "account_info",
  account: "rQQQrUdN1cLdNmxH4dHfKgmX5P4kf3ZrM",
});
console.log(response.result)

Discussion