

铸造NFT就像是将我们的数字资产放到区块链上,这样它们就可以在NFT交易市场上进行交易。
NFT铸造体系结构看起来如何?

NFT 架构
Alchemy
Alchemy是一个中间件,它使开发人员可以更容易地进行区块链通信。
在Alchemy https://www.alchemy.com/上创建一个免费帐户,并使用他们的开发平台和API来请求区块链。
Alchemy帐户设置

Alchemy 注册或登录
通过选择所需的区块链网络在 Alchemy上创建一个新应用程序。

在Alchemy上创建一个新的应用程序
复制HTTP URL,因为我们需要它连接到区块链网络。

在 Alchemy 上查看应用程序密钥详细信息
现在,我们需要将 Polygon Mumbai 测试网添加到我们的 metamask 帐户。
将 Alchemy URL 添加为 RPC URL,并将链 ID 设置为 80001。可以在https://chainlist.org/中验证链 ID 。MATIC 是 Polygon 区块链中处理的代币。

Ethers.js
Ethers.js 是一个允许我们与以太坊区块链交互的库。
安装ethers.js 如下所示:
npm install –save ethers
如何以去中心化的方式创建NFT?——使用IPFS,一个去中心化的存储平台,我们将在其中存储 NFT 元数据。
IPFS & Pinata
IPFS是一个点对点协议,就像torrent一样。
它去中心化了整个文件托管过程。当我们将一个文件上传到IPFS时,它会分布在每个节点上,然后这些节点就变成了一个服务器,这样就没有人可以删除文件了。我们将NFT元数据托管在IPFS上。
Pinata是IPFS的一个接口,它使在IPFS上托管文件变得更容易。
我们可以上传图像文件和JSON元数据到Pinata。
在Pinata上创建一个免费帐户:https://app.pinata.cloud/signin。

Pinata注册或登录
创建新的API密钥来访问它。我们将获得一个API密钥和一个密钥。

在Pinata上创建API密钥
现在让我们深入研究NFT铸造!
第一步:获取一些假 MATIC
由于区块链交易是与gas费是绑定的,我们需要收集一些假的MATIC来铸造我们的NFT。
从这里得到一些假的MATIC: https://faucet.polygon.technology/。
其他可用的MATIC水龙头:
第二步:创建一个 .env 文件
.env 文件应包含以下详细信息:
API_URL = “your alchemy URL" PRIVATE_KEY = “metamask private key” PUBLIC_KEY = “your metamask wallet address” CONTRACT_ADDRESS =”deployed contract address" PINATA_API_KEY = “pinata api key” PINATA_SECRET_KEY = “pinata secret key”
第三步:创建您的 nft.js 文件
将以下内容复制到文件中。
require("dotenv").config();const fs = require("fs");const require("dotenv").config(); const fs = require("fs"); const FormData = require("form-data"); const axios = require("axios"); const { ethers } = require("ethers");//Grab the contract ABI const contract = require("../artifacts/contracts/ArGram.sol/ArGram.json");const { PINATA_API_KEY, PINATA_SECRET_KEY, API_URL, PRIVATE_KEY, PUBLIC_KEY, CONTRACT_ADDRESS } = process.env;
首先,确保我们已经成功地验证了Pinata API。
const authResponse = await
axios.get(“https://api.pinata.cloud/data/testAuthentication“, {
headers: {
pinata_api_key: PINATA_API_KEY,
pinata_secret_api_key: PINATA_SECRET_KEY, }, });
我们的authResponse应该包含“恭喜! 你正在与Pinata API通信!”
现在,从本地系统读取图像文件。
const stream = fs.createReadStream(req.file.path);
const data = new FormData();
data.append(“file”, stream);
使用pinFile API将图像文件上传到IPFS。如果成功,它将返回一个哈希码。
const fileResponse = await axios.post(“https://api.pinata.cloud/pinning/pinFileToIPFS“, data, { headers: {
“Content-Type”: multipart/form-data; boundary= ${data._boundary}, pinata_api_key: PINATA_API_KEY,
pinata_secret_api_key: PINATA_SECRET_KEY,
},
});
const { data: fileData = {} } = fileResponse;
const { IpfsHash } = fileData;
const fileIPFS= https://gateway.pinata.cloud/ipfs/${IpfsHash}
;
我们的fileIPFS应该类似于https://gateway.pinata.cloud/ipfs/<image-hash>
例如:https://gateway.pinata.cloud/ipfs/QmeK8t9Lom2AcH8s7gLpuZordcxisegwkcSJpqL46S87uC。
现在我们可以使用pinJSON API将JSON元数据上传到IPFS。如果成功,它将返回一个哈希码,我们将使用该哈希码作为token URI进行铸造。
//Create NFT metadata JSON const metadata = { image: https://gateway.pinata.cloud/ipfs/QmeK8t9Lom2AcH8s7gLpuZordcxisegwkcSJpqL46S87uC", name: "MyArGramNFT", description: "MyArGramNFT Description", attributes: [ { "trait_type": "color", "value": "brown"}, { "trait_type": "background", "value": "white"} ] }const pinataJSONBody = { pinataContent: metadata }; const jsonResponse = await axios.post("https://api.pinata.cloud/pinning/pinJSONToIPFS", pinataJSONBody, { headers: { “Content-Type”: `application/json`, pinata_api_key: PINATA_API_KEY, pinata_secret_api_key: PINATA_SECRET_KEY, }, }); const { data: jsonData = {} } = jsonResponse; const { IpfsHash } = jsonData; const tokenURI = `https://gateway.pinata.cloud/ipfs/${IpfsHash}`;
我们的tokenURI应该类似于https://gateway.pinata.cloud/ipfs/<json-hash>
例如:https://gateway.pinata.cloud/ipfs/QmammqqQDpmk4oAuyfgJA9Ni7ChEzxEkmzQLLhjbGAKHax。
最后,我们可以创建我们从IPFS json上传获得的tokenURI。调用我们在智能合约中编写的mintNFT方法。参考以下智能合约:
使用我们的私钥签署交易。
//Create NFT metadata JSON const metadata = { image: https://gateway.pinata.cloud/ipfs/QmeK8t9Lom2AcH8s7gLpuZordcxisegwkcSJpqL46S87uC", name: "MyArGramNFT", description: "MyArGramNFT Description", attributes: [ { "trait_type": "color", "value": "brown"}, { "trait_type": "background", "value": "white"} ] }const pinataJSONBody = { pinataContent: metadata }; const jsonResponse = await axios.post("https://api.pinata.cloud/pinning/pinJSONToIPFS", pinataJSONBody, { headers: { “Content-Type”: `application/json`, pinata_api_key: PINATA_API_KEY, pinata_secret_api_key: PINATA_SECRET_KEY, }, }); const { data: jsonData = {} } = jsonResponse; const { IpfsHash } = jsonData; const tokenURI = `https://gateway.pinata.cloud/ipfs/${IpfsHash}`;
我们会得到这样的回复:
Your Transaction Hash is: 0x9732ca53cfb6b8e29e13873b51407f431bc798cbe3abe82ea110c0e5924506c8 Token ID minted: 1
关于
ChinaDeFi – ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。
Layer 2道友 – 欢迎对Layer 2感兴趣的区块链技术爱好者、研究分析人与Gavin(微信: chinadefi)联系,共同探讨Layer 2带来的落地机遇。敬请关注我们的微信公众号 “去中心化金融社区”。
