я в ethereum не эксперт, но из моих остаточных знаний:
- даже если нет event, есть все contract call logs, можно найти трансфер где кошка передается как параметр. утверждается что эти логи у не-архивной ноды тоже есть.
- если есть доступ ко всем состояниям между, можно бинарничком найти блок где кошка поменяла хозяина. это вероятно только на архивной ноде.
contract call logs - они храняться у архивной ноды т.е. они существуют N блоков локально, а потом исчезают т.к. режим fast sync.
Т.е. я сталкивался с такой проблемой, когда какой-то юзер перевел с контракта сделанного на коленках какой-то булшит биржей и это состояние можно засканить только за N блоков, если хочется перепроверить депозит через N блоков, то нужна уже архивная нода.
Я говорю в рамках geth) В parity уже не помню, но логи у них отличаются