コンテンツにスキップ

1-5. コードベースを探索する

xrpldが動くようになったら、今度はコードを読んでいきましょう。大規模なC++コードベースは最初は圧倒されますが、全体像を把握すれば怖くありません。

rippled/
├── src/
│ ├── libxrpl/ # XRPLコアライブラリ(プロトコル・型・TX処理等)
│ │ ├── basics/ # 基本ユーティリティ
│ │ ├── beast/ # ネットワーク・非同期処理基盤
│ │ ├── crypto/ # 暗号処理
│ │ ├── ledger/ # Ledger管理
│ │ ├── net/ # ネットワーク通信
│ │ ├── nodestore/ # Ledgerデータの永続化
│ │ ├── protocol/ # プロトコル定義(型・シリアライズ)
│ │ ├── shamap/ # SHAMap(台帳データ構造)
│ │ └── tx/ # トランザクション処理
│ │ └── transactors/ # 各TX種別の実装
│ │ ├── payment/
│ │ ├── dex/
│ │ ├── escrow/
│ │ └── ...
│ ├── xrpld/ # デーモン(ネットワーク・コンセンサス・RPC等)
│ │ ├── app/ # アプリケーション層
│ │ ├── consensus/ # コンセンサスアルゴリズム統合
│ │ ├── overlay/ # P2Pオーバーレイネットワーク
│ │ ├── peerfinder/ # ピア探索
│ │ └── rpc/ # RPCサーバー
│ ├── test/ # ユニットテスト
│ └── tests/ # 統合テスト
├── CMakeLists.txt
├── conanfile.py
└── docs/ # ビルド手順・設計ドキュメント

src/xrpld/app/ — アプリケーション層

Section titled “src/xrpld/app/ — アプリケーション層”

デーモンの中心部です。

xrpld/app/
├── consensus/ # XRPL固有のコンセンサス実装
├── ledger/ # Ledger取得・検証・管理
├── main/ # Application クラス(起動・依存注入)
├── misc/ # AmendmentTable, FeeVote, NetworkOPs等
└── rdb/ # RDB(SQLite)へのアクセス

src/libxrpl/tx/transactors/ — トランザクター

Section titled “src/libxrpl/tx/transactors/ — トランザクター”

各トランザクション種別の実装がカテゴリ別に整理されています:

ディレクトリトランザクション種別
payment/Payment(送金)
dex/OfferCreate, OfferCancel(分散型取引所)
escrow/EscrowCreate/Finish/Cancel
nft/NFTokenMint/Burn等
check/CheckCreate/Cash/Cancel
bridge/XChainBridge(クロスチェーン)
lending/Lending関連
oracle/Price Oracle
vault/Vault

XRPLプロトコルの型・フォーマット・シリアライズが集約されています。公開ヘッダ(.h)は include/xrpl/protocol/、実装(.cpp)は src/libxrpl/protocol/ に分かれています。

include/xrpl/protocol/ (ヘッダ) + src/libxrpl/protocol/ (実装)
├── AccountID.h # アカウントID
├── STAmount.h # 金額型(XRP/IOU両対応)
├── STObject.h # シリアライズ可能なオブジェクト
├── TxFormats.h # トランザクションフォーマット定義
├── LedgerFormats.h # Ledgerエントリのフォーマット定義
├── Feature.h # アメンドメント(機能フラグ)定義
└── TER.h # トランザクション実行結果コード

Ledgerの状態ツリーのデータ構造です。Ledgerの差分を効率的に計算できます。

実装の入口は次のファイルから辿るとよいです。

src/xrpld/rpc/handlers/transaction/Submit.cpp
src/xrpld/app/misc/NetworkOPs.cpp
src/libxrpl/tx/apply.cpp
src/libxrpl/tx/Transactor.cpp

最もわかりやすい入り口はトランザクション処理です。Payment を例に追ってみましょう:

Terminal window
# Payment トランザクターのファイルを探す
ls src/libxrpl/tx/transactors/payment/

Transactor.cpp(共通基底クラス)はこちら:

Terminal window
ls src/libxrpl/tx/
# Transactor.cpp, apply.cpp 等が確認できます

テストコードはコードの使い方の良いドキュメントです:

Terminal window
ls src/test/app/
# Payment_test.cpp, Offer_test.cpp 等が見つかります
ファイル説明
AccountIDinclude/xrpl/protocol/AccountID.hアカウントを識別する20バイトのハッシュ
uint256include/xrpl/basics/base_uint.h256ビット整数(ハッシュ等に使用)
STAmountinclude/xrpl/protocol/STAmount.hXRPとIOUを統一的に扱う金額型
STObjectinclude/xrpl/protocol/STObject.hキーバリューのシリアライズ可能なオブジェクト
TERinclude/xrpl/protocol/TER.hトランザクション実行結果コード
Terminal window
# Transactor を継承したクラスを探す
grep -r ": public Transactor" src/
# TER コードの定義を探す(ヘッダは include/ 配下)
grep -r "tecNO_AUTH" include/xrpl/protocol/
Terminal window
ls docs/
# consensus.md, CodingStyle.md, build/ 等があります

docs/CodingStyle.md はコントリビューション前に必読です。

Level 1 の締めくくりとして、以下を試してみましょう:

  1. src/libxrpl/tx/transactors/ ディレクトリを開き、カテゴリ一覧を確認する
  2. src/libxrpl/tx/transactors/payment/ の中のファイルを開いて読む
  3. include/xrpl/protocol/TER.h を開いて、どんな結果コードがあるか確認する
  4. src/test/app/ にあるテストファイルの一つを開いて構造を確認する

ここまでにできるようになったこと

Section titled “ここまでにできるようになったこと”
  • xrpldのビルドをゼロから成功させる
  • ローカルでXRPLネットワークを起動・操作できる
  • コードベースの全体構造を把握している
  • 主要なディレクトリの役割を理解している

コードベースの地図ができました。ビルドでつまずいたときのために、よくあるビルドエラーと対処 にも目を通しておくと安心です。準備ができたら Level 2 に進み、実際にコードを深く読みながらトランザクション処理やLedgerの仕組みを理解していきましょう。