Bitcoin Forum
April 24, 2024, 06:43:33 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Bitcoind API  (Read 4110 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 сервер запущен.

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

1713941013
Hero Member
*
Offline Offline

Posts: 1713941013

View Profile Personal Message (Offline)

Ignore
1713941013
Reply with quote  #2

1713941013
Report to moderator
The Bitcoin network protocol was designed to be extremely flexible. It can be used to create timed transactions, escrow transactions, multi-signature transactions, etc. The current features of the client only hint at what will be possible in the future.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
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!