コンテンツにスキップ

オファーの作成方法 | JavaScriptでのXRPL開発 二段編

はじめに

XRPL(XRP Ledger)は、ネイティブな分散型取引所(DEX)機能を提供しており、ユーザーはオファー(注文)を作成して資産を売買することができます。本記事では、XRPL上でオファーを作成する方法を解説します。

準備

ネイティブ通貨であるXRP以外のトークンを送信する際には、通貨コードとissuerを指定する必要があります。

XRPL上のトークンは必ず発行者が存在しますが、毎回独自に用意していると学習においては効率が悪いため、既存の発行者をあらかじめ特定し、用意しておくことで効率化を図ることができます。

通貨コードUSDを発行済みのアドレスがテストネットでも存在していますので、今回はこちらを利用します。

// GateHub
rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq

スクリプトを作成

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

  2. 以下のコードをcreate_offer.jsに貼り付けます。

    20 XRP200 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();
    1. TakerGetsに自身が提供する資産、TakerPaysに受け取る資産を設定します。

スクリプトの実行

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

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

    Terminal window
    オファー作成結果: {
    id: 10,
    result: {
    Account: 'rP1WwXDZvQHvNiyenBpLvSdx3E8WuUpQc5',
    Fee: '12',
    Flags: 0,
    LastLedgerSequence: 671539,
    Sequence: 477852,
    SigningPubKey: 'EDA0094F9DE33C9BBD4681C9D88407C92A93D7532775B08731572DA419C804BA27',
    TakerGets: '20000000', // 20 XRP
    TakerPays: {
    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に対して注文を出すことが容易に可能となっています。