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

相关推荐
风染yeye1 小时前
区块链期末复习1.1:密码学哈希函数
区块链·密码学
weiwei2284413 小时前
零知识证明一
区块链·零知识证明
qiquandongkh15 小时前
期权懂|期权新手入门知识:如何挑选期权活跃合约?
大数据·区块链
dingzd9520 小时前
走进 Web3:探索分布式网络的未来
web3·去中心化·区块链·互联网
Roun321 小时前
元宇宙中的去中心化应用:Web3的未来角色
web3·去中心化·区块链
清 晨1 天前
Web3 生态全景:创新与发展之路
人工智能·web3·去中心化·智能合约
Black_mario1 天前
链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 应用场景
网络·人工智能·web3
TianXuan_Chain1 天前
web3跨链预言机协议-BandProtocol
web3·区块链·预言机
电报号dapp1191 天前
比特币市场震荡:回调背后的机遇与挑战
人工智能·去中心化·区块链·智能合约
黑客老陈2 天前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
运维·服务器·前端·网络·安全·web3·xss