🎓

XRPLの学習フロー 基礎(1)

2023/07/03に公開

XRPレジャーの学習

こちらの記事にてXRPLの学習フローを作成しました。

https://zenn.dev/tequ/articles/xrpl-learning-flow

本記事ではフロー内の基礎部分(パート1)について説明したいと思います。

パート2はこちらをご覧ください。

https://zenn.dev/tequ/articles/xrpl-learning-flow-basic-2

本記事で説明する内容

  • レジャーオブジェクトの概要
  • トランザクションタイプの概要
  • トランザクション手数料と準備金

レジャーオブジェクトの概要

レジャーオブジェクトとはXRPレジャーの状態ツリーを構成するオブジェクトのことを指します。

例えばXRP残高を含むアカウント情報(AccountRoot)やDEXの注文情報(Offer)、アカウントのマルチシグ情報(SignerList)などがあります。

レジャーオブジェクトはトランザクションによってのみ追加・変更・削除されます。

https://xrpl.org/ja/docs/references/protocol/ledger-data/ledger-entry-types

これはEVMのステートと同じようなものです。ただし、これらはコントラクト内で定義し、管理されるものではなく、ネイティブプロトコルで定義されており、ユーザや開発者の任意の方法で追加・変更・削除することが出来るわけではありません。

レジャーオブジェクトは次のようなヒューマンリーダブルなフォーマットで表されます。

{
    "LedgerEntryType": "NFTokenOffer",
    "Owner": "rhRxL3MNvuKEjWjL7TBbZSDacb8PmzAd7m",
    "NFTokenID": "00081B5825A08C22787716FA031B432EBBC1B101BB54875F0002D2A400000000",
    "Flags": 1,
    "Amount": "1000000",
    "NFTokenOfferNode": "0",
    "index": "AEBABA4FAC212BF28E0F9A9C3788A47B085557EC5D1429E7A8266FB859C863B3",
    "OwnerNode": "17",
    "PreviousTxnID": "BFA9BE27383FA315651E26FDE1FA30815C5A5D0544EE10EC33D3E92532993769",
    "PreviousTxnLgrSeq": 75443565,
}

例えばLedgerEntryTypeフィールドを見るとNFTokenOfferオブジェクトであることが一目瞭然であり、このオブジェクトの所有者(Owner)やNFTのID(NFTokenID)、オファーの金額(Amount)なども簡単に分かります。

このようなレジャーオブジェクトの集合によりXRPレジャー全体のデータが構成されています。

トランザクションの概要

トランザクションタイプとはトランザクションの種類を表すものです。トランザクションと言うこともありますが、開発者の間ではトランザクションというと実際に実行されたものを指すことが多いです。

トランザクションはレジャーオブジェクトの追加・変更・削除を行う処理で、トランザクションタイプによって処理内容が異なります。

送金(アカウントの残高を変更)するトランザクションタイプはPayment、DEXの注文を追加するトランザクションタイプはOfferCreate、アカウントのマルチシグを変更するトランザクションタイプはSignerListSetなどがあります。

https://xrpl.org/ja/docs/references/protocol/transactions/types

このようなトランザクションタイプはネイティブプロトコルで定義されており、EVMチェーンに存在するコントラクトリスクのようなものはありません。

トランザクションによっては他のトランザクションを複数同時かつアトミックに実行するものもあります。例えば、NFTokenAcceptOfferをブローカー取引のマッチングとして実行する場合は、ロジック上ではNFT売却者のNFTokenOfferの承認を行い、NFTが自身の保有となった後にNFT購入者のNFTokenOfferを承認を行うことでNFTが購入者の手に渡ることになります。

トランザクションも次のようなヒューマンリーダブルなフォーマットで表されます。

{
  "TransactionType": "NFTokenMint",
  "Account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
  "TransferFee": 314,
  "NFTokenTaxon": 0,
  "Flags": 8,
  "Fee": "10",
  "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
}

