Funcionalidad de los eventos¶
La funcionalidad Event
se utiliza para que los desarrolladores y los usuarios puedan suscribirse a eventos de su interés. Estos eventos se generan durante la ejecución del blockchain, y almacenan los pasos de la ejecución y sus resultados en el chain. Para consultar y verificar los resultados de la ejecución de transacciones y contratos inteligentes, se almacenan esos dos tipos de eventos en un trie en el chain.
Estructura evento:
type Event struct {
Topic string // event topic, subscribe keyword
Data string // event content, a json string
}
Al generarse un evento, se debe procesar con eventEmitter. Los usuarios pueden suscribirse al emisor del evento.
Si no hay suscripción al evento, este se descartará. Para todo nueva suscripción, si el canal no se bloquea a tiempo, se descartará el evento debido al mecanismo non-blocking.
Lista de eventos:¶
- TopicNewTailBlock
- TopicRevertBlock
- TopicLibBlock
- TopicPendingTransaction
- TopicTransactionExecutionResult
- EventNameSpaceContract
Referencia¶
TopicNewTailBlock¶
Este evento se dispara cuando el último bloque de la cadena se actualiza.
- Tópico:
chain.newTailBlock
- Datos:
height
: altura del bloquehash
: hash del bloqueparent_hash
: hash del bloque padreacc_root
: hash raíz del estado de la cuentatimestamp
: timestamp del bloquetx
: hash raíz del estado de la transacciónminer
: minero del bloque
TopicRevertBlock¶
Este evento ocurre cuando se revierte un bloque en la cadena.
- Tópico:
chain.revertBlock
- Datos: El contenido del tópico es similar a los datos de TopicNewTailBlock.
TopicLibBlock¶
Este evento se dispara cuando el último bloque irreversible sufre un cambio.
- Tópico:
chain.latestIrreversibleBlock
- Dato: El contenido del tópico es similar a los datos de TopicNewTailBlock.
TopicPendingTransaction¶
Este evento se dispara cuando se introduce una transacción en el pozo de transacciones (transaction pool).
- Tópico:
chain.pendingTransaction
- Datos:
chainID
: id de cadenahash
: hash de la transacciónfrom
: cadena que indica la dirección origen de la transacciónto
: cadena que indica la dirección destino de la transacciónnonce
: nonce de la transacciónvalue
: valor de la transaccióntimestamp
: timestamp de la transaccióngasprice
: precio del gas para la transaccióngaslimit
: límite de gas para la transaccióntype
: tipo de transacción
TopicTransactionExecutionResult¶
Este evento ocurre cuando se ejecuta el final de una transacción. This event will be recorded on the chain, and users can query with RPC interface GetEventsByHash.
Este evento registra los resultados de la ejecución de la transacción, y es sumamente importante.
- Tópico:
chain.transactionResult
- Datos:
hash
: hash de la transacciónstatus
: estado de la transacción; 0: falló, 1: sin errores, 2: pendientegasUsed
: gas usado para la transacciónerror
: error de ejecución de la transacción. Si no hubo errores, este campo estará vacío.
EventNameSpaceContract¶
Este evento ocurre cuando se ejecuta un contrato inteligente. Si la ejecución ocurre exitosamente, los eventos quedarán registrados en el chain y pueden ser suscritos; por el contrario, si ocurre un error en la ejecución, el evento no se registrará.
Este evento también se registrará en el chain, donde los usuarios lo pueden consultar mediante la interfaz RPCGetEventsByHash.
- Tópico:
chain.contract.[topic]
El tópico del evento del contrato tiene el prefijochain.contract.
, El contenido es definido por quien escribe el contrato. - Datos: El contenido es definido por quien escribe el contrato.
Suscripción¶
Es posible suscribirse a todos los eventos, y el cloud chain expone una interfaz RPC de suscripción llamada Subscribe. Es importante notar que la suscripción a los eventos es un mecanismo ajeno al blockchain. Los nuevos eventos se descartarán si la interfaz RPC no se maneja a tiempo.
Consultas¶
Sólo es posible consultar los eventos registrados en el chain, mediante el uso de la interfaz RPC GetEventsByHash.
Al momento, es posible consultar los siguientes eventos: