Bitcoin no está conectado en modo de registro

Tengo problemas para usar el modo de registro en Linux. Usando la versión 0.9.2.1 precompilada para Linux e iniciando el modo de prueba como se indica en bitcoin.org:

<bitcoin-ver>-linux/bin/64>> ./bitcoind -regtest -daemon

El servidor se inicia, pero obtener información devuelve "conexiones": 0. Intenté experimentar con varias configuraciones de rpc* en el archivo .conf. ¿Qué debo configurar exactamente para usar el modo de registro? ¿Necesito agregar nodos reales a través de addnode para regtest? No parece que deba necesitarlo. Pude obtener algunas conexiones agregando varios nodos reales una vez, pero después de unos minutos, las "conexiones" volvieron a 0. Avíseme si alguna información adicional ayudaría.

Respuestas (4)

Necesita ejecutar más de un nodo en su máquina (puede hacerlo si le da a cada nodo un -port y -rpcport diferente). Y debe decirles cómo encontrarse (usando -connect=127.0.0.1:portnumber).

Hay ejemplos escritos en bash y python en el árbol de fuentes de Bitcoin Core: https://github.com/bitcoin/bitcoin/tree/master/test/funcional

Gracias, miraré los ejemplos. ¿Es regtest apropiado para desarrollar sistemas de minería o debo usar testnet para eso?

Aunque creo que la respuesta de Fred Tingey está completa, tiene los siguientes atributos:

  • depende de un archivo de configuración.
  • proporciona ejemplos de bitcoin-qt en la plataforma de Windows, y el OP preguntaba por bitcoind en la plataforma de Linux.

Por lo tanto, quería compartir el siguiente script bash conciso que hace lo que quiere el OP. Como otros han notado parcialmente, la clave para que esto funcione es:

  • especifique un puerto único (si escucha) y rpcport (si usa rpc) para cada nodo
  • especificar un directorio de datos único para cada nodo
  • si se usa -connectpara restringir a los nodos propios, recuerde usar -listenpara aceptar conexiones de los nodos propios.

Dicho esto, aquí está mi start-regtest-network.shguión:

#!/bin/bash
bitcoind -server -listen -port=17591 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16591 -datadir=$HOME/regtest/A/ -connect=localhost:17592 -regtest -pid=$HOME/regtest/A/.pid -daemon -debug
bitcoind -server -listen -port=17592 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16592 -datadir=$HOME/regtest/B/ -connect=localhost:17593 -regtest -pid=$HOME/regtest/B/.pid -daemon -debug
bitcoind -server -listen -port=17593 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16593 -datadir=$HOME/regtest/C/ -connect=localhost:17594 -regtest -pid=$HOME/regtest/C/.pid -daemon -debug
bitcoind -server -listen -port=17594 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16594 -datadir=$HOME/regtest/D/ -connect=localhost:17595 -regtest -pid=$HOME/regtest/D/.pid -daemon -debug
bitcoind -server -listen -port=17595 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16595 -datadir=$HOME/regtest/E/ -connect=localhost:17591 -regtest -pid=$HOME/regtest/E/.pid -daemon -debug

Además , aquí está mi stop-regtest-network.sh:

#!/bin/bash
sudo killall --regex bitcoin.*

Me doy cuenta de que mi secuencia de comandos de detención es descuidada y eliminará todos los procesos de bitcoin. Si está tan inclinado, puede modificar esto para extraer los pid individuales de cada directorio de datos.

Por último , probablemente necesitará crear previamente algunos directores de datos para bitcoind si no edita el script en absoluto.

mkdir $HOME/regtest/A/
mkdir $HOME/regtest/B/
mkdir $HOME/regtest/C/
mkdir $HOME/regtest/D/
mkdir $HOME/regtest/E/

Debe tener nodos bitcoind registrados que se conecten por turnos en los puertos 17591, 17592, 17593, 17594 y 17595. Del mismo modo, debería poder conectarse a los puertos rpc 16591, 16592, 16593, 16594 y 16595. Si necesita conocer el RPC contraseña que puede verificar ps auxo establecer una contraseña rpc explícita en el script.

HTH

Agradable. Recibo un ../.piddirectorio de error o el archivo no existe. ¿Es obligatorio el pid?

