Geïndexeerde parameters
Filterbare topics
Geïndexeerde parameters is een gratis De basis van Web3- en DApp-ontwikkeling-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject De basis van Web3- en DApp-ontwikkeling. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus De basis van Web3- en DApp-ontwikkeling bevat in totaal 4 lessen.
Logboeken filteren
Zodra een contract veel gebeurtenissen uitzendt, hebben apps buiten de blockchain een manier nodig om ze efficiënt te filteren, bijvoorbeeld om elke Transfer naar een specifiek adres te vinden.
Solidity ondersteunt dit met indexed gebeurtenisparameters, die doorzoekbare onderwerpen worden.
Het sleutelwoord indexed
Markeer een parameter met indexed om deze als onderwerp van het logboek op te slaan in plaats van in het gegevensgedeelte. Ethereum-nodes kunnen onderwerpen snel filteren.
<code>event Transfer(
address indexed from,
address indexed to,
uint256 amount
);</code>Onderwerpen versus gegevens
Elk logboek heeft maximaal 4 onderwerpen en een willekeurig gegevensblok:
- Onderwerp 0 is de hash van de handtekening van de gebeurtenis (automatisch voor niet-anonieme gebeurtenissen)
- Elke
indexed-parameter gebruikt nog een onderwerpplaats - Niet-geïndexeerde parameters komen in het gegevensgedeelte
De limiet van drie geïndexeerde parameters
Een niet-anonieme gebeurtenis kan maximaal drie geïndexeerde parameters hebben, omdat onderwerp 0 is gereserveerd voor de hash van de handtekening.
Een vierde geïndexeerde parameter leidt tot een compilatiefout.
<code>// OK: 3 indexed params
event Trade(
address indexed maker,
address indexed taker,
uint256 indexed orderId,
uint256 price // not indexed
);</code>Kiezen wat je indexeert
Indexeer de velden waarop je wilt zoeken: adressen, ID's en categorieën. Houd grote of beschrijvende waarden (bedragen, tekenreeksen) niet-geïndexeerd, zodat ze leesbaar blijven in het gegevensgedeelte.
<code>event ItemSold(
uint256 indexed itemId,
address indexed buyer,
uint256 price
);</code>Tekenreeksen en bytes indexeren
Wanneer je een dynamisch type zoals string of bytes indexeert, bevat het onderwerp de keccak256-hash van de waarde, niet de waarde zelf.
Je kunt nog steeds filteren door de zoekterm te hashen, maar je kunt de oorspronkelijke tekst niet uit het onderwerp terughalen.
<code>event Tagged(string indexed label, uint256 value);
// topic = keccak256(label), original text not in log</code>Filteren aan de clientkant
Clientbibliotheken gebruiken geïndexeerde onderwerpen om filters samen te stellen. Zo wordt het ophalen van alle transfers die door één adres zijn ontvangen een snelle vergelijking van onderwerpen.
<code>// ethers.js (off-chain)
// const filter = token.filters.Transfer(null, myAddress);
// const logs = await token.queryFilter(filter);</code>De standaardgebeurtenis Transfer
ERC-20 en ERC-721 definiëren een Transfer-gebeurtenis met geïndexeerde adressen. Daarom kunnen wallets je inkomende en uitgaande transfers zo snel weergeven.
<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>Overwegingen rond gaskosten
Geïndexeerde parameters kosten iets meer gas dan niet-geïndexeerde parameters, omdat ze speciale onderwerpplaatsen innemen. Indexeer alleen wat je echt nodig hebt om op te filteren.
Anonieme gebeurtenissen
Een anonymous-gebeurtenis laat de hash van de handtekening weg uit onderwerp 0, waardoor een vierde geïndexeerde plaats vrijkomt. Ze zijn zeldzaam en moeilijker te decoderen, dus gebruik ze alleen voor geavanceerde laag-niveautoepassingen.
<code>event LowLevel(uint256 indexed a, uint256 indexed b,
uint256 indexed c, uint256 indexed d) anonymous;</code>Geïndexeerde gegevens en gegevens combineren
Bij een praktische gebeurtenis indexeer je de doorzoekbare sleutels en laat je de beschrijvende inhoud in de gegevens staan. Zo breng je filtermogelijkheden en leesbaarheid in balans.
<code>event Deposit(
address indexed account, // searchable
uint256 amount, // readable in data
uint256 timestamp
);</code>Korte controle
Test je begrip van geïndexeerde parameters.
Samenvatting
Je hebt geleerd over geïndexeerde gebeurtenisparameters:
indexedmaakt van een parameter een filterbaar onderwerp- Maximaal 3 geïndexeerde parameters (onderwerp 0 = hash van de handtekening)
- Geïndexeerde dynamische typen slaan een keccak256-hash op, niet de waarde
- Indexeer doorzoekbare sleutels en houd beschrijvende inhoud in het gegevensgedeelte
Goed indexeren maakt off-chain query's snel en goedkoop.
Leer De basis van Web3- en DApp-ontwikkeling met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 29
- Lessen
- 105
Veelgestelde vragen
Is de les “Geïndexeerde parameters” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad De basis van Web3- en DApp-ontwikkeling, waaronder “Geïndexeerde parameters”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus De basis van Web3- en DApp-ontwikkeling bevat in totaal 4 lessen.
Wat leer ik in “Geïndexeerde parameters”?
Filterbare topics Je oefent met De basis van Web3- en DApp-ontwikkeling door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met De basis van Web3- en DApp-ontwikkeling te beginnen?
Ervaring vooraf is niet nodig. De basis van Web3- en DApp-ontwikkeling op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Geïndexeerde parameters”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over De basis van Web3- en DApp-ontwikkeling?
Ja. Elke les over De basis van Web3- en DApp-ontwikkeling bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Events definiëren
- Geïndexeerde parameters
- Naar events luisteren
- Events versus storage