NFTゲートウェブサイトをつくる方法
11461 ワード
NFsのためのよりダイナミックなユースケースの1つはNFTホルダーへのメンバーシップパスとしてそれらを使用しています.あなたがコレクションから特定のNFTにアクセスすることによってゲートウェイされるあなたのコミュニティのためにウェブサイトを作成したいと仮定しましょう.NFTへのアクセスでダウンロード可能なコンテンツや隠しページを保つことができます.
このガイドでは、我々はコンテンツをNFTを使用して反応を使用してコンテンツを制限するウェブサイトを作成します.
あなたは、我々の例組織から最終的なプロジェクトのコピーをつかむことができます.check it out here .
NFTゲートウェイのウェブサイトを作成するにはNFT Collection ,畝NFT Drop ,畝Edition , またはEdition Drop ブロックは既に配備されています.作成していない場合は、1つを使用して作成することができますTypeScript SDK またはThirdweb ' sdashboard .
私たちの例では、クッキークラブのメンバーのためのクッキークラブというNFTドロップ契約を使用しています.🤫
あなたはクッキークラブnftドロップを表示することができますthirdweb dashboard.
始めるには
まず、cra-javascript-starter GitHub repository をクリックして“このテンプレートを使用して”コピーを作成します.
プロジェクトの名前、説明、およびその他の設定を追加し、ローカルデバイス上でクローンします.ディレクトリを開いて実行する
インサイド
同じフォルダには
同じ
として、私たちの短縮財布のアドレスを表示するヘルパー機能を追加しました
最後に、私たちは
このプロジェクトのコピーを作成できますexample repository.
レッツゴー!あなたが反応を使用してNFTゲート会員のウェブサイトを作成しました.あなたのNFTコミュニティのメンバーのためにこの新しいページの後ろにいくつかのダウンロード可能なコンテンツや秘密の更新を追加してください!
このガイドでは、我々はコンテンツをNFTを使用して反応を使用してコンテンツを制限するウェブサイトを作成します.
あなたは、我々の例組織から最終的なプロジェクトのコピーをつかむことができます.check it out here .
Mint an NFT Drop
NFTゲートウェイのウェブサイトを作成するにはNFT Collection ,畝NFT Drop ,畝Edition , またはEdition Drop ブロックは既に配備されています.作成していない場合は、1つを使用して作成することができますTypeScript SDK またはThirdweb ' sdashboard .
If your NFTs are an NFT Drop or Edition Drop contract, set up claim phases before using the claiming functions mentioned later in the guide.
私たちの例では、クッキークラブのメンバーのためのクッキークラブというNFTドロップ契約を使用しています.🤫
あなたはクッキークラブnftドロップを表示することができますthirdweb dashboard.
テンプレートリポジトリ
始めるには
cra-javascript-template
これはすでに動作しているSDK設定を含んでいます.このテンプレートは簡単に学び、時間を節約するときに私たちのプロジェクトを開始します.If you’d prefer to use your own template, you can install the latest version of our SDK in your project with
npm install @thirdweb-dev/sdk react ethers
oryarn add @thirdweb-dev/sdk react ethers
まず、cra-javascript-starter GitHub repository をクリックして“このテンプレートを使用して”コピーを作成します.
プロジェクトの名前、説明、およびその他の設定を追加し、ローカルデバイス上でクローンします.ディレクトリを開いて実行する
npm install
すべての依存関係をインストールするために、あなたの端末で.ブロックを設定する
インサイド
src
フォルダを開きますindex.js
ファイル.最初に、私たちのNFT低下のチェーンにチェーンIDを変えます.このプロジェクトについてはRinkeby
私たちのNFTドロップ契約はRrinkeby Testnetにあるので.import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { ChainId, ThirdwebProvider } from "@thirdweb-dev/react";
// This is the chainId your dApp will work on.
const activeChainId = ChainId.Rinkeby;
ReactDOM.render(
<React.StrictMode>
<ThirdwebProvider desiredChainId={activeChainId}>
<App />
</ThirdwebProvider>
</React.StrictMode>,
document.getElementById("root")
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
接続ウォレットボタン
同じフォルダには
app.js
ファイル.この1つでは、我々はユーザーにアプリケーションに接続し、我々のユーザーの財布のアドレスを取得できるようにしたい.フロントエンドでは、Metamaskとユーザーが接続できるボタンを作成します.財布が接続されている場合は、対応するアドレスが表示されます.import { useAddress, useMetamask } from "@thirdweb-dev/react";
import "./styles.css";
const App = () => {
// get address of user & allow them to connect with metamask
const address = useAddress();
const connectWithMetamask = useMetamask();
//if there isn't a wallet connected, display our connect MetaMask button
if (!address) {
return (
<>
<h1>Welcome to the Cookie Club</h1>
<button className="btn" onClick={connectWithMetamask}>
Connect MetaMask
</button>
</>
);
}
// if an address is connected, display address
return (
<div>
<p>Your address: {address}</p>
</div>
);
};
export default App;
我々のアプリのように見えるし、実行していることを確認してみましょうnpm start
端末で.条件付きコンテンツをレンダリング
同じ
App.js
ファイルは、ユーザーの接続状態に基づいて特定のページをレンダリングする条件を追加します.彼らがNFTをすでに持たないならば、我々はユーザーにドロップからNFTを造ることができて欲しいです.接続されたユーザーが1を持っているならば、我々は若干の祝辞テキストを表示します.として、私たちの短縮財布のアドレスを表示するヘルパー機能を追加しました
truncateAddress
. お気軽に追加したり、アプリでも同様にこれを省略します.import { useAddress, useMetamask } from '@thirdweb-dev/react';
import { useState, useEffect } from 'react';
import "./styles.css";
const App = () => {
// get address of user & allow them to connect with metamask
const address = useAddress();
const connectWithMetamask = useMetamask();
// add nft Drop contract
const nftDrop = useNFTDrop("0x66463b3C1EBf08b9dE889BCc0A5cbf29dc0e2B7a");
const [hasClaimedNFT, setHasClaimedNFT] = useState(false);
const [isClaiming, setIsClaiming] = useState(false);
// function to claim NFT
const mintNFT = async () => {
try {
setIsClaiming(true);
await nftDrop.claim(1);
setHasClaimedNFT(true);
catch (error) {
setHasClaimedNFT(true);
console.error("Failed to mint NFT", error);
} finally {
setIsClaiming(false);
}
}
//if there isn't a wallet connected, display our connect MetaMask button
if (!address) {
return (
<>
<h1>Welcome to the Cookie Club</h1>
<button className="btn" onClick={connectWithMetamask}>
Connect MetaMask
</button>
</>
);
}
// if the user is connected and has an NFT from the drop, display text
if (hasClaimedNFT) {
return <h2>Congratulations! You have a Cookie NFT! 🍪</h2>;
}
// helper function to truncate the address so it displays in a nice format
function truncateAddress(address) {
return `${address.slice(0, 6)}...${address.slice(-4)}`;
}
//if the user does not have an NFT, show their address and mint an NFT button
return (
<>
<p className="address">
There are no Cookie NFTs held by:{" "}
<span className="value">{truncateAddress(address)}</span>
</p>
<button className="btn mint" disabled={isClaiming} onClick={mintNft}>
Mint NFT
</button>
</>
);
}
export default App;
USE効果を追加して状態変化をチェックする
最後に、私たちは
useEffect
機能は、我々はアプリの最新の状態と最新の状態にしてください.この関数は、依存配列の変更時に毎回トリガされます.例えば、ユーザのアドレスまたはnftDrop
切断または変更、我々はリフレッシュし、それに応じて更新したい.import { useAddress, useMetamask, useNFTDrop } from "@thirdweb-dev/react";
import { useState, useEffect } from "react";
import "./styles.css";
export default function App() {
// allow user to connect to app with metamask, and obtain address
const address = useAddress();
const connectWithMetamask = useMetamask();
//
const nftDrop = useNFTDrop("0x66463b3C1EBf08b9dE889BCc0A5cbf29dc0e2B7a");
const [hasClaimedNFT, setHasClaimedNFT] = useState(false);
const [isClaiming, setIsClaiming] = useState(false);
useEffect(() => {
// If they don't have an connected wallet, exit!
if (!address) {
return;
}
const checkBalance = async () => {
try {
const nfts = await nftDrop.getOwned(address);
setHasClaimedNFT(nfts?.length > 0);
} catch (error) {
setHasClaimedNFT(false);
console.error("Failed to get NFTs", error);
}
};
checkBalance();
}, [address, nftDrop]);
const mintNft = async () => {
try {
setIsClaiming(true);
await nftDrop.claim(1);
setHasClaimedNFT(true);
} catch (error) {
setHasClaimedNFT(false);
console.error("Failed to mint NFT", error);
} finally {
setIsClaiming(false);
}
};
//if there isn't a wallet connected, display our connect MetaMask button
if (!address) {
return (
<>
<h1>Welcome to the Cookie Club</h1>
<button className="btn" onClick={connectWithMetamask}>
Connect MetaMask
</button>
</>
);
}
// if the user is connected and has an NFT from the drop, display text
if (hasClaimedNFT) {
return <h2>Congratulations! You have a Cookie NFT! 🍪</h2>;
}
// truncates the address so it displays in a nice format
function truncateAddress(address) {
return `${address.slice(0, 6)}...${address.slice(-4)}`;
}
// if there are no NFTs from collection in wallet, display button to mint
return (
<>
<p className="address">
There are no Cookie NFTs held by:{" "}
<span className="value">{truncateAddress(address)}</span>
</p>
<button className="btn" disabled={isClaiming} onClick={mintNft}>
Mint NFT
</button>
</>
);
}
export default function app;
プロジェクトへのリンク
このプロジェクトのコピーを作成できますexample repository.
おめでとう!
レッツゴー!あなたが反応を使用してNFTゲート会員のウェブサイトを作成しました.あなたのNFTコミュニティのメンバーのためにこの新しいページの後ろにいくつかのダウンロード可能なコンテンツや秘密の更新を追加してください!
Reference
この問題について(NFTゲートウェブサイトをつくる方法), 我々は、より多くの情報をここで見つけました https://dev.to/thirdweb/how-to-create-an-nft-gated-website-176kテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol