如何创建和部署 ERC-721 (NFT)

公众号:元壤

元壤:一分钟搭建您专属的 NFT 数字藏品平台

概述

自Cryptokitties推出以来,与 ERC-721 标准兼容的数字收藏品已经变得非常流行,并且在最近几个月已经朝着大规模采用的方向发展。本指南将介绍使用0xcert/ethereum-erc721智能合约库创建和部署我们自己的 ERC-721 (NFT) 。

什么是非同质化代币?

Fungible 意味着相同或可互换。例如,以太坊代币,特定代币类的所有成员,具有相同的价值。Cardano 代币也是如此。可替代代币可以 1:1 互换。
鉴于这一点,NFT 是独一无二的。每一个都是不同的。每个代币都有独特的特征和价值。可以成为 NFT 的东西类型有收藏卡、艺术品、飞机票等,它们之间都有明显的区别,不可互换。将非同质化代币 (NFT) 视为稀有收藏品;每个都有独特的特征、不寻常的属性,而且大多数时候,还有它的元数据。

什么是 ERC-721?

ERC 代表 Ethereum Request for Comment,721 是提案标识符号。ERC 是以太坊生态系统中的应用级标准,可以作为ERC-20等代币的智能合约标准,ERC的作者负责与以太坊社区建立共识,一旦提案获得以太坊社区的审查和批准,它就成为一个标准。您可以在此处 查看最近的 ERC 提案。创建 ERC-721 旨在智能合约中跟踪和传输 NFT 的功能。
ERC-721是一个开放标准,描述了如何在 EVM(以太坊虚拟机)兼容的区块链上构建非同质化代币;它是非同质化代币的标准接口;它有一套规则,可以很容易地使用 NFT。NFT 不仅是 ERC-721 类型;它们也可以是ERC-1155 代币。
以下是 ERC-721 标准中定义的一组函数和事件:
ERC-721 定义了一些符合 ERC-20 的函数。这使得现有钱包更容易显示简单的代币信息。

类似 ERC20 的函数:
name:用于定义代币的名称,其他合约和应用可以识别。
symbol:用于定义token的简写名称或符号。
totalSupply:该函数用于定义区块链上代币的总数;供应不必是恒定的。
balanceOf:返回地址拥有的 NFT 数量。

所有权函数
ownerOf:此函数返回代币所有者的地址。由于每个 ERC-721 代币都是唯一且不可替代的,它们在区块链上由一个 ID 表示。其他用户、合约、应用程序可以使用此 ID 来确定代币的所有者。
approve:此函数授予或批准另一个实体代表所有者转移代币的权限。
takeOwnership:这是一个可选函数,其作用类似于提款函数,因为外部方可以调用它从另一个用户的帐户中取出代币。因此,当用户已被批准拥有一定数量的代币并希望从另一个用户的余额中提取该代币时,可以使用 takeOwnership。
transfer:这是另一种类型的传递函数;它允许所有者将代币转移给另一个用户,就像其他数字代币/硬币一样。
tokenOfOwnerByIndex:这是一个可选但比较推荐的函数。每个所有者可以同时拥有多个 NFT。它的唯一 ID 可以识别每个 NFT,最终,跟踪 ID 会变得很困难。因此,合约将这些 ID 存储在一个数组中,而 tokenOfOwnerByIndex 函数让我们可以从数组中检索这些信息。

元数据功能
tokenMetadata:此可选函数是一个接口,可让我们发现令牌的元数据或指向其数据的链接。

Events
Transfer:当代币的所有权从一个人更改为另一个人时,会触发此事件。它发出有关哪个帐户转移了代币、哪个帐户收到了代币以及哪个代币(按 ID)被转移的信息。
Approve:当一个用户批准另一个用户获得代币的所有权时会触发此事件,即,只要执行approve 函数就会触发该事件。它会发出有关当前拥有代币的账户、未来批准哪个账户拥有代币以及批准哪个代币(通过 ID)转移其所有权的信息。

非同质化代币 (NFT) 的用例:

