Tengo un código que finalmente está destinado a ejecutarse en una red privada. Lo estoy probando con el precioso pyethereum, haciendo cosas como:
from ethereum import tester as t
class testMyContract(TestCase):
def setUp(self):
self.s = t.state()
code = open('../mycontract.sol').read()
self.mycontract = self.s.abi_contract(code, language='solidity', sender=t.k0)
def testExpensiveThing(self):
mydata = [1000, 3000, 2000, 8000]
self.mycontract.doExpensiveThing(mydata)
Esto explota con
File "/usr/local/lib/python2.7/dist-packages/ethereum/tester.py", line 201, in _send
raise TransactionFailed()
TransactionFailed
No explota cuando le paso menos datos, y el contrato parece bastante caro, así que asumo que se está rompiendo porque se está quedando sin gasolina. ¿Hay alguna forma de pasar a pyethereum algunas configuraciones que permitan que la transacción use más gas?
Usa t.gas_limit
y t.gas_price
.
Para el límite de gas, dado que generalmente solo desea configurarlo una vez:
Establecer t.gas_limit
antes t.state()
. Ejemplot.gas_limit = 3000000
De lo contrario puede hacerself.s.abi_contract(code, gas=3000000,...
(Puede establecer el gas_limit mucho más alto con fines de prueba para que pueda implementar un contrato muy grande, pero es mejor mantenerlo más bajo que el límite de gas de bloque de la red real para que los contratos puedan implementarse en la red real).
Puede cambiar el gas de arranque aquí:
self.mycontract = self.s.abi_contract(code, gas=3000000, language='solidity', sender=t.k0)
Pero no estoy seguro si ese es el problema real.
Edmundo Edgar