Web3 NFT – 使用 Python、Pinata、Opensea 构建和列出 NFT
使用 Python、Openzeppelin 和 Pinata 构建您的 Web3 NFT 集合,这些集合可以在 Opensea 市场上上市。
通证经济是商界的热门词汇。代币主要有两种类型,可替代代币和不可替代代币。 NFT(不可替代代币)是记录在区块链中的、无法复制、替换或细分的唯一数字标识符。它提供真实性的公共证书或所有权证明。
与传统的无形资产评估相比,资产,特别是无形资产可以以绝对透明和颠覆性的方式持续、公开地评估,尽管 NFT 所有权本身没有固有的法律意义。
在本文中,我将介绍如何使用 Python、Openzeppelin 和 Pinata 构建 Web3 NFT 集合,这些集合可以在 Opensea 市场上列出。
Web3 NFT 的组成部分 – 使用 Python、Openzeppelin、Solidity 构建 NFT
目录
- NFT智能合约
- 元数据
- Opesea 账户整合
- Python部署脚本
- Brownie-config、ENV 和 AssistScripts
- 使用 Python、Openzeppelin、Pinata 构建 NFT 的完整脚本
NFT智能合约
除了可替代代币之外,我们还需要从 NFT 开发中的智能合约代码开始。
首先,我们可以充分利用现有的模块,比如Openzeppelin,这样可以节省一些开发常用功能的时间。请务必在 Brownie-config.YAML 中添加依赖项。如果您对此有任何疑问,请参阅 Easy2Digital web3 集合中的其他文章。
// contracts/GameItem.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol" ;
正如您所看到的,ERC721 与同质化代币 ERC20 不同,它是标准的非同质化代币。因此,在这个模块下,我们使用 ERC721 创建一个合约。
- 这里ERC721中有两个参数,一是全名,二是创建的NFT的简称。它以代币开头,就像您在创建的集合中看到的那样,当您一个接一个地创建 NFT 时,其中包括一个加号函数。
contract SimpleCollection is ERC721 {
uint256 public to encounte;
constructor () public ERC721 ("LouisNFT", "LVnft") {
tokenCounter = 0 ;
}
function createCollection ( string memory tokenURI ) public returns ( uint256 ) {
uint256 newTokenId = tokenCounter;
_safeMint ( msg.sender , newTokenId);
_setTokenURI (newTokenId, tokenURI);
tokenCounter = tokenCounter + 1 ;
return newTokenId;
}
}
- 然后,每个新的 NFT 都有一个唯一的代币 URI 和代币 ID。令牌 ID 根据令牌计数器编号由 uint256 进行哈希处理。而token URI基本上包含了NFT的所有物质信息,其中就包括图像。我稍后会讲一下。
元数据
元数据是一个 JSON 文件,允许 OpenSea 等应用程序提取丰富的数字资产数据并轻松在应用程序中显示它们。以下是基本元数据文件中包含的元素:
除了那些脚本文件之外,在区块链上存储数据可能非常昂贵。然而,图像、视频和音频这些大尺寸的材料在区块链上存储起来可能会很昂贵。
所以通常我们可以利用IPFS等去中心化存储。 IPFS(星际文件系统)是一种协议、超媒体和文件共享点对点网络,用于在分布式文件系统中存储和共享数据。
将 NFT 材料上传到 IPFS 基本上有两种方法。一是在本地安装IPFS环境来与IPFS网络交互。另一种是通过第三方平台运行,比如Pinata。
将 NFT 图像和 JSON 文件上传到 Pinata 以生成令牌 URI。
首先,第一步是创建一个 Pinata 帐户并准备您想要转换为 NFT 的图像。
然后,将图像作为文件上传到 Pinata 上,然后您可以从该材料中获取 CID 密钥。稍后将使用该密钥来创建 JSON 文件。
此外,由于令牌 URI 是 JSON 文件,下一步是将与 NFT 相关的所有信息添加到 JSON 文件中。这是使用 VSC 的示例,如下所示:
- 姓名
- 图片:IPFS URL结构,
https://ipfs.io/ipfs/ + image CID key (Generated just now)
- 描述
- 属性
最后但并非最不重要的一点是,一旦 JSON 文件准备就绪,请返回 Pinata 并上传 JSON 并生成 JSON 文件 CID 密钥。以下是 IPFS URL 的最终令牌 URI 的示例。
https://ipfs.io/ipfs/QmV8rPonNpVaKnH2ri826AWqJ5XxeKYdeJupjKch4kA1UK?filename=NFT1.json
Opesea 账户整合
OpenSea 是世界上第一个也是最大的 NFT 和加密收藏品的 web3 市场。使用 OpenSea 浏览、创建、购买、出售和拍卖 NFT。对于任何 NFT 来说,无论是否出于出售目的,在市场上上市都是很常见的。值得注意的是,大多数公司利用这一点来建立品牌知名度并协助实施忠诚度计划。
对于这种情况,我们可以使用opensea测试网来模拟NFT上币过程。创建 opensea 测试网帐户是完全免费的。在我们的例子中,我们将使用 MetaMask 来列出 NFT。因此,请务必注册与 MetaMask 测试网络帐户连接的 opensea 测试帐户。
对于 opensea testnext NFT URL,基本上,它有两个变量,即加密货币网络和
对于 opesea 列表 URL,该结构有两个变量,以下是示例
https://testnets.opensea.io/assets/ goerli/0x8eeb73f75e6d80a6a21302d1ec36d0ead0ceb295/0
- 网络地址:
goerli/0x8eeb73f75e6d80a6a21302d1ec36d0ead0ceb295
- Token Counter:0(这个数字代表NFT的顺序,0表示是第一个)
稍后我们将在 Python 部署脚本中使用它。
Python部署脚本
除了导入 Brownie 和 Assistscript 模块以及构建可替代代币之外,NFT 部署还需要两个变量。它们是sample_collection_URI 和 OPEASEA_URL
sample_collection_URI = "https://ipfs.io/ipfs/QmV8rPonNpVaKnH2ri826AWqJ5XxeKYdeJupjKch4kA1UK?filename=NFT1.json"
OPENSEA_URL = "https://testnets.opensea.io/assets/ {} / {} "
然后在主函数中,我们需要使用之前在NFT智能合约中创建的createcollection
函数
def main ():
account = get_account ()
Simple_Collection = SimpleCollection.deploy({ "from" : account })
tx = Simple_Collection .createCollection(
sample_collection_URI , { "from" : account })
tx .wait( 1 )
Brownie-config、ENV 和 AssistScripts
除了可替代代币开发之外,我们还需要添加这些脚本。欲了解更多详情,请参阅这些文章
脚本准备好后,我们可以在特定网络上运行脚本,这里的结果表明它已完成,并且 NFT 已在市场上列出。
Brownie run scripts/deploy_NFTCreate.py –network goerli
使用 Python、Openzeppelin、Pinata 构建 NFT 的完整脚本
如果您对 Web3 NFT – 使用 Python、Openzeppelin、Pinata 构建和列出 NFT 感兴趣,请添加消息“Web3.0教程7”来订阅我们的新闻通讯。我们会立即将脚本发送到您的邮箱。
我希望您喜欢阅读 Web3 NFT – 使用 Python、Openzeppelin 和 Pinata 构建和列出 NFT。如果您这样做了,请通过执行下列操作之一来支持我们,因为这总是对我们的频道有所帮助。
- 通过 PayPal ( paypal.me/Easy2digital ) 支持并捐赠我的频道
- 订阅我的频道并打开通知铃Easy2Digital Youtube 频道。
- 关注并喜欢我的页面Easy2Digital Facebook 页面
- 使用主题标签 #easy2digital 在您的社交网络上分享文章
- 您订阅我们的每周通讯即可接收 Easy2Digital 最新文章、视频和折扣代码
- 通过 Patreon 订阅我们的月度会员即可享受独家优惠 ( www.patreon.com/louisludigital )