XRPLプライベートネットワークをDockerで構築

XRPLプライベートネットワークをDockerで構築 Docker

XRP Ledger(XRPL)は、分散型台帳技術(Distributed Ledger Technology)を用いた高速かつ低コストの送金ネットワークです。

この記事では、XRPL.orgのXRP Ledger 開発者向けリソースドキュメント インフラストラクチャページのスタンドアロンモードでrippledをテストに従って、プライベートネットワークをDockerで構築しています。

プライベートネットワークとは?

プライベートネットワークとは、公式のメインネットとは切り離され、自分のPC上だけで動作する閉じたXRPL環境です。

  • テスト用XRP:実際の価値はなく、自由に発行・送金できます。
  • 利点:本番ネットワークに影響を与えず、機能検証や開発に集中可能です。

Dockerとは?

Dockerとは、アプリケーションを「コンテナ」という軽量な仮想環境で実行する仕組みです。

  • 各アプリケーションを独立して実行可能
  • 複数のXRPLノード(rippled)を簡単に立ち上げられる
  • 設定の再現性が高く、テスト環境の自動構築にも最適

作成するネットワーク

このチュートリアルでは、以下のように3台のバリデータノード(Validator)が相互接続されたプライベートネットワークを作成します。

ノード構成

ノード名主な機能
Validator-1ジェネシスウォレット保有(初期XRP配布の中心)
Validator-2Validator-1を信頼し、検証に参加するノード
Validator-3Validator-1を信頼し、検証に参加するノード

用語補足

  • バリデータノード(Validator):台帳の正しさを検証・合意形成に関わるサーバー
  • ジェネシスウォレット:最初に大量のXRPを保有するアカウント
  • Peer接続:ノード同士が通信するための接続関係

テスト用XRPと手数料(Fee)の扱い

このネットワークでは、実際のXRPではなくテスト用XRP(価値のない仮想XRP)を使用します。

  • 初期配布:ジェネシスアカウントに大量に配布される
  • Fee(手数料):トランザクションごとにごく少額(デフォルトで10 drops = 0.00001 XRP)が発生
  • drop(ドロップ):XRPの最小単位(1 XRP = 1,000,000 drops)

設定ファイル(rippled.cfg)でこのFeeの値を変更することも可能です。

プライベートネットワークの構築

ここから、Docker Compose を用いて実際にプライベートネットワークを構築していきます。

作業ディレクトリの作成

ディレクトリ構成

バリデータキーペアの生成

バリデータとしてネットワークに参加するためのキーペアを、ローカル環境に生成します。

公式の XRPL4J ツールの rippledが使えるDocker コンテナのxrpllabs/xrpl4jを起動して、バリデータ鍵ペアを生成するためにコンテナ内でrippled validator-keys create_keysコマンドを実行する。

ディレクトリ構成

バリデータキーペアの例

バリデータトークンの作成

各ノードのバリデータキーペア(公開鍵・秘密鍵)もとにバリデータトークンを生成します。

バリデータトークン(validator_token)は、プライベートネットワーク内で各バリデータノードを認証し、不正なノードの参加を防ぐために使います。

ノード自己証明(Proof of Identity)

  • 各バリデータノードは「自分が本当にその公開鍵を持つ正当なバリデータです」ということを示すために、あらかじめ生成したシークレット文字列(トークン)を保持します。
  • rippled.cfg[validator_token] セクションにこのトークンを記載することで、起動時にリップルサーバー(rippled)が自分の公開鍵と紐づけて「このノードは正当な参加者です」と宣言できます。

ピア接続の許可制御

  • ネットワークを構成する各ノードは、お互いのトークンを知らないと接続(Peer)を確立できない設定にできます。
  • これにより、プライベートネットワーク外の第三者がポートをスキャンしてきても、正しいトークンを持たなければ相互通信できず、ネットワークへの不正侵入が防がれます。

合意形成(コンセンサス)への参加条件

  • コンセンサス・プロトコルでは、ノードが提案(Proposal)を送信したり、投票したりする際に「正当なバリデータかどうか」を検証します。
  • トークンを持つノードだけが「提案者リスト(Validator List)」に登録され、合意形成プロセスに参加できます。

バリデータトークン生成コマンドを実行

ファイル ディレクトリ構成

ノードのディレクトリを作成

プライベートネットワーク内のすべてのノードのディレクトリにそれぞれの設定フォルダを作成します。

ファイル ディレクトリ構成

バリデータ設定ファイルの作成

バリデータのconfigディレクトリにrippled.cfgファイルを作成します。

以下のrippled.cfgテンプレートの情報を元に、validator-1validator-2validator-3ごとの固有のデーターを設定します。

[server] — ネットワーク I/O ポート

項目説明
port_peer他ノードと合意形成メッセージをやりとりするポート
(validator_1、validator_2、validator_3固有のポート番号を設定する)
port_rpc_admin_local管理者用RPC(HTTP)をローカル限定で受け付ける
port_ws_admin_local管理者用WebSocketをローカル限定で受け付ける

[validator_token] — ノード認証トークン

<Add your validator token here>の箇所にvalidator_1、validator_2、validator_3/token.txt の内容(例:sXXXXXXXXXXXXXXXXXXXXXXXXXXXX)をそのまま貼り付けます。

[validators_file] と validators.txt — 信頼するバリデータ一覧

validator.txtファイルは、どのバリデータがネットワークから信頼されるかを定義します。

全ノード共通で公開キー一覧を設定します。
validator-1validator-2validator-3validator-keys.jsonファイルから公開鍵をコピーします。)

db/ ディレクトリの作成

ホスト側に、各ノードがレジャー(台帳)データやトランザクション履歴を書き込む db/ ディレクトリを事前に作成する。

ネットワークの開始

docker-compose.yml の作成

ファイル ディレクトリ構成

ネットワークを起動

ネットワークを検証

サーバー状態の確認

バリデータに接続しているピア数の確認

genesisのアカウント情報の確認

ジェネシスアカウントのアドレス(下記)は、rippled の「スタンドアロンモードで新規ジェネシスレジャーを作成」機能で使われるデフォルトのジェネシスレジャーにハードコードされたアカウントです。

テストトランザクションの実行

XRP Ledger(XRPL)はビットコインのようなProof-of-Workマイニングを採用しておらず、全XRP(総発行量1000億XRP)はローンチ時に一括発行済みです。
XRPLは約3~5秒ごとに「Unique Node List(UNL)」に登録された独立したバリデータノード同士で合意(コンセンサス)を行い、次のレジャー(台帳)を確定します。
バリデータは取引時に発生する手数料(drops)を受け取れます。

トランザクションの送信

サンプルの宛先アカウント(rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh)にトランザクションを送信する。

validator_1コンテナに入り、1000000000 XRPを手数料10XRPで送金するためにrippled submitメソッドを実行する。

宛先アカウント(r9wRwVgL2vWVnKhTPdtxva5vdH7FNw1zPs) に 1000000000 XRP があることを確認する。

タイトルとURLをコピーしました