オファーの作成方法 | JavaScriptでのXRPL開発 二段編
はじめに
XRPL(XRP Ledger)は、ネイティブな分散型取引所(DEX)機能を提供しており、ユーザーはオファー(注文)を作成して資産を売買することができます。本記事では、XRPL上でオファーを作成する方法を解説します。
準備
ネイティブ通貨であるXRP
以外のトークンを送信する際には、通貨コードとissuer
を指定する必要があります。
XRPL上のトークンは必ず発行者が存在しますが、毎回独自に用意していると学習においては効率が悪いため、既存の発行者をあらかじめ特定し、用意しておくことで効率化を図ることができます。
通貨コードUSD
を発行済みのアドレスがテストネットでも存在していますので、今回はこちらを利用します。
// GateHubrhub8VRN55s94qWKDv6jmDy1pUykJzF3wq
スクリプトを作成
-
プロジェクトディレクトリに
create_offer.js
という新しいファイルを作成します。 -
以下のコードを
create_offer.js
に貼り付けます。20 XRP
で200 USD
トークンを購入するオファーを作成してみます。const xrpl = require('xrpl');async function createOffer() {const client = new xrpl.Client('wss://s.altnet.rippletest.net:51233'); // テストネットawait client.connect();const wallet = xrpl.Wallet.fromSeed('your_wallet_seed'); // ウォレットのシークレットキー// オファー(注文)の作成const offer = {TransactionType: 'OfferCreate', // オファーの作成Account: wallet.address, // 送金元ウォレットのアドレスTakerGets: xrpl.xrpToDrops(20), // 支払う資産の金額(ここでは20 XRP)TakerPays: {currency: 'USD', // 受け取りたい通貨コードissuer: 'rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq', // USD発行元(GateHub)value: '200', // 受け取りたい金額},};const prepared = await client.autofill(offer); // トランザクションを自動的に補完const signed = wallet.sign(prepared); // トランザクションに署名const result = await client.submitAndWait(signed); // 送信console.log('オファー作成結果:', result);await client.disconnect();}createOffer();- TakerGetsに自身が提供する資産、TakerPaysに受け取る資産を設定します。
スクリプトの実行
-
コマンドラインで以下のコマンドを実行して、スクリプトを実行します。
Terminal window node create_offer.js -
成功すれば、コンソールに以下が表示されます。
Terminal window オファー作成結果: {id: 10,result: {Account: 'rP1WwXDZvQHvNiyenBpLvSdx3E8WuUpQc5',Fee: '12',Flags: 0,LastLedgerSequence: 671539,Sequence: 477852,SigningPubKey: 'EDA0094F9DE33C9BBD4681C9D88407C92A93D7532775B08731572DA419C804BA27',TakerGets: '20000000', // 20 XRPTakerPays: {currency: 'USD', // 通貨コードissuer: 'rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq',value: '200' // 200 USD},TransactionType: 'OfferCreate',TxnSignature: '9499CCD90E522641E92E53836B583F80D4044C1340571FF8BE4B68EE2A7E15238A1F78418A7CCB274576622BC44EE4F2B8E38EFBCAEC10ED8442C9C3BBF31C04',ctid: 'C00A3F2100010001',date: 769022540,hash: '19A8E96B7222B4C0C05DB2A782FEB211C28E824A73B6A17670D34D47C7694668',inLedger: 671521,ledger_index: 671521,meta: {AffectedNodes: [Array],TransactionIndex: 1,TransactionResult: 'tesSUCCESS' // 成功},validated: true},type: 'response'}オファーの作成が成功しました。
仮にこのUSDがステーブルコインだった場合、実際には現時点(2024/05/15)で、
20 XRP
(約10ドルほど)に対して200 USD
支払って交換したいという人はいないため、注文が通る可能性は極めて低いですが、 このようにXRPLでは、ネイティブDEXに対して注文を出すことが容易に可能となっています。