Wie kann ich herausfinden, was der höchste Block ist?

Ich synchronisiere einen neuen Knoten. Wie kann ich herausfinden, was der neueste Block ist, damit ich weiß, wie weit ich gehen muss?

Ich habe vor 15 Tagen mit der Synchronisierung begonnen und heute glaube ich, dass ich den höchsten Block 4741144 passiert habe. Ich habe 4741185 von 4741144 heruntergeladen, aber der Ethereum-Knoten hat begonnen, Kettendaten herunterzuladen. Weiß jemand, wie viele Kettenstrukturen zum Herunterladen zur vollständigen Synchronisierung erforderlich sind. Mein Computer hat bereits etwa 10 MB Kettenstruktur heruntergeladen, nachdem er den höchsten Block erreicht hatte.

Antworten (10)

Hängen Sie für Geth in einem anderen Terminal an die Geth-Konsole an, z. B. geth attach. Auf diese Weise können Sie Ihren Synchronisierungsknoten ohne Neustart weiterlaufen lassen, und Sie werden keine verrauschten Protokolle sehen, wie Sie es tun würden, wenn Sie einfach "geth console" ohne andere Parameter ausführen würden.

Führen Sie in der Konsole auseth.syncing

> eth.syncing
{
  currentBlock: 745600,
  highestBlock: 889152,
  startingBlock: 745553
}

Sie können dann sehen, wo Sie sich befinden (aktueller Block) und den Block, den Sie noch erreichen müssen (höchster Block). (Der Unterschied zwischen ihnen ist die Anzahl der verbleibenden Blöcke.)

Sie können eth.syncingein paar Mal laufen, um Ihren Fortschritt zu überprüfen, und es wird zurückgegeben, falsewenn Sie fertig sind. Sie können dann eth.blockNumbereinen Blockchain-Explorer verwenden und auch mit ihm vergleichen, wie andere Antworten hier erwähnen.

Zur Verdeutlichung web3.eth.isSyncing()wird auch zurückgegeben, falsewenn die Synchronisierung noch nicht begonnen hat (oder gerade nicht läuft). Wenn dies der Fall ist, müssen Sie Ihr Netzwerk überprüfen, das Sie mit Peers verbinden: Warum hat mein Ethereum-Knoten keine Peers?

Vielen Dank für die Antwort. Beachten Sie nur, dass geth attachdies nicht funktioniert, wenn Sie das --mineFlag angegeben haben (für Testketten). Wenn Sie es also verwenden, sollten Sie wahrscheinlich auch ein Mining-Skript verwenden
Ich verwende gethVersion 1.4.6 und eth.syncinggibt nur trueoder zurück false. Was ist die neue Version des eth.syncingBefehls?
@TMOTTM Es könnte ein Fehler sein und ich schlage "Neues Problem" unter github.com/ethereum/go-ethereum/issues vor
Der Ausgabe wurden weitere Informationen hinzugefügt, aber dies ist immer noch eine gültige Methode zur Überprüfung.
Die Funktion web3.eth.isSyncing()kehrt false auch zurück, wenn die Synchronisierung noch nicht gestartet wurde (oder derzeit nicht ausgeführt wird). Man kann sich also nicht allein auf diese Funktion verlassen, um den Status des Ethereum-Clients zu ermitteln. Wie Sie bereits erwähnt haben, müssen Sie wahrscheinlich die Ergebnisse von web3.eth.getBlockNumber()und einem Blockchain-Explorer in die Entscheidungsfindung integrieren.
eth.blockNumbergibt mir0
@goodvibration Danke, ich habe Teile deines Kommentars zur Antwort hinzugefügt. Hoffe es geht dir gut.

Wenn Sie Geth verwenden:

geth attach http://host

dann eingeben:

web3.eth.blockNumber

Es gibt Ihnen die Blocknummer als Ganzzahl, hier ist die Funktionsdokumentation . Wenn Sie stattdessen nach dem Block-Hash suchen, können Sie Folgendes verwenden:

web3.eth.getBlock(BLOCK_NUMBER).hash

also für den aktuellen block (atm) wird es sein:

web3.eth.getBlock(887893).hash

und für den letzten Block:

web3.eth.getBlock(web3.eth.blockNumber).hash

In der neuesten Version von web3 können Sie verwenden, getBlockNumber()was ein Versprechen zurückgibt (danke @PaulRBerg für die Erwähnung).

Ich habe eine Antwort hinzugefügt, weil eine einfache Wiederholung mit "geth console" verrauschte Protokolle haben wird, die die Konsole stören; und eth.syncing bietet weitere Informationen.
In den Versionen 1.0.0 und höher wurde blockNumberes in umbenannt getBlockNumberund gibt ein Versprechen zurück.

Sie könnten einen Block-Explorer wie Etherchain verwenden .

