Wie kann ich beim Testen mit Pyethereum den Gaspreis oder das Gaslimit ändern?

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?

Antworten (2)

Verwenden Sie t.gas_limitund t.gas_price.

Für das Gaslimit, da Sie es normalerweise nur einmal einstellen möchten:

Vorher t.gas_limiteinstellen 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.)

Danke, ich habe t.gas_limit = t.gas_limit * 10 direkt vor dem Aufruf von t.state() gesetzt und jetzt funktioniert es.

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