Sin combustible durante la creación del contrato

Hace unos días, varios intentos de crear un contrato fallaron con errores de falta de gas (confirmados por etherscan/ethercamp y getBalance API), sin embargo, no tengo claro qué falló exactamente y cómo se puede diagnosticar.

No hay suficiente gasolina para el gasto de la causa 'No hay gas para devolver el contrato recién creado'

Una de esas transacciones es 0x47bf53491a14e64bc8938afa97d4b012677f465bddd7c3c0bbfb5df2baa99127

Si lo verifica en Etherscan y ether.camp, aparece con un error, pero al mirar el vmtrace en ambos exploradores, o al mirar el resultado de debug.traceTransaction, no se informa ningún error.

El recibo de la transacción tampoco muestra ningún error e indica una dirección de contrato como si todo funcionara.

¿Qué salió mal exactamente?

(Declaré tentativamente un Problema para geth, pero no estoy seguro de cómo debería calificarse)

editar AFAICT hay cuatro transacciones con el mismo comportamiento, enumeradas a continuación, (no son mías, ni mis intentos, solo me interesan por el comportamiento de falta de gas)

  • 0x0b157cbbcca6079664e1f61e5f5e33241999c1cc1a7dbc1adad347b904c0fb65
  • 0xc712e39a316745d1c0154941bcd9c60eacaf6287596dd3e356249e69509d20c1
  • 0xaf071ce2147cc61d951a07c4e123c99f84b50e3656ceb07bba2c78796875626c
  • 0x47bf53491a14e64bc8938afa97d4b012677f465bddd7c3c0bbfb5df2baa99127
Esto no parece un problema geth. ¿Posiblemente un error de Solidity que provoca devoluciones incorrectas? ¿Alguna posibilidad de que pueda publicar el método de inicialización desde la fuente?
No estoy seguro de lo que quiere decir con el método de inicialización... Simplemente verifiqué traceTransaction vs getBalance antes/después de usar geth, encontré algo que no entendí y luego eché un vistazo a lo que decían los exploradores :)
Me refiero a la función en el código fuente con el mismo nombre que el contrato
@fairglu: ¿Descubriste el problema? etherscan.io/tx/…
@ryepdx es etherscan.io/tx/… , observe el error y luego haga clic en VMTrace, no hay error. En Tjaden no es mi contrato, solo algo que observé en la cadena de bloques, de hecho, hay 4 transacciones de este tipo (las enumeré en cuestión)
Si su contrato lanzó una excepción durante la implementación, eso lo explicaría. Las excepciones consumen todo el gas en una transacción y dan como resultado un error de "sin gas".
@ryepdx, ¿cómo ve a posteriori que un contrato arrojó una excepción?
@fairglu ve que el gasLimit que se ha enviado a un tx se ha agotado. Esa es una clara indicación de que se encontró con una falta de gasolina que se desencadenó principalmente por una excepción interna y lanzada explícitamente o debido al hecho de que simplemente proporcionó muy poca gasolina en primer lugar y luego simplemente "quemó toda su gasolina". ".

Respuestas (1)

Solo proporcionó 500 000 de gas al crear la transacción, y la transacción se quemó por completo (consulte "Gas" y "Gas utilizado por transacción" en Etherscan ). Realmente solo necesitas proporcionar más gasolina.

Como se ve en Ethstats, el límite de gas actual (por bloque) es 4,712,388. Es posible que desee intentar enviar la transacción en Testnet o usar eth_estimategas para ver exactamente cuánto gas se necesitará para que se procese esta transacción de creación de contrato antes de gastar tanto gas en una transacción.

Como escribí, estas NO son mis transacciones, solo transacciones que encontré al escanear la cadena de bloques, el problema es averiguar a posteriori a partir de la API de trace y ethereum, sin tener que depender de exploradores de terceros.