valor de la variable codeHash

Se afirma en el papel amarillo de Ethereum :

codeHash: el hash del código EVM de esta cuenta; este es el código que se ejecuta si esta dirección recibe una llamada de mensaje; es inmutable y, por lo tanto, a diferencia de todos los demás campos, no se puede cambiar después de la construcción. Todos estos fragmentos de código están contenidos en la base de datos estatal bajo sus hashes correspondientes para su posterior recuperación. Este hash se denota formalmente como σ[a]c y, por lo tanto, el código se puede denotar como b, dado que KEC(b) = σ[a]c.

Sin embargo, más adelante, en la sección Creación de contrato que describe el escenario de implementación del contrato (no una dirección externa):

El nonce de la cuenta se define inicialmente como cero, el saldo como el valor pasado, el almacenamiento como vacío y el código hash como el hash Keccak de 256 bits de la cadena vacía;

establece que codeHash se establece en un hash de una cadena vacía después de la implementación del contrato.

La pregunta es: ¿Qué se establece en la variable codeHash después de la implementación del contrato? Me parece que estas dos citas son contradictorias, una que indica que la variable codeHash contiene el hash del código del contrato, la otra el hash de una cadena vacía.

¿Estás seguro de que la segunda afirmación no se refiere solo a la creación de un contacto en blanco?
Diría que no habla de un contrato vacío, concluyo que de la declaración: "Hay una serie de parámetros intrínsecos que se usan al crear una cuenta: remitente (s), transactor original (o), gas disponible (g), precio del gas (p), dotación (v) junto con una matriz de bytes de longitud arbitraria, i, el código EVM de inicialización y, finalmente, la profundidad actual de la pila de creación de contratos/llamadas de mensajes (e)".

Respuestas (1)

Creo que el hash de la cadena vacía es el código hash solo hasta que el constructor devuelve el código del cuerpo.

Siempre encuentro que el papel amarillo es difícil de leer, pero si continúa leyendo la sección Creación de contratos, hay una ecuación 98 que parece mostrar el código hash que se almacena con el código devuelto por el constructor. El texto que sigue a esa ecuación:

La excepción en la determinación de σ' dicta que o, la secuencia de bytes resultante de la ejecución del código de inicialización, especifica el código de cuerpo final para la cuenta recién creada.

Esto tendría sentido. Y creo que la ecuación 98 lo especifica. Gracias.