Web3:n ja DApp-sovellusten kehityksen perusteet · Oppitunti

Indeksoidut parametrit

Suodatettavat aiheet.

Oppitunti 2/413 vaihetta

Indeksoidut parametrit 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.

Lokien suodattaminen

Kun sopimus lähettää paljon tapahtumia, ketjun ulkopuoliset sovellukset tarvitsevat tavan suodattaa niitä tehokkaasti, esimerkiksi löytääkseen kaikki tiettyyn osoitteeseen tehdyt Transfer-siirrot.

Solidity tukee tätä indexed-tapahtumaparametreilla, joista tulee haettavia topic-tietoja.

indexed-avainsana

Merkitkää parametri indexed-määreellä, jolloin se tallennetaan lokin topic-tietona dataosan sijaan. Ethereum-solmut voivat suodattaa topic-tietoja nopeasti.

<code>event Transfer(
    address indexed from,
    address indexed to,
    uint256 amount
);</code>

Topic-tiedot ja data

Jokaisessa lokissa voi olla enintään 4 topic-tietoa ja vapaamuotoinen data-osa:

  • Topic 0 on tapahtuman allekirjoituksen tiiviste (automaattinen muille kuin anonyymeille tapahtumille)
  • Jokainen indexed-parametri käyttää yhden ylimääräisen topic-paikan
  • Muut kuin indexed-parametrit sijoitetaan dataosaan

Kolmen indexed-parametrin rajoitus

Muut kuin anonyymit tapahtumat voivat sisältää enintään kolme indexed-parametria, koska topic 0 on varattu allekirjoituksen tiivisteelle.

Neljännen indexed-parametrin lisääminen aiheuttaa käännösvirheen.

<code>// OK: 3 indexed params
event Trade(
    address indexed maker,
    address indexed taker,
    uint256 indexed orderId,
    uint256 price // not indexed
);</code>

Indeksoitavien tietojen valinta

Indeksoikaa kentät, joiden perusteella aiotte hakea: osoitteet, tunnisteet ja luokat. Jättäkää suuret tai kuvailevat arvot (määrät ja merkkijonot) indeksoimatta, jotta ne säilyvät luettavina dataosassa.

<code>event ItemSold(
    uint256 indexed itemId,
    address indexed buyer,
    uint256 price
);</code>

Merkkijonojen ja tavujen indeksointi

Kun indeksoitte dynaamisen tyypin, kuten string tai bytes, topic sisältää arvon keccak256-tiivisteen, ei itse arvoa.

Voitte silti suodattaa tietoja tiivistämällä hakutermin, mutta alkuperäistä tekstiä ei voi palauttaa topic-tiedosta.

<code>event Tagged(string indexed label, uint256 value);
// topic = keccak256(label), original text not in log</code>

Suodattaminen asiakkaassa

Asiakaskirjastot käyttävät indexed-topic-tietoja suodattimien rakentamiseen. Esimerkiksi kaikki yhden osoitteen vastaanottamat siirrot voidaan hakea nopeasti topic-tietojen perusteella.

<code>// ethers.js (off-chain)
// const filter = token.filters.Transfer(null, myAddress);
// const logs = await token.queryFilter(filter);</code>

Vakiomuotoinen Transfer-tapahtuma

ERC-20 ja ERC-721 määrittelevät Transfer-tapahtuman, jossa osoitteet ovat indexed-parametreja. Siksi lompakot voivat näyttää saapuvat ja lähtevät siirtonne niin nopeasti.

<code>// ERC-20
event Transfer(address indexed from, address indexed to, uint256 value);
// ERC-721
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);</code>

Kaasua koskevat näkökohdat

Indexed-parametrit kuluttavat hieman enemmän kaasua kuin muut parametrit, koska ne käyttävät erillisiä topic-paikkoja. Indeksoikaa vain tiedot, joiden perusteella todella tarvitsette suodatusta.

Anonyymit tapahtumat

anonymous-tapahtuma jättää allekirjoituksen tiivisteen pois topic 0:sta, jolloin neljäs indexed-paikka vapautuu. Ne ovat harvinaisia ja vaikeampia purkaa, joten käyttäkää niitä vain edistyneissä matalan tason tapauksissa.

<code>event LowLevel(uint256 indexed a, uint256 indexed b,
               uint256 indexed c, uint256 indexed d) anonymous;</code>

Indexed-parametrien ja datan yhdistäminen

Käytännöllisessä tapahtumassa indeksoidaan haettavat avaimet ja jätetään kuvaileva hyötykuorma dataan, jolloin suodatettavuus ja luettavuus ovat tasapainossa.

<code>event Deposit(
    address indexed account, // searchable
    uint256 amount,          // readable in data
    uint256 timestamp
);</code>

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte indexed-parametrit.

Kertaus

Opitte tapahtumien indexed-parametreista:

  • indexed muuttaa parametrin suodatettavaksi topic-tiedoksi
  • Enintään 3 indexed-parametria (topic 0 = allekirjoituksen tiiviste)
  • Indeksoidut dynaamiset tyypit tallentavat keccak256-tiivisteen, eivät arvoa
  • Indeksoikaa haettavat avaimet ja jättäkää kuvaileva hyötykuorma dataosaan

Hyvä indeksointi tekee ketjun ulkopuolisista kyselyistä nopeita ja edullisia.

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 ”Indeksoidut parametrit” ilmainen?

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

Suodatettavat aiheet. 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 ”Indeksoidut parametrit”-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. Tapahtumien määrittäminen
  2. Indeksoidut parametrit
  3. Tapahtumien kuuntelu
  4. Tapahtumat ja tallennus
← Takaisin: Web3:n ja DApp-sovellusten kehityksen perusteet