„Potenzieller Rewrite-Angriff“-Meldung auf Geth

Als ich Ether mit Mist verschickte, erhielt ich die folgende Nachricht auf Geth.

I0528 18:34:57.312997 core/blockchain.go:959] imported 1 block(s) (0 queued 0 ignored) including 3 txs in 19.344963ms. #1602638 [e4523f86 / e4523f86]
I0528 18:35:24.519128 eth/downloader/downloader.go:1091] Peer ############ [headers 0.00/s, blocks 0.00/s, receipts 0.00/s, states 0.00/s, lacking    0]: potential rewrite attack: #0 [########…] <= #1512638 limit

Danach wurde die Transaktion nicht gesendet. Und ich musste es nochmal schicken.

Was bedeutet die Nachricht? Ist es gefährlich? Sind Geth und die Konten, die derzeit auf Mist verwendet werden, kompromittiert?

Ich habe versucht zu googeln, aber es wurde nichts wirklich Relevantes angezeigt.

Antworten (4)

Die Nachricht erscheint hier 4 mal im Geth-Code dieser Funktion. Der Kommentar erklärt es gut:

// findAncestor61 tries to locate the common ancestor block of the local chain and
// a remote peers blockchain. In the general case when our node was in sync and
// on the correct chain, checking the top N blocks should already get us a match.
// In the rare scenario when we ended up on a long reorganisation (i.e. none of
// the head blocks match), we do a binary search to find the common ancestor.
func (d *Downloader) findAncestor61(p *peer, height uint64) (uint64, error) {
    glog.V(logger.Debug).Infof("%v: looking for common ancestor", p)

    // Figure out the valid ancestor range to prevent rewrite attacks

Sie sind nicht kompromittiert, es funktioniert wie vorgesehen

Das macht Sinn, da die Meldung nur einmal auftauchte. Kurz gesagt, war dies ein seltener Fall, in dem Geth eine binäre Suche durchgeführt hat, weil die Kopfblöcke nicht übereinstimmten?
Ehrlich gesagt, ich weiß es nicht, ich führe keine Protokolle, also kann ich dazu nichts sagen

Wenn der letzte abgebaute Block mit dem letzten verfügbaren Block übereinstimmt (siehe https://testnet.etherscan.io/ ). Wenn Sie Ihren Knoten mit "console" am Ende ausführen, könnten Sie "eth.syncing" in die Konsole schreiben, um Informationen zum Synchronisierungsprozess anzuzeigen, zum Beispiel:

> eth.syncing

{
   startingBlock: 300,
   currentBlock: 312,
   highestBlock: 512
}

In Ihrem Fall war der letzte abgebaute Block, als Sie diesen Beitrag geschrieben haben, #1805595 und der letzte verfügbare Block laut Etherscan ist #1805643, also sind Sie bereits synchronisiert.

Informationen zum potenziellen Rewrite-Angriff finden Sie unter: „Potential Rewrite Attack“-Meldung auf Geth

Um zu überprüfen, ob die Blöcke synchronisiert sind, verwenden Sie eth.syncing(wie in der vorherigen Antwort angegeben) odereth.blockNumber

aber für den Rewrite-Angriff : Ich denke, Sie sind mit einem Peer verbunden, der versucht, Ihnen Blöcke aus der anderen Kette (Forked one) zu geben, also aktualisieren Sie Ihr Geth oder starten Sie es einfach neu.

Wahrscheinlich haben Sie einige Blöcke von Morden in Ihrem Datadir.

die Voreinstellung datadirist:

Mac: ~/Library/Ethereum
Linux: ~/.ethereum
Windows: %APPDATA%/Ethereum

Löschen chaindataSie das gefundene Unterverzeichnis.

Laden Sie dann die Ropsten-Genesis-Blockdatei von hier herunter

und Renngeth --datadir /path/to/testnet/data init genesis.json; geth --datadir /path/to/testnet/data --networkid 3 console