У меня есть код, который в конечном итоге предназначен для работы в частной сети. Я тестирую это с прекрасным 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 некоторые настройки, которые позволят транзакции использовать больше газа?
Используйте t.gas_limit
и t.gas_price
.
Для лимита газа, поскольку обычно вы хотите установить его только один раз:
Ставить t.gas_limit
перед t.state()
. Примерt.gas_limit = 3000000
В противном случае можно сделатьself.s.abi_contract(code, gas=3000000,...
(Вы можете установить gas_limit намного выше для целей тестирования, чтобы вы могли развернуть очень большой контракт, но лучше оставить его ниже, чем лимит газа в реальной сети, чтобы контракты можно было развернуть в реальной сети.)
Вы можете изменить стартовый газ здесь:
self.mycontract = self.s.abi_contract(code, gas=3000000, language='solidity', sender=t.k0)
Но я не уверен, что это реальная проблема
Эдмунд Эдгар