Skip to main content

ERC721を登録して、情報を取得できるようにしてみる

mutationを登録する

src/grapqhl/mutation.graphql に以下のコードを貼り付けます。

src/graphql/mutation.graphql
mutation createErc721($contractAddress: String!, $chainId: Int!) {
createErc721(contractAddress: $contractAddress, chainId: $chainId) {
name
}
}

登録されているBlockchainを取得するために、queryを修正する

src/graphql/query.graphql
...
# 追記する

query blockchains {
blockchains {
id
name
}
}

型ファイルの生成

*.graphql を編集した時は忘れずにgenerateしましょう!

yarn generate

対応しているBlockchainを取得する

対応しているBlockchainを取得するには次のようなコードで取得できます。

src/fetch-blockchains.ts
import {createClient} from "@urql/core";
import fetch from 'cross-fetch';
import {
BlockchainsDocument,
BlockchainsQuery, BlockchainsQueryVariables,
} from "./generated/graphql";
import 'dotenv/config';


const {GRAPHQL_ENDPOINT, GRAPHQL_API_KEY} = process.env;

if (!GRAPHQL_ENDPOINT) {
throw Error('GRAPHQL_ENDPOINT is not set');
}

if (!GRAPHQL_API_KEY) {
throw Error('GRAPHQL_API_KEY is not set');
}

const client = createClient({
url: GRAPHQL_ENDPOINT,
fetch,
requestPolicy: 'network-only',
fetchOptions: () => {
return { headers: { 'X-API-KEY': GRAPHQL_API_KEY } };
},
});


const fetchBlockchains = async () => {
const results = await client.query<BlockchainsQuery, BlockchainsQueryVariables>(BlockchainsDocument, {}).toPromise();

console.log(results?.data?.blockchains);
}

const main = async () => {
await fetchBlockchains();
}

main().catch(console.error)

実行するには以下のコマンドを入力しましょう。

ts-node src/fetch-blockchains.ts
[
{ id: '1', name: 'ethereum', __typename: 'BlockChain' },
{ id: '5', name: 'goerli', __typename: 'BlockChain' },
{ id: '137', name: 'polygon', __typename: 'BlockChain' },
{ id: '336', name: 'shiden', __typename: 'BlockChain' },
{ id: '80001', name: 'mumbai', __typename: 'BlockChain' }
]

ここでチェーンIdをメモするか、記憶しましょう!

info

EVM互換チェーンを追加したい場合気軽にお問い合わせください!追加します!

NFTを登録する

このAPIは登録したNFTの情報のみ取得できます。まずはNFTを登録してみましょう。

import {createClient} from "@urql/core";
import fetch from 'cross-fetch';
import {
BlockchainsDocument,
BlockchainsQuery, CreateErc721Document, CreateErc721Mutation, CreateErc721MutationVariables,
} from "./generated/graphql";
import 'dotenv/config';

const {GRAPHQL_ENDPOINT, GRAPHQL_API_KEY} = process.env;

if (!GRAPHQL_ENDPOINT) {
throw Error('GRAPHQL_ENDPOINT is not set');
}

if (!GRAPHQL_API_KEY) {
throw Error('GRAPHQL_API_KEY is not set');
}

const client = createClient({
url: GRAPHQL_ENDPOINT,
fetch,
requestPolicy: 'network-only',
fetchOptions: () => {
return { headers: { 'X-API-KEY': GRAPHQL_API_KEY } };
},
});

const registerErc721 = async () => {
// アドレスは適当に変えてください!既に登録されているコントラクトは登録不要です!
const verylongAnimals = "0xC52d9642260830055c986a97794B7b27393Edf5e";
const results = await client
.mutation<CreateErc721Mutation, CreateErc721MutationVariables>
(CreateErc721Document, {contractAddress: verylongAnimals, chainId: 137}).toPromise();

console.log(results.data.createErc721);
}

const main = async () => {
await registerErc721();
}

main().catch(console.error)

実行してみましょう!

ts-node src/register-erc721.ts

登録されてから初回の同期までに2分程度時間がかかります。 お茶でもして待ちましょう!