> miner.start()
> null
Davor hatte ich ein Konto wie dieses erstellt.
user1 = eth.accounts[0]
"0xb62f0bae52d153365661c4e23ab1d594484e9bef"
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.hashrate
zu ü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, nil
wenn 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~
Einstellung versuchenminer.setEtherbase(eth.coinbase)
oder Schritt für Schritt:
geth attach
miner.setEtherbase(eth.accounts[0])
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()
eth.coinbase
zeigt Ihr Gerät an?Das null
wird 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.hashrate
zeigt 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.
Rob Hitchens
Jeff