Lese kontraktdata
Kalle view-funksjoner
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
awaitpå resultatet. - Numeriske returverdier er BigInt; konverter dem med
formatUnits/formatEther. - Destrukturer flere returverdier, og spør etter tidligere tilstand med
blockTag. - Bruk
staticCalltil å simulere skrivefunksjoner; lesing er gratis.
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
- Koble til en provider
- Lese kontraktdata
- Sende transaksjoner
- Lytte til hendelser