メインコンテンツへスキップ

トークンとNFTの転送

このガイドでは、OCAP Clientを使用して、アカウント間でファンジブルトークン(ネイティブおよびカスタム)とノンファンジブルトークン(NFTまたはアセット)を転送するためのステップバイステップのウォークスルーを提供します。すべての転送の主要なメソッドはclient.transfer()です。

このガイドでは、OCAP Clientを使用して、アカウント間でファンジブルトークン(ネイティブおよびカスタム)とノンファンジブルトークン(NFTまたはアセット)を転送するためのステップバイステップのウォークスルーを提供します。すべての転送の主要なメソッドはclient.transfer()です。

覚えておくべき重要な機能の1つは、新しいアカウントが最初の着信トランザクションを受信したときに、オンチェーンで自動的に作成されることです。つまり、受信者の事前設定なしで、全く新しいアドレスにトークンやアセットを転送できます。

transfer メソッド

client.transfer()メソッドは、アセットやトークンを送信するプロセスを簡素化する多機能なヘルパー関数です。単一の呼び出しで、適切なトランザクション(transferV2Tx)を構築、署名し、ブロックチェーンに送信します。

パラメータ

  • to string (required) — 受信者のアカウントアドレス。有効なDIDアドレスである必要があります。
  • wallet WalletObject (required) — トランザクションの署名に使用される送信者のウォレットオブジェクト。
  • token number (default: 0) — 転送するチェーンのネイティブトークンの量。クライアントが自動的に正しい小数点以下の単位に変換します。
  • assets string[] (default: []) — 転送するアセットアドレス(NFT)の配列。
  • tokens object[] (default: []) — 転送するカスタムファンジブルトークンオブジェクトの配列。
    • address string (required) — カスタムトークンコントラクトのアドレス。
    • value number (required) — 転送するカスタムトークンの量。
  • memo string — トランザクションに含めるオプションのメッセージまたはメモ。
  • delegator string — walletが別のアカウントの代理として機能している場合、これは委任元アカウントのアドレスである必要があります。詳細については、権限の委任ガイドを参照してください。

戻り値

  • Promise Promise — ブロックチェーンへの送信が成功すると、トランザクションハッシュに解決されるPromise。

ステップバイステップの例

前提条件

開始する前に、以下のものがあることを確認してください:

  1. https://beta.abtnetwork.ioのようなチェーンホストに接続された初期化済みのGraphQLClient
  2. 転送とトランザクション手数料をカバーするのに十分なトークンが入金された送信者のウォレットオブジェクト(senderWallet)。
  3. アドレスを取得するための受信者のウォレットオブジェクト(recipientWallet)。受信者のアカウントはまだオンチェーンに存在している必要はありません。

基本設定

javascript
import GraphQLClient from '@ocap/client';
import { fromRandom } from '@ocap/wallet';

// 1. クライアントを初期化
const client = new GraphQLClient({ endpoint: 'https://beta.abtnetwork.io/api' });

// 2. 送信者と受信者のウォレットを作成
// 実際のアプリケーションでは、送信者のウォレットはランダムに作成されるのではなく、ロードされます。
const senderWallet = fromRandom(); // このウォレットには資金が入っていると仮定します
const recipientWallet = fromRandom();

console.log(`Sender Address: ${senderWallet.address}`);
console.log(`Recipient Address: ${recipientWallet.address}`);

// この例のために送信者のウォレットに資金を供給するには、フォーセットを使用してください:
// https://faucet.abtnetwork.io/

例1:ネイティブトークンの転送

この例では、送信者から受信者に10ネイティブトークンを送信する方法を示します。

ネイティブトークンの転送

javascript
async function transferNativeTokens() {
  try {
    const hash = await client.transfer({
      to: recipientWallet.address,
      token: 10, // 送信するネイティブトークンの量
      wallet: senderWallet,
      memo: 'Sending you 10 native tokens!'
    });
    console.log('Native token transfer successful. Tx Hash:', hash);
  } catch (err) {
    console.error('Error transferring tokens:', err);
  }
}

transferNativeTokens();

例2:NFT(アセット)の転送

NFTを転送するには、その一意のアセットアドレスが必要です。まず、アセットを作成または取得します(アセット(NFT)の管理を参照)。この例では、senderWalletがすでにアドレスzNKj...を持つNFTを所有していると仮定します。

NFTの転送

javascript
async function transferNFT() {
  // これがsenderWalletが所有するNFTのアドレスであると仮定します
  const nftAddress = 'zNKjL4wTmxQPk5nN2ADDPCd58286b2de3f3e';

  try {
    const hash = await client.transfer({
      to: recipientWallet.address,
      assets: [nftAddress], // アセットアドレスの配列
      wallet: senderWallet,
      memo: 'Here is the NFT you wanted.'
    });
    console.log('NFT transfer successful. Tx Hash:', hash);
  } catch (err) {
    console.error('Error transferring NFT:', err);
  }
}

transferNFT();

例3:カスタムトークンの転送

この例では、カスタムファンジブルトークンを転送する方法を示します。トークンのコントラクトアドレスが必要です。カスタムトークンの作成については、トークンの管理ガイドを参照してください。

カスタムトークンの転送

javascript
async function transferCustomToken() {
  // これがsenderWalletが所有するカスタムトークンのアドレスであると仮定します
  const customTokenAddress = 'z37bA4x...';

  try {
    const hash = await client.transfer({
      to: recipientWallet.address,
      wallet: senderWallet,
      tokens: [
        { address: customTokenAddress, value: 50 } // カスタムトークン50単位
      ],
      memo: 'Sending 50 custom tokens.'
    });
    console.log('Custom token transfer successful. Tx Hash:', hash);
  } catch (err) {
    console.error('Error transferring custom token:', err);
  }
}

transferCustomToken();

例4:複合転送

ネイティブトークン、カスタムトークン、および複数のNFTをすべて単一のアトミックなトランザクションで送信できます。これは非常に効率的です。

複合転送

javascript
async function combinedTransfer() {
  // これらがsenderWalletが所有するアセットとトークンのアドレスであると仮定します
  const nftAddress1 = 'zNKjL4wTmxQPk5nN2ADDPCd58286b2de3f3e';
  const nftAddress2 = 'zNKiabcdeQPk5nN2ADDPCd58286b2defghj';
  const customTokenAddress = 'z37bA4x...'; // カスタムファンジブルトークンのアドレス

  try {
    const hash = await client.transfer({
      to: recipientWallet.address,
      wallet: senderWallet,
      token: 5, // 5ネイティブトークン
      assets: [nftAddress1, nftAddress2], // 2つのNFTの配列
      tokens: [
        { address: customTokenAddress, value: 50 } // カスタムトークン50単位
      ],
      memo: 'Sending a mix of tokens and NFTs.'
    });
    console.log('Combined transfer successful. Tx Hash:', hash);
  } catch (err) {
    console.error('Error with combined transfer:', err);
  }
}

combinedTransfer();

これらの例に従うことで、アプリケーションでトークンとNFTの転送を簡単に実装できます。転送したいアイテムの作成に関する詳細については、関連ガイドを参照してください。

参考文献