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

app rust_graphql_nft_server

用于获取NFT元数据的GraphQL服务器

2 个稳定版本

1.0.1 2022年10月23日
1.0.0 2022年10月22日

#45 in #graphql-server

MIT 许可证

29KB
508 代码行

Rust GraphQL 服务器,用于搜索NFT(元)数据

先决条件

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • 克隆仓库
git clone https://github.com/MarkTanashchuk/rust_graphql_nft.git && cd ./rust_graphql_nft
  • 创建 Infura Web3 API密钥并复制网络端点(带有https)

  • 配置 .env 文件,例如。

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

用法

启动服务器

cargo run --release

打开 localhost:{PORT}。默认情况下为 localhost:8080

入门

注意:仅支持以太坊地址格式和ERC721标准

自定义查询

服务器使用 async-graphql 编写,因此要添加新查询,您需要根据文档更新 graphql/mod.rs 文件。

自定义元数据

要添加带有自定义字段的自定义元数据格式,请向 src/graphql/token/metadata 文件夹添加一个具有所需结构的新文件。

获取单个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
      }
    }
  }
}

获取多个NFT的示例

# Variables
# {
#   "address": "0x7f371bed0bdb2012c01f219ca1c4cbcb35f37aef"
# }

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

故障排除

Api错误:代码 401

TRANSPORT_URL.env 文件中设置不正确,或者提供的 API_KEY 不允许未经授权的访问

如果是 infura,请创建一个新的Web3 API,点击管理密钥,并将完整的Ethereum端点复制到 TRANSPORT_URL 中的 .env 文件。

Abi错误:无效数据

提供给 QueryAPI::query 函数的参数可能无效(https://github.com/tomusdrw/rust-web3/issues/383

获取失败

这可能是一个服务器端错误。请在终端中检查错误消息以获取更多信息。

许可证

根据MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)授权

依赖关系

~27–43MB
~783K SLoC