¿Es posible emitir eventos en la función de vista (a través de eventos o logi)? ¿O es posible devolver valor a javascript sin (antes) minar en una función de transacción? Mi objetivo es evitar la espera debido a la minería con registro de eventos.
¿Es posible emitir eventos en la función de vista (a través de eventos o logi)?
Dado que los registros de eventos se almacenan en recibos de transacciones, no creo que sea posible emitir un evento dentro de una función de visualización ya que no se produce ninguna transacción.
¿O es posible devolver valor a javascript sin (antes) minar en una función de transacción?
Tampoco creo que esto sea posible. El valor de retorno de una función que crea una transacción será el recibo de la transacción. Dentro del recibo, puede encontrar los eventos que se emitieron dentro de esa función.
P1: Un evento es un cambio de estado. No es posible emitirlos desde view
o pure
funciones, o constant
en la sintaxis anterior.
P2: No es posible obtener valores de respuesta de una transacción firmada. Siempre obtendrá un recibo de la transacción.
Los patrones toman un tiempo para acostumbrarse. Creo firmemente en la emisión de registros de eventos auditables para cada cambio de estado importante. Cuando se minan las transacciones, la información pertinente llega con la confirmación como argumentos del registro de eventos. Esos son para clientes fuera de la cadena.
Los return
valores o siguen siendo importantes. Son los valores de respuesta si la función es llamada desde otra función o contrato.
Por ejemplo:
bool result = myOtherContract.insertSomething(); // expecting "true"/success
Si eso es importante para un cliente, algo como:
emit LogResult(msg.sender, result);
Espero eso ayude.
La primera pregunta, no es posible porque el evento modifica el estado. En Remix verás una advertencia por hacer esto.
La segunda pregunta. Puede ejecutar las funciones localmente sin enviar una transacción a la red usando Call, no consumirá gas y se ejecutará de inmediato.
Sin embargo, si lo que pretende es que los usuarios de su sistema realicen transacciones antes de que se extraigan las transacciones, esto no es posible.
Espero que esto ayude
tapas nachiket
Jaime
tapas nachiket