Solidity 编程:创建与部署 ERC721 代币

·

ERC721 是以太坊上非同质化代币(NFT)的标准接口,它定义了一套规则,使得 NFT 的创建、交易和管理变得简单高效。每个 ERC721 代币都是独一无二的,不可互换,也不可分割,只能在整体单位上进行交易,并且每个代币都拥有唯一的标识符。

ERC721 的核心功能

ERC721 标准包含一系列函数,这些函数确保了代币合约的互操作性和一致性。以下是一些关键功能:

与 ERC20 类似的基础函数

1. 名称(name)
此函数用于向外部合约和应用程序提供代币的名称。例如,可以返回 "MyNFT" 这样的字符串。

2. 符号(symbol)
该函数提供代币的简写符号,例如 "MNFT",以便兼容外部应用程序和交易所。

3. 总供应量(totalSupply)
返回合约中存储的代币总量。

4. 余额查询(balanceOf)
根据地址查询该账户拥有的代币数量。

所有权管理函数

1. 所有者查询(ownerOf)
通过代币的唯一 ID 查询其当前所有者地址。

2. 授权(approve)
允许所有者授权另一个地址转移其代币。

3. 获取所有权(takeOwnership)
被授权的地址可以使用此函数从所有者账户中提取代币。

4. 转移(transfer)
代币所有者可以直接将代币转移给另一个用户。

5. 索引查询(tokenOfOwnerByIndex)
由于一个用户可以拥有多个代币,此函数通过索引位置查询用户拥有的特定代币 ID。

元数据函数

1. 代币元数据(tokenMetadata)
此函数用于获取代币的元数据或相关数据的链接,例如指向 JSON 文件的 URI。

事件

ERC721 标准定义了以下两个事件,用于通知外部应用程序代币状态的变化:

1. 转移事件(Transfer)
当代币所有权转移时触发,包含发送方、接收方和代币 ID 信息。

2. 授权事件(Approval)
当用户授权另一个地址获取代币所有权时触发,包含所有者、被授权方和代币 ID 信息。

创建与部署 ERC721 智能合约的步骤

以下是在以太坊测试网络上创建和部署 ERC721 智能合约的详细步骤:

准备工作

  1. 安装 MetaMask 浏览器插件,创建以太坊钱包。
  2. 获取测试网 ETH(例如 Ropsten 测试网),可以通过官方水龙头免费领取。
  3. 使用 Remix IDE 进行合约开发和部署。

合约代码实现

Step 1: 指定 SPDX 许可证类型

// SPDX-License-Identifier: MIT

Step 2: 声明 Solidity 版本

pragma solidity 0.8.0;

Step 3: 导入 ERC721 相关合约

import "https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token-metadata.sol";
import "https://github.com/0xcert/ethereum-erc721/src/contracts/ownership/ownable.sol";

Step 4: 定义合约并继承基础功能

contract myNFT is NFTokenMetadata, Ownable {

Step 5: 初始化构造函数

constructor() {
    nftName = "gfg NFT";
    nftSymbol = "GFG";
}

Step 6: 实现代币铸造函数

function mint(address _to, uint256 _tokenId, string calldata _uri) external onlyOwner {
    super._mint(_to, _tokenId);
    super._setTokenUri(_tokenId, _uri);
}
}

部署与交互

  1. 在 Remix IDE 中编译合约,确保无错误。
  2. 连接 MetaMask 钱包,选择 Ropsten 测试网络。
  3. 点击部署按钮,确认交易并支付测试 ETH 作为 gas 费。
  4. 部署成功后,使用合约提供的功能进行代币铸造、转移和查询。

👉 查看实时部署工具与更多示例

常见问题

Q1: ERC721 和 ERC20 有什么区别?
ERC20 是同质化代币标准,每个代币完全相同且可互换;而 ERC721 是非同质化代币标准,每个代币都是唯一的,不可分割和互换。

Q2: 如何获取测试网 ETH?
可以通过 Ropsten 或 Goerli 等测试网络的水龙头网站免费获取测试 ETH,用于合约部署和交易测试。

Q3: 什么是代币元数据(metadata)?
代币元数据通常是一个 JSON 文件,包含代币的名称、描述、图像等信息,存储于去中心化网络或传统服务器上。

Q4: 为什么需要授权(approve)机制?
授权机制允许用户在不直接转移代币的情况下,授权第三方代表其执行某些操作,例如在 marketplace 上挂单销售。

Q5: 如何确保代币的唯一性?
每个 ERC721 代币在合约中都有唯一的 ID,通过智能合约的逻辑确保 ID 不重复,从而保证代币的唯一性。

Q6: 部署合约的主要成本是什么?
部署合约需要支付 gas 费,费用取决于合约的复杂性和当前网络拥堵情况。在主网上需使用真实 ETH,测试网上使用测试 ETH。

通过以上步骤和说明,您可以开始创建和部署自己的 ERC721 代币合约,探索区块链技术的更多可能性。