オフレジャー支払いへの署名と検証 | JavaScriptでのXRPL開発 四段編
このガイドでは、オフレジャー支払いと署名、検証を行う方法について紹介します。
スクリプトの作成
-
プロジェクトディレクトリに
signPaymentChannelClaim.js
という新しいファイルを作成します。 -
以下のコードを
signPaymentChannelClaim.js
に貼り付けます。このコードは、1,000件の支払いを行うサンプルコードです。
※以下は、毎回
0.001
ずつ支払いが増えていき、最終的に最大1 XRP
支払うループです。signPaymentChannelClaim.js import {signPaymentChannelClaim,verifyPaymentChannelClaim,xrpToDrops,} from 'xrpl';import { client, bobWallet } from './config.js';const signAndVerifyClaims = async (channelId) => {let paychanSignature = '';console.time();for (let i = 1; i <= 1000; i++) {const amount = (0.001 * i).toFixed(6); // 小数点以下6桁に固定const amountFormatted = parseFloat(amount).toString(); // XRP建// 送金人: オフレジャー支払いへの署名paychanSignature = signPaymentChannelClaim(channelId,amountFormatted, // XRP建の量での指定bobWallet.privateKey);// 受取人: オフレジャー支払い情報の検証if (!verifyPaymentChannelClaim(channelId,amountFormatted, // XRP建の量での指定paychanSignature,bobWallet.publicKey)) {throw new Error('Invalid signature');}}console.timeEnd();return paychanSignature;};const main = async () => {try {await client.connect();const channelId = 'CHANNEL_ID_HERE'; // 事前に作成したチャネルIDを入力const signature = await signAndVerifyClaims(channelId);console.log(`Generated signature: ${signature}`);} catch (error) {console.error('Error connecting to XRPL:', error);} finally {await client.disconnect();}};main();
スクリプトの実行
-
コマンドラインで以下のコマンドを実行して、スクリプトを実行します。
Terminal window node signPaymentChannelClaim.js -
成功すれば、以下のような結果がコンソールに表示されますので、
Generated signature:
の右側に表示された文字列を確認し、メモしてください。Terminal window default: 1.605sGenerated signature: 7465B7BCC66F1053D4CB8EF3785BE951A235868420F546160EF446429DA58632EEBBA90810F6714500E7B0A73E9DBABFE47307DC6BEC9D911D24DB473988BE041,000件のオフレジャー支払いにかかった時間はたったの
1.605s
でした。(筆者のローカル環境での結果となります。)このように、オフレジャー取引を行うことで1,000件を超える支払いを数秒で完了させることができます。
上記結果の
signature
の値、7465B7BCC66F1053D4CB8EF3785BE951A235868420F546160EF446429DA58632EEBBA90810F6714500E7B0A73E9DBABFE47307DC6BEC9D911D24DB473988BE04
に当たる文字列は次章で必要になりますので、メモしておいてください。
チャネルの状態を確認する
ここで一度、チャネルの状態を確認してみましょう。
スクリプトの作成
-
プロジェクトディレクトリに
checkChannelBalance.js
という新しいファイルを作成します。 -
以下のコードを
checkChannelBalance.js
に貼り付けます。チャネルの状態を確認するには
account_channels
コマンドを使用します。checkChannelBalance.js import { client, aliceWallet, bobWallet } from './config.js';const checkChannelBalance = async (channelId) => {try {// チャネル情報を取得const response = await client.request({command: 'account_channels',account: bobWallet.address, // チャネルの送金人のアカウントdestination_account: aliceWallet.address, // チャネルの受領人のアカウント});const channel = response.result.channels.find((ch) => ch.channel_id === channelId);if (channel) {console.log(`Channel ID: ${channel.channel_id}`);console.log(`Balance: ${channel.balance} drops`);console.log(`Amount: ${channel.amount} drops`);} else {console.log(`Channel with ID ${channelId} not found.`);}} catch (error) {console.error('Error checking channel balance:', error);}};const main = async () => {try {await client.connect();// 事前に作成したチャネルIDを入力const channelId = 'CHANNEL_ID_HERE';await checkChannelBalance(channelId);} catch (error) {console.error('Error connecting to XRPL:', error);} finally {await client.disconnect();}};main();
スクリプトの実行
-
コマンドラインで以下のコマンドを実行して、スクリプトを実行します。
Terminal window node checkChannelBalance.js -
成功すれば、コンソールに以下が表示されます。
Terminal window Channel ID: E965B919E140BCF98280B29F6861C23BBB753B9D5515EDD57A285391BA20CCA2Balance: 1000000 drops // チャネルに対してオフレジャー取引を行った総量(現在: 1 XRP)Amount: 10000000 drops // デポジットした量(10 XRP)
まとめ
この章では、オフレジャー支払いの署名と検証、およびペイメントチャネルの状態を確認する方法について解説しました。
オフレジャー支払いは、署名と検証を通じてその有効性を確認することで、迅速かつ効率的に複数の支払いを行うことができます。
また、ペイメントチャネルの状態を確認することで、チャネル内の現在の残高やデポジットされた総額を把握することができました。
次章では、実際に資金を請求する方法について紹介します。取得した署名を使用して、チャネルの残高を請求する手順を学びましょう。