Bitcoin Forum
May 06, 2024, 01:28:03 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Bitcoind API  (Read 4111 times)
Qtiger (OP)
Sr. Member
****
Offline Offline

Activity: 280
Merit: 250



View Profile
February 08, 2011, 09:23:07 AM
 #1

Пытаюсь написать модуль оплаты 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 сервер запущен.

В чём может быть причина?

Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714958884
Hero Member
*
Offline Offline

Posts: 1714958884

View Profile Personal Message (Offline)

Ignore
1714958884
Reply with quote  #2

1714958884
Report to moderator
m0Ray
Sr. Member
****
Offline Offline

Activity: 868
Merit: 251


View Profile
February 08, 2011, 12:21:22 PM
 #2

Вопрос, в правильном ли месте создан файл bitcoin.conf.

Я уже где-то публиковал LSB-скрипты запуска демона, там я ему явно указываю data directory и там лежит всё что надо. Плюс хелпер bitcoinctl, чтоб путь к bitcoind не писать каждый раз. Повторюсь, пожалуй.

/etc/sysconfig/bitcoin
Code:
BC_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
Code:
### 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
Code:
#!/bin/sh
. /etc/sysconfig/bitcoin
test -x $BC_BIN || exit 5
$BC_BIN -datadir=$BC_DATA $*

Вот с этой всей катавасией у меня bitcoin.conf лежит в /srv/bitcoin/data и всё пашет.
Дистр openSuSE, если что.
bitcoinex
Sr. Member
****
Offline Offline

Activity: 350
Merit: 252


probiwon.com


View Profile WWW
February 08, 2011, 02:46:21 PM
 #3

если планируется только принимать биткоины то настоятельно не советую юзать JSON а юзать bitcoind под отдельным юзером в качестве CLI-клиента через sudo. Тогда даже если ваш вебскрипт сломают то биткоины украсть не смогут - sudo позволит только проверить баланс.

New bitcoin lottery: probiwon.com
- Может, ты ещё и в Невидимую Руку Рынка веруешь? - Зачем же веровать в то, что можно наблюдать непосредственно?
Qtiger (OP)
Sr. Member
****
Offline Offline

Activity: 280
Merit: 250



View Profile
February 08, 2011, 06:14:00 PM
 #4

Спасибо. Потестирую с вашим кодом.
Qtiger (OP)
Sr. Member
****
Offline Offline

Activity: 280
Merit: 250



View Profile
February 08, 2011, 06:15:13 PM
 #5

если планируется только принимать биткоины то настоятельно не советую юзать JSON а юзать bitcoind под отдельным юзером в качестве CLI-клиента через sudo. Тогда даже если ваш вебскрипт сломают то биткоины украсть не смогут - sudo позволит только проверить баланс.

Видимо без  JSON не обойтись, так как предполагаться вывод биткоинов.
Qtiger (OP)
Sr. Member
****
Offline Offline

Activity: 280
Merit: 250



View Profile
February 11, 2011, 02:04:00 AM
 #6

Ок. всё заработало  Grin
Видимо правда bitcoin.conf не находил.

Остался вопрос, почему баланс равен нулю? Хотя если входишь через клиент, баланс не нулевой.

У меня создало две папки .bitcoin , одна в папке root , вторая в папке моего пользователя и в каждой папке свой wallet.dat . Bitcoind похоже создаёт свой wallet.dat , если я не ошибаюсь?
checker
Sr. Member
****
Offline Offline

Activity: 340
Merit: 252



View Profile
February 11, 2011, 04:46:13 AM
 #7

полагаю что от кого запущен 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 Smiley )
1NXsbppu1B2exLUY8i5cYbQxbc2zWtiTAY
LZ
Legendary
*
Offline Offline

Activity: 1722
Merit: 1072


P2P Cryptocurrency


View Profile
February 11, 2011, 07:16:02 AM
 #8

Не думаю, что делать симлинк на кошелек - хорошая идея. Undecided
По факту - это очень плохой дизайн. И не забудьте про блоки.

My OpenPGP fingerprint: 5099EB8C0F2E68C63B4ECBB9A9D0993E04143362
Qtiger (OP)
Sr. Member
****
Offline Offline

Activity: 280
Merit: 250



View Profile
February 11, 2011, 11:46:36 AM
 #9

Спасибо. Заработало, стало показывать нужный баланс.
Пока сделал с симлинком, так как испытываю на локальной машине.
На веб-сервере, клиентом нет смысла пользоваться, сделаю один wallet.dat
checker
Sr. Member
****
Offline Offline

Activity: 340
Merit: 252



View Profile
February 11, 2011, 08:39:01 PM
 #10

