Warum hat es nach dem Aufruf von miner.start() null zurückgegeben?

> miner.start()  
> null  

Davor hatte ich ein Konto wie dieses erstellt.

 user1 = eth.accounts[0] 
"0xb62f0bae52d153365661c4e23ab1d594484e9bef"  
Nachdem Sie ein Konto erstellt haben, haben Sie die Coinbase auf dieses Konto eingestellt? Miner benötigt ein Konto, um Einnahmen aus dem Mining-Prozess zu senden.
Das ist -glaube ich- normal. Überprüfen Sie Ihre Konsolenausgabe, um festzustellen, ob das Mining tatsächlich begonnen hat.

Antworten (5)

In letzter Zeit sind so viele Leute verwirrt darüber miner.start(1), null zurückzugeben, aber es ist eigentlich kein Problem, nur ein vernünftiges Missverständnis des Rückgabewerts. Wenn Sie sich nicht sicher sind, ob Ihr Knoten schürft, führen Sie ihn bitte aus, um eth.hashratezu überprüfen, ob der Rückgabewert größer als Null ist, er schürft, andernfalls nicht.

Lassen Sie uns nun analysieren, warum miner.start(1)null zurückgegeben wird. Es könnte helfen, den Quellcode zu lesen. Wenn Sie den Befehl miner.start(1)auf dem Terminal ausführen, würde dies die Start(threads *int)Methode in der api.go -Quelldatei wie folgt aufrufen:

// Start the miner with the given number of threads. If threads is nil the number
// of workers started is equal to the number of logical CPUs that are usable by
// this process. If mining is already running, this method adjust the number of
// threads allowed to use.
func (api *PrivateMinerAPI) Start(threads *int) error {
    // Set the number of threads if the seal engine supports it
    if threads == nil {
        threads = new(int)
    } else if *threads == 0 {
        *threads = -1 // Disable the miner from within
    }
    type threaded interface {
        SetThreads(threads int)
    }
    if th, ok := api.e.engine.(threaded); ok {
        log.Info("Updated mining threads", "threads", *threads)
        th.SetThreads(*threads)
    }
    // Start the miner and return
    if !api.e.IsMining() {
        // Propagate the initial price point to the transaction pool
        api.e.lock.RLock()
        price := api.e.gasPrice
        api.e.lock.RUnlock()

        api.e.txPool.SetGasPrice(price)
        return api.e.StartMining(true)
    }
    return nil
}

Da der Miner derzeit nicht schürft, api.e.IsMining()gibt er false zurück und führt dann die api.e.StartMining(true)Funktion aus und gibt seinen Rückgabewert zurück. Lesen wir nun seine Implementierung wie folgt:

func (s *Ethereum) StartMining(local bool) error {
    eb, err := s.Etherbase()
    if err != nil {
        log.Error("Cannot start mining without etherbase", "err", err)
        return fmt.Errorf("etherbase missing: %v", err)
    }
    if clique, ok := s.engine.(*clique.Clique); ok {
        wallet, err := s.accountManager.Find(accounts.Account{Address: eb})
        if wallet == nil || err != nil {
            log.Error("Etherbase account unavailable locally", "err", err)
            return fmt.Errorf("singer missing: %v", err)
        }
        clique.Authorize(eb, wallet.SignHash)
    }
    if local {
        // If local (CPU) mining is started, we can disable the transaction rejection
        // mechanism introduced to speed sync times. CPU mining on mainnet is ludicrous
        // so noone will ever hit this path, whereas marking sync done on CPU mining
        // will ensure that private networks work in single miner mode too.
        atomic.StoreUint32(&s.protocolManager.acceptTxs, 1)
    }
    go s.miner.Start(eb)
    return nil
}

Bitte beachten Sie den Rückgabewert der StartMining(local bool)Methode. Sie würde zurückkehren, nilwenn der Start-Mining-Prozess erfolgreich ist, oder andernfalls eine detaillierte Fehlermeldung zurückgeben. Es ist also ein frustrierender Rückgabewert, aber es bedeutet nicht, dass der Start-Mining-Prozess fehlgeschlagen ist.

Hoffe es hilft~

Liebte die RTFS-Erklärung für den Null-Rückgabecode
Verwandte Frage. Warum ist meine Hash-Rate 0, obwohl meine Blocknummer 633 ist?

Einstellung versuchenminer.setEtherbase(eth.coinbase)

oder Schritt für Schritt:

  1. Mist Browser starten (Knoten vollständig synchronisieren lassen)
  2. Konsole öffnen und eingeben:geth attach
  3. miner.setEtherbase(eth.accounts[0])
  4. miner.start()

Auch wenn es null zurückgibt, können Sie in der unteren linken Ecke von Mist Broser sehen, dass das Mining begonnen hat. Es dauert eine Weile, bis die Hashrate ansteigt. Sie können die aktuelle Hashrate mit überprüfenminer.getHashrate()

Hi. Wenn Sie eine NEUE Frage haben, stellen Sie diese bitte, indem Sie auf die Schaltfläche „ Frage stellen“ klicken . Wenn Sie über einen ausreichenden Ruf verfügen, können Sie die Frage positiv bewerten. Alternativ können Sie es als Favorit "markieren" und Sie werden über neue Antworten benachrichtigt.
danke für eure hilfe - habt ihr auch eine idee wie man das problem lösen kann?
Was eth.coinbasezeigt Ihr Gerät an?
es zeigt meine Adresse 0x47Ba2C3c2880dcB31caA3DC644f4e895cB9d9bc4
muss sagen, dass ich Mist verwende und die Konsole mit:geth Attach gestartet habe

Das nullwird erwartet. Wenn Sie Mining betreiben, sehen Sie in Ihrer Konsole viele Meldungen wie diese:

INFO [07-25|18:46:25] Successfully sealed new block number=72 hash=d0316e…36554e INFO [07-25|18:46:25] 🔗 block reached canonical chain number=67 hash=a89be4…5a73be INFO [07-25|18:46:25] 🔨 mined potential block number=72 hash=d0316e…36554e INFO [07-25|18:46:25] Commit new mining work number=73 txs=0 uncles=0 elapsed=158.932µs

Versuche Folgendes:

eth.hashratezeigt Ihnen, ob Sie minen (stellen Sie sicher, dass die Zahl eine Zahl ungleich Null ist).

Wenn Sie nicht minen, versuchen Sie, den Miner explizit mit einem Thread zu starten, zminer.start(1)

Obwohl ich mich frage ... schürfen Sie in einem privaten Netzwerk / Testnet?

Manchmal verursacht genesis.json mit chainId:0 dieses Problem. Für mich hat genesis.json geholfen, das Problem zu lösen.

{
"config": {
"chainId": 45,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x75bcb134477f42f6fefbf177f9a610c0665e23a6",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8ffffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}

Versuchen Sie es mit einem neuen Datadir, initieren Sie diesen JSON, erstellen Sie ein Konto, konfigurieren Sie es mit Miner ( setEtherBase ) und starten Sie dann Miner

miner.start(1) gab null für mich. Auch eth.hashrate ist ebenfalls 0. Mining funktioniert aber einwandfrei...!!!

Es kommt manchmal vor, dass die von Ihnen angehängte Geth NULL anzeigt , die andere Geth-Konsole jedoch den Mining-Trace anzeigt.

Sobald Sie mit dem Mining beginnen, überprüfen Sie die andere Konsole, an die die Geth-Konsole angeschlossen ist, warten Sie auch einige Minuten und überprüfen Sie dann das Gleichgewicht.

Dies geschah in meinem Fall.