"AssertionError: código de contrato vacío" al probar el contrato por encima de un tamaño particular. ¿Cómo lo soluciono?

Estoy escribiendo un contrato para la aritmética de enteros de longitud arbitraria, para usar en un proyecto más grande.

El problema es que una vez que el contrato supera cierto tamaño, el entorno de prueba Python ethereum.tester.state().abi_contract() comienza a dar este seguimiento de pila:

Traceback (most recent call last):
  File "se_bigint.py", line 5, in <module>
    bigint = s.abi_contract('bigint.se')
  File "/home/ada/mypy/local/lib/python2.7/site-packages/ethereum/tester.py", line 166, in abi_contract
    assert len(self.block.get_code(address), "Contract code empty")
AssertionError: Contract code empty

Aquí hay un pastebin de código que funciona: http://pastebin.com/1KppMmRx

Y aquí hay un pastebin que reproduce el error: http://pastebin.com/qq7mcLeM

Tenga en cuenta que la única diferencia entre ellos es un poco de trabajo sin sentido agregado a una de las funciones del contrato. También tenga en cuenta que ambos contratos se compilan con éxito a través de "serpent compile bigint.se". Veo esto tanto en el lanzamiento de PyPI como en la rama de desarrollo actual de github.

Habría preguntado esto en el foro de ethereum, pero parece que estoy atascado en la verificación de cuenta allí.

¿Alguien sabe qué podría estar causando esto, o cómo evitarlo?

Respuestas (1)

¿Está suministrando suficiente gas para el despliegue? Antes de Homestead, los contratos pueden implementarse sin código si se queda sin combustible durante la implementación.

Ah, eso es lo que me estaba perdiendo. Para aquellos de ustedes que lean esto en el futuro: prueben state.abi_contract("script.se",gas=10000000). Si eso no funciona, intente aumentar más el gas.
Una opción similar es: ethereum.tester.gas_limit = 3000000 Al aumentar el gas, aún es bueno permanecer por debajo del límite de gas del bloque, de lo contrario, el contrato de prueba tal como está no se podrá implementar en la red principal.