Консенсус geth Clique пропускает пустые блоки

Консенсус Clique, кажется, всегда запечатывает новый блок через фиксированные интервалы в periodсекундах, где periodнаходится настройка в генезисном блоке ( config.clique.period).

Это кажется расточительным, ведь Parity's Aura подписывает пустые блоки только тогда, когда записывается транзакция или происходит передача на другой узел (обычно каждые 120 секунд, см. --reseal-on-txsи --reseal-min-periodargs).

Можно ли так gethработать? Меня не волнует немедленное повторное запечатывание, но было бы очень неплохо пропускать пустые блоки, пусть и не полностью.

В geth, если вы установите период клика равным 0, он будет создавать новый блок только при наличии транзакции.

Ответы (3)

В Geth нет предопределенного флага для достижения этой цели, но вы можете написать, а затем --preloadфайлы .js в geth — я использую этот подход в нашей частной сети, чтобы запечатывать блоки только при наличии новых транзакций.

гиперссылка исправлена, извините - я не использую eth-mine-when-needed, я использую файл JS, очень похожий на ответ, указанный выше. Мы используем Clique, так как нам не нужен PoW в нашей частной сети.
Интересно, спасибо. У меня есть работающий вариант, хотя для « X подтверждений » мне пришлось запускать скрипт только на одном из двух узлов подписывающей стороны. Это, вероятно, вообще не будет работать в настройке 3+ подписанта.
он может работать со всеми подписантами в сети, если немного изменить скрипт - 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, чтобы добиться такого поведения запечатывания.