如何铸造 HTML NFT
使用ChatGPT,Remix和Pinata。
在这篇博客中,我们会专注于使用ChatGPT、Remix和Pinata创建HTML NFT——这是一个将人工智能、区块链和个人表达融合在一起的项目。ChatGPT编写我们的智能合约,Remix部署它,Pinata托管它,使我们的HTML NFT易于被世界访问。最终,你会拥有类似于这个的东西:
请访问https://opensea.io/assets/ethereum/0x14a5cb1379d510d31a2dbc6580732ad0c4e203ee/1/。
项目灵感
HTML NFTs一直比图像或视频NFTs更有趣。在Pinata,我们一直认为NFTs可以代表更多的东西,而问题一直是实现的可访问性。随着ChatGPT和其他AI工具的加入,技术和非技术人员现在可以更容易地创建和构建。
关于这个系列,它的标题为宇宙缓解。受到内布拉斯加州沙丘的启发,我想要在一片荒凉而又不为人知的沙丘环境中创造一个格格不入的角色。借鉴了《玩具总动员》中的牛仔对抗宇航员的故事情节、德克萨斯州马尔法的普拉达商店以及我在内布拉斯加州制作派纳塔时所感受到的一些情感,希望它为你所处的那个繁忙世界提供一点缓解。
有了那个,让我们开始!
HTML (超文本标记语言)
首先,你需要一个要铸造的HTML文件。本教程假定你已经有一个了。如果你没有,你可以在这里使用Midjourney,ChatGPT和Pinata学习制作一个:
一旦你有了HTML文件,就可以上传到Pinata。要这样做,只需登录。进入文件管理器页面后,点击右上角的“+添加文件”按钮,上传你的HTML文件即可。
生成JSON元数据
接下来,您需要前往chat.openai.com开始使用ChatGPT进行提示。您的第一个提示应该是以下内容:
请您生成一个基本的ERC721元数据JSON,包括名称,描述,图像和动画?请不包括属性。
答案 1 没问题,我肯定可以生成一个 ERC721 代币元数据的 JSON。请注意,名称、描述、图像、外部网址和动画的实际值都是占位符,应该用实际数据替换。这是一个例子:
{
"name": "Token Name",
"description": "This is a description of the token.",
"image": "https://example.com/path/to/image.png",
"external_url": "https://example.com/path/to/token",
"animation_url": "https://example.com/path/to/animation.mp4"
}
- “name”:代币名称。
- "description": 代币的描述。
- "图像": 代表令牌的图像的 URL。这应该是一个 PNG、JPEG 或 SVG 图像。
- "external_url": 这是一个指向更多代币信息的网页链接。
- “animation_url”:包含代币动画的MP4文件的URL。该字段是可选的,如果代币没有动画,则可能不包含该字段。
再次强调,这里的值都是占位符,请用您实际的数据来替换它们。
提示2:您可以做出以下更改:名称:宇宙缓解 描述:一个HTML宇航员 图像:https://kyletut.com/ipfs/QmdJPaZMBstDTz12VLXCK6qJEUVW6Y5LgcwbefoyqvDdFF 外部URL:https://kyletut.com 动画URL:https://kyletut.com/ipfs/Qmd6wyNbRmzpUaRaXPX1c6GWo8VC64PxJBsi4W8BYNV8qG
答案 2:当然可以为您做出这些更改。这是您的ERC721令牌的更新元数据 JSON:
{
"name": "Cosmic Reprieve",
"description": "An HTML Astronaut",
"image": "https://kyletut.com/ipfs/QmdJPaZMBstDTz12VLXCK6qJEUVW6Y5LgcwbefoyqvDdFF",
"external_url": "https://kyletut.com",
"animation_url": "https://kyletut.com/ipfs/Qmd6wyNbRmzpUaRaXPX1c6GWo8VC64PxJBsi4W8BYNV8qG"
}
请记得验证JSON,并确保URL可访问且指向正确的资源。
保存JSON元数据文件
您需要将以上JSON文件保存到您的计算机并上传到Pinata。如果您是编码新手,您需要使用文本编辑器(如Sublime)。要保存文件,只需将代码复制到文本编辑器中并将其保存到您的计算机中即可。保存到计算机后,请上传到Pinata并获取文件的URL。它应该如下所示:
https://kyletut.com/ipfs/QmU4uNetK6AmNv3zERJ7efJakf6JG4d9QGu9ZJgj2s6N6Y
创建ERC721合约
请务必获取上述网址,然后向ChatGPT提示以下内容。
提示3 您能为名为“Cosmic Reprieve”的ERC721代币生成基本的Solidity智能合约代码,该代码具有符号“CR”,具有铸造功能并使用指向元数据JSON文件的基本URI吗?以下是JSON文件的URL:https://kyletut.com/ipfs/QmVvb12MKAwLubN5SnoEv8a83xWcSTEDZU17SSYMoWXZT3。
我想让所有代币都具有相同的元数据,并防止附加代币ID。在您的合同中覆盖tokenURI函数以忽略代币ID并始终返回基本URI。这些合同应直接导入Solidity代码本身,Remix在编译合同时应该获取它们。请使用OpenZeppelin的最新版本。
答案3:这是使用OpenZeppelin库实现ERC721合约的简单方法。ERC721是一个自由、开放的标准,描述了如何在以太坊区块链上构建不可替代的代币。不可替代的代币(NFT)是不可互换的代币,并具有独特的属性。
请注意,在部署之前,彻底审核和测试任何智能合约的安全性和功能性是至关重要的。您还应确保完全了解代码及其影响。
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
import "@openzeppelin/contracts@4.8.3/token/ERC721/ERC721.sol";
contract CosmicReprieve is ERC721 {
string constant baseURI = "https://kyletut.com/ipfs/QmVvb12MKAwLubN5SnoEv8a83xWcSTEDZU17SSYMoWXZT3"; // The base URI points to your metadata JSON
constructor() ERC721("Cosmic Reprieve", "CR") {}
function mint(address to, uint256 tokenId) public {
_mint(to, tokenId);
}
function _baseURI() internal pure override returns (string memory) {
return baseURI;
}
function tokenURI(uint256 tokenId) public view override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
// Always return the baseURI regardless of tokenId
return baseURI;
}
}
以下是合同的各个部分所起的作用:
pragma solidity >=0.8.0
- 导入"@ openzeppelin/ contracts@4.8.3 / token / ERC721 / ERC721.sol"; 该行从OpenZeppelin库导入ERC721合约。 OpenZeppelin是用于安全智能合约开发的库。
- 合约 CosmicReprieve 是 ERC721 {...} 在这里声明了 CosmicReprieve 合约,它继承了从 OpenZeppelin 导入的 ERC721 合约。
- 字符串常量 baseURI = "https://kyletut.com/ipfs/QmVvb12MKAwLubN5SnoEv8a83xWcSTEDZU17SSYMoWXZT3"。这是指向元数据JSON的基本网址。用于检索每个代币的元数据。
- constructor() ERC721("宇宙宽恕", "CR") {} 这是合约的构造函数。它使用该代币的名称和符号调用父ERC721合约的构造函数。
- function mint(address to, uint256 tokenId) public {...}这个函数允许创建新的代币。它是公共函数,所以任何人都可以调用它。
- function _baseURI()内部纯覆盖返回(string memory){...}此函数覆盖ERC721合同中的_baseURI函数。它用于为令牌元数据提供基本URL。
- function tokenURI(uint256 tokenId) public view override returns (string memory) {...} 这个函数覆盖了ERC721合约中的tokenURI函数。它用于提供令牌元数据的URL。在本合约中,无论令牌ID如何,它始终返回基本URI,这意味着它假定所有令牌具有相同的元数据。
请注意,该合同缺乏针对铸造功能的访问控制。在生产合同中,通常会看到某种形式的访问控制(如onlyOwner修饰符),以限制谁可以铸造新代币。如果没有这个控制措施,任何人都可以铸造新代币到您的合同中,这可能并不是所需的行为。
使用Remix进行部署和铸造。
提示4:你能向我展示如何使用Remix部署和铸造合约吗?
回答 4Sure,我可以提供使用 Remix Ethereum IDE 部署和铸造代币的步骤:
前往Remix Ethereum IDE网站(http://remix.ethereum.org)。单击页面中心左侧的蓝色“新建文件”按钮。将其命名为CosmicReprieve.sol。
复制之前提供的 Solidity 代码并将其粘贴到这个新文件中。
一旦您的合同准备好,请单击“Solidity Compiler”按钮。选择适当的编译器版本(合同代码中规定的0.8.0或更高版本)。然后单击“Compile CosmicReprieve.sol”。
合约编译无误后,点击“部署和运行交易”按钮。选择“注入的提供者 - MetaMask”环境(针对MetaMask)。您需要连接您的MetaMask或其他提供者。在MetaMask中 ,请确保选择要部署的适当网络!对于测试,请使用像Goerli这样的测试网络。
对于“合同”,选择CosmicReprieve(如果它是文件中唯一的合同,则应该自动选择)。然后点击“部署”。您需要在MetaMask钱包中确认交易。
合约部署后,它将出现在“已部署的合约”部分下面。点击它以展开它,然后您将看到可以调用的所有公共函数的列表。
为了铸造一枚代币,您需要输入您要将代币铸造到的地址和代币ID,然后点击“铸造”按钮。在我的例子中,我输入了“0x5ba…9bAD, 1”。如果您使用“注入的提供商”,您需要在钱包中确认交易。
请注意,这是一个简化指南,实际步骤可能会因 Remix 当前设计和特定环境设置略有不同。您还需要一些 Ether(在主链上是真实的,在测试网络上是虚假的)来支付交易费用。就是这样。在这里查看我的 Cosmic Reprieve NFT!
愉快地固定!
皮纳塔链接
探索Pinata并开始构建!
Twitter (推特)
Instagram (Insatagram)
YouTube (优酷)
网站
Discord(聊天软件)