💰

【Hokusai API】 Walletを接続したユーザが特定のNFTを持っているか検証する

2022/01/26に公開

はじめに

今回は、Hokusai APIを利用した以下の実装例を紹介します。

  • Walletを接続したユーザが特定のNFTを持っているか検証
  • Walletを接続したユーザが何個NFTをもっているか検証

Hokusai APIとは

https://hokusai.app/
Hokusai APIは、NFTのMint(発行)、Transfer(移転)、Burn(消却)、Royaltyの設定、Metadata情報の取得などの機能をAPIとして提供しているサービスです。
自分でコントラクトを書かずにNFTのサービスを作ることができます。

API Keyを発行する

Hokusai APIではTestnet用のAPI Keyを無料で配布しています。
以下のフォームから利用申請を行うことができます。

https://ir9l8pcvcmm.typeform.com/to/xSbuj2WA

Metamaskの実装

今回はWalletとして、一般的であるMetamaskを利用します。
https://docs.metamask.io/guide/#why-metamask

Metamaskでの実装については、過去の記事で紹介しています。
https://zenn.dev/hokusai/articles/aa40fd375cc523#metamaskの実装

ContractのABIの読み込み

コントラクト上の関数を呼び出すためにABIを読み込みます。
Hokusai APIで利用しているコントラクトのABIは以下通りです。
https://github.com/0xhokusai/hokusai-api-client-sample/blob/main/src/abis/ERC721WithRoyaltyMetaTx.json

contractAddressについては、API申請時のメールまたは、管理画面(https://dashboard.hokusai.app)に記載されています。

import HokusaiAbi from '../abis/ERC721WithRoyaltyMetaTx.json';

const contractAddress = 'API申請時のメールに記載されたコントラクトアドレス'
const hokusaiContract = new ethers.Contract(
  contractAddress, 
  HokusaiAbi.abi,
  provider // 前項のMetamaskの実装で取得したprovider
);

Walletを接続したユーザが特定のNFTを持っているか検証

ある特定のtokenIdのNFTの所有者と、Metamaskで接続しているアカウントのアドレスが一致するか確認します。

const signer = provider.getSigner(0); // Metamaskのアカウントを取得
const address = await signer.getAddress(); // Metamaskのアカウントのアドレスを取得
const tokenId = 1;
const tokenHolder = await contract.ownerOf(tokenId); // {tokenId}の所有者

const isHolder = tokenHolder === address; // NFT所有者とMetamaskのアカウントを比較

Walletを接続したユーザが何個NFTをもっているか検証

Hokusai APIで発行したコントラクトはERC721Enumerableに対応しています。
これを利用して、そのコントラクトでMintされたNFTを所有しているユーザのみアクセスできるページなどを実装することができます。

const signer = provider.getSigner(0); // Metamaskのアカウントを取得
const address = await signer.getAddress(); // Metamaskのアカウントのアドレスを取得
const tokenBalance = await contract.balanceOf(address); // NFT所有量を取得

ここでtokenBalance > 0であると、そのコントラクトでMintされたNFTを所有しているユーザとなります。

まとめ

今回は、Hokusai APIを利用した以下の実装例を紹介しました。

  • ownerOf(tokenId)を利用して、Walletを接続したユーザが特定のNFTを持っているか検証
  • balanceOf(address)を利用して、Walletを接続したユーザが何個NFTをもっているか検証

これらを利用して、そのコントラクトでMintされたNFTを所有しているユーザのみアクセスできるページなどを実装することができます。

宣伝

HokusaiはNFTの開発インフラ「Hokusai API」を提供しています。
「デジタル上で価値を流通させたい全ての個人・事業者にとってのインフラ」としてAPIサービスを提供するEmbedded NFTサービスです。

https://hokusai.app/

「Hokusai API」を提供する日本モノバンドル株式会社では、エンジニアを採用中です!
ぜひフルリモートで、スピード感や大きな変化を楽しみながらぜひ働いてみませんか?

https://www.notion.so/0xhokusai/Backend-engineer-aabdbbbb48584113854e9e8102f13d6b

この記事を書いた人


Tarumi - CTO

https://y.at/🔥🍞🔥🍞🔥

Discussion