Grunderna i Web3- och DApp-utveckling · Lektion

Läsa kontraktsdata

Anropa view-funktioner

Lektion 2 av 413 steg

Läsa kontraktsdata är en gratis lektion i Grunderna i Web3- och DApp-utveckling på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Grunderna i Web3- och DApp-utveckling, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Grunderna i Web3- och DApp-utveckling innehåller totalt 4 lektioner.

Anropa view-funktioner

Det är kostnadsfritt att läsa data från ett kontrakt – det ändrar inte tillståndet, kostar ingen gas och kräver ingen signatur. Det här är view- och pure-funktioner.

Med ethers.js ansluter Ni till ett distribuerat kontrakt och anropar funktionerna som vanliga JavaScript-metoder.

Ni behöver ABI:t

För att kommunicera med ett kontrakt behöver ethers dess ABI – gränssnittet som beskriver varje funktion. Ni kan använda hela det kompilerade ABI:t eller ett minimalt läsbart ABI:

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)",
];

Skapa en kontraktsinstans

Kombinera adressen, ABI:t och en provider för att skapa ett kontraktsobjekt med endast läsbehörighet:

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

Eftersom det fick en provider (inte en signer) kan det bara läsa.

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

Anropa en läsmetod

Anropa valfri view-funktion och invänta resultatet:

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

Varje anrop returnerar ett Promise som löses till det avkodade värdet.

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

Skicka argument

View-funktioner kan ta parametrar. Skicka dem som vanliga funktionsargument:

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

ethers kodar automatiskt argumenten enligt ABI-typerna.

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

Hantera returnerade tal

Numeriska returvärden är BigInt i ethers v6. Om Ni vill visa tokenbelopp konverterar Ni dem med rätt antal decimaler:

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

Använd formatUnits/parseUnits för tokens och formatEther/parseEther för ETH (18 decimaler).

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

Returvärden med flera värden

Om en funktion returnerar flera värden får Ni en resultatarray från ethers som Ni kan destrukturera:

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

Namngivna returvärden är också tillgängliga med namn på resultatobjektet.

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

Läsning vid ett tidigare block

Ni kan hämta historiskt tillstånd genom att skicka en blocktagg som override:

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

Detta kräver en archive node, men gör att Ni kan återskapa tidigare tillstånd.

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

Statiska anrop på skrivfunktioner

Ibland vill Ni simulera en funktion som ändrar tillstånd utan att skicka den, för att läsa det förväntade resultatet eller kontrollera att den inte återställer:

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

Anropet körs lokalt utan att någon transaktion sänds.

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

Läsningar är kostnadsfria

Eftersom view-anrop körs på noden utan att ändra tillståndet gäller följande:

  • De kostar ingen gas för den som anropar.
  • De kräver ingen signer eller plånboksgodkännande.
  • De returneras nästan omedelbart.

Det är endast tillståndsändringar som kräver en transaktion och gas.

Använda en Hardhat-ansluten instans

I Hardhat-skript kan Ni ansluta till en distribuerad adress utan att skriva ABI:t för hand, eftersom artefakterna redan är kompilerade:

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

ethers läser in ABI:t från artefakten åt Er.

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

Snabbtest

Testa Er förståelse av hur man läser kontraktsdata.

Sammanfattning

Ni har lärt Er att läsa data från blockkedjan.

  • Skapa ett kontrakt med adress + ABI + provider för läsbehörighet.
  • Anropa view-funktioner som vanliga metoder och invänta resultatet med await.
  • Numeriska returvärden är BigInt; konvertera dem med formatUnits/formatEther.
  • Destrukturera flera returvärden och hämta historik med blockTag.
  • Använd staticCall för att simulera skrivfunktioner; läsningar är kostnadsfria.
Gratis att börja

Lär dig Grunderna i Web3- och DApp-utveckling med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
29
Lektioner
105

Vanliga frågor

Är lektionen ”Läsa kontraktsdata” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Grunderna i Web3- och DApp-utveckling, inklusive ”Läsa kontraktsdata”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Grunderna i Web3- och DApp-utveckling innehåller totalt 4 lektioner.

Vad lär jag mig i ”Läsa kontraktsdata”?

Anropa view-funktioner Ni övar på Grunderna i Web3- och DApp-utveckling med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Grunderna i Web3- och DApp-utveckling?

Du behöver inga förkunskaper. Utbildningen i Grunderna i Web3- och DApp-utveckling på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Läsa kontraktsdata”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Grunderna i Web3- och DApp-utveckling-lektionen?

Ja. Varje Grunderna i Web3- och DApp-utveckling-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Ansluta till en provider
  2. Läsa kontraktsdata
  3. Skicka transaktioner
  4. Lyssna på events
← Tillbaka till Grunderna i Web3- och DApp-utveckling