以去中心化的方式铸造 NFT——使用 AlchemyEthers.js 和 Pinata API

Posted chinadefi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以去中心化的方式铸造 NFT——使用 AlchemyEthers.js 和 Pinata API相关的知识,希望对你有一定的参考价值。

以去中心化的方式铸造 NFT——使用 Alchemy、Ethers.js 和 Pinata API

铸造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水龙头:

https://faucet.pearzap.com/

https://matic.supply/

https://www.coinclarified.com/tools/faucets/polygon

https://faucet.firebird.finance/

第二步:创建一个 .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 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/

例如: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/

例如:https://gateway.pinata.cloud/ipfs/QmammqqQDpmk4oAuyfgJA9Ni7ChEzxEkmzQLLhjbGAKHax。

最后,我们可以创建我们从IPFS json上传获得的tokenURI。调用我们在智能合约中编写的mintNFT方法。参考以下智能合约:

使用我们的私钥签署交易。

const provider = new ethers.providers.JsonRpcProvider(API_URL);
const wallet = new ethers.Wallet(PRIVATE_KEY, provider);
const etherInterface = new ethers.utils.Interface(contract.abi);// Get latest nonce
const nonce = await provider.getTransactionCount(PUBLIC_KEY, "latest");// Get gas price
const gasPrice = await provider.getGasPrice();// Get network
const network = await provider.getNetwork();
const  chainId  = network;//Transaction object
const transaction = 
   from: PUBLIC_KEY,
   to: CONTRACT_ADDRESS,
   nonce,
   chainId,
   gasPrice,
   data: etherInterface.encodeFunctionData("mintNFT", 
         [ PUBLIC_KEY, tokenURI ]) 
;//Estimate gas limit
const estimatedGas = await provider.estimateGas(transaction);
transaction["gasLimit"] = estimatedGas;//Sign & Send transaction
const signedTx = await wallet.signTransaction(transaction);
const transactionReceipt = await provider.sendTransaction(signedTx);
await transactionReceipt.wait();
const hash = transactionReceipt.hash;
console.log("Your Transaction Hash is:", hash);// Get transaction receipt
const receipt = await provider.getTransactionReceipt(hash);
const  logs  = receipt;// Get token ID
const tokenInBigNumber = ethers.BigNumber.from(logs[0].topics[3]);
const tokenId = tokenInBigNumber.toNumber();
console.log("Token ID minted:", tokenId);

我们会得到这样的回复:

Your Transaction Hash is: 0x9732ca53cfb6b8e29e13873b51407f431bc798cbe3abe82ea110c0e5924506c8 Token ID minted: 1

Source:https://medium.com/coinmonks/mint-an-nft-in-a-decentralized-manner-using-alchemy-ethers-js-pinata-apis-da69a3b83d84

关于

ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。

Layer 2道友 - 欢迎对Layer 2感兴趣的区块链技术爱好者、研究分析人与Gavin(微信: chinadefi)联系,共同探讨Layer 2带来的落地机遇。敬请关注我们的微信公众号 “去中心化金融社区”

区块链Defi之谁能铸造NFT艺术品汕头市

一、NFT艺术品及其铸造

NFT数字艺术有两类创作方式。一种是由创作者直接利用计算机等数字终端进行数字创作,随后对作品再进行NFT加密,操作相对简便易行;另外一种方式就是将线下艺术品通过数码拍照、视频动图、3D视频等方式转换为数字形式,随后再进行NFT加密,这种方式相对复杂一些。【.本文​由qkljys123整理发布.】

不管是由创作者直接创作的数字作品,还是将传统线下实物艺术品铸造成NFT产品,如果铸造者就是创作者本人,那么应该是没有问题的。但是如果铸造者不是创作者本人,则需要创作者或有关权利人的授权。对传统实物艺术品数字化以后进行NFT加密,因其涉及的场景和环节比较复杂,可能会涉及更多的法律问题。

二、铸造者与NFT艺术品的关系

将数字作品铸造成NFT产品,或将传统实物艺术品铸造NFT,其行为法律性质是什么呢?铸造者需要满足什么样的条件?

我们不妨再回顾一下铸造NFT的过程。NFT作为数字世界的原生性元素,本质上是一种不同质的Token,由于这个Token的元数据与特定物品相联系,该不同质Token与元数据结合形成了NFT产品,而该NFT产品可以理解为具有特定使用价值、能够与程序相结合的,具有使用价值的数字产品。因此,铸造NFT产品的过程,是一种将特定产品信息数据进行数字化并与特定TokenID锚定的过程。

