Web3:n ja DApp-sovellusten kehityksen perusteet · Oppitunti

Sopimuksen tietojen lukeminen

Kutsukaa view-funktioita.

Oppitunti 2/413 vaihetta

Sopimuksen tietojen lukeminen on ilmainen Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Web3:n ja DApp-sovellusten kehityksen perusteet-kurssilla on yhteensä 4 oppituntia.

View-funktioiden kutsuminen

Sopimuksesta lukeminen on maksutonta — se ei muuta tilaa, kuluta gasia eikä vaadi allekirjoitusta. Kyseessä ovat view- ja pure-funktiot.

ethers.js:n avulla liitytte käyttöönotettuun sopimukseen ja kutsutte näitä funktioita tavallisten JavaScript-metodien tapaan.

Tarvitsette ABIn

Sopimuksen kanssa keskustelemiseen ethers tarvitsee sen ABIn — rajapinnan, joka kuvaa jokaisen funktion. Voitte käyttää koko käännettyä ABIa tai suppeaa ihmisen luettavaa versiota:

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

Contract-instanssin luominen

Yhdistäkää osoite, ABI ja provider luodaksenne vain lukuun tarkoitetun sopimusolion:

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

Koska sille annettiin provider (ei signer-oliota), se voi ainoastaan lukea tietoja.

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

Lukumetodin kutsuminen

Kutsukaa mitä tahansa view-funktiota ja odottakaa tulosta:

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

Jokainen kutsu palauttaa Promisen, joka ratkaistuu dekoodatuksi arvoksi.

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

Argumenttien välittäminen

View-funktiot voivat vastaanottaa parametreja. Välittäkää ne tavallisten funktion argumenttien tapaan:

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

ethers koodaa argumentit automaattisesti ABI-tyyppien mukaisesti.

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

Palautettujen lukujen käsittely

ethers v6:ssa numeeriset palautusarvot ovat BigInt-arvoja. Muuntakaa token-määrät näyttöä varten oikean desimaalimäärän avulla:

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

Käyttäkää tokeneille formatUnits/parseUnits-funktioita ja ETH:lle (18 desimaalia) formatEther/parseEther-funktioita.

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

Useita arvoja palauttavat funktiot

Jos funktio palauttaa useita arvoja, ethers antaa tulostaulukon, jonka voitte hajottaa erillisiksi arvoiksi:

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

Nimetyt palautusarvot ovat käytettävissä myös tulosolion nimien kautta.

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

Lukeminen aiemmasta lohkosta

Voitte hakea aiemman tilan välittämällä lohkon tunnisteen override-asetuksena:

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

Tämä edellyttää archive node -solmua, mutta sen avulla voitte muodostaa aiemman tilan uudelleen.

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

Kirjoitusfunktioiden staattiset kutsut

Joskus haluatte simuloida tilaa muuttavaa funktiota lähettämättä sitä, jotta voitte lukea sen mahdollisen tuloksen tai tarkistaa, ettei se keskeydy virheeseen:

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

Kutsu suoritetaan paikallisesti ilman transaktion lähettämistä verkkoon.

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

Lukutoiminnot ovat maksuttomia

Koska view-kutsut suoritetaan solmussa ilman tilan muuttamista:

  • Ne eivät kuluta kutsujalta lainkaan gasia.
  • Ne eivät tarvitse signer-oliota eivätkä lompakon hyväksyntää.
  • Ne palautuvat lähes välittömästi.

Vain tilan muuttaminen edellyttää transaktiota ja gasia.

Hardhat-liitetyn instanssin käyttäminen

Hardhat-skripteissä voitte liittää sovelluksen käyttöönotettuun osoitteeseen kirjoittamatta ABIa käsin, koska artefaktit on jo käännetty:

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

ethers lataa ABIn artefaktista puolestanne.

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

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte sopimustietojen lukemisen.

Kertaus

Opitte lukemaan ketjun tietoja.

  • Luokaa sopimus osoitteen, ABIn ja providerin avulla vain lukuun.
  • Kutsukaa view-funktioita tavallisten metodien tapaan ja käyttäkää tuloksen kanssa await-avainsanaa.
  • Numeeriset palautusarvot ovat BigInt-arvoja; muuntakaa ne formatUnits/formatEther-funktioilla.
  • Hajottakaa useita palautusarvoja erillisiksi muuttujiksi ja hakekaa aiempia tietoja blockTag-asetuksella.
  • Käyttäkää staticCall-metodia kirjoitusfunktioiden simulointiin; lukutoiminnot ovat maksuttomia.
Aloita maksutta

Opi Web3:n ja DApp-sovellusten kehityksen perusteet tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
29
Oppitunnit
105

Usein kysytyt kysymykset

Onko oppitunti ”Sopimuksen tietojen lukeminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolun 3 oppituntia, myös oppitunnin “Sopimuksen tietojen lukeminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Web3:n ja DApp-sovellusten kehityksen perusteet-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Sopimuksen tietojen lukeminen”?

Kutsukaa view-funktioita. Harjoittelet Web3:n ja DApp-sovellusten kehityksen perusteet-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Web3:n ja DApp-sovellusten kehityksen perusteet-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Sopimuksen tietojen lukeminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunnilla?

Kyllä. Jokainen Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Provideriin yhdistäminen
  2. Sopimuksen tietojen lukeminen
  3. Transaktioiden lähettäminen
  4. Tapahtumien kuuntelu
← Takaisin: Web3:n ja DApp-sovellusten kehityksen perusteet