Rust GraphQL Server for searching NFT (meta)data

Prerequisites

cli curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

cli git clone https://github.com/MarkTanashchuk/rust_graphql_nft.git && cd ./rust_graphql_nft

```env TRANSPORTURL=https://mainnet.infura.io/v3/APIKEY

NAME - Optional for Authorization, "admin" by default

PASSWORD - Optional for Authorization, "admin" by default

PORT=8080 - Optional, 8080 by default

```

Usage

Start server

cli cargo run --release

Open localhost:{PORT}. By default localhost:8080

Get Started

Note: Only Ethereum address format and ERC721 standard are supported

Custom queries

The server is written using async-graphql, so to add new queries you need to update the graphql/mod.rs file according to docs.

Custom Metadata

To add custom metadata formats with custom fields, add a new file with the required structure to the src/graphql/token/metadata folder.

Example of getting single NFT

```graphql

Variables

{

"address": "0x7f371bed0bdb2012c01f219ca1c4cbcb35f37aef",

"id": "10"

}

query GetTokenWithMetadata($address: String!, $id: String!) { ethToken(address: $address, id: $id) { tokenAddress tokenId tokenURI tokenMetadata { name description image attributes { traitType value } } } } ```

Example of getting multiple NFTs

```graphql

Variables

{

"address": "0x7f371bed0bdb2012c01f219ca1c4cbcb35f37aef",

}

query GetTokenWithMetadata($address: String!) { ethTokens(address: $address) { tokenAddress tokenId tokenURI tokenMetadata { name description image attributes { traitType value } } } } ```

Troubleshooting

Api error: code 401

The TRANSPORT_URL in the .env file is set incorrectly or the provided API_KEY does not allow unauthorized access

In case of infura, create a new Web3 API, click Manage Key and copy the full Ethereum endpoint into TRANSPORT_URL in the .env file.

"Abi error: Invalid data"

Parameters provided to the QueryAPI::query function may be invalid(https://github.com/tomusdrw/rust-web3/issues/383)

License

Licensed under MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)