Qtiger (OP)
|
|
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 сервер запущен. В чём может быть причина?
|
|
|
|
m0Ray
|
|
February 08, 2011, 12:21:22 PM |
|
Вопрос, в правильном ли месте создан файл bitcoin.conf. Я уже где-то публиковал LSB-скрипты запуска демона, там я ему явно указываю data directory и там лежит всё что надо. Плюс хелпер bitcoinctl, чтоб путь к bitcoind не писать каждый раз. Повторюсь, пожалуй. /etc/sysconfig/bitcoinBC_BIN=/srv/bitcoin/bin/bitcoind BC_DATA=/srv/bitcoin/data # When generating locally, lowering or rising priority may be required BC_NICE=19 /etc/init.d/bitcoin### BEGIN INIT INFO # Provides: bitcoin # Required-Start: $network $named $remote_fs # Required-Stop: $network $named $remote_fs # Default-Start: 3 5 # Default-Stop: # Description: Bitcoin headless node ### END INIT INFO
. /etc/rc.status
. /etc/sysconfig/bitcoin
test -x $BC_BIN || exit 5
# First reset status of this service rc_reset
case "$1" in start) echo -n "Starting Bitcoin node" nice -n $BC_NICE $BC_BIN -datadir=$BC_DATA -server rc_status -v ;; stop) echo -n "Shutting down Bitcoin node" $BC_BIN -datadir=$BC_DATA stop rc_status -v ;; restart) $0 stop $0 start rc_status ;; status) echo -n "Checking for Bitcoin node: " $BC_BIN -datadir=$BC_DATA getinfo rc_status -v ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac
rc_exit /usr/sbin/bitcoinctl#!/bin/sh . /etc/sysconfig/bitcoin test -x $BC_BIN || exit 5 $BC_BIN -datadir=$BC_DATA $* Вот с этой всей катавасией у меня bitcoin.conf лежит в /srv/bitcoin/data и всё пашет. Дистр openSuSE, если что.
|
|
|
|
bitcoinex
|
|
February 08, 2011, 02:46:21 PM |
|
если планируется только принимать биткоины то настоятельно не советую юзать JSON а юзать bitcoind под отдельным юзером в качестве CLI-клиента через sudo. Тогда даже если ваш вебскрипт сломают то биткоины украсть не смогут - sudo позволит только проверить баланс.
|
New bitcoin lottery: probiwon.com- Может, ты ещё и в Невидимую Руку Рынка веруешь? - Зачем же веровать в то, что можно наблюдать непосредственно?
|
|
|
Qtiger (OP)
|
|
February 08, 2011, 06:14:00 PM |
|
Спасибо. Потестирую с вашим кодом.
|
|
|
|
Qtiger (OP)
|
|
February 08, 2011, 06:15:13 PM |
|
если планируется только принимать биткоины то настоятельно не советую юзать JSON а юзать bitcoind под отдельным юзером в качестве CLI-клиента через sudo. Тогда даже если ваш вебскрипт сломают то биткоины украсть не смогут - sudo позволит только проверить баланс.
Видимо без JSON не обойтись, так как предполагаться вывод биткоинов.
|
|
|
|
Qtiger (OP)
|
|
February 11, 2011, 02:04:00 AM |
|
Ок. всё заработало Видимо правда bitcoin.conf не находил. Остался вопрос, почему баланс равен нулю? Хотя если входишь через клиент, баланс не нулевой. У меня создало две папки .bitcoin , одна в папке root , вторая в папке моего пользователя и в каждой папке свой wallet.dat . Bitcoind похоже создаёт свой wallet.dat , если я не ошибаюсь?
|
|
|
|
checker
|
|
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 ( симлинк -- что то типа ссылки )
|
Хочешь отблагодарить - кинь биткоинов, сколько не жалко- буду рад! (If u want to say me thanx - give me some bitcoins ) 1NXsbppu1B2exLUY8i5cYbQxbc2zWtiTAY
|
|
|
LZ
Legendary
Offline
Activity: 1722
Merit: 1072
P2P Cryptocurrency
|
|
February 11, 2011, 07:16:02 AM |
|
Не думаю, что делать симлинк на кошелек - хорошая идея. По факту - это очень плохой дизайн. И не забудьте про блоки.
|
My OpenPGP fingerprint: 5099EB8C0F2E68C63B4ECBB9A9D0993E04143362
|
|
|
Qtiger (OP)
|
|
February 11, 2011, 11:46:36 AM |
|
Спасибо. Заработало, стало показывать нужный баланс. Пока сделал с симлинком, так как испытываю на локальной машине. На веб-сервере, клиентом нет смысла пользоваться, сделаю один wallet.dat
|
|
|
|
checker
|
|
February 11, 2011, 08:39:01 PM |
|
lzsaver просто я предложил ближайший вариант. т.к. в ином случе нужно было бы знать каким образом обратиться к уже работающему клиенту от другого пользователя... через текущий клиент.. а я этого не знаю... Да кстати одновременно наверное не стоит запускать оба клиента..) а то как начнут они писать в файл ... одновременно...
|
Хочешь отблагодарить - кинь биткоинов, сколько не жалко- буду рад! (If u want to say me thanx - give me some bitcoins ) 1NXsbppu1B2exLUY8i5cYbQxbc2zWtiTAY
|
|
|
Qtiger (OP)
|
|
February 16, 2011, 03:08:18 PM |
|
Возникла, ещё одна проблема. Не получается отправить платёж с помощью php jsonRPC такой код работает, и показывает сводку по кошельку. <? $bitcoin = new jsonRPCClient('http://login:pass@127.0.0.1:8332/');
print_r($bitcoin->getinfo()); ?>
А, такой код на отправку платежа, нет. <? $bitcoin = new jsonRPCClient('http://login:pass@127.0.0.1:8332/');
$bitcoinaddress="...."; // любой адрес $amount=0.1;
$bitcoin->sendtoaddress($bitcoinaddress,$amount,"comment","comment-to"); ?>
Хотя команда, такая есть https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_Calls_list
|
|
|
|
m0Ray
|
|
February 16, 2011, 05:17:41 PM |
|
Комментарии при отправке на bitcoin-адрес не имеют смысла как минимум. Убери последние два параметра.
|
|
|
|
Qtiger (OP)
|
|
February 18, 2011, 07:49:35 PM |
|
Убрал, но всё равно не отправляет, может метод не тот? <? $bitcoin = new jsonRPCClient('http://login:pass@127.0.0.1:8332/');
$bitcoinaddress="...."; // любой адрес $amount=0.1;
$bitcoin->sendtoaddress($bitcoinaddress,$amount); ?>
Кстати, а почему комментарии ни где не работают, хотя в клиенте поля есть и в доках описаны? Я так предполагаю, их планируется в будущем сделать.
|
|
|
|
m0Ray
|
|
February 18, 2011, 07:56:32 PM |
|
Комментарии сделаны только для переводов на IP, когда вместе с транзакцией можно передать что-то, не засоряя БД сети.
Далее, посмотри на результат выполнения функции. Он же возвращает статус.
|
|
|
|
Qtiger (OP)
|
|
February 19, 2011, 01:06:24 AM |
|
Возвращает ошибку 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 С остальными функциями на вывод данных о кошельке, проблем нет, только с отправкой платежа.
|
|
|
|
m0Ray
|
|
February 19, 2011, 01:29:04 AM Last edit: February 19, 2011, 02:38:01 AM by m0Ray |
|
Вот за это я и не люблю fopen wrappers. (С) С ними я наступил на грабли следующим образом: объём платежа по недосмотру уходил в виде string, а не в виде double, и bitcoind меня таким же образом посылал. Беда в том, что он помимо заголовка 500 ещё и посылал результат, то есть сообщение об ошибке. Но при использовании fopen мне пришлось использовать tcpdump, чтобы отловить содержимое пакетов, иначе никак не получалось понять, в чём же дело. Мораль: проверь тип данных и правильность форматирования. Под виндой с русской локалью, например, число с плавающей точкой может форматироваться с запятой вместо десятичной точки. А по стандарту JSON этого вроде как не позволяется. Потому может потребоваться насильственная смена локали в коде, например, на локаль C (или POSIX, не помню сейчас, как оно там в PHP должно быть) или en_us.
|
|
|
|
Qtiger (OP)
|
|
February 19, 2011, 03:36:22 PM |
|
ок, попробую отловить пакеты. Тестил без точек (объём =1), та же картина.
|
|
|
|
m0Ray
|
|
February 19, 2011, 04:14:05 PM |
|
Это оно у тебя без точек, а в JSON может уходить с ними, в виде "1.0". Бывали случаи. В общем, лови сообщение об ошибке от демона.
|
|
|
|
m0Ray
|
|
February 19, 2011, 07:20:58 PM |
|
Меня таки уговорили вывалить код на github. Вот: https://github.com/m0Ray/bitcoin_accountЕсли версия PHP>=5.2.10, то теперь можно увидеть, что не так, например: PHP Fatal error: Uncaught exception 'Exception' with message 'Request error: Array ( [code] => -1 [message] => value is type int, expected str ) ' in /srv/www/vhost/samarius.ru/web/modules/bitcoin/include/jsonRPCClient.class.php:166 Stack trace: #0 /srv/www/vhost/samarius.ru/web/modules/bitcoin/include/BitcoinAccount.class.php(106): jsonRPCClient->__call('getbalance', Array) #1 /srv/www/vhost/samarius.ru/web/modules/bitcoin/include/BitcoinAccount.class.php(106): jsonRPCClient->getbalance(1) #2 /srv/www/vhost/samarius.ru/web/modules/bitcoin/sysacc.php(16): BitcoinAccount->getBalance() #3 {main} thrown in /srv/www/vhost/samarius.ru/web/modules/bitcoin/include/jsonRPCClient.class.php on line 166 [/code]
|
|
|
|
|