Wie erreicht man über 1.000 Verbindungen wie blockchain.info?

Derzeit hat blockchain.info über 1.900 Knoten, die mit ihrem Bitcoin-Client verbunden sind.

Ich habe einen m1.small Ubuntu 12.04-Server und Bitcoin seit ~ 4 Tagen ohne Neustarts ausgeführt. Mein Bitcoin-Client zeigt immer noch nur maximal ~60 Verbindungen an, wenn er einen "./bitcoind getinfo"-Befehl ausführt.

Wie kann ich mehr als 1.000 Verbindungen zu meinem Bitcoin-Client erreichen? Und ist es Ihrer Meinung nach „es wert“?

BEARBEITEN: Ich habe meinen Bitcoin-Client mit den Parametern -maxconnections=1000 und -timeout=15000 neu gestartet, aber nach ~12 Stunden Bitcoin-Betrieb beträgt die Anzahl der Verbindungen nur bis zu ~40. Und ich scheine meine CPU, meinen Arbeitsspeicher oder meine Bandbreite noch nicht auszuschöpfen.

BEARBEITEN 2: Ich habe in der von blockchain.info bereitgestellten Liste keine "Verbindungszeit" über 8 Stunden gesehen , was mir sagt, dass sie ihren Server etwa alle 8 Stunden neu starten müssen. Entweder das, oder die Verbindungen werden unterbrochen und nach 8 Stunden aktualisiert? Ich fange an zu glauben, dass blockchain.info IP-Adressen verfolgt, auf denen Bitcoin in einer Art Datenbank ausgeführt wird ... und sich bei jedem Neustart von Bitcoin foreful mit ihnen verbindet. Habe ich recht?

Blockchain betreibt mehrere Bitcoin-Knoten und die Netzwerkkomponenten wurden ebenfalls modifiziert, um boost::asio statt Posix-Sockets zu verwenden. Sie sollten jedoch in der Lage sein, mindestens 1024 Verbindungen mit Standard-Bitcoind herzustellen.
Irgendeine Idee, was mich davon abhalten könnte, 1.024 Verbindungen mit meiner Bitcoin zu erreichen? Ich scheine meine CPU, meinen Arbeitsspeicher oder meine Bandbreite noch nicht auszureizen.
Bitcoin Unlimited hat eine Option -maxoutconnections, mit der Sie ausgehende Verbindungen zu Peers erhöhen können. Es ist standardmäßig auf, 8aber Sie können es auf etwas Höheres setzen, ohne den Knoten aus einer geänderten Quelle neu kompilieren zu müssen.
Wenn ich -maxconnectionsetwas hoch einstelle, erhalte ich die folgende Fehlermeldung: > Warning: Reducing -maxconnections from 4096 to 865, due of system limiteds. also scheint es, als könne man nicht einmal mit eingehenden Verbindungen super hoch gehen?
@greatwolf funktioniert bitcoin unbegrenzt für bitcoin oder bitcoin cash?
@AMB Ich glaube, BU bietet zwei Versionen des Clients an, eine arbeitet mit der Legacy-Kette und die andere mit Bitcoin Cash.
Die Links zur Knotenliste sind defekt, könnte sie jemand reparieren? Außerdem sieht es so aus, als wäre blockchain.info jetzt blockchain.com?

Antworten (6)

Der Bitcoin-Client verfügt über eine maxconnections-Konfigurationsoption. Der mit -maxconnections=N gestartete Client erlaubt den gleichzeitigen Aufbau von bis zu N eingehenden Verbindungen.

Möglicherweise müssen Sie das Verbindungs-Timeout für so viele Verbindungsversuche von einem einzelnen (möglicherweise leistungsschwachen) Knoten erhöhen. Stellen Sie es vielleicht auf 15 Sekunden (15000 ms) ein.

-timeout= Verbindungstimeout in Millisekunden angeben (Standard: 5000)

[Bearbeiten: Die Antwort von Pieter Wuille bringt Sie weiter. -addnode lässt Sie neue ausgehende Verbindungen zu Knoten erzwingen, wenn Sie ihre IP-Adressen haben.]

