ошибка транзакции sendrawtransaction API биткойна 500

Я получаю сообщение об ошибке 500 с моего веб-сервера, когда пытаюсь отправить необработанную транзакцию через RPC API.

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

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

Трассировки стека:

#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}

Это строка, которая дает сбой:

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

Любой другой вызов API работает, например validateaddress.

Любая идея, почему это не удается? Та же необработанная транзакция работает, если ее отправить через командную строку bitcoind.

Спасибо

Ответы (1)

Вы не можете отправить одну транзакцию дважды. Если вы уже отправили его из командной строки биткойнов, произойдет сбой с ошибкой -22 (cli) или 500 (http).


500 означает неверные данные: недостаточно средств, неправильный синтаксис, неверный тип, невозможная команда...

Попробуйте привести к строке: $bitcoin -> sendrawtransaction((string)$tx_data)и выполните, var_dump($tx_data)чтобы найти тип.

Если это не поможет, отправьте этот POST-запрос с cURL, как в туториале: https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)#Command_line_.28cURL.29

Используя curl, я смог найти ошибку. Мой необработанный TX имел \n в конце, который возвращал ошибку 500.