Ich habe einen Code, der letztendlich dazu bestimmt ist, in einem privaten Netzwerk ausgeführt zu werden. Ich teste es mit dem schönen Pyethereum und mache Dinge wie:
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)
Das explodiert mit
File "/usr/local/lib/python2.7/dist-packages/ethereum/tester.py", line 201, in _send
raise TransactionFailed()
TransactionFailed
Es explodiert nicht, wenn ich ihm weniger Daten übergebe, und der Vertrag sieht ziemlich teuer aus, also gehe ich davon aus, dass es kaputt geht, weil ihm das Benzin ausgeht. Gibt es eine Möglichkeit, Pyethereum einige Einstellungen zu übergeben, die es der Transaktion ermöglichen, mehr Gas zu verbrauchen?
Verwenden Sie t.gas_limit
und t.gas_price
.
Für das Gaslimit, da Sie es normalerweise nur einmal einstellen möchten:
Vorher t.gas_limit
einstellen t.state()
. Beispielt.gas_limit = 3000000
Kann sonst machenself.s.abi_contract(code, gas=3000000,...
(Sie können das gas_limit zu Testzwecken viel höher einstellen, damit Sie einen sehr großen Vertrag bereitstellen können, aber am besten halten Sie es niedriger als das Blockgaslimit des realen Netzwerks, damit Verträge im realen Netzwerk bereitgestellt werden können.)
Hier können Sie das Startgas ändern:
self.mycontract = self.s.abi_contract(code, gas=3000000, language='solidity', sender=t.k0)
Ich bin mir aber nicht sicher, ob das das eigentliche Problem ist
Edmund Edgar