Ich werde meinen Bitcoin-Client jetzt neu starten, wobei das Timeout wie vorgeschlagen auf 15 Sekunden erhöht wird, sowie -maxconnections=1000 und mich bei Ihnen melden.
Also nach 7 Stunden Laufen von Bitcoin mit einem 15-Sekunden-Timeout und 1.000 maximalen Verbindungen. Ich war an einem Punkt bei 32 Verbindungen, bin aber jetzt auf 28 gefallen, also bezweifle ich, dass das Hinzufügen der maxconnections oder der Timeout-Variablen leider viel gebracht hat. Tatsächlich denke ich, dass es die Anzahl der Verbindungen behindert haben könnte, die ich normalerweise nach 7 Stunden hätte.
Überschreibt maxonnections in der .conf, was im Code als max steht?

Bitcoin stellt standardmäßig nicht mehr als 8 ausgehende Verbindungen her und -maxconnectionssteuert nur, wie viele eingehende Verbindungen Sie zulassen. Fühlen Sie sich frei, dies höher einzustellen, aber es wird einige Zeit dauern, bis sich andere in großer Zahl mit Ihnen verbinden.

Bitte ändern Sie dies nicht, da dies nicht erforderlich ist. Anschließbare Peers im Netzwerk sind eine knappe Ressource und für die Dezentralisierung unerlässlich. Wenn die Leute versuchen, sich mit allen zu verbinden, wie es einige Websites tun, werden wir sehr schnell ausgehen.

Falls Sie ein Händler oder Miner sind, möchten Sie vielleicht ein paar feste Verbindungen zu vertrauenswürdigen anderen einrichten (siehe -addnodeBefehlszeilen-/Konfigurationsoption), aber mehr Verbindungen zu haben, bedeutet nicht eine stärkere Überprüfung (der Referenzclient überprüft immer alles). oder noch schnelleres Weiterleiten (da Sie langsamer werden, indem Sie neue Blöcke und Transaktionen an alle Ihre Kollegen verteilen). Es geht hauptsächlich darum, einen Dienst für das Netzwerk bereitzustellen.

Nachdem ich meine Box 4 Tage lang mit -maxconnections=1000 betrieben hatte, war ich immer noch nur bei ~50 Verbindungen. Ich habe in der von blockchain.info bereitgestellten Liste keine "Verbindungszeit" über 8 Stunden gesehen , was mir sagt, dass sie ihren Server etwa alle 8 Stunden neu starten müssen. Entweder das, oder die Verbindungen werden unterbrochen und nach 8 Stunden aktualisiert?
Ich bin mir sicher, dass sie über eine benutzerdefinierte Infrastruktur verfügen, die Tausende von ausgehenden Verbindungen herstellt. Bitcoind schafft nie mehr als 8. Wie gesagt, mehr braucht es nicht.
Es könnte auch von aggregierten Knoten im ganzen Land und nicht nur von einem Kunden gezählt werden.

Die gegebenen Antworten beantworten die Frage nicht. Auch wenn es vielleicht keinen Sinn macht, tausend Verbindungen zu erreichen, hier ist, wie man das unter Debian macht. Sie möchten einige geringfügige Änderungen im Code vornehmen und Bitcoin neu kompilieren:

Erforderliche Pakete zum Kompilieren abrufen:

$ aptitude install git make build-essential libssl-dev libboost-all-dev libdb-dev libdb++-dev libminiupnpc-dev

Klonen Sie das Git-Repository (stellen Sie sicher, dass die Version die neueste Verzweigung ist ):

$ cd /usr/src
$ sudo git clone -b 0.8.4 https://github.com/bitcoin/bitcoin
$ cd bitcoin/src

Bearbeiten Sie die net.cpp-Datei:

@@ -27,7 +27,7 @@
 using namespace std;
 using namespace boost;

-static const int MAX_OUTBOUND_CONNECTIONS = 8;
+static const int MAX_OUTBOUND_CONNECTIONS = 1000;

 bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false);

@@ -1533,7 +1533,7 @@
             OpenNetworkConnection(CAddress(vserv[i % vserv.size()]), &grant);
             MilliSleep(500);
         }
