ERC 721 标准
ERC 721 合约定义了非同质化代币,例如 NFT 藏品在合约里都是 Token 的概念,另外只要实现了 erc721Interface 接口的所有合约都是 ERC 721 合约
1、我们可以在 openzeppelin 平台来查找合约模板 https://docs.openzeppelin.com/contracts/4.x/erc721
如下
// contracts/GameItem.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract HejunweiNFT is ERC721URIStorage {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() ERC721("hejunwei", "HJW") {}
function awardItem(address player, string memory tokenURI)
public
returns (uint256)
{
uint256 newItemId = _tokenIds.current();
_mint(player, newItemId);
_setTokenURI(newItemId, tokenURI);
_tokenIds.increment();
return newItemId;
}
}
替换 constructor() ERC721("hejunwei", "HJW") {} 中的参数,第一个参数代表代币名称,第二个参数是代币的符号
2、使用 https://remix.ethereum.org/ 进行合约的编译和部署
然后选择内置的小狐狸进行区块链的部署,这里使用了 rinkeby 的 eth 测试网络
3、部署后的合约可以调用函数进行铸币(NFT上链)
这里需要注意,我们的合约方法名是 awardItem ,第一个参数是将要拥有该token的地址,第二个参数是一个 json 文件的链接,下面解释一下这个 json 文件
4、这里的 json 文件是 metadata,一般我们使用 opensea 进行 nft 的交易,需要遵守 opensea 的协议,https://docs.opensea.io/docs/contract-level-metadata
这里的图片一般都是我们传到 ipfs 上去,可以确保文件不会丢失,给一个上传地址:https://anarkrypto.github.io/upload-files-to-ipfs-from-browser-panel/public/,先上传图片之后再自己编写一个 json 文件,再将 json 文件也上传到 ipfs,获取到一个 ipfs 的网关地址来查看该文件,这个地址就是我们 awardItem 的第二个参数
5、执行 awardItem 之后,在 opensea 搜索部署的合约地址,就可以看到我们铸造的 NFT 了