«AssertionError: код контракта пуст» при тестировании контракта выше определенного размера. Как это исправить?

Я пишу контракт на целочисленную арифметику произвольной длины для использования в более крупном проекте.

Проблема в том, что как только контракт становится больше определенного размера, тестовая среда Python ethereum.tester.state().abi_contract() начинает выдавать следующую трассировку стека:

Traceback (most recent call last):
  File "se_bigint.py", line 5, in <module>
    bigint = s.abi_contract('bigint.se')
  File "/home/ada/mypy/local/lib/python2.7/site-packages/ethereum/tester.py", line 166, in abi_contract
    assert len(self.block.get_code(address), "Contract code empty")
AssertionError: Contract code empty

Вот работающий код pastebin: http://pastebin.com/1KppMmRx

А вот pastebin, который воспроизводит ошибку: http://pastebin.com/qq7mcLeM

Обратите внимание, что единственная разница между ними заключается в том, что к одной из функций контракта добавлена ​​какая-то бессмысленная хлопотня. Также обратите внимание, что оба контракта успешно компилируются через "serpent compile bigint.se". Я вижу это как в выпуске PyPI, так и в текущей ветке разработки github.

Я бы спросил об этом на форуме Эфириума, но, похоже, я застрял там на проверке аккаунта.

Кто-нибудь знает, что может быть причиной этого, или как обойти это?

Ответы (1)

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

Ах, вот чего мне не хватало. Для тех из вас, кто прочитает это в будущем: попробуйте state.abi_contract("script.se",gas=10000000). Если это не сработает, попробуйте еще увеличить газ.
Похожий вариант: ethereum.tester.gas_limit = 3000000 При увеличении газа все же хорошо оставаться ниже лимита газа блока, иначе тестовый контракт в том виде, в каком он есть, нельзя будет развернуть в основной сети.