¿La biblioteca JSON RPC no puede conectarse a bitcoind?

Puedo conectarme a bitcoind usando mi línea de comando y el proceso se ejecuta con el puerto apropiado, pero cuando intento ejecutarlo a través de XAMPP después de usar la biblioteca JSON-RPC (utilicé la introducción del desarrollador de PHP para el código) está dando me da el siguiente error, y no se porque:

Warning:  fopen(): Failed to enable crypto in /opt/lampp/htdocs/bitcoins/jsonRPCClient.php on line 132

Warning:  fopen(https://...@127.0.0.1:8332/): failed to open stream: operation failed in /opt/lampp/htdocs/bitcoins/jsonRPCClient.php on line 132
Fatal error:  Uncaught exception 'Exception' with message 'Unable to connect to https://user:password
@127.0.0.1:8332/' in /opt/lampp/htdocs/bitcoins/jsonRPCClient.php:140
Stack trace:
#0 /opt/lampp/htdocs/bitcoins/testServer.php(7): jsonRPCClient->__call('getinfo', Array)
#1 /opt/lampp/htdocs/bitcoins/testServer.php(7): jsonRPCClient->getinfo()
#2 {main}
  thrown in /opt/lampp/htdocs/bitcoins/jsonRPCClient.php on line 140

El código es el siguiente: (intentamos alternar entre http y https y sigue sin funcionar)

require_once 'jsonRPCClient.php';

$bitcoin = new jsonRPCClient('https://user:password@127.0.0.1:8332/');

echo "<pre>\n";
print_r($bitcoin->getinfo());
echo "</pre>";
¿está seguro de que está proporcionando el nombre de usuario/contraseña correctos?
@SalvadorDali: Lo copié y pegué desde bitcoin.conf, también intenté cambiar el alojamiento a Amazon EC2 y no funcionó.

Respuestas (5)

Como mencionó @Bittylicious, JSON-RPC tiene un poco de errores

https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)#PHP

Nota: La biblioteca jsonRPCClient usa fopen() y arrojará una excepción que dice "No se puede conectar" si recibe un error 404 o 500 de bitcoind. Esto evita que pueda ver los mensajes de error generados por bitcoind (ya que se envían con el estado 404 o 500).

En su lugar, tiene la opción de usar EasyBitcoin , que arrojará mensajes de error más precisos y es más o menos lo mismo que JSON-RPC.

<?php
 require_once 'YOUR_FOLDER/easybitcoin.php';
 $rpc_host = 'YOUR_IP';
 $rpc_port = 'YOUR_PORT';
 $rpc_user = 'YOUR_USER';
 $rpc_pass = 'YOUR_KEY';
 $bitcoin = new Bitcoin($rpc_user, $rpc_pass, $rpc_host, $rpc_port);
 print_r($bitcoin->getinfo());
 print_r($bitcoin->listaccounts());
 print_r($bitcoin->listreceivedbyaddress(0, true));
?>

¡Espero que esto ayude!

De forma predeterminada, bitcoind RPC pasa por http, no por https. A menos, por supuesto, que haya habilitado SSL generando una clave SSL y configurando la opción de configuración requerida...

 rpcssl=1

De lo contrario, esta línea:

$bitcoin = new jsonRPCClient('https://user:password@127.0.0.1:8332/');

Debería cambiarse a:

$bitcoin = new jsonRPCClient('http://user:password@127.0.0.1:8332/');

Si eso no responde, házmelo saber. Hay algunas otras maneras de evitarlo.

¡Bienvenido al mundo de las monedas cristalográficas basadas en el cliente satoshi!

Creo que esta pequeña información debería publicarse de manera bastante inapropiada, está oculta en la documentación que nadie lee.

Solo para agregar información útil.

El jsonRPCClient no devuelve ninguna información útil sobre los errores, y todos los errores solo devolverán el mensaje de que no se pudo conectar . Esto se debe a que bitcoind devuelve un código de estado de error HTTP que no es 2xx. Esto es horrible para la depuración.

He realizado algunos cambios extraños en jsonRPCClient para evitar esto. Lo que tienes que hacer es:

  1. Agregue *'ignore_errors' => true* a la matriz $opts
  2. Cambie la línea de error que arroja un error de solicitud para leer una nueva excepción ('Error de solicitud: '. $ respuesta ['error'] ['código'].' - '. $ respuesta ['error'] ['mensaje']) ; .

El último cambio en particular hace que jsonRPCClient sea específico para bitcoind, pero de todos modos no debería suponer que el error es una cadena.

Testnet se conecta en el puerto 18332 a menos que especifique establecer el puerto en su archivo conf. Cambiarlo a eso debería corregir el problema.

Resolví este problema pasando -rpcthreads=16a pesar de que el servidor VPS es de un solo núcleo