数字商品指南系列第四篇:铸造数字藏品

2024-02-04 02:10

本文主要是介绍数字商品指南系列第四篇:铸造数字藏品,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
    • 警告
  • 使用IPFS配置元数据
  • 编写铸造脚本
  • 执行铸造命令
  • 总结
  • 捐赠渠道

前言

在上篇文章里我们部署了我们的智能合约,现在我们可以使用智能合约的方法来铸造数字藏品了,我们的铸造方法需要两个参数,一个是钱包地址,一个是元数据网址,在正式开始铸造之前,我们需要先把我们的元数据存放到一个网址里,这里可以使用你自己的虚拟服务器来存放元数据文件,但为了以后不管过了多久都可以让网址有效,更推荐你把自己的元数据存放到IPFS(去中心化文件存储系统)上。

警告

本指南仅供学习交流使用,不得用于违法用途,如果侵犯了国家法律,责任自负。

使用IPFS配置元数据

IPFS是一种去中心化协议和对等网络,用于在分布式文件系统中存储和共享数据。
关于ipfs系统的选择有很多种,这里我们使用Pinata,一个方便的IPFS API和工具包,用于存储我们的数字藏品资产和元数据,以确保我们的数字藏品真正去中心化。如果您没有Pinata帐户,请在此处注册一个免费帐户,并完成验证电子邮件的步骤。

注册完成登录帐户后,在导航栏里点击Files,下边会有一个Upload按钮,点击它来上传一个图片,上传完成后,在My Files里会多处一行内容,其中有一列是CID,我们可以通过https://gateway.pinata.cloud/ipfs/,来访问我们刚才上传的图片。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到这里我们已经上传了一个图片,并且可以通过https://gateway.pinata.cloud/ipfs/来查看。
接下来我们还需要再上传一个文件上去,首先我们先创建它,在我们的项目根目录my-contract下创建文件metadata.json,并复制下边内容,然后粘贴到这个文件。

{"attributes": [{"trait_type": "Type","value": "Eyeglass"},{"trait_type": "Color","value": "Red"}],"description": "This is the most popular reading glasses","image": "https://gateway.pinata.cloud/ipfs/<CID>","name": "Digital collection"
}

这是一个示例内容,你可以根据自己的喜好和需求添加一些内容,但切记image后边的内容一定要替换为上一个你上传的CID,否则元数据里不会看到你上传的图片。
好了,文件编写好了,接下来像上传一个图片那样,把它上传到Pinata,上传成功后,会显示出CID,比如QmaY8pL2ipmC9eiiZ9y6uFGVbMHkCBvKTJ3Qzfnr1VGRZC,拼接成最终的元数据网址:https://gateway.pinata.cloud/ipfs/QmZkFD3Qas7jnr4qnD4AaPUCdUC2MuoLKzbXbX5kZaHG9u,这个就是我们要铸造的第一个藏品的元数据网址。

编写铸造脚本

为了可以调用合约执行铸造方法,我们需要使用JavaScript来编写一个简单的铸造脚本。
打开我们的项目根目录my-contract,在scripts目录下新建文件service.js,这里我们存放一些我们的工具方法,复制并粘贴如下代码

const { ethers } = require("ethers");
const { getContractAt } = require("@nomiclabs/hardhat-ethers/internal/helpers");function getEnvVariable(key, defaultValue) {if (process.env[key]) {return process.env[key];}if (!defaultValue) {throw `${key} 未配置`;}return defaultValue;
}function getProvider() {return ethers.getDefaultProvider(getEnvVariable("NETWORK", "rinkeby"), {alchemy: getEnvVariable("ALCHEMY_KEY"),});
}function getAccount() {return new ethers.Wallet(getEnvVariable("PRIVATE_KEY"), getProvider());
}
function getContract(contractName, hre) {const account = getAccount();return getContractAt(hre, contractName, getEnvVariable("CONTRACT_ADDRESS"), account);
}
module.exports = {getEnvVariable,getProvider,getAccount,getContract,
}

