概述

自Cryptokitties[1]推出以来,兼容 ERC-721 规范的加密收藏品已经十分盛行,并在最近几个月向大规模采用的方向发展。本指南将包含运用0xcert/ethereum-erc721[2]智能合约库创立和布置咱们自己的 ERC-721(NFT)。

什么对错同质化(Non-Fungible)代币?

同质化是指相同或可交换的意思。例如,以太坊代币、特定代币类的一切币,都具有相同的价值。Cardano 代币也是如此。同质化代币可 1:1 交换。

而 NFT 是独一无二的,每个人都是不同的。每一个代币都有共同的特色和价值。能够成为 NFT 的东西类型有收藏卡、艺术品、飞机票等。它们之间都有明显的差异,不能交换。将非同质化代币(NFT)视为稀有的收藏品;每个代币都有共同的特征,不寻常的属性,大多数时分,它运用元数据表明。

什么是 ERC-721?

ERC 是以太坊主张恳求(Ethereum Request for Comment)的缩写,721 是提案编号。ERC 是以太坊生态体系中的运用级规范,它们可所以代币的智能合约规范,如ERC-20[3],ERC 的作者担任与以太坊社区树立共识,一旦提案被社区审核经过,就会成为规范。你能够盯梢最近的 ERC 提案这儿[4]。ERC-721 的创立是为了提出在智能合约内盯梢和搬运 NFT 的功用。

ERC-721[5]是一个开放的规范,它描绘了怎么在 EVM(以太坊虚拟机)兼容的区块链上构建非同质化代币;它对错同质化代币的规范接口;这是一套规矩,使其易于与 NFT 交互。NFT 不仅是 ERC-721 代币,还可所以ERC-1155[6]代币。

以下是 ERC-721 规范中界说的一组函数和事情:ERC-721 界说了一些契合 ERC-20 的函数。这使得现有钱包更简略显现简略的代币信息:

ERC20 类函数:

  • name: 用于界说代币的称号。

  • symbol: 用于界说符号代币的符号。

  • totalSupply: 这个函数用来界说区块链上的代币总数,供应量不必是稳定的。

  • balanceOf: 回来一个地址具有的 NFT 数量。

Ownership 函数

本函数回来代币一切者的地址。由于每个 ERC-721 代币都是独一无二的,非同质化的,它们在区块链上由一个 ID 来表明。其他用户、合约、运用能够运用这个 ID 来确定代币的一切者。

  • approve: 此函数同意另一个实体代表一切者转让代币的权限。

  • takeOwnership: 这是一个可选的函数,它的效果就像一个取款函数,由于外界能够调用它从另一个用户的账户中取出代币。当一个用户被同意具有必定数量的代币,能够运用 takeOwnership。

  • transfer: 这是另一个搬运函数;它答应一切者将代币转让给另一个用户,就像加密钱银一样。

  • tokenOfOwnerByIndex: 这是一个可选的函数,但主张运用。每个一切者能够一起具有一个以上的 NFT。其共同的 ID 能够辨认每一个 NFT,成果可能会变得难以盯梢 ID。所以合约将这些 ID 存储在一个数组中,tokenOfOwnerByIndex 函数让咱们从数组中检索这些信息。

元数据

tokenMetadata: (可选)一个接口,让咱们能够发现代币的元数据或其数据的链接。

事情

  • Transfer:当代币的一切权从一个人变为另一个人时,该事情被触发。宣布的信息包含哪个账户搬运了代币,哪个账户收到了代币,以及哪个代币(经过 ID)被搬运。

  • Approve: 当用户同意另一个用户取得代币的一切权时,该事情就会被触发,也就是说,每逢 approve 函数被执行时,该事情就会被触发。它宣布的信息包含:当时哪个账户具有该代币,哪个账户被同意在未来具有该代币,以及哪个代币(经过 ID)被同意转让其一切权。

非同质化代币的运用场景

**数字艺术(或什物艺术):**艺术作品是 NFT 最受欢迎的运用案例。数字艺术拍卖是 NFT 的第一个运用,并且还在继续发展。**游戏:**供给游戏内购和游戏收藏。**房地产:**将房产和智能合约 Token 化,并进行买卖。**金融:**贷款、期货等金融工具,并承担其他职责。**软件标题:**软件授权,保证反盗版和隐私。**演唱会门票/体育比赛门票:**为了保证在卖票过程中不发生诈骗行为,粉丝能够在一个当地检查以往的阅历。**KYC 合规性:**为特定用户的 KYC 创立代币。

取得测验 ETH

现在咱们知道了什么是 ERC-721 代币以及它们是怎么作业的,让咱们看看怎么构建和布置自己的代币。

咱们将在 Ropsten 测验网上布置合约。开端前,你需求装置Metamask[7]浏览器扩展来创立一个 ETH 钱包和获取一些测验 ETH,你能够经过进入Ropsten 水龙头[8]来取得。你需求在 Metamask 钱包上挑选 Ropsten 测验网络,并将自己的钱包地址仿制粘贴到水龙头中的文本字段中,然后点击“Send me test Ether”。

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

将文件增加到 IPFS

在写 NFT 合约之前,咱们需求托管好 NFT 所对应的艺术作品,并创立一个元数据文件;为此,咱们将运用IPFS[9]--一个点对点文件存储和共享的分布式体系。依照IPFS 文档中的装置指南[10]下载并装置基于你的操作体系的 IPFS CLI。

以下是托管图画和元数据文件的过程:

过程 1:创立 IPFS repo。在终端窗口中输入以下内容来初始化 IPFS repo

 $ ipfs init

