Индексированные параметры
Фильтруемые темы
«Индексированные параметры» — бесплатный урок Web3 & DApp Development Fundamentals на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Web3 & DApp Development Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Web3 & DApp Development Fundamentals содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Filtering Logs
Once a contract emits many events, off-chain apps need a way to filter them efficiently, for example to find every Transfer to a specific address.
Solidity supports this with indexed event parameters, which become searchable topics.
The indexed Keyword
Mark a parameter indexed to store it as a log topic rather than in the data section. Topics can be filtered quickly by Ethereum nodes.
<code>event Transfer(
address indexed from,
address indexed to,
uint256 amount
);</code>Topics vs Data
Each log has up to 4 topics and an arbitrary data blob:
- Topic 0 is the event signature hash (automatic for non-anonymous events)
- Each
indexedparameter takes one more topic slot - Non-indexed parameters go into the data section
The Three-Indexed Limit
A non-anonymous event can have at most three indexed parameters, because topic 0 is reserved for the signature hash.
Adding a fourth indexed parameter is a compile error.
<code>// OK: 3 indexed params
event Trade(
address indexed maker,
address indexed taker,
uint256 indexed orderId,
uint256 price // not indexed
);</code>Choosing What to Index
Index the fields you will search by: addresses, ids, categories. Keep large or descriptive values (amounts, strings) non-indexed so they stay readable in the data section.
<code>event ItemSold(
uint256 indexed itemId,
address indexed buyer,
uint256 price
);</code>Indexing Strings and Bytes
When you index a dynamic type like string or bytes, the topic stores the keccak256 hash of the value, not the value itself.
You can still filter by hashing the search term, but you cannot recover the original text from the topic.
<code>event Tagged(string indexed label, uint256 value);
// topic = keccak256(label), original text not in log</code>Filtering on the Client
Client libraries use indexed topics to build filters. For example, fetching all transfers received by one address becomes a fast topic match.
<code>// ethers.js (off-chain)
// const filter = token.filters.Transfer(null, myAddress);
// const logs = await token.queryFilter(filter);</code>The Standard Transfer Event
ERC-20 and ERC-721 define a Transfer event with indexed addresses. This is why wallets can show your incoming and outgoing transfers so quickly.
<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>Gas Considerations
Indexed parameters cost slightly more gas than non-indexed ones because they occupy dedicated topic slots. Index only what you genuinely need to filter on.
Anonymous Events
An anonymous event omits the signature hash from topic 0, freeing a fourth indexed slot. They are rare and harder to decode, so use them only for advanced low-level cases.
<code>event LowLevel(uint256 indexed a, uint256 indexed b,
uint256 indexed c, uint256 indexed d) anonymous;</code>Mixing Indexed and Data
A practical event indexes the searchable keys and leaves descriptive payload in data, balancing filterability and readability.
<code>event Deposit(
address indexed account, // searchable
uint256 amount, // readable in data
uint256 timestamp
);</code>Quick Check
Test your understanding of indexed parameters.
Recap
You learned about indexed event parameters:
indexedturns a parameter into a filterable topic- Max 3 indexed params (topic 0 = signature hash)
- Indexed dynamic types store a keccak256 hash, not the value
- Index searchable keys; keep descriptive payload in the data section
Good indexing makes off-chain queries fast and cheap.
Изучай Web3 & DApp Development Fundamentals с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 29
- Уроки
- 105
Часто задаваемые вопросы
Урок «Индексированные параметры» бесплатный?
Да — полный текст урока «Индексированные параметры» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Web3 & DApp Development Fundamentals, подпишись на CoddyKit PRO. Курс Web3 & DApp Development Fundamentals содержит 4 уроков всего.
Чему я научусь в уроке «Индексированные параметры»?
Фильтруемые темы Ты практикуешь Web3 & DApp Development Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Web3 & DApp Development Fundamentals?
Предыдущий опыт не требуется. Web3 & DApp Development Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Индексированные параметры»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Web3 & DApp Development Fundamentals?
Да. Каждый урок Web3 & DApp Development Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Объявление событий
- Индексированные параметры
- Прослушивание событий
- События и хранилище