🤙

XRPLトランザクションの自動入力フィールド

2023/05/29に公開

XRPレジャーとは

XRPレジャーはBitcoinやEthereumなどと同じ分散型のパブリックブロックチェーンです。ビットコインの初期コントリビュータを含む3人の開発者により2012年に開発され、PoWやPoSとは異なる独自のコンセンサスアルゴリズムが用いられています。

XRPレジャーには複数のトランザクションタイプが存在し、トランザクションタイプ毎にさまざまな機能を提供しています。

トランザクション

XRPレジャーにおいてトランザクションは次のような形式で表されます。

{
  "TransactionType": "Payment",
  "Account": "r9DVZ8b2oZLSQm79mUmnNbg6k6Wp6sp1ii",
  "Amount": "20519",
  "Destination": "rs19EgarruJPFuxbhTMh9U5MXbwcLe1mFi",
  "DestinationTag": 0,
  "Fee": "12",
  "Flags": 2147483648,
  "LastLedgerSequence": 80082132,
  "Sequence": 62992506,
  "SigningPubKey": "03FB701EC202148DA70771129720B73FDF0F72776B86A19484611F75F608981F4E",
  "SourceTag": 4004,
  "TxnSignature": "30440220052867311C7CCFBE02E7E00AFC086147488ABEEC7CD079389B93254F99B84D5F02205BC82157D96E335C13714FF62F95FEA1234F72740D9601E88AE4967B67652701",
}

この内、一部のフィールドは他のトランザクションでも必要となるフィールドであり一部はトランザクションに固有となるフィールドです。
他のトランザクションでも必要となるフィールドの一部はレジャー情報からデータを取得し、自動入力可能なフィールドが存在します。

フィールドを自動入力することは非常に便利ですが、自動入力は行われるべきではない場合もあります。この記事では、この自動入力可能なフィールドについて説明します。

https://xrpl.org/ja/transaction-common-fields.html#自動入力可能なフィールド

自動入力可能なフィールド

Sequence

EVMではNonceと呼ばれるフィールドです。アカウントのトランザクションを一意に識別するための番号です。この番号はアカウント作成時のレジャー番号から始まり、その後トランザクションが発生する度に1ずつ増加します。

次のような場合、Sequence番号は自動入力されるべきではありません。

トランザクションをバッチ送信する場合

例えば、3つのトランザクションを作成してこれらを同時に送信する場合、それぞれのトランザクションにはすでに送信済みのトランザクションSequence+1の番号が設定されるでしょう。この場合、3つのトランザクションのうちいずれか1つのみが有効なトランザクションとしてレジャーに登録され、残りの1つはSequenceの重複によるエラーとなります。

このような状況を防ぐため、トランザクションのバッチ送信を行う場合は、Sequenceを手動で取得し、それぞれのトランザクションに対してSequenceを設定する必要があります。

チケット機能を利用し、事前に予約済みのSequenceを利用する場合

自動入力される番号はチケットで予約した番号は設定されないため、手動でSequenceを設定する必要があります。

マルチシグを利用する場合

マルチシグを利用してトランザクションを送信する場合、同時に別のトランザクションの準備が行われている可能性があります。事前にSequenceを手動指定することが推奨されます。

Fee

EVMのgasLimitに近いフィールドです。トランザクションを送信する際に消費する手数料を指定します。手数料はトランザクションを送信する際に必要となるため、手数料が不足している場合はトランザクションの送信に失敗します。
ネットワークの負荷によって手数料が変動するため、ネットワークに負荷が掛かっている場合は自動入力される金額が非常に大きくなる恐れがありますが、現在のネットワーク負荷による必要な手数料を手動で取得する必要がない点はメリットとなるでしょう。

次のような場合、Feeは自動入力されるべきではありません。

マルチシグを利用する場合

マルチシグを利用してトランザクションを送信する場合、特殊な手数料が必要となるため、手動でFeeを設定する必要があります。

https://xrpl.org/ja/transaction-cost.html#特別なトランザクションコスト

トランザクションを即座に確実に送信したい場合

ネットワークの負荷の状況によっては自動入力したタイミングと実際にトランザクションを送信するタイミングで必要となる手数料が異なる場合があります。この場合、しばらくの間トランザクションはキューに格納されレジャーへ登録されないことがあります。

即座に確実に送信したい場合は現在必要な手数料と比較して十分に大きな手数料を手動で設定する必要があります。

LastLedgerSequence

トランザクションの有効期限を指定します。このフィールドはトランザクションの送信後、指定されたレジャー番号までにトランザクションがレジャーに登録されない場合、トランザクションは無効となります。

このフィールドは任意項目ですが、使用することが強く推奨されます。

自動入力時は最新のレジャー番号+4が設定されます。つまり、トランザクション送信後15秒ほどでトランザクションがレジャーに登録されない場合、トランザクションは無効となります。

まとめ

XRPレジャーのトランザクションは自動入力可能なフィールドが存在しますが、自動入力されるべきではない場合もあります。この記事では、自動入力されるべきではないフィールドについて説明しました。

これらのフィールドを理解し、適切に利用することで、より安全にトランザクションを送信することができるでしょう。

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

Discussion