数字艺术(或物理艺术):艺术作品是 NFT 最流行的用例。数字艺术品拍卖是 NFT 的第一个应用,并且还在继续增长。
游戏:提供游戏内购买和游戏收藏品。
房地产:将房产和智能合约代币化并进行买卖。
金融:金融工具,如贷款、期货和其他责任。
软件名称:确保反盗版和隐私的软件许可证。
演唱会门票/体育比赛门票:确保在售票过程中不发生欺诈,粉丝可以在一个地方查看过去的经历。
KYC 合规性:为特定用户的 KYC 创建代币。

获取测试 ETH

现在我们知道了 ERC-721 代币是什么以及它们是如何工作的,让我们看看如何构建和部署我们自己的代币。
我们将在 Ropsten 测试网上部署我们的合约。首先,您需要 Metamask 浏览器扩展来创建一个 ETH 钱包和一些测试 ETH,您可以通过访问Ropsten 水龙头获得。您需要在 Metamask 钱包上选择 Ropsten 测试网络,并将钱包地址复制粘贴到水龙头的文本字段中,然后单击向我发送测试以太币。

https://img.chengxuka.com

将文件添加到 IPFS

在编写我们的 NFT 合约之前,我们需要为 NFT 托管我们的艺术并创建一个元数据文件;为此,我们将使用IPFS ,一个点对点文件存储和共享分布式系统。按照 IPFS 文档中 的安装指南,根据您的操作系统下载并安装 IPFS CLI 。

以下是托管图像和元数据文件的步骤。

第 1 步:创建 IPFS 存储库。

通过在终端/cmd 窗口中键入以下内容来启动 IPFS 存储库。

$ ipfs init

第 2 步:启动 IPFS 守护进程。

启动 IPFS 守护程序,打开一个单独的终端/cmd 窗口并键入以下内容。

$ ipfs daemon

第 3 步:将映像添加到 IPFS

转到第一个终端窗口并将图像添加到 IPFS(此处为 art.png)。

$ ipfs add art.png

https://img.chengxuka.com

从 Qm 复制哈希,并添加“ https://ipfs.io/ipfs/ ”作为前缀;它必须看起来像这样:

https://ipfs.io/ipfs/QmQEVVLJUR1WLN15S49rzDJsSP7za9DxeqpUzWuG4aondg

第 4 步:将 JSON 文件添加到 IPFS

创建一个 JSON 文件 nft.json 并将其保存在与图像相同的目录中。 JSON文件格式:

{
    "name": "NFT Art",
    "description": "This image shows the true nature of NFT.",
    "image": "https://ipfs.io/ipfs/QmZzBdKF7sQX1Q49CQGmreuZHxt9sVB3hTc3TTXYcVZ7jC",
}

现在添加这个 JSON 文件。

$ 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。

编译智能合约并使用 injected Web3 部署它(在编译合约之前,确保在 Metamask 上选择 Ropsten 测试网)。从MetaMask 上进行交易。

https://img.chengxuka.com

如果您在部署前收到错误消息“This contract may be abstract”,请确保在合约选项卡下选择适当的合约。在 Metamask 中确认交易。

https://img.chengxuka.com

现在转到 Remix 中的“Deployed Contracts”部分,并展开已部署的合同。你会看到一系列函数/方法。展开 mint 函数并添加以下详细信息:

  1. 在 _to 字段中添加您的 Ropsten 地址。
  2. 在 _tokenid 字段中输入任何大数字值(我们建议 1,因为它是第一个)。
  3. 在我们在上面获得的 _uri 字段中添加 JSON 文件的 URI。

单击交易并从 MetaMask 确认交易。现在你在 Ropsten 链上有了代币。

您可以通过输入我们之前提到的代币 ID 来检查其他详细信息,例如名称、符号、所有者或 tokenuri。

https://img.chengxuka.com

结论

恭喜您创建了自己的 NFT,帮助您的艺术家朋友将他们的艺术作品放在以太坊区块链上,或者自己成为一名艺术家。查看0xcert/ethereum-erc721 的 GitHub以获取更多示例。

原文链接:https://www.quicknode.com/guides/solidity/how-to-create-and-deploy-an-erc-721-nft

相关新闻

联系我们

联系我们

133-3118-4066

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部