В чем разница между getPastEvents() и events.MyEvent({ fromBlock: 0})?

В чем разница между использованием myContract.getPastEvents()для получения прошлых событий и using myContract.events.MyEvent({ fromBlock: 0, })?

Кроме того, если я перейду к fromBlockномеру блока, который еще не был намайнен, будет ли он работать должным образом?

Возможно MyEvent, не обрабатывает старые события.
Ответил в переполнении стека, я скопировал ответ здесь.

Ответы (2)

На самом деле оба вернут события, запущенные в прошлом. Но MyEventможет дополнительно подписаться на событие. Таким образом, его можно было бы запускать для каждого события, испускаемого в будущем.

Однако MyEventвернет события одно за другим . И для каждого события, запущенного в прошлом и/или в будущем, будет вызываться обратный вызов.

И getPastEventsвернет события all-in-one-shot . Он вернет массив событий, запущенных в прошлом.


Примечание: не используйте { fromBlock: 0, }for optionsв основной сети . Вы будете ждать очень долго, и скрипт, скорее всего, завершится до того, как будет возвращено какое-либо значение. Чтобы иметь возможность получить результат, укажите разумное количество блоков между fromBlockи toBlock.

В общем, MyEventпозволяет указать фильтры для определенного типа события (вы можете фильтровать по значениям параметров), тогда как getPastEventsвозвращает все события для типа события.

Синтаксис, который вы опубликовали, почти идентичен. Основное отличие заключается в том getPastEvents, что будут возвращены все события, которые произошли до тех пор, пока номер блока, к которому вы подключены, не будет синхронизирован. MyEventвернет те же самые события, а также вызовет обратный вызов для любых новых событий, которые происходят по мере добавления новых блоков в цепочку.


Источник: https://stackoverflow.com/a/51664434/4428008