Recuperar el mensaje original de una transacción ETH

Cuando alguien simplemente envía ETH de una dirección a otra, y suponiendo que esa persona no incluye un mensaje personalizado en la transacción, ¿cuál es exactamente el mensaje que se envía en la red que se usa para firmar la transacción?

Al leer la base de cómo funciona la firma de mensajes, descubrí que se usa el siguiente método y fórmula:

sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))

... pero si el firmante no incluye un mensaje y solo envía ETH, o tal vez solo usa MetaMask para enviar fondos, ¿en qué se convierte exactamente el mensaje?

(Nota al margen: hacer una decodificación de transacción muestra que el campo de "datos" es simplemente "0x", pero no estoy seguro de si este campo de datos también está correlacionado con el mensaje en sí o no).

Respuestas (1)

Toda transacción de Ethereum contiene un datacampo. Este campo puede ser

  • Vacío

  • Una carga útil para llamar a una función de contrato inteligente

  • Cualquier mensaje dado por el usuario

La carga útil en el campo de datos está separada para firmar un mensaje. Un mensaje firmado se puede transferir fuera de la cadena, como correo electrónico y copiar y pegar, y no necesita ser parte de una transacción.

Cuando está vacío, ¿todavía contiene el prefijo "\x19Ethereum Signed Message:\n" incrustado como parte de los datos de transacción sin procesar?
No. A lo que se refiere es al preámbulo de firma del mensaje y su propósito es diferenciar las transacciones de Ethereum firmadas de los mensajes de Ethereum firmados (no pueden tener el mismo hash).