TransactionTypeフィールドを見ることで、このトランザクションがNFTokenMintであることが分かります。また発行するNFTのロイヤリティ(TransferFee)やコレクションNo(NFTokenTaxon)なども確認することが出来ます。

ユーザはこのようなビルトインのトランザクションを利用することで、自身のアカウントにNFTを発行したり、DEX取引を行ったりすることが出来ます。

トランザクション手数料と準備金

トランザクション手数料

トランザクションを送信する際、トランザクションの送信者は少額のXRPを手数料として支払う必要があります。この手数料はネットワークへの攻撃を防ぐためのものであり、ネットワークの負荷が小さい場合はほぼ0円(0.001円程度)でトランザクションを送信することが出来ます。

使用したトランザクション手数料はバリデータの報酬となることはなく、ネットワークから完全に焼却されます。

https://xrpl.org/ja/docs/concepts/transactions/transaction-cost

トランザクションはトランザクション手数料に応じて3つのタイプに分けられます。

  1. トランザクションのFeeローカル負荷コスト未満の場合、トランザクションはサーバに適用も中継もされません。

  2. トランザクションのFeeローカル負荷コスト以上オープンレジャーコスト未満の場合、トランザクションはオープンレジャーに含められず、サーバのキューに入れられます。

  3. トランザクションのFeeオープンレジャーコスト以上の場合、トランザクションはオープンレジャーに含められます。

準備金

アカウントがレジャーオブジェクトを保有する際、そのストレージコスト分としてアカウントは準備金を支払う必要があります。この準備金はレジャーオブジェクトを保有している間ロックされるものであり、レジャーオブジェクトの所有者が変更されたり削除され、アカウントの所有でなくなった場合には準備金のロックは解除されます。

これはノードのストレージ負担の増加を緩やかにするためのものであり、またアカウントに不要なレジャーオブジェクトを削除させるインセンティブを与えるものでもあります。

https://xrpl.org/ja/docs/concepts/accounts/reserves

基本準備金

基本準備金はアカウントが最低限保有する必要がある準備金であり、アカウントがこの準備金分のXRPを保有している場合はアカウントは有効であるとみなされます。技術的にはAccountRootオブジェクトを保有するための準備金です。

執筆時点では基本準備金は10XRPであり、アカウントを削除した場合、その一部(基本準備金-所有者準備金)は返却されます。

所有者準備金

所有者準備金はアカウントがレジャーオブジェクトを保有する際に必要となる準備金であり、レジャーオブジェクト1つ毎に発生します。

執筆時点では所有者準備金は2XRPであり、レジャーオブジェクトを削除した場合、その準備金は返却されます。

アカウントが保有する所有者準備金の対象となるレジャーオブジェクトの数はAccountRootオブジェクトのOwnerCountフィールドで確認することが出来ます。

{
   "LedgerEntryType": "AccountRoot",  
   "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
   "Balance": "148446663",
   "OwnerCount": 3,
   "Flags": 8388608,
   "PreviousTxnID": "0D5FB50FA65C9FE1538FD7E398FFFE9D1908DFA4576D8D7A020040686F93C77D",
   "PreviousTxnLgrSeq": 14091160,
   "Sequence": 336,
   "index": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8"
}

https://xrpl.org/ja/docs/references/protocol/ledger-data/ledger-entry-types/accountroot#accountroot-フィールド

おわりに

基礎のPart1ということでレジャーオブジェクトの概要、トランザクションタイプの概要、トランザクション手数料と準備金について説明しました。
特に準備金に関しては特徴的な機能であり、XRPレジャーが長期的に運用されていくことがしっかりと考えられていると感じるのではないでしょうか?

興味を持たれた方はXRPL開発者のDiscordチャンネルへ是非お越しください!
日本語チャンネルもありますので、英語ができなくても大丈夫です!

https://xrpldevs.org

私のTwitterはこちら!

Discussion