Es gibt 2 nützliche Skripte in https://github.com/lyricalpolymath/Ethereum-Scripts

Wenn Geth ausgeführt wird, kopieren Sie diesen Code und fügen Sie ihn in ein Terminalfenster ein, um eine einfache Rückmeldung über den Fortschritt der Blockchain-Synchronisierung zu erhalten

geth --exec 'var s = eth.syncing; console.log("\n------------ GETH SYNCING PROGRESS\nprogress: " + (s.currentBlock/s.highestBlock*100)+ " %\nblocks left to parse: "+ (s.highestBlock-s.currentBlock) + "\ncurrent Block: " + s.currentBlock + " of " + s.highestBlock)' attach

Sie erhalten eine Ausgabe wie diese

------------ GETH SYNCING PROGRESS 
progress: 81.9161292631709 % 
blocks left to parse: 368837 
current Block: 1670754 of 2039591

Laden Sie das Skript herunter und kopieren Sie diesen Code bei laufendem Geth und fügen Sie ihn in ein Terminalfenster ein, um eine einfache Rückmeldung über den Fortschritt der Blockchain-Synchronisierung zu erhalten

geth --exec "loadScript('GethSyncingProgress_2TimeEstimate.js')" attach

gibt Ihnen eine Ausgabe wie

------------ GETH SYNCING PROGRESS - Time estimate
progress: 83.83513931320763
Estimated Time left*: 7d :11h :4m :4s.3
Time it took to parse 10 blocks: 0d :0h :0m :19s.5
blocks left to parse: 330536
Kombinieren Sie dies mit watch, um einen Aktualisierungs-Feed zu erhalten:watch -n 10 "geth --exec 'var s = eth.syncing; console.log(\"\n------------ GETH SYNCING PROGRESS\nprogress: \" + (s.currentBlock/s.highestBlock*100)+ \" %\nblocks left to parse: \"+ (s.highestBlock-s.currentBlock) + \"\ncurrent Block: \" + s.currentBlock + \" of \" + s.highestBlock)' attach"

Die Ethereum-Brieftasche zeigt die neueste Blocknummer an. Die offizielle Statistik-Website von Ethereum zeigt es ebenfalls an. (Hinweis: Dies repräsentiert nicht alle Peers im Netzwerk.)

Hinweis: Es ist „Mist Browser“ oder „Ethereum Wallet“. Aber so etwas wie eine „Mist Wallet“ gibt es nicht. :)
stats.ethdev.com antwortet nicht
Ich habe den Link repariert.

web3.eth.blockNumbererhalten Sie die neueste Blockhöhe auf Ihrem Knoten. Beachten Sie, dass Sie dafür einen synchronisierten Knoten haben müssen. Wenn Sie die Blockchain noch herunterladen, wird diese Zahl kleiner sein.

Wenn Sie immer noch synchronisieren, können Sie eth.syncing eingeben und es wird gemeldet

  • aktuellerBlock
  • höchsterBlock
  • Startblock

Wenn eth.syncing falsch ist, verwenden Sie den von Sebastian erwähnten Befehl eth.blockNumber und vergleichen Sie ihn mit der gemeldeten Blockhöhe Ihres bevorzugten Online-Block-Explorers

garantiert also syncing===falsenicht, dass geth synchron ist? Wenn Sie ein Beispiel für einen Online-Block-Explorer angeben und erfahren, wie Sie die gemeldete Blockhöhe daraus abrufen können, werde ich Ihre Antwort positiv bewerten
Ich denke, dieser wird testnet.etherscan.io tun

web3.eth.getBlock('latest').then(function(x){console.log(x.timestamp)});

Ich verwende den JSON RPC, um von einem anderen Computer aus zu überprüfen (Zugriff vorausgesetzt). Ersetzen Sie 0.0.0.0:8545 durch die RPC-Adresse und den Port des Computers, auf dem GETH mit RPC ausgeführt wird.

curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 0.0.0.0:8545

kehrt zurück

{"jsonrpc":"2.0","id":69,"result":{"currentBlock":"0x767811","highestBlock":"0x767879","knownStates":"0x8ba1951","pulledStates":"0x8ba0752","startingBlock":"0x5a95a1"}}

Ich war genervt, weil es schon vor Beginn der Synchronisierung zurückkehrt (und es kehrt auch zurück eth.syncing, nachdem die Synchronisierung beendet ist, also kann man das nicht sagen).falsefalse

Eine andere Vorgehensweise, wenn Sie die tatsächliche Blocknummer nicht benötigen: Sie können den Zeitstempel Ihres letzten synchronisierten Blocks mit der aktuellen Zeit vergleichen:

Date.now()/1000 - eth.getBlock('latest').timestamp

Wenn dieser Betrag größer als beispielsweise 2 Minuten ( 120) ist, dann ist es sehr wahrscheinlich, dass Sie die letzten Blöcke nicht haben.