#nft #ipfs #graphql-server #graphql #env-file #actix #rust

app rust_graphql_nft_server

A GraphQL server for getting NFT's metadata

2 stable releases

1.0.1 Oct 23, 2022
1.0.0 Oct 22, 2022

#45 in #graphql-server

MIT license

29KB
508 lines

Rust GraphQL Server for searching NFT (meta)data

Prerequisites

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Clone the repo
git clone https://github.com/MarkTanashchuk/rust_graphql_nft.git && cd ./rust_graphql_nft
  • Create Infura Web3 API Key and copy network endpoint(with https)

  • Configure .env file, e.g.

TRANSPORT_URL=https://mainnet.infura.io/v3/API_KEY
# PORT=8080 - Optional, 8080 by default

Usage

Start server

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

# Variables
# {
#   "address": "0x7f371bed0bdb2012c01f219ca1c4cbcb35f37aef",
#   "id": 7
# }

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

# 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)

Failed to fetch

This may be a server-side error. Check the error message in the terminal for more information.

License

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

Dependencies

~29–45MB
~812K SLoC