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 сервер запущен. В чём может быть причина?
|
|
|
|
|
|
|
In order to get the maximum amount of activity points possible, you just need to post once per day on average. Skipping days is OK as long as you maintain the average.
|
|
|
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
|
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]
|
|
|
|
|