Wallet Connectボタンを実装しよう
当レッスンは、もし各自の学習状況により以前のプロジェクトと重複があるようでしたら割愛ください。
🌅 イーサリアムオブジェクトを使用する
さて、web3アプリ上ではそれぞれの公開鍵が必要です。
なぜでしょう。
あるウェブサイトがブロックチェーンと情報をやりとりしようとすると、適宜必要に応じて私たちのウォレットと接続する必要があります。
一度私たちがウォレットをウェブサイトと接続するとウェブサイトは私たちの代わりにスマートコントラクトとやりとりします。私たちが許可したことを行ってくれます。
packages/client/srcフォルダの中のApp.jsに向かいましょう。
ここがフロントエンドの基点となります。
メタマスクにログインすると、自動的にethereumというオブジェクトがウィンドウにインジェクトされます。
どのような挙動になるか見ていきましょう。
注意:メタマスクのチェーン選択で自分の本来の目的のブロックチェーン以外のチェーンを選択している状態でもethereumオブジェクトはインジェクトされます。後でそれも実感できるでしょう。
import React, { useEffect } from "react";
import "./styles/App.css";
import twitterLogo from "./assets/twitter-logo.svg";
// 定数
const TWITTER_HANDLE = "UNCHAIN_tech";
const TWITTER_LINK = `https://twitter.com/${TWITTER_HANDLE}`;
const App = () => {
// ウォレットの接続を確認します。
const checkIfWalletIsConnected = () => {
// window.ethereumの設定。この表記法はJavascriptの「分割代入」を参照。
const { ethereum } = window;
if (!ethereum) {
console.log("Make sure you have MetaMask!");
return;
} else {
console.log("We have the ethereum object", ethereum);
}
};
// まだウォレットに接続されていない場合のレンダリングです。
const renderNotConnectedContainer = () => (
<div className="connect-wallet-container">
<img
src="https://media.giphy.com/media/3ohhwytHcusSCXXOUg/giphy.gif"
alt="Ninja gif"
/>
<button className="cta-button connect-wallet-button">
Connect Wallet
</button>
</div>
);
// ページがリロードされると呼び出されます。
useEffect(() => {
checkIfWalletIsConnected();
}, []);
return (
<div className="App">
<div className="container">
<div className="header-container">
<header>
<div className="left">
<p className="title">🐱👤 Ninja Name Service</p>
<p className="subtitle">Your immortal API on the blockchain!</p>
</div>
</header>
</div>
{/* render 関数をここに追加します */}
{renderNotConnectedContainer()}
<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 with @${TWITTER_HANDLE}`}
</a>
</div>
</div>
</div>
);
};
export default App;
これでメタマスク拡張機能がインストールされているかのロジックを作成しました。
ページを更新するとブラウザのDevコンソールにはWe have the ethereum objectと表示されるでしょう(メタマスクがインストール済みの場合)。
ページを好みに合わせてカスタマイズしてみてください。GIF の参考サイトです。