其中getEnvVariable用于获取.env文件中的环境变量
getProvider用于获取连接到以太坊区块链网络的连接器
getAccount通过我们设置的PRIVATE_KEY变量,来获取私钥对应的钱包地址
getContract返回一个合约实例,通过实例我们可以调用合约方法,这里还需要设置环境变量CONTRACT_ADDRESS,值为部署成功的合约地址

再在scripts目录下新建个mint.js,这是我们的铸造脚本文件,复制并粘贴下边的代码

const { task } = require("hardhat/config");
const { getContract } = require("./service");task("mint", "Mints from the NFT contract").addParam("address", "The address to receive a token").addParam("tokenuri", "The metadata to a tokenid").setAction(async function (taskArguments, hre) {const contract = await getContract("MyContract", hre);const transactionResponse = await contract.mintTo(taskArguments.address, taskArguments.tokenuri,{gasLimit: 500_000,});console.log(`Hash: ${transactionResponse.hash}`);});

这里我们使用HardHat的任务系统,通过创建mint(铸造任务)到HardHat,使我们可以直接使用cmd命令的方式去执行铸造任务,使用方式为:npx hardhat mint --address 地址 --tokenuri 网址。
接下来我们还要在HardHat配置文件hardhat.config.js中引入mint.js,命令如下
require("./scripts/mint.js");
添加完这些内容后,hardhat.config.js文件内容如下

/*** @type import('hardhat/config').HardhatUserConfig*/require('dotenv').config();
require("@nomiclabs/hardhat-ethers");
require("./scripts/mint.js");
const { API_URL, PRIVATE_KEY } = process.env;module.exports = {solidity: "0.8.1",defaultNetwork: "rinkeby",networks: {hardhat: {},rinkeby: {url: API_URL,accounts: [`0x${PRIVATE_KEY}`]},ethereum: {chainId: 1,url: API_URL,accounts: [`0x${PRIVATE_KEY}`]},},
}

最后一步,在.env文件中增加ALCHEMY_KEY和CONTRACT_ADDRESS,最终.env文件内容是这样的:

API_URL="https://eth-rinkeby.alchemyapi.io/v2/你的Alchemy私钥"
PRIVATE_KEY="你的钱包私钥"
ALCHEMY_KEY="你的Alchemy私钥"
CONTRACT_ADDRESS="你的智能合约地址"

为了验证mint(铸造藏品)任务已成功添加到HardHat,打开cmd,进入到项目根目录my-contract,执行命令

npx hardhat

在这里插入图片描述

如果看到了mint方法,说明铸造任务添加成功。

执行铸造命令

万事具备,只差东风,执行铸造命令

npx hardhat mint --address 钱包地址 --tokenuri 元数据网址
C:\Users\ThinkPad\my-contract>npx hardhat mint --address 0xd6d41E4F4B8b7ed1F5cBe60fdaC9f5BeAE19647c --tokenuri https://gateway.pinata.cloud/ipfs/QmZkFD3Qas7jnr4qnD4AaPUCdUC2MuoLKzbXbX5kZaHG9u
Hash: 0x2e9872e570426a0fc2f11ad5b1b13c31a8167f6a799662fd4b93c03b452da854

执行命令后,如果像上边那样出来hash值代表方法执行成功,复制hash值到区块浏览器查看铸造的详细信息。
在这里插入图片描述

总结

这篇文章结束后,在一切顺利的情况下,你已经可以铸造自己的数字藏品了,虽然是很简单的藏品,但已经起步了,当然你可能有其它的需求,比如铸造藏品需要支付以太坊,铸造藏品仅限合约创建者,这些都可以通过改变智能合约来实现,也需要你自己去探索更多功能。

捐赠渠道

本教程是由本人自发的项目,如果你要支持我,请通过支付宝发送口令红包,将口令发送到我的邮箱351107490@qq.com,捐赠仅凭个人意愿,感谢支持。

这篇关于数字商品指南系列第四篇:铸造数字藏品的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676099

相关文章

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优