Les + populaires

BTC ETH SOL XRP BNB USDC USDT

Suivez-nous

Créez un NFT de manière décentralisée – en utilisant les API Alchemy, Ethers.js et Pinata | de George Chikku | Coinmons | février 2022

IAavec
Titres Titres

Passons maintenant à la frappe NFT !

Étape 1 : Obtenez un faux MATIC

Comme les transactions blockchain sont liées aux frais de gaz, nous devons collecter de faux MATIC pour frapper notre NFT.

Obtenez du faux MATIC à partir d’ici : https://faucet.polygon.technology/.

Autres robinets MATIC disponibles :

  1. https://faucet.pearzap.com/
  2. https://matic.supply/
  3. https://www.coinclarified.com/tools/faucets/polygon
  4. https://faucet.firebird.finance/

Étape 2 : Créer un fichier .env

Le fichier .env doit contenir les détails suivants :

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”

Étape 3 : Créez votre fichier nft.js

Copiez le contenu suivant dans le fichier.

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;

Tout d’abord, assurez-vous d’avoir authentifié avec succès l’API Pinata.

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,
},
});

Ton authResponse doit contenir un message du type « Toutes nos félicitations! Vous communiquez avec l’API Pinata !”.

Maintenant, lisez le fichier image à partir de votre système local.

 const stream = fs.createReadStream(req.file.path);
const data = new FormData();
data.append(“file”, stream);

Télécharger le fichier image sur IPFS en utilisant pinFichier API. En cas de succès, il renverra un hashcode.

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}`;

Ton fichierIPFS devrait être comme https://gateway.pinata.cloud/ipfs/

par exemple : https://gateway.pinata.cloud/ipfs/QmeK8t9Lom2AcH8s7gLpuZordcxisegwkcSJpqL46S87uC

Nous pouvons maintenant télécharger les métadonnées JSON sur IPFS en utilisant pinJSON API. En cas de succès, il renverra un code de hachage que nous utiliserons comme URI de jeton à frapper.

//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}`;

Votre tokenURI devrait ressembler à https://gateway.pinata.cloud/ipfs/

par exemple : https://gateway.pinata.cloud/ipfs/QmammqqQDpmk4oAuyfgJA9Ni7ChEzxEkmzQLLhjbGAKHax

Enfin, nous pouvons créer notre URI de jeton que nous avons obtenu du téléchargement IPFS json. Appeler le mentheNFT méthode que nous avons écrite dans notre contrat intelligent. Reportez-vous au contrat intelligent ci-dessous :

Utilisez votre clé privée pour signer la transaction.

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);

Vous obtiendrez une réponse du type :

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

Vous pouvez rechercher ce hachage de transaction sur mumbai polygonscan.

Transaction sur Mumbai Polygonscan

Génial! Vous avez créé avec succès votre premier NFT sur Polygon Mumbai Testnet.

Source medium.com

Gérez vos cryptos
Bitvavo
Trading sans frais jusqu'à 10 k€

Donnez votre avis

Soyez le 1er à noter cet article


Partagez cet article maintenant !

Envoyez simplement nos contenus crypto et finance à vos proches.