Я пытался выяснить, что этот targetgaslimit
параметр делает именно для Geth в контексте частных блокчейнов.
Я видел следующее объяснение, но оно мне никогда не помогало: «Предел целевого газа устанавливает искусственный нижний уровень целевого газа для блоков на мой (по умолчанию: 4712388)».
Может ли кто-нибудь дать другое объяснение, пожалуйста? Я искал, но не смог найти ничего хорошего в Интернете?
Отказ от ответственности: я предполагаю, что понимаю, что такое газ.
Лимит газа — это максимальное количество газа, которое может быть потрачено во время транзакции Ethereum. Это число не является фиксированным — в начале существования Эфириума лимит газа был намного ниже, чем сегодня.
Существует расчет, который узлы Ethereum выполняют для корректировки лимита газа после каждой транзакции на основе использования в текущем блоке. Согласно документации в коде: https://github.com/ethereum/go-ethereum/blob/e29c2e43640445e743bb69ab48d6c862d3e964d9/core/block_validator.go#L108
strategy: gasLimit of block-to-mine is set based on parent's
gasUsed value. if parentGasUsed > parentGasLimit * (2/3) then we
increase it, otherwise lower it (or leave it unchanged if it's right
at that usage) the amount increased/decreased depends on how far away
from parentGasLimit * (2/3) parentGasUsed is.
Хотя технически это отвечает на ваш вопрос, он по-прежнему оставляет открытым вопрос о том, почему: лимит газа существует для защиты сети от безудержно работающих скриптов. Это делается следующим образом: смотрите на текущее использование и используйте его в качестве базового уровня.
В частных блокчейнах вы не подвергаетесь такому большому риску (предположительно, вы знаете обо всех действующих лицах в вашей сети), и у вас может не быть базового уровня. Кроме того, вы можете захотеть иметь гораздо больший лимит газа, чем значение, которое вы получите, вычислив на основе текущего использования. Этот флаг позволяет вам это сделать.
targetgaslimit
это лимит газа для каждого блока. Например, если вы установите его на 8 000 000 (текущее значение в основной сети прямо сейчас), майнер сможет принять столько транзакций, сколько сможет, общая сумма которых gasLimit
<= 8 000 000.
Майнеры имеют возможность корректировать это значение с течением времени в зависимости от состояния сети. Например, Виталик предложил майнерам работать --targetgaslimit 2000000
в прошлом году из-за спам-атак (повышение ставки, вероятноtargetgaslimit
, позволило бы проводить больше законных транзакций).
Будьте осторожны при использовании этого, однако, как указывает здесь Петер Силаджи , «лимит может меняться только с определенной суммой между блоками. Если изменение больше, блок не принимается». Вы можете столкнуться с такими проблемами, которые трудно отладить в вашей частной цепочке.