Problem mit vollständigem Knoten

Ich habe ein ernsthaftes Problem mit dem Fullnode von bitcoinj gefunden. Ich habe vor zwei Tagen mit Bitcoin-qt angefangen, Blockchain herunterzuladen, und heute ist es fertig. Mit bitcoinj habe ich vor etwa 4 Monaten angefangen, Blockchain herunterzuladen, und jetzt lädt es sie immer noch herunter. Ich habe aufgrund dieser Informationen herausgefunden, dass es sich um ein Problem mit der Downloadgeschwindigkeit handelt:

[PeerGroup Thread] INFO org.bitcoinj.core.PeerGroup - 0 blocks/sec, 0 tx/sec, 0 pre-filtered tx/sec, avg/last 2.81/0.00 kilobytes per sec (stall threshold <1.56 KB/sec for 10 seconds)
[PeerGroup Thread] INFO org.bitcoinj.core.PeerGroup - 0 blocks/sec, 0 tx/sec, 0 pre-filtered tx/sec, avg/last 2.50/0.00 kilobytes per sec (stall threshold <1.56 KB/sec for 10 seconds)
[PeerGroup Thread] INFO org.bitcoinj.core.PeerGroup - 0 blocks/sec, 0 tx/sec, 0 pre-filtered tx/sec, avg/last 2.19/0.00 kilobytes per sec (stall threshold <1.56 KB/sec for 10 seconds)
[PeerGroup Thread] INFO org.bitcoinj.core.PeerGroup - 0 blocks/sec, 0 tx/sec, 0 pre-filtered tx/sec, avg/last 1.88/0.00 kilobytes per sec (stall threshold <1.56 KB/sec for 10 seconds)
[PeerGroup Thread] INFO org.bitcoinj.core.PeerGroup - 0 blocks/sec, 0 tx/sec, 0 pre-filtered tx/sec, avg/last 1.56/0.00 kilobytes per sec (stall threshold <1.56 KB/sec for 10 seconds)
[PeerGroup Thread] INFO org.bitcoinj.core.PeerGroup - 0 blocks/sec, 0 tx/sec, 0 pre-filtered tx/sec, avg/last 1.25/0.00 kilobytes per sec (stall threshold <1.56 KB/sec for 10 seconds)
[PeerGroup Thread] WARN org.bitcoinj.core.PeerGroup - Chain download stalled: received 1.25 KB/sec for 10 seconds, require average of 1.56 KB/sec, disconnecting [127.0.0.1]:8333

Selbst wenn mein Knoten nur mit loclahost bitcoin-qt verbunden ist, dauert es etwa 5-7 Minuten, um einen Block herunterzuladen (ich habe auch bitcoin-qt-Protokolle überprüft und je nach Statistik wurde 1 MB an meinen bitcoinj-Knoten gesendet). Danach wird der Download-Peer geschlossen und bitcoinj sucht nach einem neuen Download-Peer. Auch hier gibt es ein Problem:

[Script verification] INFO org.bitcoin.Secp256k1Context - java.lang.UnsatisfiedLinkError: no secp256k1 in java.library.path

Handelt es sich um ein ernstes Problem oder sollte ich diese Informationen vergessen?

Ich kenne nicht viele Besonderheiten von bitcoinj, aber verwenden Sie die Whitebind-Funktion von bitcoin-core? bitcoinj wird möglicherweise von DoS gesperrt; Eine Verbindung zum Whitebin-Port verhindert dies.
Wofür benötigen Sie die Fullnode-Funktionalität? Die vollständige Validierungsfunktion von bitfoinj war zum Zeitpunkt der Erstellung unvollständig und AFAIK wurde seit mehreren Jahren nicht mehr gewartet.

Antworten (1)

Aus meiner Erfahrung ist der Prozess der Synchronisierung der Blockchain CPU-gebunden, nicht IO-gebunden (Sie können dies unter Linux überprüfen, indem Sie den topBefehl ausführen). bitcoinjverfügt über zwei Möglichkeiten, Signaturen zu überprüfen, entweder mit nativem Code basierend auf der secp256k1Bibliothek oder mit Java-Code basierend auf der spongycastleBibliothek. Ihre letzte Fehlermeldung weist darauf hin, dass Sie nicht verwenden, secp256k1was höchstwahrscheinlich eine Quelle für Leistungseinbußen und eine Ursache für einen langsamen Synchronisierungsprozess ist.

Damit Java die secp256k1Bibliothek verwenden kann, müssen Sie die Umgebungsvariable LD_LIBRARY_PATHauf einen Pfad setzen, in dem sich die Datei libsecp256k1.sobefindet (ich verwende Debian, diese Datei kann auf verschiedenen Systemen unterschiedliche Namen haben). Sie könnten zum Beispiel den Befehl verwenden:

$ env LD_LIBRARY_PATH=<path-to-directory> java -cp <classpath> MyJavaClass

Aber selbst wenn Sie die Bibliothek bereits libsecp256k1.soauf Ihrem System haben (weil Sie eine andere Software installiert haben, die darauf angewiesen ist), funktioniert der obige Befehl nicht, es sei denn, die Bibliothek wurde mit der --enable-jniOption erstellt, Java für die Schnittstelle zu aktivieren damit.

Um ein Java-fähiges zu erstellen libsecp256k1.so, können Sie wie folgt vorgehen:

$ git clone https://github.com/bitcoin-core/secp256k1
$ cd secp256k1
$ ./autogen.sh
$ ./configure --enable-jni \
              --enable-module-ecdh \
              --enable-experimental
$ make
$ make check

Die Bibliotheksdatei befindet sich dann im .libsVerzeichnis. Sie können sich entscheiden, Ihre vorhandene Systemdatei mit dieser neuen Version zu überschreiben (aber Sie gehen das Risiko ein, etwas durcheinander zu bringen), oder Sie können diese Datei einfach an einer beliebigen Stelle ablegen (oder einen symbolischen Link darauf) und sicherstellen, dass die LD_LIBRARY_PATHUmgebungsvariable ist richtig auf das Verzeichnis gesetzt, in dem es (oder ein symbolischer Link) vorhanden ist.