ウォレットの基本操作として、SOL とトークンを送れるようになりましょう。

プログラムで実現すること

Phantom で SOL やトークンを選択すると、他のウォレットへの送信が行なえます。

この送信をプログラムから行います。

スクリーンショット 2022-06-14 17.14.05.png

SOL の送信

ではプログラムから SOL を送ってみます。

コード

src フォルダの下に「013_transfer_sol.ts」を作り、内容は下記とします。

宛先は「dest_pubkey」として定義していますが、そのままでも変更しても問題ありません。

import { Keypair, Connection, SystemProgram, PublicKey, Transaction } from "@solana/web3.js";
import secret from "../wallet.json";

const RPC_ENDPOINT_URL = "<https://api.devnet.solana.com>";
const COMMITMENT = 'confirmed';

async function main() {
  // RPC へのコネクション作成、秘密鍵読み込み
  const connection = new Connection(RPC_ENDPOINT_URL, COMMITMENT);
  const keypair = Keypair.fromSecretKey(new Uint8Array(secret));
  console.log("endpoint:", connection.rpcEndpoint);
  console.log("wallet pubkey:", keypair.publicKey.toBase58());

  // SOLの宛先
  const dest_pubkey = new PublicKey("vQW71yo6X1FjTwt9gaWtHYeoGMu7W9ehSmNiib7oW5G");

  // 送る量
  const amount = 10_000_000; // lamports = 0.01 SOL

  // SOLを送る命令を作成
  const transfer_ix = SystemProgram.transfer({
    fromPubkey: keypair.publicKey,
    toPubkey: dest_pubkey,
    lamports: amount,
  });

  // トランザクションを作成し、命令を追加
  const tx = new Transaction();
  tx.add(transfer_ix);

  // トランザクションを送信
  const signers = [keypair];
  const signature = await connection.sendTransaction(tx, signers);
  console.log("signature:", signature);

  // トランザクション完了待ち
  const latest_blockhash = await connection.getLatestBlockhash();
  await connection.confirmTransaction({signature, ...latest_blockhash});
}

main();

実行結果

実行し、SOL の送信トランザクションが実行されることを確認します。