Web3:n ja DApp-sovellusten kehityksen perusteet · Oppitunti

Tapahtumien kuuntelu

Tilatkaa lokit.

Oppitunti 4/413 vaihetta

Tapahtumien kuuntelu on ilmainen Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.

Mitä tapahtumat ovat

Älysopimukset lähettävät tapahtumia lokitiedoksi siitä, että jotain tapahtui — esimerkiksi siirto, hyväksyntä tai äänestys. Tapahtumat kirjoitetaan transaktion lokeihin.

  • Ne ovat edullisempia kuin tallennus.
  • Ketjun ulkopuoliset sovellukset tilaavat niitä pysyäkseen ajan tasalla.

Tapahtumat ABIssa

Tapahtumien dekoodaamista varten ethers tarvitsee niiden määritelmät ABIssa:

const abi = [ "event Transfer(address indexed from, address indexed to, uint256 value)", ]; const contract = new ethers.Contract(address, abi, provider);

indexed-avainsana merkitsee kentät, joiden perusteella voitte suodattaa.

const abi = [
  "event Transfer(address indexed from, address indexed to, uint256 value)",
];
const contract = new ethers.Contract(address, abi, provider);

Reaaliaikainen kuuntelu

Tilatkaa uusia tapahtumia on-metodilla. Callback suoritetaan aina, kun tapahtuma lähetetään:

contract.on("Transfer", (from, to, value, event) => { console.log(from, "->", to, value); });

Tämä edellyttää tilauksia tukevaa provideria, kuten WebSocket-yhteyttä.

contract.on("Transfer", (from, to, value, event) => {
  console.log(from, "->", to, value);
});

WebSocket-providerit

Reaaliaikaiset tilaukset toimivat parhaiten pysyvän yhteyden kautta. Käyttäkää WebSocket-provideria:

const provider = new ethers.WebSocketProvider( "wss://mainnet.example-rpc.io/KEY" );

HTTP-providerit voivat kysellä tapahtumia, mutta WebSocket välittää ne reaaliajassa.

const provider = new ethers.WebSocketProvider(
  "wss://mainnet.example-rpc.io/KEY"
);

Kertakuuntelu

Jos tarvitsette vain ensimmäisen esiintymän, käyttäkää once-metodia:

contract.once("Approval", (owner, spender, value) => { console.log("First approval seen"); });

Kuuntelija poistaa itsensä automaattisesti, kun se on suoritettu kerran.

contract.once("Approval", (owner, spender, value) => {
  console.log("First approval seen");
});

Aiemmat tapahtumat

Voitte lukea aiemmat tapahtumat käyttämällä queryFilter-metodia lohkoalueella:

const logs = await contract.queryFilter( "Transfer", 19000000, 19000100 ); for (const log of logs) { console.log(log.args.from, log.args.value); }

Jokainen loki sisältää puretut args-argumentit.

const logs = await contract.queryFilter(
  "Transfer",
  19000000,
  19000100
);
for (const log of logs) {
  console.log(log.args.from, log.args.value);
}

Suodatus indeksoitujen kenttien perusteella

Luokaa suodatin, joka vastaa tiettyjä indeksoituja arvoja — esimerkiksi tiettyyn osoitteeseen tehtyjä siirtoja varten:

const filter = contract.filters.Transfer(null, myAddress); const logs = await contract.queryFilter(filter);

Arvon null välittäminen tarkoittaa, että kyseisessä kohdassa hyväksytään mikä tahansa arvo.

const filter = contract.filters.Transfer(null, myAddress);
const logs = await contract.queryFilter(filter);

Suodatettujen tapahtumien reaaliaikainen kuuntelu

Voitte välittää suodattimen myös on-metodille, jolloin reagoitte vain olennaisiin tapahtumiin:

const filter = contract.filters.Transfer(null, myAddress); contract.on(filter, (from, to, value) => { console.log("Received:", value); });

Tämä estää käsittelemästä tapahtumia, joista ette ole kiinnostuneita.

const filter = contract.filters.Transfer(null, myAddress);
contract.on(filter, (from, to, value) => {
  console.log("Received:", value);
});

Kuuntelijoiden poistaminen

Pitkään käynnissä olevien sovellusten kannattaa siivota kuuntelijat muistivuotojen välttämiseksi:

contract.off("Transfer", myHandler); // or remove all listeners for an event contract.removeAllListeners("Transfer");

Poistakaa kuuntelijat aina, kun komponentti poistuu käytöstä tai työ on valmis.

contract.off("Transfer", myHandler);
// or remove all listeners for an event
contract.removeAllListeners("Transfer");

Uudelleenjärjestelyjen käsittely

Äskettäiset tapahtumat voidaan kumota, jos lohkoketju järjestäytyy uudelleen. Luotettavaa indeksointia varten:

  • Odottakaa useita vahvistuksia, ennen kuin käsittelette tapahtumaa lopullisena.
  • Seuratkaa lohkon numeroa ja käsitelkää tapahtumat uudelleen, jos havaitsette uudelleenjärjestelyn.

Näin ketjun ulkopuolinen tietokantanne pysyy yhdenmukaisena ketjun kanssa.

Provider-tason lokisuodattimet

Voitte myös tilata tapahtumia provider-tasolla ilman sopimusinstanssia käyttämällä aiheeseen perustuvaa raakaa lokisuodatinta:

provider.on({ address: tokenAddress, topics: [ethers.id("Transfer(address,address,uint256)")], }, (log) => { console.log("Raw log:", log); });

Tämä on matalamman tason ratkaisu, mutta toimii samanaikaisesti useiden sopimusten kanssa.

provider.on({
  address: tokenAddress,
  topics: [ethers.id("Transfer(address,address,uint256)")],
}, (log) => {
  console.log("Raw log:", log);
});

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte tapahtumien käsittelyn.

Kertaus

Opitte käsittelemään sopimusten tapahtumia.

  • Tapahtumat kirjaavat ketjussa tapahtuvan toiminnan transaktiolokeihin.
  • on tilaa reaaliaikaiset tapahtumat (parhaiten WebSocket-providerin kautta); once suoritetaan vain kerran.
  • queryFilter lukee aiemmat tapahtumat lohkoalueelta.
  • Luokaa suodattimet indeksoiduista kentistä; välittäkää null, jos haluatte hyväksyä minkä tahansa arvon.
  • Poistakaa kuuntelijat muistivuotojen välttämiseksi ja odottakaa vahvistuksia uudelleenjärjestelyjen varalta.
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 ”Tapahtumien kuuntelu” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolun 3 oppituntia, myös oppitunnin “Tapahtumien kuuntelu”. 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 ”Tapahtumien kuuntelu”?

Tilatkaa lokit. 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 4/4.

Kuinka kauan ”Tapahtumien kuuntelu”-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