因此可以说,将特定数据信息以数字化呈现,是NFT产品铸造的本质。那么将特定数据信息数字化,是一种什么行为?

首先可以肯定的是,在很多情况下,数字化的行为是一种复制权。我国《著作权法》就提到数字化方式制作一份或多份属于复制。该法第十条第(五)项规定,著作财产权中的复制权,即以印刷、复印、拓印、录音、录像、翻录、翻拍、数字化等方式将作品制作一份或者多份的权利。

但是我们也要看到,数字化过程中并非只有复制,可能会有对数据的加工甚至再创作。尤其是因为NFT产品与程序的结合,在不同的应用场景中,通常都需要不同程度的加工和再创作。因此可能还包括一些其他性质的行为,其中可能包括:

Defi-去中心化金融-去中心化应用-Dapp-挖矿-IPFS-分布式存储

展览权。假如该作品本身就应该是数字作品,当将其铸造成NFT产品时,如果是直接将TokenID锚定该数字作品,本身并没有复制行为,可以认为铸造者行使了作品的展览权。

摄制权。假如作品本身是静止的,但铸造NFT时对其进行了全方位的摄制,可能还加进行了些其他创作性要素,那么就行使了摄制权。

改编权。假如作品是线下实物,那么NFT产品铸造过程中比如将其改编为小视频,那么行使了改编权。

翻译权。比如对于中国风元素作品,那么在铸造NFT时,可能还会将其翻译成外文,因此也可能包括翻译权。

汇编权。如果将多个数字作品统一铸造成NFT产品,那么可能包括了汇编权。

网络传播权。几乎所有的NFT产品铸造行为,都要行使网络传播权。因为铸造以后,凭NFT都可以看到,这就进行了网络传播。

数据权益。其中除数据权益之外的其他权利,都是属于著作财产权,需要著作权人许可才能行使。而数据权益,即对作品相关数据进行收集、使用的权利,根据我国《网络安全法》第二十二条规定,“网络产品、服务具有收集用户信息功能的,其提供者应当向用户明示并取得同意”。《数据安全法》第三十二条规定,“任何组织、个人收集数据,应当采取合法、正当的方式,不得窃取或者以其他非法方式获取数据。”在铸造NFT产品时,如果收集、使用、加工了其他用户的数据,则需要相关用户的授权。

数字技术在不断发展中,未来NFT铸造中的数字化操作可能越来越丰富多样,其中可能涉及更多的著作权、数据权益甚至其他权利的行使,授权的形式可能也越来越多样,这种动态发展正体现了数字技术迅猛发展的现实。

三、谁有权铸造NFT艺术品

NFT数字艺术品相比实物艺术品有许多优势。一是容易确权,实物艺术品上任何作者的签名容易被模仿,而经NFT加密的艺术品是独特的;二是容易保存,实物艺术品可能使用了一些原料载体等,会随着时间变旧或磨损、变质,但NFT作品不会;三是交易公开透明,基于区块链技术能够确保NFT作品的所有交易价格和过程都公开透明;四是交易成本低,相比实物作品,NFT数字艺术品的推广、交易和付款交割都更加便捷。

正是由于NFT艺术品具有这些优势,所以将艺术品进行NFT铸造越来越成为共识,甚至出现了很多未经授权的NFT铸造行为,一些人未经授权就将一些很有价值的艺术品铸造成为NFT作品,甚至有人将其视为区块链所带来的公平、公正,这是对区块链精神和法律基本原则的严重误读。正如上文我们所分析的,铸造NFT产品,根据在铸造过程中不同情况,所涉及对作品的不同数字化操作,不同程度行使了原作品的著作权中的若干财产性权利,甚至还涉及一些相关数据权益。如果未经授权就对他人作品铸造成为NFT作品,必定将会承担相应的法律责任。【.本文​由qkljys123整理发布.】

以上是关于以去中心化的方式铸造 NFT——使用 AlchemyEthers.js 和 Pinata API的主要内容,如果未能解决你的问题,请参考以下文章

Web3 系列开发教程——创建你的第一个 NFT使用 Ethers.js 铸造 NFT | 测试用例

铸造一个NFT - ERC721

NFT 多样化的发行方式

“铸造 NFT”和 OpenSea.io 问题的含义

手把手教你区块链java开发智能合约nft-第五篇(铸造第一个NFT)

区块链技术|NFT交易平台|NFT数字艺术藏品|NFT上链铸造