コンテンツにスキップ

ペイメントチャネルへの資金の追加方法 | JavaScriptでのXRPL開発 四段編

この章では、作成したペイメントチャネルの資金(デポジット)を追加する方法について紹介します。

スクリプトの作成

  1. プロジェクトディレクトリにfundPaymentChannel.jsという新しいファイルを作成します。

  2. 以下のコードを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, // ペイメントチャネルのID
    Amount: 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();

スクリプトの実行

  1. コマンドラインで以下のコマンドを実行して、スクリプトを実行します。

    Terminal window
    node fundPaymentChannel.js
  2. 成功すれば、コンソールに以下が表示されます。

    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を使用します。

スクリプトの実行

  1. コマンドラインで以下のコマンドを実行して、スクリプトを実行します。

    Terminal window
    node checkChannelBalance.js
  2. 成功すれば、コンソールに以下が表示されます。

    Terminal window
    Channel ID: 25C67138FB51F65A7015632C07E00AD0AE1C8A21F0282FD0401BAEDFDFD3423E
    Balance: 1000000 drops // オフレジャー取引した総量(現在: 1 XRP)
    Amount: 15000000 drops // デポジットした量(15 XRP)

    Amount15000000 drops (15 XRP)に増えたことを確認できました。

まとめ

この章では、ペイメントチャネルに資金を追加する方法について解説しました。

PaymentChannelFundトランザクションを使用して、チャネルに追加のデポジットを行うことができます。
このサンプルコードを参考にすれば、例えば「入金」ボタンなどをクリックした際に、トランザクションを発生させることができるでしょう。

また、資金の追加により、チャネルの有効期間を延長し、さらなる取引を可能にすることもできます。

次章では、ペイメントチャネルをクローズする方法について紹介します。クローズプロセスを通じて、未使用の資金を回収し、チャネルの最終残高を確定させる手順を学びましょう。