ユーザー間のトークンの送金 | JavaScriptでのXRPL開発初段編
これまでの章で、アリスとボブはチャーリーが発行体となるDOJ
トークンを受領できる権利(トラストライン)を得ました。
アリスは、すでにチャーリーから1000 DOJ
ほどトークンを受領しているので、試しにアリスからボブに100 DOJ
を送付してみます。
前提
このガイドでは、以下の登場人物が登場する設定で進行します。
- チャーリー(トークン発行者)
- アリス(差出人)
- ボブ(受取人)
スクリプトを作成
以下は、アリスからボブにDOJ
トークンを送金するスクリプトです。
-
プロジェクトディレクトリに
payment_token_ab.js
という新しいファイルを作成します。 -
以下のコードを
payment_token_ab.js
に貼り付けます。const xrpl = require('xrpl');async function paymentTokenAB() {// Testnetサーバーに接続しますconst client = new xrpl.Client('wss://s.altnet.rippletest.net:51233');await client.connect();// アリスのウォレットを設定const senderWallet = xrpl.Wallet.fromSecret('alice_wallet_secret_here');// ボブのウォレットアドレスを設定const recipientWalletAddress = 'bob_wallet_address_here';// トークン発行者のウォレットアドレスを設定(チャーリー)const issuerWalletAddress = 'charlie_wallet_address_here';const currencyCode = 'DOJ'; // トークンの通貨コードconst amount = '100'; // 送金するトークンの量const response = await client.submitAndWait({TransactionType: 'Payment', // 支払いAccount: senderWallet.address, // アリスのアドレスDestination: recipientWalletAddress, // ボブのアドレスAmount: {issuer: issuerWalletAddress, // トークン発行者のアドレス(チャーリー)currency: currencyCode, // DOJvalue: amount, // 100},},{ wallet: senderWallet } // アリスのウォレットで認証);// コンソールに結果を出力しますconsole.log('Transaction result:', response);// client.disconnect()メソッドを呼び出して、サーバーとの接続を切断しますclient.disconnect();}paymentTokenAB().catch(console.error);alice_wallet_secret_here
には、テストネットのアリスのシークレットキーを入力してください。bob_wallet_address_here
には、テストネットのボブのアドレスを入力してください。charlie_wallet_address_here
には、テストネットのチャーリーのアドレスを入力してください。
スクリプトの実行
-
コマンドラインで以下のコマンドを実行して、スクリプトを実行します。
Terminal window node payment_token_ab.js -
コンソールの結果を確認してみましょう。
Terminal window {id: 14,result: {Account: 'rQr8KfkCQcpqvFwmRspDoaL36reZhcdaeA', // 差出人のアドレス(アリス)Amount: {currency: 'DOJ',issuer: 'rh8xETfGs1Ktizj9EXZb5QpW4aqk8bWUSU', // トークン発行者のアドレス(チャーリー)value: '100'},DeliverMax: {currency: 'DOJ',issuer: 'rh8xETfGs1Ktizj9EXZb5QpW4aqk8bWUSU',value: '100'},Destination: 'rDNVaJJSp9iQmHC8YAAwHytnLP9aXEPhDw', // ボブのアドレスFee: '12', // 送金手数料: 12 dropsFlags: 0,LastLedgerSequence: 475731,Sequence: 474065,SigningPubKey: 'ED2924DBD08E093DD7FC9C35B8DCEBD74CA4C8349D68D7BF566AD6C2533B8BB865',TransactionType: 'Payment',TxnSignature: '54F6F1198988F0F446B674119D383B73629DB6602B68E740BAE8A68E60F88A9E2D305D7B0113E8906433AB26AFAC32551FB5E2A059E43CD708E71A4281D80007', // ハッシュ値ctid: 'C0074241004B0001',date: 768405010,hash: '9F0350EC836C5A76AF1989FE5591DD3A91AD4345601AEA1187DD67EE7E820732',inLedger: 475713,ledger_index: 475713, // レジャーインデックス番号meta: {AffectedNodes: [Array],TransactionIndex: 75,TransactionResult: 'tecPATH_DRY' // 失敗},validated: true // 検証済みのトランザクション},type: 'response'}このアリスからボブへの
Payment Transaction
は失敗してしまったようです。TransactionResult
のtecPATH_DRY
は送金失敗のステータス(テックコード)です。ここで一度、ステータス(テックコード)について学習してみましょう。またテックコードについてはこちらにて一覧を確認できます。
ユーザー間のトークンの送付について
アリスとボブはトラストラインを設定したものの、トークンの送付に失敗しました。
失敗した理由はなぜでしょうか?
まずは、IOUトークンという概念について勉強してみましょう!
トークン送付の仕組み
XRPLでは、基本的にはトークンは発行者を介してのみやりとりが許可されています。なぜなら、XRPLで発行されるトークンは債権だからです。
現実世界の例で考えると、特定のストアが発行したポイントを勝手に他人へ送付できることに違和感があるように、XRPL上でも基本的には第三者間で直接トークンをやりとりできないようになっています。 発行者を介してのみトークンが取引が可能になっているのは、トークン(債券)の信頼と管理を維持するためです。
トークンを送付するには?
XRPLでは前述の通り、トークンは発行者を介してのみやりとりが許可されていますが、発行者アカウントの設定を変更することで、発行者を仲介機関として扱うことができるようになり、発行者以外のユーザー間でのIOUトークンを送付を許可することができます。
この残高の調整機能は、Ripplingと呼び、同一通貨のトラストラインを有する複数のユーザー間でのやり取りを指します。
つまり、このガイドでは、チャーリーのアカウント情報のRippling
を許可する必要があるということです。
許可方法については、次の章で説明します。