ペイメントチャネルへの資金の追加方法 | JavaScriptでのXRPL開発 四段編
この章では、作成したペイメントチャネルの資金(デポジット)を追加する方法について紹介します。
スクリプトの作成
-
プロジェクトディレクトリに
fundPaymentChannel.js
という新しいファイルを作成します。 -
以下のコードを
fundPaymentChannel.js
に貼り付けます。import { xrpToDrops } from 'xrpl';import { client, bobWallet } from './config.js';const fundPaymentChannel = async (channelId) => {try {const tx = {TransactionType: 'PaymentChannelFund', // トランザクションタイプ: ペイメントチャネルの資金追加Account: bobWallet.address, // 送金者(ボブ)のアカウントアドレスChannel: channelId, // ペイメントチャネルのIDAmount: xrpToDrops('5'), // チャネルに追加するXRPの量(ここでは5 XRP)};console.log('Submitting a PaymentChannelFund transaction...');// トランザクションの送信const fundChannelResponse = await client.submitAndWait(tx, {wallet: bobWallet,});console.log('PaymentChannelFund transaction response:',fundChannelResponse);} catch (error) {console.error('Error funding Payment Channel:', error);}};const main = async () => {try {await client.connect();const channelId = 'CHANNEL_ID_HERE'; // 事前に作成したチャンネルIDを入力await fundPaymentChannel(channelId);} catch (error) {console.error('Error connecting to XRPL:', error);} finally {await client.disconnect();}};main();
スクリプトの実行
-
コマンドラインで以下のコマンドを実行して、スクリプトを実行します。
Terminal window node fundPaymentChannel.js -
成功すれば、コンソールに以下が表示されます。
Submitting a PaymentChannelFund transaction...PaymentChannelFund transaction response: {id: 12,result: {Account: 'rDW8W3rzDFUyU4pw5Ei8QL1J9nQ947h68f',Amount: '5000000',Channel: '25C67138FB51F65A7015632C07E00AD0AE1C8A21F0282FD0401BAEDFDFD3423E',Fee: '12',Flags: 0,LastLedgerSequence: 1743984,Sequence: 1742741,SigningPubKey: 'ED9F9B58A0A209A1D0F90832FE83F3ED49C0091259E3F67A2FCAA3D3EAAF718FFE',TransactionType: 'PaymentChannelFund',TxnSignature: '0BB94472B22EEC345F02E5E788DA5CBBDB3080082DD03F3B5A87D02116FC61FF36B6469002B90CF8F219BDE9CFAD4AC68B49EAE64ED96C2A58FB9F09A8DDF00D',ctid: 'C01A9C5E007D0001',date: 772453171,hash: 'AA71F4F3163A25032BC71A07C8824C62415F33A3BD20F6B578A5236F4DED4631',inLedger: 1743966,ledger_index: 1743966,meta: {AffectedNodes: [Array],TransactionIndex: 125,TransactionResult: 'tesSUCCESS'},validated: true},type: 'response'}
同時に期限を延長する場合
資金の追加と同時に、期限の延長を行うことができます。
期限の延長を行う場合は、以下のようにExpiration
フィールドを追加してトランザクションを送信してください。
また、Expiration
フィールドは、現在からSettleDelay
を足した期限以上を指定する必要があります。
const tx = { TransactionType: 'PaymentChannelFund', // トランザクションタイプ: ペイメントチャネルの資金追加 Account: bobWallet.address, // 送金者(ボブ)のアカウントアドレス Channel: channelId, // ペイメントチャネルのID Amount: xrpToDrops('5'), // チャネルに追加するXRPの量(ここでは5 XRP) Expiration: Math.floor(Date.now() / 1000) + 86400 * 7, // 期限を延長(ここでは1週間後)};
※有効期限は、チャネルの変更不可であるオプションのCancelAfter
とは別です。
チャネルの状態を確認する
資金の追加ができているか確認するために、ここでもう一度、チャネルの状態を確認してみましょう。
前章で作成済みのcheckChannelBalance.js
を使用します。
スクリプトの実行
-
コマンドラインで以下のコマンドを実行して、スクリプトを実行します。
Terminal window node checkChannelBalance.js -
成功すれば、コンソールに以下が表示されます。
Terminal window Channel ID: 25C67138FB51F65A7015632C07E00AD0AE1C8A21F0282FD0401BAEDFDFD3423EBalance: 1000000 drops // オフレジャー取引した総量(現在: 1 XRP)Amount: 15000000 drops // デポジットした量(15 XRP)Amount
が15000000 drops (15 XRP)
に増えたことを確認できました。
まとめ
この章では、ペイメントチャネルに資金を追加する方法について解説しました。
PaymentChannelFund
トランザクションを使用して、チャネルに追加のデポジットを行うことができます。
このサンプルコードを参考にすれば、例えば「入金」ボタンなどをクリックした際に、トランザクションを発生させることができるでしょう。
また、資金の追加により、チャネルの有効期間を延長し、さらなる取引を可能にすることもできます。
次章では、ペイメントチャネルをクローズする方法について紹介します。クローズプロセスを通じて、未使用の資金を回収し、チャネルの最終残高を確定させる手順を学びましょう。