So stoppen Sie das Mining unerwünschter Blöcke im privaten Netz auf Geth Ethereum [Duplikat]

Ich habe einen Geth-Client mit dem folgenden Client gestartet (ich hatte bereits zwei Konten erstellt.:

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

Ich öffnete die Ethereum-Brieftasche und setzte den Smart Contract von dort aus ein. Die TransactionId und die Vertragsadresse werden auf meiner Geth-Konsole empfangen.

Dann habe ich meine Dapp gestartet und die Instanzen des Vertrags erstellt, und ich rufe den Vertrag auf, indem ich eine Vertragsfunktion über die Web3-API aufrufe. Die Vertragsfunktion wird aufgerufen, aber die Transaktion wird nicht im Block übermittelt, es sei denn, ich beginne mit dem Mining. Daher habe ich miner.start() gestartet. Dies hat begonnen, zahlreiche Blöcke abzubauen.

Meine Frage ist, woher kommen diese Blöcke, wenn ich mein eigenes privates Netz habe und nur eine Transaktion eingereicht habe. Dadurch werden zu viele Blöcke hinzugefügt und meine Blockgröße erhöht sich unnötig. Wie schürfe ich nur die Transaktion, die ich eingereicht habe?

Antworten (1)

Diese Blöcke werden von Ihrem Kunden abgebaut, indem miner.start()die Blöcke abgebaut werden, bis Ihre Transaktion in einen dieser Blöcke aufgenommen wurde. Um das Vorgangsband zu stoppen, miner.stop()gab Ihnen nicht einmal das Protokoll die Aufforderung. Das Beste ist jedoch die Verwendung eines Skripts, das nur die ausstehenden Transaktionen abbaut (Sie abbauen nur wenige Blöcke, bis Ihre Transaktion geschürft wurde).

ein solches Skript wird enthalten

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();

auf geth verwenden

 loadScript("C:/Users/Tera_pc/Desktop/demo/mine_pending.js")
Muss ich für jede Transaktion loadscript() laden?
Ich habe das versucht; jetzt dauert das Mining zu lange; Ich bin mir nicht sicher, warum das so ist; Ich habe eine Dapp entwickelt, die auf dem Beispiel der Kryptowährung Ethereum basiert. Wenn ich den Token auf ein anderes Konto übertrage, dauert es zu lange, bis er jetzt abgebaut wird. :( . Liegt das daran, dass sich die Blockgröße erhöht hat? Derzeit beträgt die Blockgröße 97.
dies hat nichts mit der Blockgröße zu tun, Sie müssen nur ein paar Sekunden warten, bis Ihre Transaktion abgebaut wurde, Sie könnten stattdessen das vorherige Skript verwenden: miner.start(8); admin.sleepBlocks(10); Bergmann.stop() ; Sie präzisieren, wie viele Blöcke abgebaut werden sollen