¿Cómo se obtienen más de 1000 conexiones como blockchain.info?

En este momento, blockchain.info tiene más de 1900 nodos conectados a su cliente bitcoin.

He estado ejecutando un servidor m1.small ubuntu 12.04 y bitcoind durante aproximadamente 4 días seguidos sin reiniciar. Mi cliente bitcoind solo muestra ~60 conexiones como máximo cuando ejecuta un comando "./bitcoind getinfo".

¿Cómo puedo lograr más de 1000 conexiones con mi cliente bitcoind? ¿Y "vale la pena" en tu opinión?

EDITAR: He reiniciado mi cliente bitcoind con los parámetros -maxconnections=1000 y -timeout=15000 pero después de ~12 horas de ejecutar bitcoind, la cantidad de conexiones es solo de ~40. Y parece que todavía no estoy maximizando mi CPU, RAM o ancho de banda.

EDICIÓN 2: no he visto un "tiempo de conexión" de más de 8 horas en la lista proporcionada por blockchain.info , por lo que me dice que deben reiniciar su servidor cada 8 horas más o menos. ¿Eso o las conexiones se caen y se actualizan después de 8 horas? Estoy empezando a pensar que blockchain.info realiza un seguimiento de las direcciones IP que ejecutan bitcoin en una especie de base de datos... y se conecta a ellas cada vez que su bitcoind se reinicia. ¿Tengo razón?

Blockchain ejecuta múltiples nodos bitcoind y los componentes de red también se modificaron para usar boost::asio en lugar de sockets posix. Sin embargo, debería poder obtener al menos 1024 conexiones con bitcoind estándar.
¿Alguna idea de lo que podría estar impidiéndome lograr 1024 conexiones en mi bitcoind? Parece que todavía no estoy maximizando mi CPU, RAM o ancho de banda.
Bitcoin Unlimited tiene una opción -maxoutconnectionsque le permite aumentar las conexiones salientes a sus pares. El valor predeterminado es 8, pero puede establecerlo en algo superior sin tener que volver a compilar el nodo desde la fuente modificada.
Cuando configuro -maxconnectionsalgo alto, aparece el siguiente error: > Advertencia: Reduciendo -maxconnections de 4096 a 865, debido a limitaciones del sistema. Entonces, ¿parece que uno ni siquiera puede ir súper alto con las conexiones entrantes también?
@greatwolf ¿Bitcoin Unlimited funciona para Bitcoin o Bitcoin Cash?
@AMB Creo que BU ofrece dos versiones del cliente, una funciona con la cadena heredada y la otra funciona con Bitcoin Cash.
Los enlaces a la lista de nodos están rotos, ¿alguien podría arreglarlos? Además, ¿parece que blockchain.info ahora es blockchain.com?

Respuestas (6)

El cliente bitcoind tiene una opción de configuración maxconnections. El cliente iniciado con -maxconnections=N permitirá que se establezcan hasta N conexiones entrantes simultáneamente.

Tal vez necesite aumentar el tiempo de espera de la conexión para tantos intentos de conexión desde un solo nodo (posiblemente con poca potencia). Tal vez configúrelo como 15 segundos (15000 ms).

-timeout= Especifica el tiempo de espera de la conexión en milisegundos (predeterminado: 5000)

[Editar: la respuesta de Pieter Wuille te lleva más allá. -addnode le permitirá forzar nuevas conexiones salientes a los nodos cuando tenga sus direcciones IP.]

Reiniciaré mi cliente bitcoind ahora con el tiempo de espera aumentado a 15 segundos como se sugiere, así como -maxconnections=1000 y me pondré en contacto con usted.
Entonces, después de 7 horas de ejecutar bitcoind con un tiempo de espera de 15 segundos y 1,000 conexiones máximas... Estaba en 32 conexiones en un punto, pero ahora he bajado a 28, así que dudo que agregar las conexiones máximas o la variable de tiempo de espera haya hecho mucho desafortunadamente. De hecho, creo que puede haber obstaculizado la cantidad de conexiones que normalmente tendría después de 7 horas.
¿maxonnections en el .conf anula lo que está en el código como el máximo?

Bitcoin por defecto no hará más de 8 conexiones salientes y -maxconnectionssolo controla cuántas conexiones entrantes permite. Siéntase libre de configurarlo más alto, pero llevará tiempo antes de que otros se conecten a usted en grandes cantidades.

Por favor, no cambie esto, ya que no es necesario. Los pares conectables en la red son un recurso escaso y esencial para la descentralización. Si la gente trata de conectarse a todos ellos como lo hacen algunos sitios, nos agotamos muy rápidamente.

