¿Cómo diferencia Ethereum entre 0x0 y nulo durante la creación del contrato?

De acuerdo con la documentación de EVM, todos los valores se inicializan. Este medio tocontendrá la 0dirección, ya nullque no es un estado reconocido. La 0direcció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 == 0x0y da como resultado la transferencia de valor a la cuenta 0x0..0.

Respuestas (1)

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& 0x0ya 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.