Author

Topic: Bitcoind API (Read 4140 times)

sr. member
Activity: 868
Merit: 251
February 19, 2011, 02: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]
sr. member
Activity: 868
Merit: 251
February 19, 2011, 11:14:05 AM
#18
Это оно у тебя без точек, а в JSON может уходить с ними, в виде "1.0". Бывали случаи.
В общем, лови сообщение об ошибке от демона.
sr. member
Activity: 280
Merit: 250
February 19, 2011, 10:36:22 AM
#17
ок, попробую отловить пакеты.
Тестил без точек (объём =1), та же картина.
sr. member
Activity: 868
Merit: 251
February 18, 2011, 08:29:04 PM
#16
Вот за это я и не люблю fopen wrappers. (С)
С ними я наступил на грабли следующим образом: объём платежа по недосмотру уходил в виде string, а не в виде double, и bitcoind меня таким же образом посылал. Беда в том, что он помимо заголовка 500 ещё и посылал результат, то есть сообщение об ошибке. Но при использовании fopen мне пришлось использовать tcpdump, чтобы отловить содержимое пакетов, иначе никак не получалось понять, в чём же дело.
Мораль: проверь тип данных и правильность форматирования. Под виндой с русской локалью, например, число с плавающей точкой может форматироваться с запятой вместо десятичной точки. А по стандарту JSON этого вроде как не позволяется. Потому может потребоваться насильственная смена локали в коде, например, на локаль C (или POSIX, не помню сейчас, как оно там в PHP должно быть) или en_us.
sr. member
Activity: 280
Merit: 250
February 18, 2011, 08:06:24 PM
#15
Возвращает ошибку
Code:
Warning: fopen(http://[email protected]: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

С остальными функциями на вывод данных о кошельке, проблем нет, только с отправкой платежа.
sr. member
Activity: 868
Merit: 251
February 18, 2011, 02:56:32 PM
#14
Комментарии сделаны только для переводов на IP, когда вместе с транзакцией можно передать что-то, не засоряя БД сети.

Далее, посмотри на результат выполнения функции. Он же возвращает статус.
sr. member
Activity: 280
Merit: 250
February 18, 2011, 02:49:35 PM
#13
Убрал, но всё равно не отправляет, может метод не тот?

Code:
$bitcoin = new jsonRPCClient('http://login:[email protected]:8332/');

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

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

Кстати, а почему комментарии ни где не работают, хотя в клиенте поля есть и в доках описаны?
Я так предполагаю, их планируется в будущем сделать.
sr. member
Activity: 868
Merit: 251
February 16, 2011, 12:17:41 PM
#12
Комментарии при отправке на bitcoin-адрес не имеют смысла как минимум. Убери последние два параметра.
sr. member
Activity: 280
Merit: 250
February 16, 2011, 10:08:18 AM
#11
Возникла, ещё одна проблема.
Не получается отправить платёж с помощью php jsonRPC

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


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

А, такой код на отправку платежа, нет.
Code:
$bitcoin = new jsonRPCClient('http://login:[email protected]:8332/');

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

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

Хотя команда, такая есть https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_Calls_list

sr. member
Activity: 340
Merit: 252
February 11, 2011, 03:39:01 PM
#10
lzsaver
просто я предложил ближайший вариант. т.к. в ином случе нужно было бы знать каким образом обратиться к уже работающему клиенту от другого пользователя... через текущий клиент.. а я этого не знаю...
Да кстати одновременно наверное не стоит запускать оба клиента..) а то как начнут они писать в файл ... одновременно...
sr. member
Activity: 280
Merit: 250
February 11, 2011, 06:46:36 AM
#9
Спасибо. Заработало, стало показывать нужный баланс.
Пока сделал с симлинком, так как испытываю на локальной машине.
На веб-сервере, клиентом нет смысла пользоваться, сделаю один wallet.dat
LZ
legendary
Activity: 1722
Merit: 1072
P2P Cryptocurrency
February 11, 2011, 02:16:02 AM
#8
Не думаю, что делать симлинк на кошелек - хорошая идея. Undecided
По факту - это очень плохой дизайн. И не забудьте про блоки.
sr. member
Activity: 340
Merit: 252
February 10, 2011, 11:46:13 PM
#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 ( симлинк -- что то типа ссылки )
sr. member
Activity: 280
Merit: 250
February 10, 2011, 09:04:00 PM
#6
Ок. всё заработало  Grin
Видимо правда bitcoin.conf не находил.

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

У меня создало две папки .bitcoin , одна в папке root , вторая в папке моего пользователя и в каждой папке свой wallet.dat . Bitcoind похоже создаёт свой wallet.dat , если я не ошибаюсь?
sr. member
Activity: 280
Merit: 250
February 08, 2011, 01:15:13 PM
#5
если планируется только принимать биткоины то настоятельно не советую юзать JSON а юзать bitcoind под отдельным юзером в качестве CLI-клиента через sudo. Тогда даже если ваш вебскрипт сломают то биткоины украсть не смогут - sudo позволит только проверить баланс.

Видимо без  JSON не обойтись, так как предполагаться вывод биткоинов.
sr. member
Activity: 280
Merit: 250
February 08, 2011, 01:14:00 PM
#4
Спасибо. Потестирую с вашим кодом.
sr. member
Activity: 350
Merit: 252
probiwon.com
February 08, 2011, 09:46:21 AM
#3
если планируется только принимать биткоины то настоятельно не советую юзать JSON а юзать bitcoind под отдельным юзером в качестве CLI-клиента через sudo. Тогда даже если ваш вебскрипт сломают то биткоины украсть не смогут - sudo позволит только проверить баланс.
sr. member
Activity: 868
Merit: 251
February 08, 2011, 07:21:22 AM
#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, если что.
sr. member
Activity: 280
Merit: 250
February 08, 2011, 04: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 сервер запущен.

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

Jump to: