Консенсус Clique, кажется, всегда запечатывает новый блок через фиксированные интервалы в period
секундах, где period
находится настройка в генезисном блоке ( config.clique.period
).
Это кажется расточительным, ведь Parity's Aura подписывает пустые блоки только тогда, когда записывается транзакция или происходит передача на другой узел (обычно каждые 120 секунд, см. --reseal-on-txs
и --reseal-min-period
args).
Можно ли так geth
работать? Меня не волнует немедленное повторное запечатывание, но было бы очень неплохо пропускать пустые блоки, пусть и не полностью.
В Geth нет предопределенного флага для достижения этой цели, но вы можете написать, а затем --preload
файлы .js в geth — я использую этот подход в нашей частной сети, чтобы запечатывать блоки только при наличии новых транзакций.
eth-mine-when-needed
, я использую файл JS, очень похожий на ответ, указанный выше. Мы используем Clique, так как нам не нужен PoW в нашей частной сети.if(eth.getBlock("pending").transactions.length > 0 || eth.getBlock("latest").transactions.length > 0) {<start mining>...
. Это означает, что все силеры начнут запечатывать всякий раз, когда добавляется новая передача, даже если они пропустят триггер в пуле передачи.Насколько я знаю, это невозможно сделать с помощью GETH без внесения значительных изменений в исходный код. Есть некоторые «уловки», которые вы можете использовать в сетях PoW, чтобы майнить только тогда, когда транзакции были зафиксированы в блокчейне. Я полагаю, вы могли бы сделать то же самое с PoA. При этом, если вы хотите пропустить пустые блоки, почему бы просто не использовать Aura и Parity?
Как остановить майнинг нежелательных блоков в приватной сети на geth ethrereum
Все, что вам нужно сделать, это установить period:0
в файле genesis.json, чтобы добиться такого поведения запечатывания.
Джейдип Чаухан