-        MilliSleep(120000); // Retry every 2 minutes
+        MilliSleep(5000); // Retry every 5 seconds
     }
 }

1.) Indem Sie MAX_OUTBOUND_CONNECTIONS ändern, wird der Client weiter verbinden, bis er 1000 proaktive Verbindungen erreicht.

2.) Durch Ändern des Sleep-Timeouts werden häufiger neue Verbindungen versucht.

Bitcoin kompilieren und installieren:

$ sudo make -f makefile.unix
$ sudo mv bitcoind /usr/bin

Vergessen Sie nicht, die maxconnections in bitcoin.conf festzulegen:

maxconnections=1000

Bitcoin starten und fertig. Der Client stellt sehr schnell viele Verbindungen her.

Haftungsausschluss: Wie Pieter Wuille betonte, kann es dem Netzwerk schaden, einen modifizierten Client wie diesen auszuführen. Bitte verwenden Sie diese Lösung nur zu Forschungszwecken und nicht als dauerhafte Lösung.

Ich möchte nicht ablehnen, weil Sie die Frage tatsächlich beantworten, aber ich möchte wirklich nachdrücklich betonen, dass dies eine schreckliche Idee und unnötig ist. Siehe meine Antwort für den Grund.
@Pieter Wuille: Wie wollen Sie verhindern, dass Menschen das Bitcoin-Netzwerk ausnutzen? Sag ihnen einfach "Hey, ihr bösen Jungs, tut dies oder das nicht"? Das wird nicht funktionieren...
Ich versuche nicht, Bösewichte aufzuhalten – sie sind eine Tatsache des Lebens, und ich bin sicher, dass wir mit einigen fertig werden können. Was ich vermeiden möchte, ist, dass Leute fälschlicherweise davon ausgehen, dass mehr Verbindungen besser für sie und/oder das Netzwerk sind.
Das ist die wahre Antwort!

Da es anscheinend niemand erwähnt hat, werde ich es für zukünftige Referenzen einbringen. Wenn sich Ihr Bitcoin-Knoten hinter einem Router/NAT befindet, können Sie sich nur mit anderen verbinden, sie können sich nicht mit Ihnen verbinden. Nehmen wir an, die meisten Menschen befinden sich in dieser Situation, wodurch die meisten Knoten (zumindest direkt) nicht verbunden werden können. Wenn Sie Ihren Knotenport auf Ihrem Router öffnen, kann jeder Bitcoin-Knoten da draußen eine Verbindung zu Ihnen herstellen, wenn er dies wünscht, anstatt dass Ihr Knoten nur eine Verbindung zu anderen herstellen kann, die ihren Port geöffnet haben. Gleiches gilt für Bittorrent und andere P2P-Systeme.

Warum brauchen Sie mehr als 1.000 Verbindungen?

Standardmäßig kann Bitcoin nicht mehr als 125 Verbindungen haben. Sie müssen bitcoind mit dem Parameter -maxconnections=<n>oder set maxconnections=<n>in bitcoin.conf starten, um sich mit mehr Peers verbinden zu können.

Warum?! Warum nicht sollte die eigentliche Frage sein! Wenn Sie es wissen müssen, möchte ich die am besten verifizierte Blockchain der Welt haben.
„Am besten verifiziert“? Das macht keinen Sinn. Jeder Knoten mit derselben Blockhöhe und demselben Block-Hash ist gleich. Und Ihre hat möglicherweise einen Blockchain-Fork, der schließlich verwaist.
Entschuldigung für den Tippfehler, ich bin noch nicht mit dem gesamten Bitcoin-Lexikon auf dem Laufenden. Wenn nicht der am besten verifizierte, dann möchte ich am schnellsten neue Transaktionen erkennen. Das meinte ich.

Um zu überprüfen, ob Sie eingehende Verbindungen zulassen, verwenden Sie diese: https://bitnodes.21.co Es gibt eine Schaltfläche, um Ihre IP zu überprüfen, und wenn sie grün angezeigt wird, können Sie eine eingehende Verbindung haben. Sobald Sie das haben, wurde mir gesagt, dass Sie mehr ausgehende Verbindungen haben können. Viel Glück.

Das ist keine Antwort auf die Frage.