创建专属 ERC-721 NFT:基于 NFT.Storage 与 Remix IDE 的完整指南

·

非同质化代币(NFT)通过链上智能合约标准 ERC-721 实现管理。此类合约通常通过将每个代币 ID 与指向链外数字资产的 URL 关联,来生成唯一代币标识。随着 Web3 对内容持久性与去中心化存储的要求日益提升,将 NFT 元数据、图像等资源托管于长期稳定的去中心化链外存储,已成为行业共识。

本文将逐步指导您如何将文件上传至免费去中心化存储平台 NFT.Storage,创建合规的 NFT 元数据,并最终通过 Remix IDE 完成链上铸造。请注意,本文适用于已具备 JSON 基础知识和 Remix IDE 操作经验的读者。

如何上传文件至 NFT.Storage

NFT.Storage 是由 IPFS 和 Filecoin 提供支持的免费去中心化存储平台。其中,星际文件系统(IPFS)负责为上传文件生成寻址标识,而 Filecoin 则通过时空证明(Proof-of-Spacetime)和复制证明(Proof-of-Replication)机制,确保内容的长期持久性。

IPFS 会为每个上传至 NFT.Storage 的文件生成一个专属 IPFS URL,该 URL 由 IPFS 协议头(ipfs://)和唯一内容标识符(CID)组成。在 NFT 元数据中使用此类 URL,可确保代币始终指向正确的数字资产。

文件上传步骤

  1. 访问 NFT.Storage 并登录账户。
  2. 进入文件管理页面(如未自动跳转,请点击“Files”标签)。
  3. 点击“Upload”按钮打开上传界面。
  4. 通过“Choose File”选择本地设备中的目标文件。
  5. 确认后点击“Upload”开始上传。
  6. 上传完成后,点击文件旁的“Action”按钮,复制以下关键信息:

    • IPFS URL(格式为 ipfs:// 开头)
    • 文件对应的 CID 哈希值

实际操作中,通常先上传数字资产(如图像)获取其 IPFS URL,再将此 URL 嵌入元数据文件中,最后将元数据文件上传至 NFT.Storage。最终,您将使用元数据的 IPFS URL 进行链上铸造。

如何创建 NFT 元数据

元数据以 JSON 格式存储 NFT 的核心信息,包括名称、描述和图像链接等。各大 NFT 市场依赖元数据来展示商品详情,因此务必遵循官方 ERC-721 元数据标准Enjin 扩展建议

元数据创建流程

  1. 新建文本文件,并将其后缀命名为 .json
  2. 复制以下基础元数据模板(JSON Schema)至文件中:
{
  "title": "Asset Metadata",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Identifies the asset to which this NFT represents"
    },
    "description": {
      "type": "string",
      "description": "Describes the asset to which this NFT represents"
    },
    "image": {
      "type": "string",
      "description": "A URI pointing to a resource with mime type image/* representing the asset to which this NFT represents. Consider making any images at a width between 320 and 1080 pixels and aspect ratio between 1.91:1 and 4:5 inclusive."
    }
  }
}
  1. 编辑模板,将 image 字段中的描述替换为实际图像的 IPFS URL(格式如下):
"image": {
  "description": "ipfs://您的图像CID"
}
  1. 保存修改后的元数据文件,并将其上传至 NFT.Storage。
  2. 上传完成后,点击元数据文件的“Action”按钮,复制其 IPFS URL(即元数据的令牌 URI)。

获得元数据 IPFS URL 后,即可依据 ERC-721 标准进行链上铸造。

如何铸造 ERC-721 NFT

本节将以创建唯一 NFT(单版本)为例,演示如何使用 Remix IDE 结合已上传的元数据 IPFS URL,按 ERC-721 标准完成铸造。

使用 Remix IDE 铸造步骤

  1. 在 Remix IDE 中创建新文件,后缀为 .sol
  2. 复制以下 ERC-721 智能合约代码至编辑器:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyToken is ERC721, ERC721URIStorage, Ownable {
    constructor() ERC721("MyToken", "MTK") {}
    function safeMint(address to, uint256 tokenId, string memory uri)
        public
        onlyOwner
    {
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }
    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }
}
  1. 将合约名称“MyToken”和代币符号“MTK”修改为自定义内容。
  2. 点击“Solidity Compiler”标签,选择对应编译器版本后点击“Compile”进行编译。
  3. 切换到“Deploy & Run Transactions”标签,从合约下拉菜单中选择“MyToken”。
  4. 点击“Deploy”部署合约。
  5. 部署成功后,在部署记录中展开合约实例并复制其地址。
  6. 返回编译器标签,再次确认选中“MyToken”合约。
  7. 在部署后的合约交互界面中,找到“safeMint”函数。
  8. 填写参数:

    • to:输入您的以太坊地址
    • tokenId:设置 NFT 的唯一 ID(数字)
    • uri:粘贴从 NFT.Storage 复制的元数据 IPFS URL
  9. 点击“transact”按钮执行铸造交易。

恭喜!您已成功完成 ERC-721 NFT 的链上铸造。若想进一步探索高级部署策略与多链发行技巧,👉 查看实时铸造工具 以获取更多实战资源。

常见问题

什么是 ERC-721 标准?

ERC-721 是以太坊上用于非同质化代币的智能合约标准,定义了每个代币唯一性的基础接口。它确保每个代币拥有独立属性和所有权,广泛应用于数字收藏品、游戏资产和虚拟地产等领域。

为什么使用 NFT.Storage 存储元数据?

NFT.Storage 基于去中心化网络 IPFS 和 Filecoin,提供内容寻址和持久化存储。通过 IPFS URL 引用资源,可保证即使原始服务器失效,NFT 数据仍可通过分布式网络永久访问,符合 Web3 去中心化理念。

Remix IDE 中编译失败怎么办?

首先检查编译器版本是否与代码中的 pragma 声明匹配(示例为 ^0.8.9)。其次确认已通过“Manage Plugins”安装 OpenZeppelin 库依赖。若问题仍存,可尝试重置编译器或切换至更稳定的 IDE 版本。

如何验证已铸造的 NFT?

部署后可通过 Etherscan 等区块浏览器输入合约地址查看合约详情。连接钱包后(如 MetaMask),在“Read Contract”中查询 ownerOf 或 tokenURI 函数,输入 tokenId 可验证所有权和元数据链接是否正确。

元数据 JSON 格式有哪些必填字段?

根据 ERC-721 标准,元数据至少应包含 nameimage 字段,推荐添加 descriptionattributes。其中 image 必须为完整 URI(如 IPFS URL),且资源需公开可访问。

能否批量铸造多个 NFT?

示例合约仅支持单枚铸造,但可通过扩展 safeMint 函数实现批量操作。例如添加循环结构或调用 ERC721Enumerable 扩展,但需注意 Gas 费用和合约复杂度限制。建议初期以单枚铸造测试为主。