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分程度時間がかかります。 お茶でもして待ちましょう!