十分钟发布自己的NFT

概述

本文将以一个例子来说明如何在opensea快速发布自己的NFT智能合约(ERC721)。本着DRY(Don't Repeat Yourself)原则,我们需要站在巨人的肩膀上来搭建自己的应用,使用经过社区审计和实践检验的代码可以有效提高我们智能合约的安全性,所以我们使用openzeppelin来构建我们的智能合约。

预备知识

metamask钱包

以太坊Sepolia网络账号,获取测试以太币

IPFS上传文件,windows安装参考这里

Remix编译、部署合约

流程

  1. 根据个人需求编写NFT合约;
  2. 编译合约、并向Sepolia网络部署合约;
  3. IPFS上传文件(NFT要展示的内容),并生成文件的元信息(metadata);
  4. 将NFT元信息上链;
  5. 在opensea查看自己的NFT;

合约开发

  1. 打开openzeppelin开发向导,选择ERC721,输入NFT的名字及符号,如下:
  1. 特性有如下几项,根据需要选择即可。
  • Mintable 添加铸造NFT的功能,默认只允许合约开发者铸造NFT;
  • Autoincrement IDs 铸造NFT时每个NFT的编号递增;
  • Burnable允许销毁NFT;
  • Pausable转让或出售NFT时允许暂时锁定;
  • Votes类似于自治系统中的投票功能,比如根据NFT数量的投票权,可以将投票权委托给其它人;
  • Enumerable 允许查看链上所有的NFT及其拥有者;
  • URI Storage允许更新某个NFT对应的资源;

代码示例

点击openzeppelin开发向导上方的"Open in Remix",或者将代码复制到你自己在Remix中的工作区中,我选择了后者。

javascript 复制代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract PearlArt is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable {
    uint256 private _nextTokenId;

    constructor(address initialOwner)
        ERC721("PearlArt", "PAT")
        Ownable(initialOwner)
    {}

    function safeMint(address to, string memory uri) public onlyOwner {
        uint256 tokenId = _nextTokenId++;
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

    // The following functions are overrides required by Solidity.

    function _update(
        address to,
        uint256 tokenId,
        address auth
    ) internal override(ERC721, ERC721Enumerable) returns (address) {
        return super._update(to, tokenId, auth);
    }

    function _increaseBalance(address account, uint128 value)
        internal
        override(ERC721, ERC721Enumerable)
    {
        super._increaseBalance(account, value);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable, ERC721URIStorage)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}

部署

注意:

  1. 部署环境选择"Injected Provider",并将metamask钱包连接Sepolia网络;
  2. 部署时需要设置NFT合约的拥有者(有些功能只有拥有者才有权限,比如本例中铸造NFT的功能)

NFT文件元信息生成

上传文件

生成元信息

这一步主要是配置NFT在opensea显示的一些属性,具体配置可以参考这里。这里给出一个配置文件的样例,将样例配置文件命名为metadata.json。

注:修改本示例文件中的image即可

javascript 复制代码
{ 
  "description": "This NFT proves I've created and deployed my daugther's colored pencil art on Sepolia with my first ERC721",
  "image": "https://ipfs.io/ipfs/<你上传文件的CID>",
  "name": "A cool NFT", 
  "attributes": [
    {
      "trait_type": "Base", 
      "value": "Starfish"
    }, 
    {
      "trait_type": "Level", 
      "value": 5
    }, 
    {
      "trait_type": "Stamina", 
      "value": 1.4
    }, 
    {
      "display_type": "boost_number", 
      "trait_type": "Aqua Power", 
      "value": 40
    }, 
    {
      "display_type": "boost_percentage", 
      "trait_type": "Stamina Increase", 
      "value": 10
    }, 
    {
      "display_type": "number", 
      "trait_type": "Generation", 
      "value": 2
    }]
  }

生成metadata.json文件后,将该文件也上传到IPFS,同时复制该文件的CID(后面会用到)

铸造你的NFT

  1. 在Remix部署合约的页面,选择你上面部署的合约;

  2. 调用safeMint方法,铸造你的第一个NFT;

参数说明:

  • to: 这个NFT隶属于谁;
  • uri: metadata.json文件地址,其格式为:ipfs://<metadata.json的CID>
  1. 上述步骤完成后,你可以调用合约的tokenURI方法来查看刚才设置的结果,该函数的参数为tokenID,由于我们的ID是从0自增的,因此此处输入0查看结果;

在opensea查看

本文中的操作均在测试网络中进行,因此我们打开opensea的测试网络来查看我们的NFT,步骤如下:

  1. 首先,点击右上角的"login"按钮登录opensea;
  2. 在连接弹窗中选择metamask
  1. 登录成功后,点击用户信息-->Profile即可看到我们发布的NFT。

注:由于网络问题,你的NFT图片可以一直不显示,但我们可以看到我们NFT合约的名称,如下:

相关推荐
luckys.one8 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
凡哥btczf66610 小时前
M61S 214T矿机详细参数解析与性能评估
区块链
MicroTech202519 小时前
微算法科技(NASDAQ: MLGO)采用分片技术(Sharding)与异步共识机制,实现节点负载均衡,提升交易处理效率
科技·区块链·分片技术
openHiTLS密码开源社区1 天前
X448 算法签名验签流程深度解析及代码示例
物联网·区块链·签名·椭圆曲线·x448·密钥生成
木西2 天前
React Native DApp 开发全栈实战·从 0 到 1 系列(流动性挖矿-前端部分)
react native·web3·智能合约
微三云-轩2 天前
区块链系统:解决549 亿元积分商城是否违法的问题
大数据·小程序·重构·区块链·生活
晓宜2 天前
区块链—NFT介绍及发行
区块链
劲驰2 天前
基于智能合约实现非托管支付
区块链·智能合约
白鹭凡2 天前
WEB3的资料——免费开放
web3