¿Los eventos se almacenan de forma permanente y están disponibles de forma fiable para los contratos en el futuro?

He visto esta publicación en el foro sobre el uso de Ethereum como una tienda de eventos: Events in Solidity, using blockchain as eventstore .

Sin embargo, no parece concluyente. Por ejemplo dice:

Confirmé con Vitalik y Chris confirmó que los eventos son permanentes. En el futuro, algunos nodos pueden eliminar datos históricos.

Si los nodos eliminan los datos históricos, no estoy seguro de cuáles son las implicaciones para la disponibilidad de los datos de eventos.

Estoy ejecutando geth 1.7 y mi aplicación depende de los registros para mostrar resultados históricos. Para tener algún tipo de optimización, almaceno datos en los registros y uso los índices de temas para una recuperación rápida. Pero recientemente me di cuenta de que los datos almacenados en el registro desaparecen después de un promedio de 1 día. Estoy usando getpastlog para buscar en un bloque específico con esta opción: {fromblock: '0x1ad462e', toblock: '0x1ad462e', dirección: '0x1741136609df9f300c7fb4bd134730bbf8a00eBe', topics: [null, '0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 MENTALES MENTALES ESTO MUNTO ESTUDO ESTUDA ESTADO ESTUDA ESTADO ESTUDA ESTADO ESTUDA ESTADO EN para los últimos bloques

Respuestas (1)

En primer lugar, los eventos no son accesibles a los contratos.

La respuesta simple es Sí, los eventos se almacenan permanentemente.

La respuesta matizada es Sí, los eventos son tan permanentes como la cadena de bloques.

Es útil darse cuenta de que los eventos son el resultado de los códigos de operación LOG que se ejecutan en el EVM. Para una analogía, las "transacciones internas" se derivan mediante la ejecución de datos de transacciones a través de EVM.

Entonces, siempre que tenga la cadena de bloques (por definición, tiene todos los bloques y transacciones), entonces tiene todos los eventos (o puede regenerarlos todos si se han eliminado ). Si está en un teléfono móvil donde no tiene la cadena de bloques, las DApps estarán limitadas con los eventos que tendrá.

Finalmente, la poda no tiene efecto sobre la permanencia de los eventos porque la poda se hace al estado trie y no se pierden bloques.

Excepción: los eventos son permanentes a menos que haya una reorganización de la bifurcación y esté en la bifurcación descartada. Un fork descarta bloques y transacciones y es por eso que un evento generado en ellos también será descartado.