Para ejecutar varios nodos en modo de prueba en una sola máquina, deberá aislar cada nodo.

En este ejemplo tengo tres nodos, se llaman Alice, Bob y Cory. Dado que Bitcoin es una red Peer/Mesh, mi objetivo es conectar cada nodo para que los cambios realizados en Cory sean finalmente visibles para Bob (sin requerir necesariamente una conexión directa entre los dos).

Paso 1: Cree carpetas para cada nodo.

Estas carpetas contendrán nuestros datos y configuraciones para cada nodo. Los nombres no son importantes, se pueden renombrar más tarde, por lo que puedes llamarlos "Alice", "Bob" y "Cory" por ahora. Recuerde dónde los crea, necesitará sus rutas para el Paso 3 a continuación.

Paso 2: en cada carpeta, cree un archivo bitcoin.conf

En los archivos de configuración, Alice estará configurada para conectarse a Cory y Bob estará configurado para conectarse a Alice. Además de configurar las conexiones salientes, aquí también es donde especificamos las regtest=1configuraciones server=1.

bitcoin.conf para Alicia

regtest=1
server=1
 # Alice connects to Cory
connect=localhost:18333

bitcoin.conf para Bob

regtest=1
server=1
 # Bob connects to Alice
connect=localhost:18444

bitcoin.conf para Cory

regtest=1
server=1
 # Cory connects to nobody

Paso 3: Inicie cada nodo.

Tenga en cuenta que cada nodo debe tener un número de puerto diferente, ya que solo un nodo puede vincularse a un número de puerto en cualquier momento.

  • Alicia en el puerto 18444
  • Bob en el puerto 18555
  • Cory en el puerto 18333

Por supuesto, puede elegir sus propios números de puerto, solo tenga cuidado de no usar un número de puerto que ya esté en uso por otra persona.

Las opciones de la línea de comandos le dirán a bitcoin qué número de puerto usar, dónde almacenar los datos y dónde encontrar su archivo de configuración:

Alicia:

"C:\Program Files\Bitcoin\bitcoin-qt.exe" -conf="C:\Alice\bitcoin.conf" -datadir="C:\Alice" -rpcport=18444

Beto:

"C:\Program Files\Bitcoin\bitcoin-qt.exe" -conf="C:\Bob\bitcoin.conf" -datadir="C:\Bob" -rpcport=18555

Cori:

"C:\Program Files\Bitcoin\bitcoin-qt.exe" -conf="C:\Cory\bitcoin.conf" -datadir="C:\Cory" -rpcport=18333

Esto lanzará tres instancias del Cliente Bitcoin y las carpetas de cada nodo comenzarán a inicializarse con datos de registro.

Paso 4: Prueba

Puede usar la Help->Debug Window->Consoleopción para ejecutar comandos de forma interactiva en cualquiera de los nodos. Por ejemplo, puede extraer 101 bloques con el siguiente comando de consola de bitcoin:

setgenerate true 101

Deberías (después de unos segundos) haber recibido monedas.

Estas actividades mineras dan como resultado transacciones de base de monedas , y solo la última de 50 BTC está disponible para gastar. Ahora puede enviar algo de BTC a uno de los otros nodos. Después de un poco más de minería, dicha transacción será confirmada .

También puede usar los comandos de la consola getpeerinfoy getinfoverificar que la red esté configurada correctamente. Uno de ellos (Cory con puerto=18333) debería tener 'sync=true' en su salida de peerinfo, y todos los nodos deberían tener la misma "altura de bloque" independientemente del nodo que se utilice para la minería.

Me gustaría hacer una adición a las respuestas anteriores.

En lugar de -connect=ipla opción correcta para usar es -addnode=ip. -connectpermite que un nodo se conecte solo a un nodo y mientras que '-addnode' intenta conectarse a la lista especificada de nodos (ip) entre otros nodos.

¿ Recuerdo vagamente haber leído que --addnodetambién permitirá el descubrimiento y uso de nodos de compañeros? (mientras que --connectse restringirá solo al nodo especificado). Si esto es cierto, podría valer la pena actualizar su respuesta, sería bueno que los lectores lo supieran.