本文介绍了如何创建和发布自己的ERC-721(NFT)。首先,详细解释了NFT的概念及其与ERC-721的关系,接着分步骤展示了如何通过0xcert库编写智能合约,并在Ropsten测试网进行部署,涵盖了从元数据存储到链上合约创建的整个过程。
与 ERC-721 兼容的数字收藏品自 Cryptokitties 发布以来变得非常受欢迎,并在最近几个月获得了大规模采用。本指南将涵盖使用智能合约库 0xcert/ethereum-erc721 创建和发布我们自己的 ERC-721 (NFT) 的过程。
同质化意味着它们是相同的或可以互换的。例如,所有类 Ethereum 代币的价值都是相同的。我们对 Cardano 的代币也可以这样说。同质化代币是可以 1:1 互换的。
考虑到这一点,NFT 是独特的,每个 NFT 都是不同的,具有独特的特征。可以作为 NFT 的东西有收藏卡、艺术品、机票等。所有这些都是彼此明显可区分的,不能相互交换。将非同质化代币 (NFTs) 想象为非常稀有的收藏品,每个都有其独特的特征、不同寻常的属性,并且在多数情况下,有自己的元数据。
ERC 是 Ethereum Request for Comment 的缩写,而 721 是提案的标识符。ERC 是以太坊生态系统的应用级标准,这可以是智能合约的标准,例如 ERC-20。
ERC 的作者负责与以太坊社区达成共识,一旦得到社区的审查和批准,它就会成为标准。你可以在 这里 查看所有最新的 ERC 提案。
ERC-721 的创建是为了提供跟踪和转移 NFT 的功能。
ERC-721 是一个开放标准,描述了如何在与 EVM(以太坊虚拟机)兼容的区块链上创建非同质化代币。它有一套规则,使得处理 NFT 更加容易。NFT 不仅限于 ERC-721,ERC-1155 也可以作为代币 ERC-1155。
以下是 ERC-721 标准中定义的函数和事件:
ERC-721 定义了一些与 ERC-20 兼容的函数。这使得在一些现有的钱包中显示代币信息变得更加容易。
现在我们了解了 ERC-721 代币的是什么以及如何工作,我们来看一下如何创建和发布我们自己的代币。
我们将在 Ropsten 测试区块链上发布我们的合约。首先,你需要安装浏览器扩展 Metamask,以便创建一个 ETH 钱包并从 Ropsten 水龙头 获取一些测试 ETH。选择 Metamask 钱包中的 Ropsten 测试网络,将钱包地址复制到水龙头的文本框中,然后点击“Send me test Ether”。
在编写 NFT 合约之前,我们需要保存与 NFT 相关的艺术作品并创建一个元数据文件,为此我们将使用 IPFS,一个分布式文件交换系统。按照以下 IPFS 安装指南 下载并安装适合你操作系统的 IPFS CLI。
接下来是保存图像和元数据文件的步骤。
步骤 1: 创建 IPFS 仓库通过在终端中输入以下命令来初始化 IPFS 仓库
ipfs init
步骤 2: 启动 IPFS 监控
打开一个新终端并输入以下命令
ipfs daemon
步骤 3: 将图像添加到 IPFS
在第一个终端中添加图像(art.png 这里)
ipfs add art.png
复制以 Qm 开头的哈希,并在前面添加 https://ipfs.io/ipfs/,应类似于以下内容:https://ipfs.io/ipfs/QmQEVVLJUR1WLN15S49rzDJsSP7za9DxeqpUzWuG4aondg
步骤 4: 将 JSON 文件添加到 IPFS
创建一个名为 nft.json 的 JSON 文件,并将其保存在与图像相同的目录下。
JSON 文件内容:
{
"name": "NFT Art",
"description": "This image shows the true nature of NFT.",
"image": "https://ipfs.io/ipfs/QmZzBdKF7sQX1Q49CQGmreuZHxt9sVB3hTc3TTXYcVZ7jC"
}
然后,将 JSON 文件添加到 IPFS
ipfs add nft.json
复制以 Qm 开头的哈希,并在前面添加 https://ipfs.io/ipfs/,应类似于以下内容:https://ipfs.io/ipfs/QmUFbUjAifv9GwJo7ufTB5sccnrNqELhDMafoEmZdPPng7
保存此 URL,我们将在发布 NFT 时需要它。
为方便起见和安全起见,我们将使用 0xcert/ethereum-erc721 来创建我们的 NFT 合约。使用 0xcert/ethereum-erc721,我们不必编写整个 ERC-721 接口,而是可以导入并使用其功能。
前往 Ethereum Remix IDE 并创建一个新的 Solidity 文件,例如 - nft.sol。
将以下代码粘贴到你的新 Solidity 文件中:
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;
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";
contract newNFT is NFTokenMetadata, Ownable {
constructor() {
nftName = "Synth NFT";
nftSymbol = "SYN";
}
function mint(address _to, uint256 _tokenId, string calldata _uri) external onlyOwner {
super._mint(_to, _tokenId);
super._setTokenUri(_tokenId, _uri);
}
}
上述代码的解释:
第 1 行:指定 SPDX 许可证 类型,这是 Solidity ^0.6.8 之后所需的附加内容。只要智能合约的代码对公众可用,这些许可证可以帮助解决和避免版权问题。如果你不希望指定任何许可类型,可以使用 Unlicensed 值,或者直接不添加注释(这不会导致错误,只是一个警告)。
第 2 行:声明智能合约的 Solidity 版本。
第 4-5 行:导入 0xcert/ethereum-erc721 合约。
第 7 行:合约开始,命名为 newNFT,并扩展自其他名为 NFTokenMetadata 和 Ownable 的合约。
第 9-12 行:初始化构造函数并设置我们代币的名称和符号。
第 14 行:声明 mint 函数,有三个参数,类型为 address 的变量 _to 将保存接收 NFT 的地址,类型为 uint256 的变量 _tokenId 将保存代币的 ID,类型为 string 的变量 _uri 将保存 JSON 文件的 URI。声明此 mint 函数为 external,意味着它可以被其他智能合约和合约外部访问。
第 15 行:使用接收地址和代币 ID 铸造代币。
第 16 行:使用代币 ID 和 JSON 文件的 URI 设置 URI。
编译智能合约并使用注入的 Web3 部署(在编译合约之前确保在 Metamask 中选择了 Ropsten 测试网)。
在 Metamask 中批准交易。
如果在部署之前收到错误消息 "This contract may be abstract",请确保在合约选项中选择了正确的合约。
现在转到 Remix 中的“已部署合约”部分,并展开新部署的合约。你将看到许多功能/方法。展开 mint 函数并添加以下详细信息:
点击“Transact”,并在 Metamask 中确认操作。现在你已经在 Ropsten 网络上有了代币。
你可以通过输入之前提到的 token ID 来验证其他详细信息,例如名称、符号、所有者和 token URI。
恭喜你创建了自己的 NFT,帮助你身边的艺术家将他们的艺术作品放在以太坊网络上,或者你自己成为一名艺术家。你可以访问 0xcert/ethereum-erc721 的 GitHub 获取更多示例。
请订阅我们的 新闻通讯 以获取更多关于以太坊的文章和指南。如果你有任何意见,随时可以在我们的 Twitter 上留言。你可以随时与我们在 Discord 服务器上交谈,那里有一些很棒的开发者 :)
- 原文链接: quicknode.com/guides/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!