Как остановить майнинг нежелательных блоков в частной сети на geth ethrereum [дубликат]

Я запустил клиент geth, используя приведенный ниже клиент (я уже создал две учетные записи:

geth --datadir datadir --networkid 123 --rpc --rpcaddr="localhost" --rpccorsdomain="*" --unlock <my account> --minerthreads="1" --maxpeers=0 --mine console

Я открыл кошелек ethereum и развернул оттуда смарт-контракт. Идентификатор транзакции и адрес контракта получены на моей консоли geth.

Затем я запустил свое Dapp и создал экземпляры контракта, и я вызываю контракт, вызывая функцию контракта через API web3. Функция контракта вызывается, но транзакция не отправляется в блок, пока я не начну майнинг. Поэтому я запустил miner.start() Это начало добычи множества блоков.

Мой вопрос в том, откуда берутся эти блоки, если у меня есть собственная частная сеть и я отправил только одну транзакцию. Это добавляет слишком много блоков, и мой размер блока увеличивается без необходимости. Как майнить только ту транзакцию, которую я отправил?

Ответы (1)

Эти блоки добываются вашим клиентом с помощью miner.start()блоков, которые добываются до тех пор, пока ваша транзакция не будет включена в один из этих блоков. Чтобы остановить операцию ленты, miner.stop()даже журнал не дал вам подсказки. Однако лучше всего использовать скрипт, который добывает только ожидающие транзакции (вы добываете только несколько блоков, пока ваша транзакция не будет добыта).

такой скрипт будет содержать

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();
            console.log("== No transactions! Mining stopped.");
        }
    }
    console.log("checkWork() is defined");
    eth.filter("latest", function(err, block) { checkWork(); });
    eth.filter("pending", function(err, block) { checkWork(); });

    checkWork();

при использовании гетами

 loadScript("C:/Users/Tera_pc/Desktop/demo/mine_pending.js")
Должен ли я loadscript() для каждой транзакции?
Я пробовал это; теперь майнинг занимает слишком много времени; Я не уверен, почему это так; Я разработал Dapp на основе примера криптовалюты ethereum. когда я переношу токен на другую учетную запись, его майнинг занимает слишком много времени. :( . Это потому, что размер блока увеличился? Сейчас размер блока 97.
это не имеет никакого отношения к размеру блока, вам нужно всего лишь подождать несколько секунд, пока ваша транзакция не будет добыта, вместо этого вы можете использовать предыдущий скрипт: miner.start(8); admin.sleepBlocks(10); майнер.стоп() ; вы уточняете, сколько блоков мне нужно