ペイメントチャネルの残高を請求する | JavaScriptでのXRPL開発 四段編
この章では、作成したペイメントチャネルの残高から資金を請求する方法について紹介します。
前提
ボブはアリスに対し、以下の事項を行なっている前提となります。
- 事前にチャネルを作成し
10 XRP
をデポジット済みです。 - 事前に合計
1 XRP
分のオフレジャー取引を完了済みです。
スクリプトの作成
-
プロジェクトディレクトリに
claimPaymentChannel.js
という新しいファイルを作成します。 -
以下のコードを
claimPaymentChannel.js
に貼り付けます。このコードは、指定されたチャネルID、支払い量、署名に対して取引を請求するサンプルコードです。
claimPaymentChannel.js import { xrpToDrops, signPaymentChannelClaim } from 'xrpl';import { client, aliceWallet, bobWallet } from './config.js';const claimPaymentChannel = async (channelId, amount, paychanSignature) => {try {// PaymentChannelClaimトランザクションを作成const tx = {TransactionType: 'PaymentChannelClaim',Account: aliceWallet.address, // 受領人(アリス)のアドレスChannel: channelId, // チャネルIDBalance: xrpToDrops(amount), // 要求する金額(drop単位)Amount: xrpToDrops(amount), // 支払う金額(drop単位)Signature: paychanSignature, // オフレジャー取引の署名の文字列PublicKey: bobWallet.publicKey, // 送金人の公開鍵};console.log('Submitting a PaymentChannelClaim transaction...');const response = await client.submitAndWait(tx, { wallet: aliceWallet }); // 受領人(アリス)が署名console.log('PaymentChannelClaim transaction response:', response);} catch (error) {console.error('Error claiming Payment Channel:', error);}};const main = async () => {try {await client.connect();const channelId = 'CHANNEL_ID_HERE'; // 事前に作成したチャネルIDを入力const amount = '1'; // XRPでの金額を入力// 事前に作成したオフレジャー支払いへの署名を指定const paychanSignature = 'SIGNATURE_HERE';// 実行await claimPaymentChannel(channelId, amount, paychanSignature);} catch (error) {console.error('Error connecting to XRPL:', error);} finally {await client.disconnect();}};main();
スクリプトの実行
-
コマンドラインで以下のコマンドを実行して、スクリプトを実行します。
Terminal window node claimPaymentChannel.js -
成功すれば、コンソールに以下が表示されます。
Terminal window Submitting a PaymentChannelClaim transaction...PaymentChannelClaim transaction response: {id: 12,result: {Account: 'rM6Nt2E1WKJLKMN1tbkcifveAshzVuyJmj', // アリスのアドレスAmount: '1000000',Balance: '1000000',Channel: '25C67138FB51F65A7015632C07E00AD0AE1C8A21F0282FD0401BAEDFDFD3423E',Fee: '12',Flags: 0,LastLedgerSequence: 1743094,PublicKey: 'ED9F9B58A0A209A1D0F90832FE83F3ED49C0091259E3F67A2FCAA3D3EAAF718FFE',Sequence: 1742737,Signature: '7465B7BCC66F1053D4CB8EF3785BE951A235868420F546160EF446429DA58632EEBBA90810F6714500E7B0A73E9DBABFE47307DC6BEC9D911D24DB473988BE04',SigningPubKey: 'EDE80DD6F71A48928EC70B22912D6E9B4005D1D9666939C658F931186CC9DA80B7',TransactionType: 'PaymentChannelClaim',TxnSignature: 'A9CC66C22C9000CE5B939E828FDB621419A8EE7180604B3844D52D32D27BD4F00CCB93D8AF85C0E7F08EA7DD27D5E475F8CA00FEA1EF2B6BB826EB6DA95A4902',ctid: 'C01A98E400000001',date: 772450171,hash: '885C753CDE40000A7452F31FB120293EFDCE39F3A442B1C5E6E924440FD32381',inLedger: 1743076,ledger_index: 1743076,meta: {AffectedNodes: [Array],TransactionIndex: 0,TransactionResult: 'tesSUCCESS' // 成功},validated: true},type: 'response'}アリスから指定されたチャネルIDに対して、請求が確定されました。
-
もう一度、同様の請求を行った場合は、当然ながら失敗します。
Terminal window Submitting a PaymentChannelClaim transaction...PaymentChannelClaim transaction response: {id: 12,result: {Account: 'rM6Nt2E1WKJLKMN1tbkcifveAshzVuyJmj',Amount: '1000000',Balance: '1000000',Channel: '25C67138FB51F65A7015632C07E00AD0AE1C8A21F0282FD0401BAEDFDFD3423E',Fee: '12',Flags: 0,LastLedgerSequence: 1744099,PublicKey: 'ED9F9B58A0A209A1D0F90832FE83F3ED49C0091259E3F67A2FCAA3D3EAAF718FFE',Sequence: 1742738,Signature: '7465B7BCC66F1053D4CB8EF3785BE951A235868420F546160EF446429DA58632EEBBA90810F6714500E7B0A73E9DBABFE47307DC6BEC9D911D24DB473988BE04',SigningPubKey: 'EDE80DD6F71A48928EC70B22912D6E9B4005D1D9666939C658F931186CC9DA80B7',TransactionType: 'PaymentChannelClaim',TxnSignature: 'A95B769AC9AD834D4798C1409B3B6708D1D4DFF79DF2F59AA185B358810930A925B948D7BD3E83EF20308FDE75275AFC5B75C164A4D70F8CB49BCDC9148A8D01',ctid: 'C01A9CD100330001',date: 772453560,hash: 'D3F6D62CAE3A3B8C2DAD0DEE314A55145AA1EBF2544C8B09CDD1F698EDE6621E',inLedger: 1744081,ledger_index: 1744081,meta: {AffectedNodes: [Array],TransactionIndex: 51,TransactionResult: 'tecUNFUNDED_PAYMENT' // 失敗},validated: true},type: 'response'}
まとめ
この時点で以下の残高になっていれば、成功していると言えるでしょう。
- アリス: 100.999988 XRP
- ボブ: 89.999988 XRP
アリスとボブのアドレスを、テストネット用のエクスプローラにて確認してみましょう。
- アリスはボブの作成したペイメントチャネルに対して
1 XRP
を請求しましたが、このときトランザクション手数料を負担しているので、実際には0.999988 XRP
を受け取ったことになっています。 - ボブは事前に、
PaymentChannelCreate
トランザクションで10 XRP
をデポジットした際にデポジット分と手数料を支払っているため、残高は89.999988 XRP
になっているかと思います。
さらにトランザクションデータの中身を確認してみると、尚良いかと思います。