Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (2023)

ERC-721

alkymi

soliditet

smarte kontrakter

Nybegynner

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (1)Sumi Mudgil

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (2)22. april 2021

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (3)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.jsfil

Inne i skriptkatalogen din oppretter du enmint-nft.jsfil 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

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (4)

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.jsonfil. For å bruke dette må vi analysere innholdet ved å legge til følgende kodelinjer i vårmint-nft.jsfil:

1konstkontrakt= krever("../artifacts/contracts/MyNFT.sol/MyNFT.json")

2

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (5)

Kopiere

Hvis du vil se ABI, kan du skrive den ut til konsollen din:

1konsoll.Logg(JSON.stringify(kontrakt.abi))

2

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (6)

Kopiere

Å løpemint-nft.jsog se ABI-en din skrevet ut til konsollen, naviger til terminalen din og kjør:

1nodeskript/mynte-nft.js

2

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (7)

Kopiere

Hvis du husker fra opplæringen vår i del 1, vårmintNFTsmart 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:

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (8)

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.jsonog 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

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (9)

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.

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (10)

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.jsfil, legg til følgende:

1konstkontraktsadresse= "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"

2

3konstnft Kontrakt= ny web3.eth.Kontrakt(kontrakt.abi,kontraktsadresse)

4

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (12)

Kopiere

Trinn 6: Oppdater.envfil

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.envfil — hvis du fullførte del 1 av opplæringen, vår.envfilen 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

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (13)

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:

  1. Ta tak i dinPRIVATE_KEYogPUBLIC_KEYfra.envfil.

  2. 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).

  3. 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.jsfilen 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

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (14)

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.sendSignedTransactionvil 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

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (15)

Kopiere

Trinn 9: RingmintNFTog kjør nodemint-nft.js

Huskmetadata.jsonlastet 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:

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (16)Slik får du nft-metadata-hashkoden din på Pinata

Dobbeltsjekk at hashkoden du kopierte lenker til dinmetadata.jsonved å lastehttps://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

Hvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (18)

Kopiere

Nå, løpnode scripts/mint-nft.jsfor å 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-blokkjedenHvordan lage en NFT (del 2/3 av NFT Tutorial Series) | ethereum.org (20)

Brukermint-nft.jsdu 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

Var denne siden til hjelp?

References

Top Articles
Latest Posts
Article information

Author: Fredrick Kertzmann

Last Updated: 08/06/2023

Views: 6232

Rating: 4.6 / 5 (46 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Fredrick Kertzmann

Birthday: 2000-04-29

Address: Apt. 203 613 Huels Gateway, Ralphtown, LA 40204

Phone: +2135150832870

Job: Regional Design Producer

Hobby: Nordic skating, Lacemaking, Mountain biking, Rowing, Gardening, Water sports, role-playing games

Introduction: My name is Fredrick Kertzmann, I am a gleaming, encouraging, inexpensive, thankful, tender, quaint, precious person who loves writing and wants to share my knowledge and understanding with you.