De acuerdo con la documentación de EVM, todos los valores se inicializan. Este medio to
contendrá la 0
dirección, ya null
que no es un estado reconocido. La 0
dirección se vincula a una cuenta externa (que todos sabemos que contiene un tesoro de éter y fichas). Entonces, ¿cómo distingue ethereum una solicitud de creación de contrato de una solicitud de transferencia de valor que se origina en el remitente a la dirección 0x0..0?
¿El contenido de la carga útil de la propiedad de datos determina si se trata de una solicitud de creación de contrato, por ejemplo, el analizador ve to == 0x0 && data == 0x0
y da como resultado la transferencia de valor a la cuenta 0x0..0.
Gracias a @Ismael que aclaró cómo la codificación RLP maneja los datos durante la inicialización del contrato. Parece que el protocolo de codificación puede distinguir entre una matriz de bytes vacía y una dirección. Las reglas de la EVM son entonces diferentes e irrelevantes aquí.
Las implementaciones pueden optar por manejar las cargas útiles de manera diferente. Por ejemplo, las entradas de dirección de javascript web3 de 0
& 0x0
ya no envían valor a la dirección de génesis a través de web3, pero lamentablemente son intercambiables con undefined debido al comportamiento de JS. Este cambio se realizó en web3 recientemente... https://github.com/ethereum/web3.js/blob/59aae306c1c31ef6a65b9196e7f03af74c69e059/lib/web3/formatters.js#L274
Esto responde a mi propia pregunta, pero pensé que sería útil publicar, ya que parece que faltan discusiones sobre estos puntos más finos en las publicaciones sobre pagos accidentales a la dirección del bloque de génesis.