十分钟发布自己的NFT

news2024/11/19 0:40:22

概述

        本文将以一个例子来说明如何在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的名字及符号,如下:

2. 特性有如下几项,根据需要选择即可。

  • Mintable 添加铸造NFT的功能,默认只允许合约开发者铸造NFT;
  • Autoincrement IDs 铸造NFT时每个NFT的编号递增;
  • Burnable允许销毁NFT;
  • Pausable转让或出售NFT时允许暂时锁定;
  • Votes类似于自治系统中的投票功能,比如根据NFT数量的投票权,可以将投票权委托给其它人;
  • Enumerable 允许查看链上所有的NFT及其拥有者;
  • URI Storage允许更新某个NFT对应的资源;

代码示例

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

// 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即可

{ 
  "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>

3. 上述步骤完成后,你可以调用合约的tokenURI方法来查看刚才设置的结果,该函数的参数为tokenID,由于我们的ID是从0自增的,因此此处输入0查看结果;

在opensea查看

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

  1. 首先,点击右上角的”login“按钮登录opensea;
  2. 在连接弹窗中选择metamask

    3. 登录成功后,点击用户信息-->Profile即可看到我们发布的NFT。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1419198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python统计分析——样本方差的分布

参考资料&#xff1a;用python动手学统计学 1、导入库 import numpy as np import pandas as pd import scipy as sp from scipy import statsfrom matplotlib import pyplot as plt import seaborn as sns 2、数据准备 建立一个平均数为4&#xff0c;标准差为0.8的正态分布…

腾讯云4核16G服务器价格,用于幻兽帕鲁Palworld专用

腾讯云幻兽帕鲁服务器4核16G、8核32G和16核64G配置可选&#xff0c;4核16G14M带宽66元一个月、277元3个月&#xff0c;8核32G22M配置115元1个月、345元3个月&#xff0c;16核64G35M配置580元年1个月、1740元3个月、6960元一年&#xff0c;腾讯云百科txybk.com分享腾讯云幻兽帕鲁…

自然语言处理 TF-IDF

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

Java强训day10(选择题编程题)

选择题 public class Test01 {public static void main(String[] args) {try{int i 100 / 0;System.out.print(i);}catch(Exception e){System.out.print(1);throw new RuntimeException();}finally{System.out.print(2);}System.out.print(3);} }编程题 题目1 import jav…

重构改善既有代码的设计-学习(六):处理继承关系

1、函数上移&#xff08;Pull Up Method&#xff09; 无论何时&#xff0c;只要系统内出现重复&#xff0c;你就会面临“修改其中一个却未能修改另一个”的风险。通常&#xff0c;找出重复也有一定的难度。 所以&#xff0c;某个函数在各个子类中的函数体都相同&#xff08;它们…

leetcode hot100跳跃游戏Ⅱ

本题和上一题还是有不一样的地方&#xff0c;这个题中&#xff0c;我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。 那么我们还是采用覆盖范围的概念&#xff0c;但是我们需要两个&#xff0c;一个是在当前位置的覆盖范围&#xff0c;另一个是下一步的覆盖…

Linux的 .bashrc 有什么作用?

一、.bashrc 是什么? 有什么用&#xff1f; .bashrc是一个存储在你的home目录下的隐藏文件&#xff0c;它用来配置和自定义你的终端环境和行为。 每次你启动一个新的终端时&#xff0c;.bashrc文件就会被执行&#xff0c;加载你设置的环境变量&#xff0c;别名&#xff0c;函数…

深度学习-自注意力机制

文字编码 one-hot编码&#xff0c;让模型自己去学习怎么进行编码 常见的输出 1.每个词都有一个输出值 2.每个句子输出一个值&#xff0c;情感分类 3.输入与输出长度不对应&#xff0c;翻译任务&#xff0c;生成任务。 RNN最早的语言处理 RNN解决的是模型去考虑前面的输入…

数字图像处理(实践篇)二十八 使用OpenCV Python中的K-means对图像进行颜色量化处理

目录 1 颜色量化 2 实践 在某些时候,不可避免的某些设备只能生成有限数量的颜色。因此需要执行颜色量化。选择使用cv2.kmeans()函数对颜色量化应用k-means聚类。 1 颜色量化 使用K-means聚类在图像中实现颜色量化的步骤如下: ① 导入依赖库

js实现动漫拼图2.0版

比较与1.0版&#xff0c;2.0版就更像与华容道类似的拼图游戏&#xff0c;从头到尾都只能控制白色块移动&#xff0c;而且打乱拼图和求助的实现与1.0都不相同 文章目录 1 实现效果2 实现思路2.1 打乱拼图2.2 求助功能2.3 判赢 3 代码实现 js实现动漫拼图1.0版 https://blog.csdn…

【千亿生意】一张眼底图,浮现你未来十年身体1000多种疾病风险

【千亿生意】一张眼底图&#xff0c;浮现你未来十年身体1000多种疾病风险 一眼看全身鹰瞳思路眼底看全身论文眼底成像技术眼底看肝脏眼底看多囊卵巢综合征眼底看肺部眼底看贫血眼底看少肌症眼底看神经退行眼底看心血管眼底看肾脏 鹰瞳视网膜论文 一眼看全身 眼病&#xff0c;是…

Redisson分布式锁介绍及实战应用(防止缓存击穿)

本地锁 浏览器把100w请求由网关随机往下传&#xff0c;在集群情况下&#xff0c;每台服务都放行10w请求过来&#xff0c;这时候每台服务都用的是本地锁是跨JVM的&#xff0c; 列如这些服务都没有49企业&#xff0c;此时有几个服务进行回原了打击在DB上面&#xff0c;那后期把这…

fastapi报错

初始化报错&#xff0c;非常低级错&#xff0c;扇自己10八张 app FastApi()

如何在Shopee越南站点进行有效的选品

在如今的电商市场中&#xff0c;选品是卖家们取得成功的关键之一。在Shopee越南站点进行选品时&#xff0c;卖家可以采取一些策略来提高产品的竞争力和销售业绩。本文将介绍一些有效的选品策略&#xff0c;帮助卖家在Shopee越南站点取得成功。 先给大家推荐一款shopee知虾数据…

算法沉淀——二分查找(leetcode真题剖析)

算法沉淀——二分查找 01.二分查找02.在排序数组中查找元素的第一个和最后一个位置03.搜索插入位置04.x 的平方根05.山脉数组的峰顶索引06.寻找峰值07.寻找旋转排序数组中的最小值08.LCR 173. 点名 二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元…

【服务器APP】利用HBuilder X把网页打包成APP

目录 &#x1f33a;1. 概述 &#x1f33c;1.1 新建项目 &#x1f33c;1.2 基础配置 &#x1f33c;1.3 图标配置 &#x1f33c;1.4 启动界面配置 &#x1f33c;1.5 模块配置 &#x1f33c;1.6 打包成APP &#x1f33a;1. 概述 探讨如何将网页转化为APP&#xff0c;这似乎…

【大厂AI课学习笔记】1.3 人工智能产业发展(1)

我国人工智能政策&#xff0c;分为5个阶段。从探索期&#xff0c;到后面的4个阶段。 MORE:&#xff08;以下为文心一言4.0的参考内容&#xff0c;和腾讯课程资料的分阶段&#xff0c;略有不同&#xff09; 我国的人工智能政策发展可以大致分为以下几个阶段&#xff0c;每个阶段…

网络防御安全知识(第三版)

配置黑洞路由 --- 黑洞路由即空接口路由&#xff0c;在NAT地址池中的地址&#xff0c;建议配置达到这个地址指 向空接口的路由&#xff0c;不然&#xff0c;在特定环境下会出现环路。&#xff08;主要针对地址池中的地址和出接口地址 不再同一个网段中的场景。&#xff09; …

一文解锁——那些你不太了解的AI!

ChatGPT现象级走红&#xff0c;国内也有文心一言等模型紧随其后&#xff0c;彻底将大语言模型送上大热门。 不管是你是否深度应用过这些模型&#xff0c;不可否认的是&#xff0c;AI已经彻底地融入我们的生活&#xff0c;甚至成为赚钱利器。除了ChatGPT和百度的文心一言&#…

力扣712. 两个字符串的最小ASCII删除和

动态规划 思路&#xff1a; 假设 dp[i][j] 是 s1 长度 i 和 s2 长度 j 两个字符串的最小 ASCII 删除和&#xff1b;dp[i][j] 可以由&#xff1a; 如果 s1 的第 i 个字符&#xff08;s1[i - 1]&#xff09;和 s2 的第 j 个字符&#xff08;s2[j - 1]&#xff09;不相等&#xf…