发布 PRC-721 Token

在开始之前,您将需要准备以下内容:

  1. Matemask钱包

  2. 拥有至少1个PSC

将文件添加到IPFS

我们需要托管好NFT所对应的艺术作品,并创建一个元数据文件;为此,我们将使用IPFS--一个点对点文件存储和共享的分布式系统。 按照IPFS文档中的安装指南下载并安装基于你的操作系统的IPFS CLI。

以下是托管图像和元数据文件的步骤:

创建IPFS repo。 在终端窗口中输入以下内容来初始化IPFS repo

 $ ipfs init

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

$ ipfs daemon

添加图像到IPFS , 进入第一个终端窗口,将图像添加到IPFS中(这里是art.png)。

$ ipfs add art.png

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

向IPFS添加JSON文件。 创建一个JSON文件nft.json,并将其保存在与图像相同的目录中。 JSON文件格式:

{
    "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合约来创建我们的NFT合约。 有了0xcert/ethereum-erc721,我们不需要写整个ERC-721接口。 相反,我们可以导入库合约并使用它的函数。 前往以太坊 Remix 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 {
 
  constructor() {
    nftName = "Synth NFT";
    nftSymbol = "SYN";
  }
 
  function mint(address _to, uint256 _tokenId, string calldata _uri) external onlyOwner {
    super._mint(_to, _tokenId);
    super._setTokenUri(_tokenId, _uri);
  }
 
}

以下是代码的解释:

第1行: 指定SPDX许可证类型,这是在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的交易。

如果你在部署前收到一条错误消息:此合约可能是抽象的,请确保在合约选项卡下选择适当的合约。在Metamask中确认交易。

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

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

  2. 在 _tokenid 中输入任何数字值 (建议为1,因为它是第一个)。

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

点击交易,并从metamask确认交易。 (需要你已经有了Ropsten链上的ETH)

你可以通过输入我们之前提到的token id来查看其他细节,如名称、符号、所有者或tokenuri。

恭喜你创建了自己的NFT,帮助你的艺术家朋友把他们的艺术作品发布到以太坊区块链上,或者自己也成为一名艺术家。

Last updated