十分钟发布自己的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合约的名称,如下:

相关推荐
The_Ticker14 小时前
日股实时行情接口使用指南
java·经验分享·笔记·python·算法·区块链
三秋树14 小时前
从 Solv Protocol 273 万美元被黑事件,深入理解 Solidity 自重入攻击 —— ERC-3525 标准中的暗坑
区块链
MicroTech202515 小时前
微算法科技(NASDAQ: MLGO)探索量子隐形传态区块链隐私保护签名技术,增强Web 3.0元宇宙环境的效率、安全性和真实性
科技·区块链
草原猫15 小时前
公链开发:从技术筑基到生态共生,重构数字信任基础设施
重构·区块链
小白的代码日记15 小时前
区块链分叉检测与回扫系统(Go语言)
人工智能·golang·区块链
Blockchina15 小时前
Web3项目开发全流程详解:从0到1搭建DApp架构(实战版)
架构·web3·区块链·perp dex
Blockchina2 天前
Web3金融革命:PerpDEX的深度解析
金融·web3·区块链·perp dex·永续去中心化交易所
Joy T2 天前
【Web3】深入解析Coin-Token、ERC20-ERC721、自定义错误机制与合约继承
web3·代币·自定义错误·gas·erc-20·原生币·合约继承
Joy T2 天前
【Web3】Solidity收款合约初探与去中心化预言机(Chainlink)机制解析
web3·去中心化·区块链·预言机·chainlink·don·datafeed
fuzamei8882 天前
【市场观察】黄金、白银等金属回归“真实资产”,区块链价值的时代也在路上
区块链