当前位置: 首页 > news >正文

查询NFT图片地址

前言

有人给我发了nft,但是没有图片,我就很纳闷为什么,所以想一探究竟

解决思路

先说下环境吧

Sepolia 测试网

metamask钱包

需要获取nft的合约地址和token id    钱包内  nft可以查得到

思路:

我的理解就是ERC721有标准的tokenURI方法,访问该方法可以获取指向元数据的连接,这个元数据存储量nft的基本信息{ "description": "xxx", "symbol": "xxx", "image": "xxx", "name": "xxx" }

话不多说请看代码

代码

import React, { useState } from 'react';
import useMetaMask from './index.js';
import { JsonRpcProvider,Contract } from "ethers";

const Nfts = () => {
  const [tokenURI, setTokenURI] = useState(null);
  const [imageURL, setImageURL] = useState(null);

  // 配置 RPC 提供者(例如 sepolia 测试网)
  const provider = new JsonRpcProvider("https://sepolia.infura.io/v3/xxxx");

  // NFT 合约地址和 Token ID
  const contractAddress = "xxxxx"; // 替换为你的 NFT 合约地址
  const tokenId = "xxxxx"; // 替换为你的 Token ID

  // ERC-721 ABI(只需要包含 tokenURI 方法)
  const abi = [
    "function tokenURI(uint256 tokenId) public view returns (string memory)"
  ];

  // 创建合约实例
  const nftContract = new Contract(contractAddress, abi, provider);

  // 获取 Token URI 的函数
  const fetchTokenURI = async () => {
    try {
      const uri = await nftContract.tokenURI(tokenId);
      console.log("Token URI:", uri);
      setTokenURI(uri);

      // 如果 tokenURI 是一个 URL,尝试获取元数据
      if (uri.startsWith("http")) {
        const response = await fetch(uri);
        const metadata = await response.json();
        console.log("Metadata:", metadata);

        // 提取图片链接
        if (metadata.image) {
          setImageURL(metadata.image.startsWith("ipfs://")
            ? metadata.image.replace("ipfs://", "https://ipfs.io/ipfs/")
            : metadata.image
          );
        }
      }
    } catch (error) {
      console.error("Error fetching token URI:", error);
    }
  };

  return (
    <div>
        <button onClick={fetchTokenURI}>Fetch NFT Metadata</button>
      {/* 显示 tokenURI 和图片 */}
      {tokenURI && (
        <div>
          <p>Token URI: {tokenURI}</p>
          {imageURL && (
            <img src={imageURL} alt="NFT" style={{ width: "300px", height: "300px" }} />
          )}
        </div>
      )}

    </div>
  );
};

export default Nfts;

相关文章:

  • 42 session反序列化漏洞
  • JavaWeb25.02.27
  • 【前端】XML,XPATH,与HTML的关系
  • 推荐算法工程师的技术图谱和学习路径
  • 实验环境搭建集锦(docker linux ros2+强化学习环境+linux上单片机串口调试)
  • Kylin麒麟操作系统服务部署 | Nginx服务部署
  • BRD4缺失通过GRP78灭活内质网应激,延缓脱氢表雄酮诱导的卵巢颗粒细胞凋亡
  • 波导阵列天线 学习笔记11双极化全金属垂直公共馈电平板波导槽阵列天线
  • 【技术笔记】Cadence 实现原理图元器件的自动标号
  • [教程]在CentStream 9简单部署一个Nginx web服务器
  • 基于多层感知机(MLP)实现MNIST手写体识别
  • SpringBoot Maven 项目 pom 中的 plugin 插件用法整理
  • [高等数学] 定积分的概念与性质
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十八)-农夫约翰的奶酪块、蛋糕游戏、奶牛体检
  • linux 后台执行并输出日志
  • Filp动画
  • 大数据SQL调优专题——底层调优
  • OpenCV(11):人脸检测、物体识别
  • Ubuntu本地使用AnythingLLM
  • 网络通信/IP网络划分/子网掩码的概念和使用
  • 市体育局网站 两学一做/推广优化
  • 西安市建设局网站/广州aso优化公司 有限公司
  • 网站设计推荐/动态网站设计
  • 怎么做国外游戏下载网站/商丘seo优化
  • 如何在电脑建设网站/百度网址大全手机版
  • 莆田做鞋有没有网站看/sem竞价广告