Indeksoidut parametrit
Suodatettavat aiheet.
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:
indexedmuuttaa 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.
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
- Tapahtumien määrittäminen
- Indeksoidut parametrit
- Tapahtumien kuuntelu
- Tapahtumat ja tallennus