Сохраняются ли события постоянно и надежно доступны для контрактов в будущем?

Я видел этот пост на форуме об использовании Ethereum в качестве хранилища событий: События в Solidity, использование блокчейна в качестве хранилища событий .

Однако это не кажется окончательным. Например, он говорит:

Я подтвердил у Виталика и с тех пор подтвердил Крисом, что события постоянны. В будущем некоторые узлы могут сократить исторические данные.

Если узлы сокращают исторические данные, я не уверен, каковы последствия для доступности данных о событиях.

Я использую geth 1.7, и мое приложение зависит от журналов, чтобы показать исторические результаты. Для некоторой оптимизации я сохраняю данные в журналах и использую индексы тем для быстрого поиска. Но недавно я понял, что данные, хранящиеся в журнале, исчезают в среднем через 1 день. Я использую getPastlog для поиска в конкретном блоке с этими параметрами: {fromBlock: '0x1ad462e', Toblock: '0x1ad462e', адрес: '0x1741136609df9f300c7fb4bd134730BBF8A00EB для последних блоков

Ответы (1)

Во- первых, события недоступны для контрактов.

Простой ответ: да, события сохраняются постоянно.

Нюансированный ответ: да, события так же постоянны, как и блокчейн.

Это помогает понять, что события являются результатом выполнения кодов операций LOG в EVM. По аналогии, «внутренние транзакции» получаются путем выполнения транзакционных данных через EVM.

Итак, пока у вас есть блокчейн (по определению у вас есть все блоки и транзакции), у вас есть все события (или вы можете восстановить их все, если они были удалены ). Если вы используете мобильный телефон, на котором нет блокчейна, DApps будут ограничены событиями, которые у него будут.

Наконец, сокращение не влияет на постоянство событий, потому что сокращение выполняется для дерева состояний, и никакие блоки не теряются.

Исключение: события являются постоянными, если только не происходит реорганизация вилки и она не находится на отброшенной ветке. Форк отбрасывает блоки и транзакции, поэтому сгенерированное в них событие также будет отброшено.