XRPレジャーの第一級オブジェクト

分散型のパブリックブロックチェーンであるXRPレジャーの状態ツリーはレジャーオブジェクトのセットとして表されます。このセットを総合してXRP Ledgerの全ての残高や設定、関係が表されます。

このレジャーオブジェクトはプロトコルで定義されたものであり、XRPレジャーにおいて第一級オブジェクトとして扱われます。

レジャーオブジェクト

レジャーオブジェクトはLedgerEntryTypeによって分類され、次の表に示すものが存在します。
(一部の特殊なレジャーオブジェクトは省略しています。)

それぞれのレジャーオブジェクトはトランザクションによってのみ作成/更新/削除可能であり、レジャーオブジェクトに関する情報はノードが提供するAPIメソッドによって様々な形で取得することができます。

レジャーオブジェクトの一覧

$$
\begin{array}{|l|l|l|l|}
\hline
\textbf{LedgerEntryType} & \textbf{説明} & \textbf{関連するトランザクション} & \textbf{関連するAPIメソッド} \\
\hline
\text{AccountRoot} & \text{アカウントのXRP残高や代替キー情報、アカウントに設定されるメタデータなどを表します。} & \begin{array}{l}\text{AccountSet} \\ \text{AccountDelete} \\ \text{Payment} \\ \text{SetRegularKey} \\ \text{AMMCreate}\end{array} & \begin{array}{l}\text{account\_info}\end{array} \\
\hline
\text{Check} & \text{送信先アカウントとそのアカウントが送信元から清算可能なXRP量を表します。} & \begin{array}{l}\text{CheckCreate} \\ \text{CheckCash} \\ \text{CheckCancel}\end{array} & \begin{array}{l}\text{account\_objects}\end{array} \\
\hline
\text{DepositPreauth} & \text{アカウント間の事前承認を表します。} & \begin{array}{l}\text{DepositPreauth}\end{array} & \begin{array}{l}\text{account\_objects}\ \\ \text{deposit\_authorized}\end{array} \\
\hline
\text{Escrow} & \text{条件付き決済のために保有されているXRP量を表します。} & \begin{array}{l}\text{EscrowCreate} \\ \text{EscrowFinish} \\ \text{EscrowCancel}\end{array} & \begin{array}{l}\text{account\_objects}\end{array} \\
\hline
\text{NFTokenOffer} & \text{NFTに対する売買のオファーを表します。} & \begin{array}{l}\text{NFTokenCreateOffer} \\ \text{NFTokenAcceptOffer} \\ \text{NFTokenCancelOffer}\end{array} & \begin{array}{l}\text{account\_objects} \\ \text{nft\_buy\_offers} \\ \text{nft\_sell\_offers}\end{array} \\
\hline
\text{NFTokenPage} & \text{NFTokenオブジェクトのリストを表します。} & \begin{array}{l}\text{NFTokenMint} \\ \text{NFTokenBurn}\end{array} & \begin{array}{l}\text{account\_objects}\end{array} \\
\hline
\text{Offer} & \text{DEXへの注文情報を表します。} & \begin{array}{l}\text{OfferCreate} \\ \text{OfferCancel} \\ \text{Payment}\end{array} & \begin{array}{l}\text{account\_objects} \\ \text{account\_offers} \\ \text{book\_offers} \\ \text{path\_find}\end{array} \\
\hline
\text{PayChannel} & \text{作成されているチャネルを表します。} & \begin{array}{l}\text{PaymentChannelCreate} \\ \text{PaymentChannelFund} \\ \text{PaymentChannelClaim}\end{array} & \begin{array}{l}\text{account\_objects} \\ \text{channel\_authorize}\\ \text{channel\_verify}\end{array} \\
\hline
\text{RippleState} & \text{2つのアカウント間で送信可能なトークンの情報を表します。} & \begin{array}{l}\text{TrustSet} \\ \text{OfferCreate} \\ \text{Payment}\end{array} & \begin{array}{l}\text{account\_objects} \\ \text{account\_currencies} \\ \text{account\_lines} \\ \text{gateway\_balances} \\ \text{noripple\_check} \\ \text{path\_find}\end{array} \\
\hline
\text{SignerList} & \text{マルチシグの署名者として利用可能なアドレスのリストを表します。} & \begin{array}{l}\text{SignerListSet}\end{array} & \begin{array}{l}\text{account\_objects}\end{array} \\
\hline
\text{Ticket} & \text{事前に確保されたアカウントのシーケンス番号を表します。} &\begin{array}{l} \text{TicketCreate}\end{array} & \begin{array}{l}\text{account\_objects}\end{array} \\
\hline
\text{AMM(開発中)} & \text{AMMのインスタンスを表します。} & \begin{array}{l}\text{AMMCreate} \\ \text{AMMDeposit} \\ \text{AMMWithdraw} \\ \text{AMMBid} \\ \text{AMMVote} \\ \text{Payment} \\ \text{OfferCreate}\end{array} & \begin{array}{l}\text{amm\_info} \\ \text{path\_find}\end{array} \\
\hline
\text{Bridge(開発中)} & \text{ブリッジのインスタンスを表します。} & \begin{array}{l}\text{XChainModifyBridge} \\ \text{XChainCommit} \\ \text{XChainClaim} \\ \text{XChainAccountCreateCommit} \\ \text{XChainAddClaimAttestation} \\ \text{XChainAddAccountCreateAttestation}\end{array} & \begin{array}{l}\text{account\_objects}\end{array} \\
\hline
\text{XChainOwnedClaimID(開発中)} & \text{トランザクションのリプレイ攻撃を防ぐためのIDを表します。} & \begin{array}{l}\text{XChainCreateClaimId} \\ \text{XChainClaim} \\ \text{XChainAddClaimAttestation}\end{array} & \begin{array}{l}\text{account\_objects}\end{array} \\
\hline
\text{XChainOwnedCreateAccountClaimID(開発中)} & \text{トランザクションのリプレイ攻撃を防ぐためのIDを表します。} & \begin{array}{l}\text{XChainAccountCreateCommit} \\ \text{XChainAddAccountCreateAttestation}\end{array} & \begin{array}{l}\text{account\_objects}\end{array} \\
\hline
\text{HookDefinition(開発中)} & \text{Hookのコードやデプロイ時のデフォルト値を表します。} & \begin{array}{l}\text{SetHook}\end{array} & \\
\hline
\text{Hook(開発中)} & \text{アカウントに設定されているHookを表します。} & \begin{array}{l}\text{SetHook}\end{array} & \begin{array}{l}\text{account\_objects} \\ \text{account\_namespaces}\end{array} \\
\hline
\text{HookState(開発中)} & \text{HookのStateを表します。} & \begin{array}{l}\text{SetHook} \\ \text{Invoke} \\ \text{その他全トランザクション}\end{array} & \begin{array}{l}\text{account\_objects}\end{array} \\
\hline
\end{array}
$$

