ERC-721
alkymi
soliditet
smarte kontrakter
Nybegynner
Sumi Mudgil
22. april 2021
9
minutt lesing
Beeple(åpnes i en ny fane)↗: 69 millioner dollar3LAU(åpnes i en ny fane)↗: 11 millioner dollarGrimes(åpnes i en ny fane)↗: 6 millioner dollar
Alle laget NFT-ene sine ved å bruke Alchemys kraftige API. I denne opplæringen lærer vi deg hvordan du gjør det samme på <10 minutter.
"Minting an NFT" er handlingen for å publisere en unik forekomst av ERC-721-tokenet ditt på blokkjeden. Bruker vår smarte kontrakt fraDel 1 av denne NFT-opplæringsserien, la oss utvide Web3-ferdighetene våre og lage en NFT. På slutten av denne opplæringen vil du kunne lage så mange NFT-er som hjertet ditt (og lommeboken) ønsker!
La oss komme i gang!
Trinn 1: Installer Web3
Hvis du fulgte den første opplæringen om å lage din NFT-smartkontrakt, har du allerede erfaring med å bruke Ethers.js. Web3 ligner på Ethers, siden det er et bibliotek som brukes til å gjøre det enklere å lage forespørsler til Ethereum-blokkjeden. I denne opplæringen skal vi brukeAlkymi Web3(åpnes i en ny fane)↗, som er et forbedret Web3-bibliotek som tilbyr automatiske gjenforsøk og robust WebSocket-støtte.
Kjør i prosjektets hjemmekatalog:
1
npm installer @alch/alchemy-web3
2
Trinn 2: Lag enmint-nft.js
fil
Inne i skriptkatalogen din oppretter du enmint-nft.js
fil og legg til følgende kodelinjer:
1krever("dotenv").konfig()
2konst API_URL =prosess.env.API_URL
3konst {lage AlchemyWeb3} = krever("@alch/alchemy-web3")
4konstweb3= lage AlchemyWeb3(API_URL)
5
Kopiere
Trinn 3: Ta tak i ABI-kontrakten din
Vår kontrakt ABI (Application Binary Interface) er grensesnittet for å samhandle med vår smarte kontrakt. Du kan lære mer om ABI-kontrakterher(åpnes i en ny fane)↗. Hardhat genererer automatisk en ABI for oss og lagrer den iMyNFT.json
fil. For å bruke dette må vi analysere innholdet ved å legge til følgende kodelinjer i vårmint-nft.js
fil:
1konstkontrakt= krever("../artifacts/contracts/MyNFT.sol/MyNFT.json")
2
Kopiere
Hvis du vil se ABI, kan du skrive den ut til konsollen din:
1konsoll.Logg(JSON.stringify(kontrakt.abi))
2
Kopiere
Å løpemint-nft.js
og se ABI-en din skrevet ut til konsollen, naviger til terminalen din og kjør:
1nodeskript/mynte-nft.js
2
Kopiere
Hvis du husker fra opplæringen vår i del 1, vårmintNFT
smart contract-funksjonen tar inn en tokenURI-parameter som skal løses til et JSON-dokument som beskriver NFTs metadata - som egentlig er det som bringer NFT til live, slik at det kan ha konfigurerbare egenskaper, som navn, beskrivelse, bilde og andre attributter.
Interplanetary File System (IPFS) er en desentralisert protokoll og peer-to-peer-nettverk for lagring og deling av data i et distribuert filsystem.
Vi vil bruke Pinata, et praktisk IPFS API og verktøysett, for å lagre NFT-elementet og metadataene våre for å sikre at NFT-en vår virkelig er desentralisert. Hvis du ikke har en Pinata-konto, registrer deg for en gratis kontoher(åpnes i en ny fane)↗og fullfør trinnene for å bekrefte e-posten din.
Når du har opprettet en konto:
Naviger til "Filer"-siden og klikk på den blå "Last opp"-knappen øverst til venstre på siden.
Last opp et bilde til Pinata – dette vil være bildeelementet for din NFT. Navngi gjerne eiendelen hva du måtte ønske
Etter at du har lastet opp, vil du se filinformasjonen i tabellen på «Filer»-siden. Du vil også se en CID-kolonne. Du kan kopiere CID-en ved å klikke på kopieringsknappen ved siden av den. Du kan se opplastingen din på:
https://gateway.pinata.cloud/ipfs/
. Du kan finne bildet vi brukte på IPFSher(åpnes i en ny fane)↗, for eksempel.
For de mer visuelle elevene, er trinnene ovenfor oppsummert her:
Nå skal vi laste opp ett dokument til til Pinata. Men før vi gjør det, må vi lage det!
Lag en ny fil som heter i rotkatalogen dinnft-metadata.json
og legg til følgende json-kode:
1{
2 "attributter": [
3 {
4 "trekk_type": "Rase",
5 "verdi": "Atypisk"
6 },
7 {
8 "trekk_type": "Øyenfarge",
9 "verdi": "Mokka"
10 }
11 ],
12 "beskrivelse": "Verdens mest bedårende og følsomme valp.",
1. 3 "bilde": "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb",
14 "Navn": "Ramses"
15}
16
Vis alt
Kopiere
Endre gjerne dataene i json. Du kan fjerne eller legge til i attributtdelen. Viktigst av alt, sørg for at bildefeltet peker til plasseringen av IPFS-bildet ditt – ellers vil NFT-en din inkludere et bilde av en (veldig søt!) hund.
Når du er ferdig med å redigere JSON-filen, lagrer du den og laster den opp til Pinata, og følger de samme trinnene som vi gjorde for å laste opp bildet.
Trinn 5: Opprett en forekomst av kontrakten din
Nå, for å samhandle med kontrakten vår, må vi opprette en forekomst av den i koden vår. For å gjøre det trenger vi kontraktsadressen vår som vi kan få fra distribusjonen ellerEtherscan(åpnes i en ny fane)↗ved å slå opp adressen du brukte til å implementere kontrakten.
(åpnes i en ny fane)↗
I eksemplet ovenfor er kontraktsadressen vår 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778.
Deretter bruker vi Web3kontraktsmetode(åpnes i en ny fane)↗å opprette kontrakten vår ved å bruke ABI og adresse. I dinmint-nft.js
fil, legg til følgende:
1konstkontraktsadresse= "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
2
3konstnft Kontrakt= ny web3.eth.Kontrakt(kontrakt.abi,kontraktsadresse)
4
Kopiere
Trinn 6: Oppdater.env
fil
Nå, for å opprette og sende transaksjoner til Ethereum-kjeden, bruker vi din offentlige ethereum-kontoadresse for å få kontoen en gang (vil forklare nedenfor).
Legg til din offentlige nøkkel til din.env
fil — hvis du fullførte del 1 av opplæringen, vår.env
filen skal nå se slik ut:
1API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"
2PRIVATE_KEY = "din-private-konto-adresse"
3PUBLIC_KEY = "din-offentlige-konto-adresse"
4
Kopiere
Trinn 7: Opprett transaksjonen din
Først, la oss definere en funksjon som hetermynteNFT(tokenData)
og opprette transaksjonen vår ved å gjøre følgende:
Ta tak i dinPRIVATE_KEYogPUBLIC_KEYfra
.env
fil.Deretter må vi finne ut kontoen nonce. Nonce-spesifikasjonen brukes til å holde styr på antall transaksjoner sendt fra adressen din – som vi trenger av sikkerhetshensyn og for å forhindrereplay angrep(åpnes i en ny fane)↗. For å få antall transaksjoner sendt fra adressen din bruker vigetTransactionCount(åpnes i en ny fane)↗.
Til slutt setter vi opp transaksjonen vår med følgende informasjon:
'fra': PUBLIC_KEY
— Opprinnelsen til transaksjonen vår er vår offentlige adresse'to': contractAddress
— Kontrakten ønsker vi å samhandle med og sende transaksjonen'nonce': nonce
— Kontoen nonce med antall transaksjoner sendt fra adressen vår'gass': estimert Gass
— Den estimerte gassen som trengs for å fullføre transaksjonen'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI()
— Beregningen vi ønsker å utføre i denne transaksjonen — som i dette tilfellet er preging av en NFT
Dinmint-nft.js
filen skal se slik ut nå:
1 krever('dotenv').konfig();
2 konst API_URL =prosess.env.API_URL;
3 konst PUBLIC_KEY =prosess.env.PUBLIC_KEY;
4 konst PRIVATE_KEY =prosess.env.PRIVATE_KEY;
5
6 konst {lage AlchemyWeb3} = krever("@alch/alchemy-web3");
7 konstweb3= lage AlchemyWeb3(API_URL);
8
9 konstkontrakt= krever("../artifacts/contracts/MyNFT.sol/MyNFT.json");
10 konstkontraktsadresse= "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778";
11 konstnft Kontrakt= ny web3.eth.Kontrakt(kontrakt.abi,kontraktsadresse);
12
1. 3 asynkron funksjon mintNFT(tokenURI) {
14 konstnonce= avventeweb3.eth.getTransactionCount(PUBLIC_KEY, 'siste'); //få siste nonce
15
16 //transaksjonen
17 konsttx= {
18 'fra': PUBLIC_KEY,
19 'til':kontraktsadresse,
20 "ikke":nonce,
21 'gass': 500 000,
22 'data':nft Kontrakt.metoder.mintNFT(PUBLIC_KEY,tokenURI).kode ABI()
23 };
24 }
25
Vis alt
Kopiere
Trinn 8: Signer transaksjonen
Nå som vi har opprettet transaksjonen vår, må vi signere den for å kunne sende den. Her skal vi bruke vår private nøkkel.
web3.eth.sendSignedTransaction
vil gi oss transaksjons-hashen, som vi kan bruke for å sikre at transaksjonen vår ble utvunnet og ikke ble droppet av nettverket. Du vil legge merke til i transaksjonssigneringsdelen at vi har lagt til noen feilkontroller slik at vi vet om transaksjonen vår ble gjennomført.
1krever("dotenv").konfig()
2konst API_URL =prosess.env.API_URL
3konst PUBLIC_KEY =prosess.env.PUBLIC_KEY
4konst PRIVATE_KEY =prosess.env.PRIVATE_KEY
5
6konst {lage AlchemyWeb3} = krever("@alch/alchemy-web3")
7konstweb3= lage AlchemyWeb3(API_URL)
8
9konstkontrakt= krever("../artifacts/contracts/MyNFT.sol/MyNFT.json")
10konstkontraktsadresse= "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
11konstnft Kontrakt= ny web3.eth.Kontrakt(kontrakt.abi,kontraktsadresse)
12
1. 3asynkron funksjon mintNFT(tokenURI) {
14 konstnonce= avventeweb3.eth.getTransactionCount(PUBLIC_KEY, "siste") //få siste nonce
15
16 //transaksjonen
17 konsttx= {
18 fra: PUBLIC_KEY,
19 til:kontraktsadresse,
20 nonce:nonce,
21 gass: 500 000,
22 data:nft Kontrakt.metoder.mintNFT(PUBLIC_KEY,tokenURI).kode ABI(),
23 }
24
25 konstsignPromise=web3.eth.kontoer.signTransaksjon(tx, PRIVATE_KEY)
26signPromise
27 .deretter((signertTx) => {
28web3.eth.sendSignertTransaksjon(
29signertTx.råTransaksjon,
30 funksjon (feil,hasj) {
31 hvis (!feil) {
32 konsoll.Logg(
33 "Hashen til transaksjonen din er: ",
34hasj,
35 "\nSjekk Alchemy's Mempool for å se statusen til transaksjonen din!"
36 )
37 } ellers {
38 konsoll.Logg(
39 «Noe gikk galt da transaksjonen ble sendt inn:»,
40feil
41 )
42 }
43 }
44 )
45 })
46 .å fange((feil) => {
47 konsoll.Logg("Løftet mislyktes:",feil)
48 })
49}
50
Vis alt
Kopiere
Trinn 9: RingmintNFT
og kjør nodemint-nft.js
Huskmetadata.json
lastet du opp til Pinata? Få hashkoden fra Pinata og send følgende som parameter til funksjonenmintNFT
https://gateway.pinata.cloud/ipfs/
Slik får du hashkoden:
Slik får du nft-metadata-hashkoden din på Pinata
Dobbeltsjekk at hashkoden du kopierte lenker til dinmetadata.jsonved å laste
https://gateway.pinata.cloud/ipfs/
inn i et eget vindu. Siden skal ligne på skjermbildet nedenfor:
(åpnes i en ny fane)↗ Siden din skal vise json-metadataene
Alt i alt skal koden din se omtrent slik ut:
1krever("dotenv").konfig()
2konst API_URL =prosess.env.API_URL
3konst PUBLIC_KEY =prosess.env.PUBLIC_KEY
4konst PRIVATE_KEY =prosess.env.PRIVATE_KEY
5
6konst {lage AlchemyWeb3} = krever("@alch/alchemy-web3")
7konstweb3= lage AlchemyWeb3(API_URL)
8
9konstkontrakt= krever("../artifacts/contracts/MyNFT.sol/MyNFT.json")
10konstkontraktsadresse= "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
11konstnft Kontrakt= ny web3.eth.Kontrakt(kontrakt.abi,kontraktsadresse)
12
1. 3asynkron funksjon mintNFT(tokenURI) {
14 konstnonce= avventeweb3.eth.getTransactionCount(PUBLIC_KEY, "siste") //få siste nonce
15
16 //transaksjonen
17 konsttx= {
18 fra: PUBLIC_KEY,
19 til:kontraktsadresse,
20 nonce:nonce,
21 gass: 500 000,
22 data:nft Kontrakt.metoder.mintNFT(PUBLIC_KEY,tokenURI).kode ABI(),
23 }
24
25 konstsignPromise=web3.eth.kontoer.signTransaksjon(tx, PRIVATE_KEY)
26signPromise
27 .deretter((signertTx) => {
28web3.eth.sendSignertTransaksjon(
29signertTx.råTransaksjon,
30 funksjon (feil,hasj) {
31 hvis (!feil) {
32 konsoll.Logg(
33 "Hashen til transaksjonen din er: ",
34hasj,
35 "\nSjekk Alchemy's Mempool for å se statusen til transaksjonen din!"
36 )
37 } ellers {
38 konsoll.Logg(
39 «Noe gikk galt da transaksjonen ble sendt inn:»,
40feil
41 )
42 }
43 }
44 )
45 })
46 .å fange((feil) => {
47 konsoll.Logg("Løftet mislyktes:",feil)
48 })
49}
50
51mintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP")
52
Vis alt
Kopiere
Nå, løpnode scripts/mint-nft.js
for å distribuere NFT. Etter et par sekunder bør du se et svar som dette i terminalen din:
1Hash-verdien for transaksjonen din er: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8
2
3Sjekk Alchemy's Mempool for å se status for transaksjonen din!
4
Deretter besøker du dinAlkymi mempool(åpnes i en ny fane)↗for å se statusen til transaksjonen din (enten den er under behandling, utvunnet eller ble droppet av nettverket). Hvis transaksjonen din ble avbrutt, er det også nyttig å sjekkeSepolia Etherscan(åpnes i en ny fane)↗og søk etter transaksjons-hashen din.
(åpnes i en ny fane)↗ Se din NFT-transaksjons-hash på Etherscan
Og det er det! Du har nå distribuert OG preget med en NFT på Ethereum-blokkjeden
Brukermint-nft.js
du kan lage så mange NFT-er som ditt hjerte (og lommebok) ønsker! Bare pass på å sende inn en ny tokenURI som beskriver NFTs metadata (ellers vil du bare ende opp med å lage en haug med identiske med forskjellige IDer).
Antagelig vil du kunne vise frem NFT-en din i lommeboken din - så sørg for å sjekke utDel 3: Slik ser du NFT i lommeboken!
Siste redigering:, Ugyldig DateTime