Как я могу изменить цену на газ или лимит газа при тестировании с пиетериумом?

У меня есть код, который в конечном итоге предназначен для работы в частной сети. Я тестирую это с прекрасным pyethereum, делая такие вещи, как:

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)

Это взрывает

  File "/usr/local/lib/python2.7/dist-packages/ethereum/tester.py", line 201, in _send
    raise TransactionFailed()
TransactionFailed

Он не взрывается, когда я передаю ему меньше данных, и контракт выглядит довольно дорогим, поэтому я предполагаю, что он ломается, потому что у него заканчивается газ. Есть ли способ передать pyethereum некоторые настройки, которые позволят транзакции использовать больше газа?

Ответы (2)

Используйте t.gas_limitи t.gas_price.

Для лимита газа, поскольку обычно вы хотите установить его только один раз:

Ставить t.gas_limitперед t.state(). Примерt.gas_limit = 3000000

В противном случае можно сделатьself.s.abi_contract(code, gas=3000000,...

(Вы можете установить gas_limit намного выше для целей тестирования, чтобы вы могли развернуть очень большой контракт, но лучше оставить его ниже, чем лимит газа в реальной сети, чтобы контракты можно было развернуть в реальной сети.)

Спасибо, я установил t.gas_limit = t.gas_limit * 10 прямо перед вызовом t.state(), и теперь он работает.

Вы можете изменить стартовый газ здесь:

self.mycontract = self.s.abi_contract(code, gas=3000000, language='solidity', sender=t.k0)

Но я не уверен, что это реальная проблема