Mientras navegaba por los rastros generados por la paridad, encontré un caso interesante:
El contrato 0xfec94608dea1f3609e4a93e56e01477d8a86de46
se ha creado dos veces.
Primera vez, en la transacción: 0xc0d8d11c5da64e025ac0bb0cc286ede65c2a0b7afeeb455f04d6479cc98edb7a
. La transacción falló Out of gas
pero el contrato se creó con éxito.
Segunda vez, se ha creado el mismo contrato con el mismo código en la transacción: 0x9c3ef34611bd24e254b2b6f339e2f196a57042e8261c069af944248d982c67b4
.
Por lo que entiendo, el contrato obtuvo la misma dirección porque se creó dentro de otro contrato. La dirección del contrato se genera a partir de la dirección del contrato del creador y su nonce. Dado que la transacción anterior del contrato del creador terminó con Out of gas
el nonce no aumentado y, por lo tanto, con la misma dirección del contrato.
¿Lo que realmente sucedió? ¿Se creó realmente el contrato en la primera transacción? ¿No debería revertirse? ¿ Etherscan
Lo muestra correctamente? ¿Qué pasaría si en la segunda transacción se genera el contrato con un código diferente?
EDITAR: Informé el problema a los problemas de Parity GitHub
Creo que tiene razón sobre el nonce y Etherscan afirma incorrectamente que B se creó dos veces, solo la segunda es válida.
En la primera transacción (bloque 4930939), el contrato A crea un nuevo contrato B. Pero la transacción se quedó sin gas y se llama revertir, deshaciendo la creación de B y el incremento del nonce de A.
La segunda transacción (bloque 4932566) el contrato A crea nuevamente B, la transacción se completa. Y de este bloque existe el contrato B.
Román Frólov
kuba
Namebazaar contract creator
. Fuente disponible aquí: github.com/district0x/name-bazaar/tree/master/resources/public/…