非同质化代币(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,可确保代币始终指向正确的数字资产。
文件上传步骤
- 访问 NFT.Storage 并登录账户。
- 进入文件管理页面(如未自动跳转,请点击“Files”标签)。
- 点击“Upload”按钮打开上传界面。
- 通过“Choose File”选择本地设备中的目标文件。
- 确认后点击“Upload”开始上传。
上传完成后,点击文件旁的“Action”按钮,复制以下关键信息:
- IPFS URL(格式为
ipfs://开头) - 文件对应的 CID 哈希值
- IPFS URL(格式为
实际操作中,通常先上传数字资产(如图像)获取其 IPFS URL,再将此 URL 嵌入元数据文件中,最后将元数据文件上传至 NFT.Storage。最终,您将使用元数据的 IPFS URL 进行链上铸造。
如何创建 NFT 元数据
元数据以 JSON 格式存储 NFT 的核心信息,包括名称、描述和图像链接等。各大 NFT 市场依赖元数据来展示商品详情,因此务必遵循官方 ERC-721 元数据标准或 Enjin 扩展建议。
元数据创建流程
- 新建文本文件,并将其后缀命名为
.json。 - 复制以下基础元数据模板(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."
}
}
}- 编辑模板,将
image字段中的描述替换为实际图像的 IPFS URL(格式如下):
"image": {
"description": "ipfs://您的图像CID"
}- 保存修改后的元数据文件,并将其上传至 NFT.Storage。
- 上传完成后,点击元数据文件的“Action”按钮,复制其 IPFS URL(即元数据的令牌 URI)。
获得元数据 IPFS URL 后,即可依据 ERC-721 标准进行链上铸造。
如何铸造 ERC-721 NFT
本节将以创建唯一 NFT(单版本)为例,演示如何使用 Remix IDE 结合已上传的元数据 IPFS URL,按 ERC-721 标准完成铸造。
使用 Remix IDE 铸造步骤
- 在 Remix IDE 中创建新文件,后缀为
.sol。 - 复制以下 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);
}
}- 将合约名称“MyToken”和代币符号“MTK”修改为自定义内容。
- 点击“Solidity Compiler”标签,选择对应编译器版本后点击“Compile”进行编译。
- 切换到“Deploy & Run Transactions”标签,从合约下拉菜单中选择“MyToken”。
- 点击“Deploy”部署合约。
- 部署成功后,在部署记录中展开合约实例并复制其地址。
- 返回编译器标签,再次确认选中“MyToken”合约。
- 在部署后的合约交互界面中,找到“safeMint”函数。
填写参数:
to:输入您的以太坊地址tokenId:设置 NFT 的唯一 ID(数字)uri:粘贴从 NFT.Storage 复制的元数据 IPFS URL
- 点击“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 标准,元数据至少应包含 name 和 image 字段,推荐添加 description 和 attributes。其中 image 必须为完整 URI(如 IPFS URL),且资源需公开可访问。
能否批量铸造多个 NFT?
示例合约仅支持单枚铸造,但可通过扩展 safeMint 函数实现批量操作。例如添加循环结构或调用 ERC721Enumerable 扩展,但需注意 Gas 费用和合约复杂度限制。建议初期以单枚铸造测试为主。