原创 PlatON
本教程将分为两部分着手实践基于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源码,并从中剥离出我们需要的源文件。具体需要的文件如下图所示:
文件树如下图所示:
然后有些地方需要修改,拿其中的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