PRC721 NFT创建实用教程(一)

原创 PlatON

PRC721 NFT创建实用教程(一)

本教程将分为两部分着手实践基于PRC721标准的NFT创建,如何在PlatON开发网络上发布自己的NFT?且看以下教程。

感谢提供本教程的PlatON社区贡献者@乐浅浅

注:如果需要在ATON上进行显示,需向ATON团队提交申请,审核通过即可。

| 环境配置

本次选择的是一台低配置阿里云服务器

中央处理器:1核2G

硬盘:40GSSD

系统:Ubuntu16.04

远程连接工具:MobaXterm

| 软件准备

远程连接工具:MobaXterm

本地主机IDE:VScode、Notepad++

准备一个PlatON开发网络的账号,并且向水龙头申请测试LAT。水龙头地址:

https://faucet.platon.network/faucet/

| 编码准备

由于PRC721兼容ERC721,因此本教程编码使用开源的OpenZeppelin源码,并从中剥离出我们需要的源文件。具体需要的文件如下图所示:

PRC721 NFT创建实用教程(一)

文件树如下图所示:

PRC721 NFT创建实用教程(一)

然后有些地方需要修改,拿其中的ERC721Full.sol作为说明示例,示例请看中文注释,这些编码过程都在本地主机的VScode中完成:

pragma solidity 0.5.17; //这里需要修改为PlatON支持的 solidity 版本,例如 0.5.17,0.6.12,0.7.6,0.8.2

/*此处的 import 指令需要做好文件代码的引用路径修改*/
import "./ERC721.sol";
import "./ERC721Enumberable.sol";
import "./ERC721Metadata.sol";

/**
 * @title Full ERC721 Token
 * @dev This implementation includes all the required and some optional functionality of the ERC721 standard
 * Moreover, it includes approve all functionality using operator terminology.
 *
 * See https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata {
    constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) {
        // solhint-disable-previous-line no-empty-blocks
    }
}

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;  

    }  

之后的所有.sol文件都请注意这两点,然后依照脑图和文件目录树的布置。

现在来写一个实例,用以实例化该合约【也就是目录树中的 NFT_example.sol】,代码如下:

pragma solidity 0.5.17;

import "./ERC721/ERC721Full.sol";
import "./ERC721/ERC721Pausable.sol";
import "./ERC721/ERC721Mintable.sol";
import "./ERC721/ERC721MetadataMintable.sol";
import "./ownship/Ownable.sol";

contract NFT_example is ERC721Full, ERC721Pausable, ERC721Mintable, ERC721MetadataMintable, Ownable {
  using SafeMath for uint256;
    constructor () public ERC721Full("令牌名称", "令牌缩写") {}
} 

说明:

  • 令牌名称:请填写你想要的名字(全称)
  • 令牌缩写:请填写对应的缩写(简称)

本文转载自https://mp.weixin.qq.com/s/7ZwwvmUQrTo0_pTcsXvH5A

(0)
上一篇 11月 3, 2021 08:42
下一篇 11月 4, 2021 10:36

相关推荐

发表回复

登录后才能评论