トランザクションがレジャーオブジェクトを変更する例

トランザクションがレジャーオブジェクトを変更する仕組みは次のようなイメージです。

Paymentトランザクション

PaymentトランザクションにおいてあるアカウントからあるアカウントへXRPを送信した場合、送信元のアカウントのAccountRootオブジェクト内のBalanceが送金額分差し引かれ、送金先アカウントのAccountRootオブジェクト内のBalanceが送金額分増加します。

PaymentトランザクションによりXRPを送信

NFTokenMintトランザクション

NFTokenMintトランザクションによってNFTがミントされる場合、アカウントが既にNFTokenPageオブジェクトを持っていた場合、そのNFTokenのリストに作成するNFT情報が追加されます。NFTokenPageオブジェクトを持っていない場合はNFTokenPageオブジェクトが新規作成されます。

NFTokenMintトランザクションによりNFTokenを作成

SignerListSetトランザクション

SignerListSetトランザクションによりアカウントにマルチシグが設定される場合、トランザクションで指定した定足数や署名者情報を元にSignerListオブジェクトが作成されます。
マルチシグトランザクションの送信時はトランザクションの署名者とこのSignerListオブジェクトの署名者を照合し、適切な署名者による署名であるかが確認されます。

SignerListSetトランザクションによりマルチシグの設定

レジャーオブジェクトの変更を追跡する

検証された(validated)トランザクションにはmeta情報が付与されます。
このmeta情報にはそのトランザクションによってレジャーオブジェクトがどのように追加/変更/削除されたかを含むAffectedNodesフィールドを含んでいます。
AffectedNodes内にはCreatedNodeやModifiedNode, DeletedNodeなどが含まれ、それぞれ追加/変更/削除されたレジャーオブジェクトを表しています。

トランザクションのメタ情報の例

上の図では、トランザクションによってRippleStateが変更されています。
変更前の情報であるPreviousFieldsと変更後の情報であるFinalFieldsを確認することで、USD残高が0から171.270555へ増加していることが確認できます。

参考

  • レジャーオブジェクト

  • トランザクション

  • APIメソッド

  • AMM(開発中)

  • Bridge(開発中)

  • Hooks(開発中)



この記事が気に入ったらサポートをしてみませんか?