lzsaver
просто я предложил ближайший вариант. т.к. в ином случе нужно было бы знать каким образом обратиться к уже работающему клиенту от другого пользователя... через текущий клиент.. а я этого не знаю...
Да кстати одновременно наверное не стоит запускать оба клиента..) а то как начнут они писать в файл ... одновременно...

Хочешь отблагодарить - кинь биткоинов, сколько не жалко- буду рад!
(If u want to say me thanx - give me some bitcoins Smiley )
1NXsbppu1B2exLUY8i5cYbQxbc2zWtiTAY
Qtiger (OP)
Sr. Member
****
Offline Offline

Activity: 280
Merit: 250



View Profile
February 16, 2011, 03:08:18 PM
 #11

Возникла, ещё одна проблема.
Не получается отправить платёж с помощью php jsonRPC

такой код работает, и показывает сводку по кошельку.
Code:
<?
$bitcoin = new jsonRPCClient('http://login:pass@127.0.0.1:8332/');


print_r($bitcoin->getinfo());
?>

А, такой код на отправку платежа, нет.
Code:
<?
$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
Sr. Member
****
Offline Offline

Activity: 868
Merit: 251


View Profile
February 16, 2011, 05:17:41 PM
 #12

Комментарии при отправке на bitcoin-адрес не имеют смысла как минимум. Убери последние два параметра.
Qtiger (OP)
Sr. Member
****
Offline Offline

Activity: 280
Merit: 250



View Profile
February 18, 2011, 07:49:35 PM
 #13

Убрал, но всё равно не отправляет, может метод не тот?

Code:
<?
$bitcoin = new jsonRPCClient('http://login:pass@127.0.0.1:8332/');

$bitcoinaddress="...."; // любой адрес
$amount=0.1;

$bitcoin->sendtoaddress($bitcoinaddress,$amount);
?>

Кстати, а почему комментарии ни где не работают, хотя в клиенте поля есть и в доках описаны?
Я так предполагаю, их планируется в будущем сделать.
m0Ray
Sr. Member
****
Offline Offline

Activity: 868
Merit: 251


View Profile
February 18, 2011, 07:56:32 PM
 #14

Комментарии сделаны только для переводов на IP, когда вместе с транзакцией можно передать что-то, не засоряя БД сети.

Далее, посмотри на результат выполнения функции. Он же возвращает статус.
Qtiger (OP)
Sr. Member
****
Offline Offline

Activity: 280
Merit: 250



View Profile
February 19, 2011, 01:06:24 AM
 #15

Возвращает ошибку
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 

С остальными функциями на вывод данных о кошельке, проблем нет, только с отправкой платежа.
m0Ray
Sr. Member
****
Offline Offline

Activity: 868
Merit: 251


View Profile
February 19, 2011, 01:29:04 AM
Last edit: February 19, 2011, 02:38:01 AM by m0Ray
 #16

Вот за это я и не люблю fopen wrappers. (С)
С ними я наступил на грабли следующим образом: объём платежа по недосмотру уходил в виде string, а не в виде double, и bitcoind меня таким же образом посылал. Беда в том, что он помимо заголовка 500 ещё и посылал результат, то есть сообщение об ошибке. Но при использовании fopen мне пришлось использовать tcpdump, чтобы отловить содержимое пакетов, иначе никак не получалось понять, в чём же дело.
Мораль: проверь тип данных и правильность форматирования. Под виндой с русской локалью, например, число с плавающей точкой может форматироваться с запятой вместо десятичной точки. А по стандарту JSON этого вроде как не позволяется. Потому может потребоваться насильственная смена локали в коде, например, на локаль C (или POSIX, не помню сейчас, как оно там в PHP должно быть) или en_us.
Qtiger (OP)
Sr. Member
****
Offline Offline

Activity: 280
Merit: 250



View Profile
February 19, 2011, 03:36:22 PM
 #17

ок, попробую отловить пакеты.
Тестил без точек (объём =1), та же картина.
m0Ray
Sr. Member
****
Offline Offline

Activity: 868
Merit: 251


View Profile
February 19, 2011, 04:14:05 PM
 #18

Это оно у тебя без точек, а в JSON может уходить с ними, в виде "1.0". Бывали случаи.
В общем, лови сообщение об ошибке от демона.
m0Ray
Sr. Member
****
Offline Offline

Activity: 868
Merit: 251


View Profile
February 19, 2011, 07:20:58 PM
 #19

Меня таки уговорили вывалить код на github. Вот: https://github.com/m0Ray/bitcoin_account

Если версия PHP>=5.2.10, то теперь можно увидеть, что не так, например:
Code:
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]
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!