Прекратить майнинг в частной сети на geth ethrereum
Я запустил клиент geth, используя приведенный ниже клиент (я уже создал две учетные записи:
geth --datadir datadir --networkid 123 --rpc --rpcaddr="localhost" --rpccorsdomain="*" --unlock <my account> --minerthreads="1" --maxpeers=0 --mine console
Я открыл кошелек ethereum и оттуда развернул умный контракт. Код транзакции и адрес контракта получены на моем geth
приставка.
Затем я запустил свой Dapp и создал экземпляры контракта, и я вызываю контракт, вызывая функцию контракта через web3 API. Функция контракта вызывается, но транзакция не отправляется в блок, пока я не начну майнинг. Отсюда и я начал miner.start()
Это начало добывать многочисленные блоки.
Мой вопрос: откуда берутся эти блоки, если у меня есть собственная личная сеть и я отправил только одну транзакцию? Это добавляет слишком много блоков, и мой размер блока увеличивается без необходимости. Как добыть только транзакцию, которую я представил?
2 ответа
Сохранить приведенный ниже код как файл startmine.js
var mining_threads = 1
function checkWork() {
if (eth.getBlock("pending").transactions.length > 0) {
if (eth.mining) return;
console.log("== Pending transactions! Mining...");
miner.start(mining_threads);
} else {
miner.stop(0); // This param means nothing
console.log("== No transactions! Mining stopped.");
}
}
eth.filter("latest", function(err, block) { checkWork(); });
eth.filter("pending", function(err, block) { checkWork(); });
checkWork();
И запустить частную сеть geth со следующими параметрами
geth .......... . . . . . . . --rpcapi="web3,eth,miner" --preload "startmine.js" console
Это автоматически запустит miner.start(), если у вас есть ожидающие транзакции.
Если вы используете POA, с более поздними версиями
geth
(как минимум
1.9.25
), установив
period
к
0
остановит майнинг и заставит узел ждать транзакций перед майнингом нового блока. Это удобно для частных сетей или экспериментальных сред.
генезис.json:
....
"clique": {
"period": 0,
"epoch": 30000
},
....