Sopimuksen tietojen lukeminen
Kutsukaa view-funktioita.
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.
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
- Provideriin yhdistäminen
- Sopimuksen tietojen lukeminen
- Transaktioiden lähettäminen
- Tapahtumien kuuntelu