Grunnleggende om Web3- og DApp-utvikling · leksjon

Lese kontraktdata

Kalle view-funksjoner

Leksjon 2 av 413 trinn

Lese kontraktdata er en gratis leksjon i Grunnleggende om Web3- og DApp-utvikling på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Grunnleggende om Web3- og DApp-utvikling, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Grunnleggende om Web3- og DApp-utvikling inneholder totalt 4 leksjoner.

Kalle view-funksjoner

Det er gratis å lese data fra en kontrakt – det endrer ikke tilstanden, koster ikke gas og krever ingen signatur. Dette er view- og pure-funksjoner.

Med ethers.js kobler De Dem til en distribuert kontrakt og kaller funksjonene som vanlige JavaScript-metoder.

De trenger ABI-en

For å kommunisere med en kontrakt trenger ethers kontraktens ABI – grensesnittet som beskriver hver funksjon. De kan bruke hele den kompilerte ABI-en eller en minimal, menneskelesbar variant:

const abi = [ "function name() view returns (string)", "function balanceOf(address) view returns (uint256)", ];
const abi = [
  "function name() view returns (string)",
  "function balanceOf(address) view returns (uint256)",
];

Opprette en kontraktinstans

Kombiner adressen, ABI-en og en provider for å opprette et skrivebeskyttet kontraktobjekt:

const contract = new ethers.Contract( tokenAddress, abi, provider );

Fordi den fikk en provider (ikke en signer), kan den bare lese.

const contract = new ethers.Contract(
  tokenAddress,
  abi,
  provider
);

Kalle en lese-metode

Kall en hvilken som helst view-funksjon og vent på resultatet:

const name = await contract.name(); const supply = await contract.totalSupply(); console.log(name, supply);

Hvert kall returnerer et Promise som løses til den dekodede verdien.

const name = await contract.name();
const supply = await contract.totalSupply();
console.log(name, supply);

Sende argumenter

View-funksjoner kan ta parametere. Send dem som vanlige funksjonsargumenter:

const balance = await contract.balanceOf( "0xUserAddress" ); console.log(ethers.formatUnits(balance, 18));

ethers koder automatisk argumentene i henhold til ABI-typene.

const balance = await contract.balanceOf(
  "0xUserAddress"
);
console.log(ethers.formatUnits(balance, 18));

Håndtere returnerte tall

Numeriske returverdier er BigInt i ethers v6. For å vise token-beløp konverterer De dem med riktig antall desimaler:

const raw = await contract.balanceOf(user); const human = ethers.formatUnits(raw, 18);

Bruk formatUnits/parseUnits for tokens og formatEther/parseEther for ETH (18 desimaler).

const raw = await contract.balanceOf(user);
const human = ethers.formatUnits(raw, 18);

Returverdier med flere verdier

Hvis en funksjon returnerer flere verdier, gir ethers Dem en resultatmatrise som De kan destrukturere:

const [reserve0, reserve1, timestamp] = await pair.getReserves(); console.log(reserve0, reserve1);

Navngitte returverdier er også tilgjengelige med navn på resultatobjektet.

const [reserve0, reserve1, timestamp] =
  await pair.getReserves();
console.log(reserve0, reserve1);

Lese ved en tidligere blokk

De kan spørre etter historisk tilstand ved å sende et blokkmerke som en overstyring:

const oldBalance = await contract.balanceOf( user, { blockTag: 19000000 } );

Dette krever en archive-node, men lar Dem rekonstruere tidligere tilstand.

const oldBalance = await contract.balanceOf(
  user,
  { blockTag: 19000000 }
);

Statiske kall på skrivefunksjoner

Noen ganger ønsker De å simulere en funksjon som endrer tilstanden, uten å sende den, for å lese det forventede resultatet eller kontrollere at den ikke feiler med revert:

const result = await contract.transfer .staticCall(to, amount); console.log("Would return:", result);

Dette kjører kallet lokalt uten å kringkaste en transaksjon.

const result = await contract.transfer
  .staticCall(to, amount);
console.log("Would return:", result);

Lesing er gratis

Fordi view-kall kjøres på noden uten å endre tilstanden:

  • De koster ingen gas for den som kaller.
  • De krever ingen signer eller godkjenning fra en lommebok.
  • De returnerer nesten umiddelbart.

Bare endringer i tilstanden krever en transaksjon og gas.

Bruke en Hardhat-tilkoblet instans

I Hardhat-skript kan De koble til en distribuert adresse uten å skrive ABI-en manuelt, siden artefaktene allerede er kompilert:

const token = await ethers.getContractAt( "MyToken", deployedAddress ); console.log(await token.totalSupply());

ethers laster ABI-en fra artefaktet for Dem.

const token = await ethers.getContractAt(
  "MyToken",
  deployedAddress
);
console.log(await token.totalSupply());

Kort test

Test forståelsen Deres av hvordan kontraktdata leses.

Oppsummering

De har lært å lese data på blokkjeden.

  • Opprett en kontrakt med adresse + ABI + provider for skrivebeskyttet tilgang.
  • Kall view-funksjoner som vanlige metoder, og bruk await på resultatet.
  • Numeriske returverdier er BigInt; konverter dem med formatUnits/formatEther.
  • Destrukturer flere returverdier, og spør etter tidligere tilstand med blockTag.
  • Bruk staticCall til å simulere skrivefunksjoner; lesing er gratis.
Gratis å komme i gang

Lær deg Grunnleggende om Web3- og DApp-utvikling med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
29
Leksjoner
105

Ofte stilte spørsmål

Er leksjonen «Lese kontraktdata» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende om Web3- og DApp-utvikling, inkludert «Lese kontraktdata», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Grunnleggende om Web3- og DApp-utvikling inneholder totalt 4 leksjoner.

Hva lærer jeg i «Lese kontraktdata»?

Kalle view-funksjoner Du øver på Grunnleggende om Web3- og DApp-utvikling med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Grunnleggende om Web3- og DApp-utvikling?

Ingen tidligere erfaring er nødvendig. Grunnleggende om Web3- og DApp-utvikling på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Lese kontraktdata»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Grunnleggende om Web3- og DApp-utvikling-leksjonen?

Ja. Alle Grunnleggende om Web3- og DApp-utvikling-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Koble til en provider
  2. Lese kontraktdata
  3. Sende transaksjoner
  4. Lytte til hendelser
← Tilbake til Grunnleggende om Web3- og DApp-utvikling