Как установить максимальную блокировку газа в ganache-cli

Я запускаю ganache-cli, который, кажется, имеет максимальный блок газа около 6,5 миллионов. Все исследования, которые я провел по этому вопросу, похоже, дают ответы о том, что сам пользователь устанавливает LIMIT газа пользователя (не то, что я хочу) или устанавливает количество газа только для создания контракта, а также не то, что я хочу.

У меня есть смарт-контракт, по которому я хочу запустить миллионы автоматических модульных тестов в цикле for на стороне Solidity. Смарт-контракт содержит случайность, поэтому каждый раз, когда он проходит через цикл, выводится другой результат. Мне нужно убедиться, что в миллионах модульных тестов все случайные результаты достигают ожидаемого значения.

Проблема в том, что я могу сделать только около 20 «циклов», прежде чем будет достигнуто 6,5 миллионов газа. Я пытался выполнить цикл for на стороне javascript web3 с помощью Metamask, однако проблема здесь в том, что Metamask будет всплывать с просьбой подтверждать транзакцию каждый раз, когда я хочу запустить эти 20 «циклов». Таким образом, для 100 модульных тестов мне потребуется 5 кликов. Миллион? Ужасно много.

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

Или, если вы знаете альтернативное решение, как я могу автоматизировать миллионы модульных тестов, это было бы здорово.

Ответы (2)

Есть способ увеличить gasLimit. Для этого вы будете использовать флаг при запуске ganache-cli. В README используйте -lили --gasLimit(лимит блочного газа (по умолчанию 0x6691b7)).

Однако, если вам необходимо это сделать, вы не сможете выполнить это в основной сети.

Большая часть разработки Ethereum — это дизайнерские решения о том, что происходит в сети и вне ее. Из-за блока gasLimitмногие решения, такие как это, заключаются в каком-то механизме вне цепочки.

Чтобы расширить предыдущий ответ, вы можете использовать --gasLimit=0x1fffffffffffff.

Это установит предел газа блока на 2 ^ 53 - 1, что является максимальным безопасным целым числом Javascript .

Вы не можете использовать значение больше, чем это, потому что Ganache был реализован в Javascript, и они не удосужились использовать BigNumberдля этого поля в отличие от других полей (например, при установке --account=address,balanceвы можете использовать значение больше, чем максимальное безопасное целое число Javascript для балансовой части, потому что он, вероятно, конвертируется BigNumberвместо Number).