过程 2:发动 IPFS 守护进程。打开一个单独的终端窗口,输入以下内容:

$ ipfs daemon

过程 3:增加图画到 IPFS , 进入第一个终端窗口,将图画增加到 IPFS 中(这儿是 art.png)。

$ ipfs add art.png

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

仿制从 Qm 开端的哈希值,并增加 https://ipfs.io/ipfs/前缀,它必须看起来像这样https://ipfs.io/ipfs/QmdrswwrbcfPeknN2BRLVmyWbWRsKSC3vSNhV9Gkvhk1mL。

过程 4: 向 IPFS 增加 JSON 文件。创立一个 JSON 文件 nft.json,并将其保存在与图画相同的目录中。JSON 文件格局:

https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"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/QmWKqwMJQHSfpfRFGUVGPFFtkBJ5WkFzhjQpruhSLtLWXB, 保存这个网址。咱们需求这个来铸造 NFT。

创立咱们自己的代币。

为了方便和安全,咱们将运用0xcert/ethereum-erc721[11]合约来创立咱们的 NFT 合约。有了 0xcert/ethereum-erc721,咱们不需求写整个 ERC-721 接口。相反,咱们能够导入库合约并运用它的函数。前往以太坊 Remix[12] 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 https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg

constructor() https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
nftName = "Synth NFT";
nftSymbol = "SYN";
}

function mint(address _to, uint256 _tokenId, string calldata _uri) external onlyOwner https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
super._mint(_to, _tokenId);
super._setTokenUri(_tokenId, _uri);
}

}

以下是代码的解释:

第 1 行:指定SPDX 许可证[13]类型,这是在 Solidity ^0.6.8 之后增加的。每逢智能合约的源代码向大众开放时,这些许可证能够帮助处理/防止版权问题。假如你不想指定任何许可证类型,你能够运用一个特别的值 UNLICENSED,或者直接越过整个注释(它不会导致过错,仅仅一个正告)。

第 2 行:声明 Solidity 版别。

第 4-5 行:导入 0xcert/ethereum-erc721 合约。

第 7 行:合约命名为 newNFT,它继承了 NFTokenMetadata 和 Ownable 合约。

第 9-12 行:初始化结构函数并设置称号及代币符号。

第 14 行:声明函数 mint 有三个参数,类型为地址的变量_to,存储 NFT 代币接收者的地址,类型为 uint256 的变量_tokenId,将保存代币 id,类型为字符串的变量_uri,将存储 JSON 文件的 URI。将 mint 声明为外部函数,能够从其他智能合约和当时合约之外拜访。

第 15 行:运用接收方的地址和代币 ID 来铸造代币。

第 16 行:运用代币 id 和 JSON 文件的 URI 设置代币 URI。

编译智能合约,并运用Injected Web3进行布置(编译合约前必定要在 Metamask 上挑选 Ropsten testnet)。同意来 metamask 的买卖。

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

假如你在布置前收到一条过错消息:此合约可能是抽象的,请保证在合约选项卡下挑选适当的合约。在 Metamask 中承认买卖。

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

现在进入 Remix 中的 Deployed Contracts(布置的合约)部分,打开布置的合约。你会看到一堆函数/方法。打开 mint 函数并增加以下参数:

  1. 在_to 中增加你的 Ropsten 地址。

  2. 在 _tokenid 中输入任何数字值 (主张为 1,由于它是第一个)。

  3. 在_uri 字段中,增加上一节取得的 JSON 文件的 URI。

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

点击买卖,并从 metamask 承认买卖。(需求你已经有了 Ropsten 链上的 ETH)

你能够经过输入咱们之前说到的 token id 来检查其他细节,如称号、符号、一切者或 tokenuri。

如何创建和部署ERC-721(NFT)?nft 信息

结论

恭喜你创立了自己的 NFT,帮助你的艺术家朋友把他们的艺术作品发布到以太坊区块链上,或者自己也成为一名艺术家。检查0xcert/ethereum-erc721 的 GitHub[14]获取更多例子。


原文:https://www.quiknode.io/guides/solidity/how-to-create-and-deploy-an-erc-721-nft

参考资料

[1]

Cryptokitties: https://www.cryptokitties.co/

[2]

0xcert/ethereum-erc721: https://github.com/0xcert/ethereum-erc721

[3]

ERC-20: https://www.quiknode.io/guides/solidity/how-to-create-and-deploy-an-erc20-token

[4]

这儿: https://github.com/ethereum/EIPs/issues

[5]

ERC-721: https://eips.ethereum.org/EIPS/eip-721

[6]

ERC-1155: https://eips.ethereum.org/EIPS/eip-1155

[7]

Metamask: https://metamask.io/

[8]

Ropsten水龙头: https://faucet.ropsten.be/

[9]

IPFS: https://learnblockchain.cn/tags/IPFS

[10]

IPFS文档中的装置指南: https://ipfs.io/#install

[11]

0xcert/ethereum-erc721: https://github.com/0xcert/ethereum-erc721

[12]

以太坊 Remix: https://remix.ethereum.org/

[13]

SPDX许可证: https://spdx.org/licenses/

[14]

0xcert/ethereum-erc721的GitHub: https://github.com/0xcert/ethereum-erc721

视野开拓

在 20 世纪 80 年代早期农业改革期间 ,地方领导人对民间自发的农业生产“单干“和“包产到户"的立场和态度,往往是决定此类经济活动是否能顺利存在的重要原因之一。时任安徽省委书记的万里和当时四川省委的负责人就是对此类经济活动表示支持的地方领导人的代表人物。当时民间有谚云:“ 要吃米 ,找万里 ……"。-《权力结构、政治激励和经济增长》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注