🔗 ブロックチェーンウォレット接続機能の実装方法【Solflare, Phantom, MetaMask対応】
はじめに 🛠️
ブロックチェーンプロジェクトを開発する際、ユーザーがウォレットを接続して操作する機能は重要な要素のひとつです。本記事では、ReactとTypeScript を使用して、以下のウォレット接続機能を実装する方法を解説します。
対応するウォレットは以下の通りです:
- Solflare
- Phantom
- MetaMask
また、ウォレット切り替え機能や接続解除機能も実装します。
途中にコードスニペットやスクリーンショットを挿入し、具体的な手順をわかりやすく説明します!
完成する機能一覧 ✨
- ウォレット接続:3つのウォレット(Solflare, Phantom, MetaMask)に対応。
- ウォレット切り替え:接続中のウォレットを他のウォレットにスイッチ可能。
- 公開鍵の確認:接続中のウォレットの公開鍵を表示。
- ウォレット切断:接続を解除する機能。
- スタイリッシュなUI:ポップアップを用意し、UXを向上。
実装方法 💻
必要なライブラリのインストール
以下のコマンドを使用して、必要なライブラリをインストールします。
npm install @solflare-wallet/sdk
npm install @solana/web3.js
また、MetaMaskの接続にはブラウザの window.ethereum
を利用します。
コードの全体像👀
ウォレット選択画面におけるデザインの例
今回は上記のデザインで実装してみました
基本構造の作成
ウォレット接続のヘッダーを作成します。以下は基本的なReactコンポーネントです。
基本構造
import React, { useState } from 'react';
import Solflare from '@solflare-wallet/sdk';
import { PublicKey } from '@solana/web3.js';
const Header: React.FC = () => {
const [walletConnected, setWalletConnected] = useState(false);
const [walletAddress, setWalletAddress] = useState<string | null>(null);
const [walletType, setWalletType] = useState<'solflare' | 'phantom' | 'metamask' | null>(null);
// Solflareウォレットの初期化
const solflareWallet = new Solflare();
// メインUI
return (
<header>
<h1>Wallet Connection</h1>
{/* 接続ボタン */}
<button onClick={() => console.log("Connect Wallet Button Clicked!")}>
{walletConnected ? `Connected: ${walletAddress?.slice(0, 6)}...` : 'Connect Wallet'}
</button>
</header>
);
};
export default Header;
ウォレット接続機能を追加💸
次に、各ウォレットごとに接続機能を実装します。
ウォレット接続機能
solflare接続
const connectSolflare = async () => {
try {
await solflareWallet.connect();
setWalletType('solflare');
setWalletConnected(true);
setWalletAddress(solflareWallet.publicKey?.toString() || null);
console.log('Solflare Wallet Connected:', solflareWallet.publicKey?.toString());
} catch (error) {
console.error('Solflare connection failed:', error);
}
};
Phantom接続
const connectPhantom = async () => {
try {
const provider = window.solana; // Phantomのプロバイダ
if (!provider?.isPhantom) {
alert('Please install Phantom Wallet.');
return;
}
await provider.connect();
setWalletType('phantom');
setWalletConnected(true);
setWalletAddress(provider.publicKey?.toString() || null);
console.log('Phantom Wallet Connected:', provider.publicKey?.toString());
} catch (error) {
console.error('Phantom connection failed:', error);
}
};
MetaMask接続
const connectMetaMask = async () => {
try {
const ethereum = window.ethereum; // MetaMaskのプロバイダ
if (!ethereum) {
alert('Please install MetaMask.');
return;
}
const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
setWalletType('metamask');
setWalletConnected(true);
setWalletAddress(accounts[0]);
console.log('MetaMask Wallet Connected:', accounts[0]);
} catch (error) {
console.error('MetaMask connection failed:', error);
}
};
ウォレット選択機能の実装
ユーザーがウォレットを選択できるポップアップを作成します。
ポップアップUI
const WalletPopup: React.FC<{ onConnect: (type: 'solflare' | 'phantom' | 'metamask') => void }> = ({ onConnect }) => {
return (
<div className="popup">
<h2>Select Wallet</h2>
<button onClick={() => onConnect('solflare')}>Connect Solflare</button>
<button onClick={() => onConnect('phantom')}>Connect Phantom</button>
<button onClick={() => onConnect('metamask')}>Connect MetaMask</button>
</div>
);
};
// ポップアップの表示ロジック
const [popupVisible, setPopupVisible] = useState(false);
return (
<header>
<h1>Wallet Connection</h1>
<button onClick={() => setPopupVisible(true)}>
{walletConnected ? 'Switch Wallet' : 'Connect Wallet'}
</button>
{popupVisible && (
<WalletPopup
onConnect={(type) => {
setPopupVisible(false);
if (type === 'solflare') connectSolflare();
if (type === 'phantom') connectPhantom();
if (type === 'metamask') connectMetaMask();
}}
/>
)}
</header>
);
ウォレット切断機能🚀
接続したウォレットをログアウトする機能を追加します。
切断機能
const disconnectWallet = () => {
setWalletConnected(false);
setWalletAddress(null);
setWalletType(null);
console.log('Wallet Disconnected');
};
// UIに切断ボタンを追加
<button onClick={disconnectWallet}>Disconnect Wallet</button>
UIの改善
背景を黒に変更
ポップアップの画面の背景を黒に変更し、スタイルを整えます。
.popup {
background-color: black;
color: white;
padding: 20px;
border-radius: 10px;
}
終わりに🤶
この記事では、Reactを活用して複数の仮想通貨ウォレット(Solflare、Phantom、MetaMask)への接続機能を実装する方法を解説しました。これらの機能を統合することで、ユーザーは簡単にウォレットを選択・接続し、切断や切り替えもスムーズに行えます。
仮想通貨ウォレットの実装は、Web3プロジェクトにとって重要な基盤となります。この記事が、あなたのプロジェクトの成功に役立つことを願っています。
質問やフィードバックがあれば、ぜひコメント欄でお知らせください。それでは、次回の記事でお会いしましょう!
Discussion