Как отфильтровать событие Starknet с адресом в ключе

Поля события Cairo могут попадать в keys или data. Поиск адреса кошелька только в data пропустит события, где контракт пометил адрес как доступный для фильтрации ключ.

Сопоставьте ABI с массивами keys и data

Для простого верхнеуровневого варианта из примера поставьте селектор в позицию ноль, адрес счёта — в следующую позицию ключей. Сумма u256 займёт два felt в data. Адрес испускающего контракта проверьте отдельным фильтром.

#[key] account: ContractAddress
amount: u256
keys = [event_selector, account]
data = [amount_low, amount_high]

Событие счёта 0x123 с data [7, 0] обозначает сумму семь при данном ABI. Другой контракт может использовать то же имя, поэтому один селектор не определяет актив или его единицы.

Разберите вложенные объявления событий

Компоненты и вложенные enum могут добавлять селекторы в keys. У flat-варианта селектор внешнего варианта опускается. Перед позиционным RPC-фильтром восстановите фактический порядок из ABI развёрнутого класса. starknet.io The Cairo Programming Language