Phantom Walletを設定しよう!
🤖 ローカル開発環境を設定する
※ GitHubアカウントの初期設定がお済みでない方は、アカウント設定を行ってからお進みください。
まず、 この GitHub リンク にアクセスして、ページの右上にある[Fork]ボタンを押してください。
このリポジトリをフォークすると、自分のGitHubに同一のリポジトリがコピーされます。
次に、新しくフォークされたリポジトリをローカルに保存します。
Code
ボタンをクリックして、コピーしたリポジトリのリンクをコピーしてください。
最後に、ターミナルでcd
コマンドを実行してプロジェクトが存在するディレクトリまで移動し、次のコマンドを実行します。
※ YOUR_FORKED_LINK
に先ほどコピーしたリポジトリのリンクを張り付けましょう。
git clone YOUR_FORKED_LINK
無事に複製されたらローカル開発環境の準備は完了です。
🔌 Phantom Wallet をインストールする
このプロジェクトでは、Phantom Walletという、Solana専用のウォレットを使用します。
まずはブラウザに拡張機能をダウンロードしてPhantom Walletをセットアップしてください。
Phantom Walletは Chrome、 Brave、 Firefox、および Edge をサポートしています。
Chromeの方はこちらからPhantom Walletをインストールすることがきます。
インストールが完了したら、Phantom WalletのネットワークをDevnetに変更しておきましょう。
※ 今回はDevnetを使用するので、ウォレットもDevnetに変更する必要があります。
- 「設定」→「デベロッパー設定」→「ネットワークの変更」→「Devnet」から変更できます。
※ 本プロジェクトではBraveとChromeでのみ動作が確認できます。
👻 Solana オブジェクトを設定する
WebアプリケーションがSolanaブロックチェーンと通信するためには、WebアプリケーションとPhantom Walletを接続する必要があります。
これは、通常のWebサイトへのログインと同じく、Solanaブロックチェーンと通信するために必要な 認証 のようなものです。
それでは、まずはsrc/App.js
ファイルを開き、 App.js
を以下のとおり変更しましょう( App.js
はアプリケーションのメインエントリポイントとなるファイルです)。
// Reactを使用します。
import React, { useEffect } from "react";
import twitterLogo from "./assets/twitter-logo.svg";
import "./App.css";
// 定数を宣言します。
const TWITTER_HANDLE = "あなたのTwitterハンドル";
const TWITTER_LINK = `https://twitter.com/${TWITTER_HANDLE}`;
const App = () => {
/*
* Phantom Walletが接続されているかどうかを確認するための関数です。
*/
const checkIfWalletIsConnected = async () => {
try {
const { solana } = window;
if (solana && solana.isPhantom) {
console.log("Phantom wallet found!");
} else {
alert("Solana object not found! Get a Phantom Wallet 👻");
}
} catch (error) {
console.error(error);
}
};
/*
* 初回のレンダリング時にのみ、Phantom Walletが接続されているかどうか確認します。
*/
useEffect(() => {
const onLoad = async () => {
await checkIfWalletIsConnected();
};
window.addEventListener("load", onLoad);
return () => window.removeEventListener("load", onLoad);
}, []);
return (
<div className="App">
<div className="container">
<div className="header-container">
<p className="header">🖼 GIF Portal</p>
<p className="sub-text">View your GIF collection ✨</p>
</div>
<div className="footer-container">
<img alt="Twitter Logo" className="twitter-logo" src={twitterLogo} />
<a
className="footer-text"
href={TWITTER_LINK}
target="_blank"
rel="noreferrer"
>{`built on @${TWITTER_HANDLE}`}</a>
</div>
</div>
</div>
);
};
export default App;
App.js
を分解して説明していきます。
const checkIfWalletIsConnected = async () => {
try {
const { solana } = window;
if (solana && solana.isPhantom) {
console.log("Phantom wallet found!");
} else {
alert("Solana object not found! Get a Phantom Wallet 👻");
}
} catch (error) {
console.error(error);
}
};
ブラウザにPhantom Walletがインストールされている場合は、DOM のwindow
オブジェクトにPhantom Walletのsolana
という名前の特別なオブジェクトが自動的に代入されます。
checkIfWalletIsConnected