これはno plan inc.の Advent Calendar 2022の11日目の記事です。
no plan株式会社ではNFTホルダー限定のコミュニティサイト「ReCone」を開発しています!
今日はその中身の技術の話しなどさせていただきます!
ReConeとは
ReCone(リコーン)とは、NFTホルダー限定の半クローズコミュニティプラットフォームです。
NFTを持っている人が世界中から集まり、限定ライブや限定投稿、限定チャットなどによって、クリエイターやファン同士の交流が促進され、NFTの価値を向上することができます。
このように、NFTを持っている人に特別な情報を届けることができます。
NFTの所有判定について
ReConeでは、あらゆるNFT規格、あらゆるNFTのネットワークに対応するべく、NFTの所有判定の実装を行なっています。
現在対応しているNFTの規格としては
- ERC-721
- ERC-1155
また対応しているネットワークとしては
- Ethereum
- Polygon
- Shiden
になります。しかしながら、
NFTの所有者情報を使ったサービスで特有のつらみが発生することがわかりました
NFTの所有者情報を使ったサービスでのつらみ
1: ERC-721でNFT所有者を把握する
以前ReConeでは、「Alchemy」というサービスでノードをレンタルしNFTのOwnerOf関数を叩いてこのNFT誰が持っているのかを実装していました。
2: ERC-1155にはownerOf関数がないことに気づく
ERC-1155のドキュメントを見るとownerOf関数がありませんでした。
3: 2の解決案としてownerOf関数の代わりにbalanceOf関数 と balanceOfBatch関数を利用
- balanceOf関数は誰が何個持っているかがわかる関数になります
- しかしbalanceOf関数は引数にウォレットアドレスを取るため、目的であるNFT所有者を把握したい場合には使用できません
- 対策としては、BatchTransferとSingleTransferという関数を呼び出し、Transaction履歴を追跡すると所有者情報を取得するようにしました
4: 3の解決策をしても、SingleとBatchの2つを気にする必要がある
- 目的のNFTがBatchでTransferされたのかSingleでTransferされたのかを意識する必要がありました
5: 4の解決策をしてもメモリに乗り切れない
- OpenSeaなどの巨大NFTコントラクト(1コントラクトにたくさんのTransaction履歴がある)場合、大体のサーバーではメモリに乗り切れずクラッシュが発生します
- 解決策としては、サーバーで処理できる数でページネーションを行い、分けて処理を記述しましょう
6: 5が解決してもマルチチェーン対応でつまる
- 別のネットワークのNFTの情報も欲しくなってバッチが終わらなくなってきます
7: 6を解決してもデータ、CPUとメモリを圧迫が激しい
- めちゃめちゃ圧迫されました
どう解決すべきか
弊社の見解としては、
「NFTの所有者情報の実装をサービスごとに独自実装するべきでない」
という見解になりました
no plan株式会社ではこのつらみを解決するAPIを公開しています
- TIUS API (https://tius.dev)
TIUS APIについて
このAPIではNFTの判定にこの呼び出しのコードだけで実現でき、上記のつらみを解決することができます
import {createClient} from "@urql/core";
import fetch from 'cross-fetch';
const client = createClient({
url: GRAPHQL_ENDPOINT,
fetch,
requestPolicy: 'network-only',
fetchOptions: () => {
return { headers: { 'X-API-KEY': GRAPHQL_API_KEY } };
},
});
const getOwner = async () => {
const results = await client.query<
GetOwnerQuery,
GetOwnerQueryVariables
>(GetOwnerDocument,
{
address: "0xC52d9642260830055c986a97794B7b27393Edf5e"
}).toPromise();
results?.data?.erc721ByContractAddress?.tokens
.forEach(token => {
console.log(token.tokenId);
console.log(token.ownerAddress)
});
}
まとめ
- ReConeはNFTホルダー向けのプラットフォームです
- NFTの所有者情報を使ったプロダクトはつらみがあります
- NFTの所有者情報はTIUS APIで簡単に実現できます
no plan株式会社について
- no plan株式会社は、ブロックチェーン技術、Webサイト開発、ネイティブアプリ開発、チーム育成、などWebサービス全般の開発から運用や教育、支援などを行っています。よくわからない、ふわふわしたノープラン状態でも大丈夫!ご一緒にプランを立てていきましょう!
- no plan株式会社について
- no plan株式会社 | ブロックチェーン実績
- no plan株式会社 | ブログ一覧
- お問合せはこちら