Прекратить майнинг в частной сети на 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
},
....

Ответил ранее М Гопал

Другие вопросы по тегам