XRPLのPaymentトランザクションを読み解く:JSONデータの詳細解説
はじめに
XRP Ledgerは分散型のパブリック・ブロックチェーンです。
コンセンサスプロトコルを採用し、10年以上にわたり、安定的に稼働しているブロックチェーンで、開発者は、トークン発行、オンラインゲーム、NFT、DeFiなどのユースケースにわたって革新的なブロックチェーンプロジェクトやアプリケーションを構築可能です。
トランザクション・データ
XRPL(XRP Ledger)のトランザクションは、詳細がJSON形式で確認できます。
無作為に選んだ特定のPaymentトランザクションのJSONデータを例にとり、各フィールドが何を意味しているのかを詳しく見ていきましょう。
JSONデータ:
{
"Account": "rEiq1iAcpzP8WLjezP9MzAQEJ7jqKMLFSA",
"Amount": "75596347",
"DeliverMax": "75596347",
"Destination": "rDNvjMc6LjtpR7BdfiSNvavUBjznhhmpNq",
"DestinationTag": 905312,
"Fee": "24",
"Flags": 2147483648,
"LastLedgerSequence": 95844482,
"Sequence": 65773132,
"SigningPubKey": "024979DFC8EA12B95CB832E57D9E11AFABB2F4A8F99736F4AA1050F7C3F4297B77",
"TransactionType": "Payment",
"TxnSignature": "3045022100E1CBFD6E29E3AD311E07DECB8336C26C8C38120C7F0C6D5F2043B60611D2F9AC02202CF7AE83F2F8B6E8FAA810051E60519456415D447DD537024FD0ABAB72180833",
"ctid": "C5B6445D00010000",
"date": 799431570,
"hash": "6B34C05B9914FF72BA7FA3044B8D48586532C44FAD3EE8B7A463B9CCA5ABA4EF",
"inLedger": 95831133,
"ledger_index": 95831133,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Account": "rEiq1iAcpzP8WLjezP9MzAQEJ7jqKMLFSA",
"Balance": "4901552994070",
"Flags": 0,
"OwnerCount": 1,
"Sequence": 65773133
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "38EDA33EB564190519CE39E829A9643F4E3855E4533BE2CABC6A57BD77846AA0",
"PreviousFields": {
"Balance": "4901628590441",
"Sequence": 65773132
},
"PreviousTxnID": "6745C63C124135266C6922D7D495C6CFCA4AA204AA54F08986E5126F2FDF5EC5",
"PreviousTxnLgrSeq": 95831130
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rDNvjMc6LjtpR7BdfiSNvavUBjznhhmpNq",
"Balance": "422388857",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 68225102
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "CD587D82DAC1C35D7ABBE5374ABA452FA526D80FC8550EAAEE1BC3CFD034CE73",
"PreviousFields": {
"Balance": "346792510"
},
"PreviousTxnID": "A509220DA0DD32B7E845541077805644DB3D93A5B8767A3DC9A0518E86BDBA55",
"PreviousTxnLgrSeq": 95831126
}
}
],
"TransactionIndex": 1,
"TransactionResult": "tesSUCCESS",
"delivered_amount": "75596347"
},
"status": "success",
"validated": true
}
トランザクションの概要
このJSONは、あるアカウントから別のアカウントへのXRP送金(Payment)トランザクションの詳細を示しています。
具体的には、アカウント rEiq1iAcpzP8WLjezP9MzAQEJ7jqKMLFSA からアカウント rDNvjMc6LjtpR7BdfiSNvavUBjznhhmpNq へ、75,596,347 drops(75.596347 XRP)が送金され、成功したことがわかります。
このトランザクションはレジャーインデックス 95831133 に含まれています。
主要フィールドの解説
以下、JSON内の主要なフィールドを個別に解説します。
-
TransactionType:"Payment"- トランザクションの種類を示します。ここでは「支払い」を意味します。
-
Account:"rEiq1iAcpzP8WLjezP9MzAQEJ7jqKMLFSA"- トランザクションを送信したアカウント(送金元)のアドレスです。
-
Destination:"rDNvjMc6LjtpR7BdfiSNvavUBjznhhmpNq"- 支払いを受け取るアカウント(送金先)のアドレスです。
-
DestinationTag:905312- 送金先が指定した数値タグです。取引所など、単一アドレスで多数のユーザーを管理する場合に、どのユーザーへの入金かを識別するために利用されます。(一般的には宛先タグと呼ばれます)
-
Amount:"75596347"- 送金するように指定された額です。単位は drops(1 XRP = 1,000,000 drops)です。したがって、75.596347 XRP に相当します。
-
DeliverMax:"75596347"- 部分支払い(Partial Payment)が許可されている場合に、送金元が送金する最大額を指定します。XRPの送金では常に全額が送金されるため、通常
Amountと同じ値が設定されます。
- 部分支払い(Partial Payment)が許可されている場合に、送金元が送金する最大額を指定します。XRPの送金では常に全額が送金されるため、通常
-
Fee:"24"- このトランザクションを処理するために支払われた手数料です。単位は drops です(0.000024 XRP)。
-
Sequence:65773132- 送金元アカウント (
Account) のシーケンス番号です。アカウントから送信されるトランザクションは、それぞれ一意のシーケンス番号を持つ必要があり、二重支払いを防ぎます。トランザクションが成功すると、アカウントのシーケンス番号は1増加します(metaセクションで確認できます)。
- 送金元アカウント (
-
LastLedgerSequence:95844482- このトランザクションが有効とみなされる最後のレジャーインデックスです。もしトランザクションがこのレジャー番号までに台帳に含まれなかった場合、それは永久に無効となります。
LastLedgerSequenceによって、トランザクションがコンセンサスに参加できるリミットが定められます。ネットワークが遅延した場合などでも、期限を過ぎると自動的に無効になります。
- このトランザクションが有効とみなされる最後のレジャーインデックスです。もしトランザクションがこのレジャー番号までに台帳に含まれなかった場合、それは永久に無効となります。
-
Flags:2147483648- トランザクションの挙動を制御するフラグです。この値は
0x80000000であり、tfFullyCanonicalSigフラグが立っていることを示します。これは、トランザクション署名が厳密なDERエンコーディングの標準形式であることを要求するものです。
- トランザクションの挙動を制御するフラグです。この値は
-
SigningPubKey:"0249..."- このトランザクションに署名した公開鍵です。送金元アカウントに紐づいています。
-
TxnSignature:"3045..."- トランザクションデータ全体に対するデジタル署名です。これにより、
SigningPubKeyに対応する秘密鍵の所有者(=Accountの所有者)がこのトランザクションを承認したことが証明されます。
- トランザクションデータ全体に対するデジタル署名です。これにより、
-
hash:"6B34..."- このトランザクションの一意な識別子(ハッシュ値)です。
-
ledger_index/inLedger:95831133- このトランザクションが含まれたレジャーのインデックス(バージョン番号)です。
-
date:799431570- トランザクションがレジャーに含まれた時刻です。これはXRPL Epoch(2000年1月1日 00:00:00 UTC)からの経過秒数で表されます。
-
validated:true- このトランザクションが検証済み(コンセンサスプロセスを経て確定済み)のレジャーに含まれていることを示します。
-
status:"success"- APIリクエスト自体のステータスです。
status: "success"はAPIリクエストが成功したことを意味します。実際にトランザクションが検証済みであるかは、validated: true フィールドを確認してください。
- APIリクエスト自体のステータスです。
メタデータ (meta) の解説
meta セクションには、トランザクションが実行された結果に関する詳細情報が含まれます。
-
TransactionResult:"tesSUCCESS"- トランザクションの最終的な結果コードです。
tesSUCCESSはトランザクションが成功し、意図した通りの処理(この場合はXRPの送金)が手数料のみで完了したことを示します。tecから始まるコードは失敗を示します。
- トランザクションの最終的な結果コードです。
-
delivered_amount:"75596347"- 実際に送金先に届けられた額です。XRPの送金では
Amountと同じ値になりますが、発行済み通貨(IOU)の送金や部分支払いの場合は、Amountより少なくなる可能性があります。
- 実際に送金先に届けられた額です。XRPの送金では
-
AffectedNodes:- このトランザクションによって変更されたレジャーオブジェクト(State Nodes)のリストです。
-
1番目の
ModifiedNode:-
LedgerEntryType:"AccountRoot"- 変更されたオブジェクトの種類(アカウントの基本情報)。 -
LedgerIndex:"38ED..."- 変更されたAccountRootオブジェクトの一意なID。 -
FinalFields: 変更後のアカウント状態。Balanceが送金額(Amount)と手数料(Fee)の合計分だけ減少し (4901628590441-75596347-24=4901552994070)、Sequenceが1増加 (65773132->65773133) していることがわかります。 -
PreviousFields: 変更前のアカウント状態(BalanceとSequence)。
-
-
2番目の
ModifiedNode:-
LedgerEntryType:"AccountRoot"- 送金先アカウントのAccountRootオブジェクト。 -
LedgerIndex:"CD58..."- 送金先AccountRootオブジェクトの一意なID。 -
FinalFields: 変更後の送金先アカウント状態。Balanceがdelivered_amount分だけ増加 (346792510+75596347=422388857) しています。送金先アカウントのSequenceはこのトランザクションでは変更されません。 -
PreviousFields: 変更前の送金先アカウント状態(Balance)。
-
まとめ
このように、XRPLのトランザクションJSONデータには、取引の詳細だけでなく、その実行結果や台帳状態への影響に関する豊富な情報が含まれています。
各フィールドの意味を理解することで、XRPL上で何が起こったのかを正確に追跡し、分析することが可能になりますが、最初からすべてを理解するのは難しいため、まずは主要フィールド(TransactionType、Hash、Feeなど)から理解できるようにすると良いと思います。
さいごに
また、Xで情報を発信していますので、興味を持たれた方はぜひフォローを!
XRPLのイベント情報はこちら👇
Discussion