ウォレットの基本操作として、SOL とトークンを送れるようになりましょう。
Phantom で 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 の送信トランザクションが実行されることを確認します。