コンテンツにスキップ

オファーの作成 | JavaScriptでのXRPL開発 三段編

このガイドはクロスカレンシー送金について、発行者AのA.USD、発行者BのB.EURを取り扱う形で解説しています。

クロスカレンシー送金の学習を進めるためには、はじめにオファーの作成をして流動性を提供する必要があります。

前提

ここまでのステップにて、アリスは発行者AのA.USDを発行者BのB.EURを保有済みです。

アリスが、発行者AのA.USDを発行者BのB.EURを交換したい、という体で進めます。

  • アリスがA.USDを売り、B.EURを買う場合のオファーを作成します。

使用するメソッド

冒頭で作成した以下の汎用的なメソッドを利用します。

utils/OfferCreate.js
// オファーを作成する関数
export async function OfferCreate(client, wallet, takerGets, takerPays) {
try {
const offerCreate = {
TransactionType: 'OfferCreate',
Account: wallet.classicAddress,
TakerGets: takerGets,
TakerPays: takerPays,
};
const response = await client.submitAndWait(offerCreate, { wallet });
console.log(`Offer created for ${wallet.classicAddress}:`, response);
return response;
} catch (error) {
console.error(`Error creating offer for ${wallet.classicAddress}: ${error}`);
throw error;
}
}

スクリプトの作成

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

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

    import { Client, xrpToDrops } from 'xrpl';
    import { wallets } from './wallets.js';
    import { createOffer } from './utils/createOffer.js';
    const client = new Client('wss://s.altnet.rippletest.net:51233'); // テストネットを使用
    async function main() {
    try {
    await client.connect();
    const { issuerA, issuerB, alice, bob, charlie, daniel } = wallets;
    await createOffer(
    client,
    alice,
    { currency: 'USD', issuer: issuerA.address, value: '100' },
    { currency: 'EUR', issuer: issuerB.address, value: '100' }
    );
    } catch (error) {
    console.error(`Error in offer creation: ${error}`);
    } finally {
    await client.disconnect();
    }
    }
    main();

スクリプトの実行

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

    Terminal window
    node issueCurrency.js
  2. 以下のようなコンソールログが表示されれば、成功です。

    Terminal window
    Offer created for r3KQdHtUHUouGkLBFLZRxRYiugbW8cNwyJ: {
    id: 10,
    result: {
    Account: 'r3KQdHtUHUouGkLBFLZRxRYiugbW8cNwyJ',
    Fee: '12',
    Flags: 0,
    LastLedgerSequence: 1050080,
    Sequence: 1046424,
    SigningPubKey: 'ED84F179E4978F5FA3C5DDAA2305A074B954755975135D4CA3E56E2B09124A98AB',
    TakerGets: {
    currency: 'USD',
    issuer: 'rfkJ7Uz6NrNV1FdbmKB5wepoim51KFpYQp',
    value: '100'
    },
    TakerPays: {
    currency: 'EUR',
    issuer: 'rstM9rxhKo4N4WEaQgQmQSPQRgZqkhHkaU',
    value: '100'
    },
    TransactionType: 'OfferCreate',
    TxnSignature: 'D228E9F7B39DC41B8C76B4318C1CCD7D38F6A9CC49BEAD728E75D5E4DE040A1DFEAF01185061091FC608292024F72CB36BD99E17EF06273DAC0060DEF3C18100',
    ctid: 'C01005CE00000001',
    date: 770220351,
    hash: 'D6689FB0EA43663597620E9EE1B68AC852A3FD0686AA95335F9D125D32AE54DC',
    inLedger: 1050062,
    ledger_index: 1050062,
    meta: {
    AffectedNodes: [Array],
    TransactionIndex: 0,
    TransactionResult: 'tesSUCCESS'
    },
    validated: true
    },
    type: 'response'
    }