error 500 de transacción de envío de la API de bitcoind

Recibo un error 500 de mi servidor web cuando intento enviar una transacción sin procesar a través de la API de RPC.

Mensaje PHP:

PHP Warning:  fopen(://...@IP:8332/): failed to open stream: HTTP request failed!
HTTP/1.1 500 Internal Server Error
in /usr/share/nginx/html/common/jsonRPCClient.php on line 132

Mensaje PHP:

PHP Fatal error:  Uncaught exception 'Exception' with message
'Unable to connect to://bitcoinrpc:PASSWORD@IP:8332/' 
in /usr/share/nginx/html/common/jsonRPCClient.php:140

Seguimiento de la pila:

#0 /usr/share/nginx/html/tools/do_sendBTC.php(131): 
jsonRPCClient->__call('sendrawtransact...', Array)
#1 /usr/share/nginx/html/tools/do_sendBTC.php(131): 
jsonRPCClient->sendrawtransaction('010000000115d34...')
#2 {main}

Esta es la línea que falla:

$result = $bitcoin->sendrawtransaction($tx_data);

Todas las demás llamadas a la API funcionan, por ejemplo validateaddress.

¿Alguna idea de por qué esto falla? La misma transacción sin procesar funciona si se envía a través de la línea de comando bitcoind.

Gracias

Respuestas (1)

No puede enviar una transacción dos veces. Si ya lo ha enviado desde la línea de comandos de bitcoin, fallará con el error -22 (cli) o 500 (http).


500 significa datos incorrectos: fondos insuficientes, mala sintaxis, mal tipo, comando imposible...

Intenta convertir a string: $bitcoin -> sendrawtransaction((string)$tx_data)y hazlo var_dump($tx_data)para encontrar el tipo.

Si no ayuda, envíe esta solicitud POST desde cURL, como en el tutorial: https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)#Command_line_.28cURL.29

Usando curl pude encontrar el error. Mi TX sin formato tenía un \n al final que devolvía el error 500.