En caso de que sea comerciante o minero, tal vez desee configurar algunas conexiones fijas con otras personas de confianza (consulte la -addnodeopción de línea de comando/configuración), pero tener más conexiones no significa una verificación más sólida (el cliente de referencia siempre verifica todo) o incluso una retransmisión más rápida (ya que disminuirá la velocidad al distribuir nuevos bloques y transacciones a todos sus pares). Se trata principalmente de proporcionar un servicio a la red.

Después de 4 días de ejecutar mi caja con -maxconnections=1000, solo tenía ~50 conexiones. No he visto un "tiempo conectado" de más de 8 horas en la lista proporcionada por blockchain.info , por lo que me dice que deben reiniciar su servidor cada 8 horas más o menos. ¿Eso o las conexiones se caen y se actualizan después de 8 horas?
Estoy seguro de que tienen una infraestructura personalizada que crea miles de conexiones salientes. Bitcoind nunca crea más de 8. Como dije, no hay necesidad de más.
También podría contarse a partir de nodos agregados en todo el país y no solo de un cliente.

Las respuestas dadas no responden a la pregunta. Aunque puede que no tenga sentido lograr mil conexiones, así es como se hace en Debian. Desea realizar algunos cambios leves en el código y volver a compilar bitcoind:

Obtenga los paquetes necesarios para compilar:

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

Clone el repositorio de git (asegúrese de que la versión sea la rama más reciente ):

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

Edite el archivo net.cpp:

@@ -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.) Al cambiar MAX_OUTBOUND_CONNECTIONS, el cliente continuará conectándose hasta llegar a 1000 conexiones proactivas.

2.) Al cambiar el tiempo de espera de suspensión, se intentan nuevas conexiones con más frecuencia.

Compile e instale bitcoind:

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

No olvide configurar las conexiones máximas en bitcoin.conf:

maxconnections=1000

Inicie bitcoind y listo. El cliente hará muchas conexiones muy rápido.

Descargo de responsabilidad: como señaló Pieter Wuille, ejecutar un cliente modificado como este puede dañar la red. Utilice esta solución solo con fines de investigación y no como una solución permanente.

No quiero votar negativamente porque de hecho estás respondiendo la pregunta, pero realmente quiero enfatizar que hacer esto es una idea horrible e innecesaria. Ver mi respuesta de por qué.
@Pieter Wuille: ¿Cómo quiere evitar que la gente explote la red Bitcoin? ¿Simplemente decirles "oigan, chicos malos, no hagan esto o aquello"? Eso no va a funcionar...
No estoy tratando de detener a los malos: son un hecho de la vida y estoy seguro de que podemos lidiar con algunos. Lo que quiero evitar es que la gente suponga incorrectamente que más conexiones es mejor para ellos y/o para la red.
¡Esta es la verdadera respuesta!

Como nadie parece haberlo mencionado, lo agregaré para futuras referencias. Si su nodo bitcoind está detrás de un enrutador/NAT, entonces solo puede conectarse a otros, no pueden conectarse a usted. Supongamos que la mayoría de las personas se encuentran en esa situación, lo que hace que la mayoría de los nodos no se puedan conectar (al menos directamente). Si abre el puerto de su nodo en su enrutador, todos los nodos de bitcoin podrán conectarse con usted si lo desean, en lugar de que su nodo solo pueda conectarse con otros que hayan abierto su puerto. Lo mismo se aplica a Bittorrent y otros sistemas p2p.

¿Por qué necesita más de 1000 conexiones?

Por defecto, bitcoind no puede tener más de 125 conexiones. Debe iniciar bitcoind con el parámetro -maxconnections=<n>o configurarlo maxconnections=<n>en bitcoin.conf para poder conectarse a más pares.

¡¿Por qué?! ¡Por qué no debería ser la verdadera pregunta! Si debe saberlo, quiero tener la cadena de bloques más verificada del mundo.
¿"El más verificado"? Eso no tiene sentido. Todos los nodos con la misma altura de bloque y hash de bloque son iguales. Y el tuyo puede tener una bifurcación de blockchain que eventualmente se quede huérfana.
Perdón por el error tipográfico, todavía no estoy al tanto de todo el léxico de bitcoin. Si no es el más verificado, entonces quiero ser el más rápido en reconocer nuevas transacciones. Eso es a lo que me refiero.

Para verificar si permite la entrada, use esto: https://bitnodes.21.co Hay un botón para verificar su IP y si resulta en verde, está bien para tener una conexión entrante. Una vez que tenga eso, me dijeron que puede tener más conexión saliente. Buena suerte.

Esa no es una respuesta a la pregunta.