本文介绍了NFT(非同质化代币)的概念和应用,并展示了如何使用智能合约创建和分配NFT。文章通过一个实际的例子,展示了如何为学生的课程成绩创建NFT,并将其分配给学生。
我刚刚获得了一个新的 NFT (非同质化代币) [ 这里]:
为什么?因为我相信 NFT 可以改变我们的世界,我们可以通过加密代币来定义事物的所有权,并且可以通过区块链记录来追踪它们的生命周期。
我们生活在一个古老的数字世界中,充满了源自我们纸质方法的古老协议和方法。我们在 21 世纪的进步是将我们手写的签名复制和粘贴到文档中,并在其上创建 PDF。总的来说,这很愚蠢,而且没有任何可信度。未来必须是使用密码学来确保我们的交易,特别是使用代币来表示物理资产。这些代币现在通常被定义为 NFT——非同质化代币,其中每个 NFT 都是唯一的,可以被某人拥有并转移给其他人。那么让我们构建一个。
对于普通的加密代币 (ERC-20),我们使用 FT(同质化代币),其中存在有限数量的代币,并且每个代币都是相同的。例如,我可以发行一百万个 ERC-20 代币,然后用它们进行交易。它们都将具有相同的价值,并且我无法再铸造任何代币。使用 NFT (ERC-721),我们可以铸造任意数量的加密代币,并且每个代币都将有一个所有者。这些中的每一个都可以有自己的价值,或者可以绑定到物理资产或身份。例如,作为一名导师,我可以为我的每个学生分配一个 NFT,并将 NFT 链接到学生。总的来说,我们使用智能合约创建它们,并且存在代币创建的“所有者”。正是这个帐户会根据需要创建代币,然后将其分配给新的所有者。
免费加入 Medium 以获取这位作者的更新。
首先,我们从一个智能合约开始:
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract BillToken is ERC721URIStorage{
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
mapping(string => uint8) hashes;
constructor() ERC721("Bill Token", "BTK") {}
function awardItem(address recipient, string memory hash, string memory metadata) public returns (uint256){
require(hashes[hash] != 1);
hashes[hash] = 1;
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(recipient, newItemId);
_setTokenURI(newItemId, metadata);
return newItemId;
}
}
此合约定义我们正在创建一个“Bill Token”,其中 Open Zeppelin 将集成与代币交互所需的所有必需方法(例如创建代币、查看代币的所有权以及将其分配给其他所有者)。为此,我们可以使用 Remix (这里) 来创建和编译代码:
然后我们可以部署我们的合约:
awardItem 函数可用于铸造 NFT 并将其分配给给定的地址。因此,假设我们正在为应用密码学模块的分数颁发 NFT。首先,我们将 NFT 的元数据创建为 JSON 文件,并将其添加到 URL:
{
"name": "Applied Crypto",
"description": "Public Key Encryption",
"image": "https://asecuritysite.com/public/bob.png",
"grade": 87
}
现在让我们向 (0xbB15B38e4ef6aF154b89A2E57E03Cd5cbD752233) 分配一个新的“Bill Token”
接下来,我们将创建第二个代币:
最后,我们可以查看合约:
你可以使用以下命令安装 Open Zeppelin:
npm install @openzeppelin/contracts
对于 ganache,请访问:
https://trufflesuite.com/ganache/
并下载适用于你的操作系统的版本。在本地网络上进行测试后,在以太坊测试网络(例如 Ropsten)上进行测试就非常容易了。
- 原文链接: billatnapier.medium.com/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!