Title: Bitcoind API Post by: Qtiger on February 08, 2011, 09:23:07 AM Пытаюсь написать модуль оплаты Bitcoin, но что то не ни как не хочет работать.
Вроде всё делаю по инструкции https://en.bitcoin.it/wiki/API_tutorial_%28JSON-RPC%29 Экспериментирую на Linux Debian, среда Gnome Создал файл в директории ~/.bitcoin/bitcoin.conf rpcuser=myusername rpcpassword=secretpassword Запустил сервер $ ./bitcoind bitcoin server starting Но баланс почему то пишет равным нулю $ ./bitcoind getbalance 0.00000 Хотя если смотреть через клиент, баланс больше нуля. Так же не работают скрипты JSON-RPC PHP (как в примере) Логин и пароль пробовал ставить и тот что в файле bitcoin.conf , и пароль от сервера, какой здесь нужен? Но всё равно, скрипт не чего не показывает. Так-же пробовал класс от m0Ray , такая же картина вообще не показывает ни баланс, ни чего. Хотя bitcoind сервер запущен. В чём может быть причина? Title: Re: Bitcoind API Post by: m0Ray on February 08, 2011, 12:21:22 PM Вопрос, в правильном ли месте создан файл bitcoin.conf.
Я уже где-то публиковал LSB-скрипты запуска демона, там я ему явно указываю data directory и там лежит всё что надо. Плюс хелпер bitcoinctl, чтоб путь к bitcoind не писать каждый раз. Повторюсь, пожалуй. /etc/sysconfig/bitcoin Code: BC_BIN=/srv/bitcoin/bin/bitcoind /etc/init.d/bitcoin Code: ### BEGIN INIT INFO /usr/sbin/bitcoinctl Code: #!/bin/sh Вот с этой всей катавасией у меня bitcoin.conf лежит в /srv/bitcoin/data и всё пашет. Дистр openSuSE, если что. Title: Re: Bitcoind API Post by: bitcoinex on February 08, 2011, 02:46:21 PM если планируется только принимать биткоины то настоятельно не советую юзать JSON а юзать bitcoind под отдельным юзером в качестве CLI-клиента через sudo. Тогда даже если ваш вебскрипт сломают то биткоины украсть не смогут - sudo позволит только проверить баланс.
Title: Re: Bitcoind API Post by: Qtiger on February 08, 2011, 06:14:00 PM Спасибо. Потестирую с вашим кодом.
Title: Re: Bitcoind API Post by: Qtiger on February 08, 2011, 06:15:13 PM если планируется только принимать биткоины то настоятельно не советую юзать JSON а юзать bitcoind под отдельным юзером в качестве CLI-клиента через sudo. Тогда даже если ваш вебскрипт сломают то биткоины украсть не смогут - sudo позволит только проверить баланс. Видимо без JSON не обойтись, так как предполагаться вывод биткоинов. Title: Re: Bitcoind API Post by: Qtiger on February 11, 2011, 02:04:00 AM Ок. всё заработало ;D
Видимо правда bitcoin.conf не находил. Остался вопрос, почему баланс равен нулю? Хотя если входишь через клиент, баланс не нулевой. У меня создало две папки .bitcoin , одна в папке root , вторая в папке моего пользователя и в каждой папке свой wallet.dat . Bitcoind похоже создаёт свой wallet.dat , если я не ошибаюсь? Title: Re: Bitcoind API Post by: checker on February 11, 2011, 04:46:13 AM полагаю что от кого запущен bitcoind в той папке и лежит его кошелёк) => чтобы запустить bitcoind с ненулевым балансом -- надо запустить его от того пользователя у которого баланс был ненулевой.. ну или сделать симлинк туда куда нужно -- тогда будет все работать
я так полагаю что у пользователя баланс не нулевой, у рута -- нулевой.. значит вам надо найти файл кошелька , подвинуть его ( на всякий случай ) на wallet1.dat и затем сделать симлинк wallet.dat на wallet.dat пользователя ln -s A B создаст симлинк B -> A например ln- s /home/username/.bitcoin/wallet.dat /root/.bitcoin/wallet.dat создаст симлинк на wallet.dat пользователя с именем username ( симлинк -- что то типа ссылки ) Title: Re: Bitcoind API Post by: LZ on February 11, 2011, 07:16:02 AM Не думаю, что делать симлинк на кошелек - хорошая идея. :-\
По факту - это очень плохой дизайн. И не забудьте про блоки. Title: Re: Bitcoind API Post by: Qtiger on February 11, 2011, 11:46:36 AM Спасибо. Заработало, стало показывать нужный баланс.
Пока сделал с симлинком, так как испытываю на локальной машине. На веб-сервере, клиентом нет смысла пользоваться, сделаю один wallet.dat Title: Re: Bitcoind API Post by: checker on February 11, 2011, 08:39:01 PM lzsaver
просто я предложил ближайший вариант. т.к. в ином случе нужно было бы знать каким образом обратиться к уже работающему клиенту от другого пользователя... через текущий клиент.. а я этого не знаю... Да кстати одновременно наверное не стоит запускать оба клиента..) а то как начнут они писать в файл ... одновременно... Title: Re: Bitcoind API Post by: Qtiger on February 16, 2011, 03:08:18 PM Возникла, ещё одна проблема.
Не получается отправить платёж с помощью php jsonRPC такой код работает, и показывает сводку по кошельку. Code: <? А, такой код на отправку платежа, нет. Code: <? Хотя команда, такая есть https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_Calls_list Title: Re: Bitcoind API Post by: m0Ray on February 16, 2011, 05:17:41 PM Комментарии при отправке на bitcoin-адрес не имеют смысла как минимум. Убери последние два параметра.
Title: Re: Bitcoind API Post by: Qtiger on February 18, 2011, 07:49:35 PM Убрал, но всё равно не отправляет, может метод не тот?
Code: <? Кстати, а почему комментарии ни где не работают, хотя в клиенте поля есть и в доках описаны? Я так предполагаю, их планируется в будущем сделать. Title: Re: Bitcoind API Post by: m0Ray on February 18, 2011, 07:56:32 PM Комментарии сделаны только для переводов на IP, когда вместе с транзакцией можно передать что-то, не засоряя БД сети.
Далее, посмотри на результат выполнения функции. Он же возвращает статус. Title: Re: Bitcoind API Post by: Qtiger on February 19, 2011, 01:06:24 AM Возвращает ошибку
Code: Warning: fopen(http://...@127.0.0.1:8332/): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in /home/myuser/www/mysite/jsonRPCClient.php on line 132 С остальными функциями на вывод данных о кошельке, проблем нет, только с отправкой платежа. Title: Re: Bitcoind API Post by: m0Ray on February 19, 2011, 01:29:04 AM Вот за это я и не люблю fopen wrappers. (С)
С ними я наступил на грабли следующим образом: объём платежа по недосмотру уходил в виде string, а не в виде double, и bitcoind меня таким же образом посылал. Беда в том, что он помимо заголовка 500 ещё и посылал результат, то есть сообщение об ошибке. Но при использовании fopen мне пришлось использовать tcpdump, чтобы отловить содержимое пакетов, иначе никак не получалось понять, в чём же дело. Мораль: проверь тип данных и правильность форматирования. Под виндой с русской локалью, например, число с плавающей точкой может форматироваться с запятой вместо десятичной точки. А по стандарту JSON этого вроде как не позволяется. Потому может потребоваться насильственная смена локали в коде, например, на локаль C (или POSIX, не помню сейчас, как оно там в PHP должно быть) или en_us. Title: Re: Bitcoind API Post by: Qtiger on February 19, 2011, 03:36:22 PM ок, попробую отловить пакеты.
Тестил без точек (объём =1), та же картина. Title: Re: Bitcoind API Post by: m0Ray on February 19, 2011, 04:14:05 PM Это оно у тебя без точек, а в JSON может уходить с ними, в виде "1.0". Бывали случаи.
В общем, лови сообщение об ошибке от демона. Title: Re: Bitcoind API Post by: m0Ray on February 19, 2011, 07:20:58 PM Меня таки уговорили вывалить код на github. Вот: https://github.com/m0Ray/bitcoin_account
Если версия PHP>=5.2.10, то теперь можно увидеть, что не так, например: Code: PHP Fatal error: Uncaught exception 'Exception' with message 'Request error: Array |