JavaScript

SolanaでSOLを送信・転送する方法

Last updated June 24, 2024

このガイドでは、Metaplex UmiクライアントラッパーとMPL Toolboxパッケージを利用して、Solanaブロックチェーン上であるウォレットから別のウォレットにSOLを転送するJavaScript関数を構築する方法を紹介します。

前提条件

  • お好みのコードエディタ(Visual Studio Codeを推奨)
  • Node 18.x.x以上
  • 基本的なJavaScriptの知識

初期設定

初期化

お好みのパッケージマネージャー(npm、yarn、pnpm、bun)で新しいプロジェクトを初期化し(オプション)、促される際に必要な詳細を入力することから始めます。

npm init

必要なパッケージ

このガイドに必要なパッケージをインストールします。

npm i @metaplex-foundation/umi
npm i @metaplex-foundation/umi-bundle-defaults
npm i @metaplex-foundation/mpl-toolbox

インポートとラッパー関数

ここで、この特定のガイドに必要なすべてのインポートを定義し、すべてのコードが実行されるラッパー関数を作成します。

import { mplToolbox, transferSol } from '@metaplex-foundation/mpl-toolbox'
import {
generateSigner,
publicKey,
signerIdentity,
sol,
} from '@metaplex-foundation/umi'
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
import { base58 } from '@metaplex-foundation/umi/serializers'
// ラッパー関数の作成
const transfer = async () => {
///
///
/// すべてのコードはここに入ります
///
///
}
// ラッパー関数を実行
transfer()

Umiのセットアップ

この例では、generatedSigner()を使用してUmiをセットアップします。ウォレットや署名者を異なる方法でセットアップしたい場合は、Umiへの接続ガイドをご確認ください。

新しいウォレットの生成

テストに使用する新しいウォレット/秘密鍵を生成したい場合は、umiで新しい署名者を生成できます。

const umi = createUmi("https://api.devnet.solana.com")
.use(mplToolbox())
// 新しいキーペア署名者を生成
const signer = generateSigner(umi)
// Umiに新しい署名者を使用するよう指示
umi.use(signerIdentity(signer))
// これはテスト用にdevnetでのみSOLをエアドロップします
await umi.rpc.airdrop(umi.identity.publicKey)

ローカルに保存されている既存のウォレットを使用

import fs from 'fs';
const umi = createUmi("https://api.devnet.solana.com")
.use(mplToolbox())
// fsを使用してファイルシステムをナビゲートし、
// 相対パスで使用したいウォレットを読み込む必要があります
const walletFile = fs.readFileSync('./keypair.json')
// walletFileをキーペアに変換
let keypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(walletFile));
// キーペアをumiに読み込み
umi.use(keypairIdentity(keypair));

SOLの転送

mpl-toolboxパッケージは、ブロックチェーンで転送を実行するために必要な命令を作成するtransferSolというヘルパー関数を提供しています。

// ここでtransferSol()関数を呼び出し、チェーンに送信します
const res = await transferSol(umi, {
source: umi.identity,
destination: publicKey('111111111111111111111111111111'),
amount: sol(1),
}).sendAndConfirm(umi)

完全なコード例

import { mplToolbox, transferSol } from '@metaplex-foundation/mpl-toolbox'
import {
generateSigner,
publicKey,
signerIdentity,
sol,
} from '@metaplex-foundation/umi'
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
import { base58 } from '@metaplex-foundation/umi/serializers'
const transfer = async () => {
const umi = createUmi("https://api.devnet.solana.com").use(mplToolbox())
const signer = generateSigner(umi)
umi.use(signerIdentity(signer))
// アイデンティティに1 SOLをエアドロップ
// 429 too many requestsエラーが発生した場合は、
// ファイルシステムウォレット方法を使用するかRPCを変更する必要があります
await umi.rpc.airdrop(umi.identity.publicKey, sol(1))
//
// SOLの転送
//
const res = await transferSol(umi, {
source: umi.identity,
destination: publicKey('111111111111111111111111111111'),
amount: sol(1),
}).sendAndConfirm(umi)
// トランザクションのシグネチャをログ
console.log(base58.deserialize(res.signature))
}
transfer()