XRP Ledgerをローカル環境でテストする
XRP Ledgerとは
XRP Ledgerは、分散型のブロックチェーンの1つであり、ネイティブにトークンの発行やDEX、NFTなどの機能を持っていることが大きな特徴です。
2012年から稼働しており、10年以上に渡り8200万レジャー(ブロック)以上を処理してきた歴史があります。
XRPLのサーバプログラム
XRP Ledgerのサーバプログラムは、C++で書かれたrippledです。
rippled内にコンセンサスやトランザクション、ネットワークなどの機能が実装されています。
執筆時点での最新バージョンは2023年9月7日にリリースされた1.12.0となっています。
利用可能なネットワーク
XRP Ledgerには、メインネットワークの他にもいくつかのテストネットワークが存在しています。
テストネット(testnet)
テストネットは、メインネットと同じ機能を持っていますが、テストネット上のXRPの価値はありません。
メインネットで有効化されていない機能はテストネットでも利用することは出来ません。
次のようなWebsocket URLでアクセス可能です。
wss://s.altnet.rippletest.net:51233/
wss://testnet.xrpl-labs.com/
開発ネット(devnet)
開発ネットは、開発中の機能を試すためのネットワークです。
正式リリースに含まれていない開発中の機能などを試すことができます。
次のWebsocket URLでアクセス可能です。
wss://s.devnet.rippletest.net:51233/
新機能向けの開発ネット
この特殊な開発ネットは大きな新機能などが開発されている場合に用意されることがあります。
例えば、NFTの開発が進んでいた時には、NFT機能の開発ネット、AMMの開発が進んでいた際にはAMM機能の開発ネットが用意されていました。
現在AMM機能は正式リリースに含まれたため、現在存在するAMM機能の開発ネットは近いうちに停止することが予想されます。
他に利用可能な新機能向けの開発ネットはクロスチェーンブリッジ機能XChainBridgeが利用可能なサイドチェーン開発ネットが挙げられます。
ローカルで試す
これらのサーバを利用する上で開発者は事前のセットアップが不要であるため、とても簡単に利用できますが、特定の条件下で動作を確認したかったり、レジャーが確定するまでの3~5秒を待ちたくない場合はローカルで試すことができます。
Docker Image
XRPL Labsの創設者でありXRP Ledger財団のメンバーでもあるWietse Wind氏が公開しているDocker Imageを利用することで、簡単にローカルで試すことができます。
次のコマンドを使うことでローカル環境での実行できます。
docker run -d \
--name=rippled \
-p 80:80 \
-p 443:443 \
-p 5005:5005 \
-p 6006:6006 \
-p 51235:51235 \
# --platform linux/amd64 \ M1/M2 Macの場合指定
-e ENV_ARGS="-a --start" \
--restart=always \
-v $(pwd)/config:/config \
xrpllabsofficial/xrpld:latest
Docker Compose
Docker Composeを使う場合は次のようなcompose.yml
ファイルで実行できます。
services:
rippled:
container_name: rippled
image: xrpllabsofficial/xrpld:latest
platform: linux/amd64
ports:
- "80:80"
- "443:443"
- "5005:5005"
- "6006:6006"
- "51235:51235"
environment:
- ENV_ARGS=-a --start
restart: always
volumes:
- ./config:/config
試してみる
ローカルサーバにアクセスしてみましょう。
ここではXRPLのJavaScript/TypeScriptライブラリxrpl.jsを使用します。
データの取得
ローカルサーバから情報を取得してみましょう。
import { Client, Wallet } from 'xrpl'
const client = new Client('ws://localhost:6006');
const MASTER_WALLET = Wallet.fromSeed('snoPBrXtMeMyMHUVTgbuqAfg1SUTb') // masterpassphrase
const main = async () => {
await client.connect()
const result = await client.getXrpBalance(MASTER_WALLET.classicAddress)
console.log(result)
}
main()
snoPBrXtMeMyMHUVTgbuqAfg1SUTb
から生成されるアドレスはジェネシスアドレスであり、ネットワークの稼働時に全てのXRPを保有するアドレスです。
ローカル環境において、このアドレスを直接利用する、もしくは、このアドレスから他のアドレスに資金を移してから利用することになります。
コードを実行すると100000000000
(1000億)が表示されると思います。これがXRPLのネイティブトークンであるXRPの総発行量です。
トランザクションの送信
次にトランザクションを送信してみましょう。
import { Client, Wallet, xrpToDrops } from 'xrpl'
const client = new Client('ws://localhost:6006');
const MASTER_WALLET = Wallet.fromSeed('snoPBrXtMeMyMHUVTgbuqAfg1SUTb') // masterpassphrase
const wallet = Wallet.generate()
const main = async () => {
await client.connect()
await client.submit({
TransactionType: "Payment",
Account: MASTER_WALLET.address,
Destination: wallet.address,
Amount: xrpToDrops(100)
}, { wallet: MASTER_WALLET })
await client.request({ command: 'ledger_accept' })
const result = await client.getXrpBalance(wallet.address)
console.log(result)
}
main()
ローカル環境で実行する場合に、特徴的なのはledger_accept
コマンドを実行する必要がある点です。
ローカル環境ではサーバ自身が唯一のバリデータとなるため、このコマンドを実行することでレジャーが確定します。
おわりに
ローカル環境でXRP Ledgerを試す方法について説明しました!特定の条件下でのテストや、レジャーが確定するまでの待ち時間を短縮したい場合にはローカル環境を利用することをおすすめします!
興味を持たれた方はXRP Ledger開発者のDiscordチャンネルへ是非お越しください!
日本語チャンネルもありますので、英語ができなくても大丈夫です!
開発者Discordには日本語チャンネルもありますので、英語ができなくても大丈夫です!
Discussion