|
8 августа 2013, 1:07:51 AM | # 1 |
Сообщения: 100
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome" Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e подробнее... Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru Мой текущий метод просто опрашивать bitcoind API для новой транзакции. Я чувствую, что это не правильный путь.
|
8 августа 2013, 7:11:02 AM | # 2 |
Сообщения: 427
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
Получил 1806 Биткоинов
Реальная история. Мой текущий метод просто опрашивать bitcoind API для новой транзакции. Я чувствую, что это не правильный путь. -walletnotify = |
9 августа 2013, 3:44:37 AM | # 3 |
Сообщений: 34
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
Есть ли пример реализации -walletnotify в PHP? Сейчас мой код выглядит примерно так
Код: $ Bitcoin = новый Bitcoin (jsoncredentials); $ bitcoin->getbalance (счет); если ($ Баланс >= Get_Price (ID)) { } и он чувствует себя очень неаккуратно / хаком. |
9 августа 2013, 3:59:04 AM | # 4 |
Сообщения: 1302
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
Да, не делайте этого, если вы не конечно что ваш объем сделок будет крайне низким.
Вы хотите, чтобы этот процесс управляется -walletnotify очень быстро. В идеале, он должен выплюнуть линию в трубе (или файл или сокет) и заканчиваться в кратчайшие сроки. Затем вы должны иметь другой процесс, либо демон или хроны, читали этот поток и собирать любую информацию, вам нужно. Вы должны проверять счетчик с подтверждением сделок, а не баланс счета. В этом отношении, используя счета вы можете получить в беду. Убедитесь, что вы знаете, что вы делаете, если вы собираетесь использовать их на всех. -walletnotify срабатывает, когда транзакция входит в блок, но он может также вызвать, если сделка показывает вверх по сети в свободной сделки. Таким образом, вы должны проверить подтверждение подсчитывать каждый раз -walletnotify хитов, пока не увидите, по крайней мере одно подтверждения. После этого, вы должны проверить его каждый раз, когда вы видите блок, чтобы убедиться, что счетчик достиг порога. Вы могли бы оптимизировать, что немного, пропуская медленные вызовы RPC, пока <порог> количество блоков были замечены после того, как сделка была первой включена. |
9 августа 2013, 6:53:47 AM | # 5 |
Сообщений: 34
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
Да, не делайте этого, если вы не конечно что ваш объем сделок будет крайне низким. Вы хотите, чтобы этот процесс управляется -walletnotify очень быстро. В идеале, он должен выплюнуть линию в трубе (или файл или сокет) и заканчиваться в кратчайшие сроки. Затем вы должны иметь другой процесс, либо демон или хроны, читали этот поток и собирать любую информацию, вам нужно. Вы должны проверять счетчик с подтверждением сделок, а не баланс счета. В этом отношении, используя счета вы можете получить в беду. Убедитесь, что вы знаете, что вы делаете, если вы собираетесь использовать их на всех. -walletnotify срабатывает, когда транзакция входит в блок, но он может также вызвать, если сделка показывает вверх по сети в свободной сделки. Таким образом, вы должны проверить подтверждение подсчитывать каждый раз -walletnotify хитов, пока не увидите, по крайней мере одно подтверждения. После этого, вы должны проверить его каждый раз, когда вы видите блок, чтобы убедиться, что счетчик достиг порога. Вы могли бы оптимизировать, что немного, пропуская медленные вызовы RPC, пока <порог> количество блоков были замечены после того, как сделка была первой включена. Если честно, когда я прочитал Ваш комментарий несколько часов назад я понятия не имел, что было трубопровода, штуцеры и хрон работу, но после того, как много прибегая к помощи, кофе и Wu Tang позже я придумал что-то вроде этого. Код: walletnotify = / дом / btcdev / walletnotifyclient 127.0.0.1 1337% s walletnotifyclient.c Код: #включают #включают #включают #включают #включают #включают #включают #включают ИНТ основной (интермедиат ARGC, символ * ARGV []) { если (ARGC < 4) { Е ("\ П Использование:% s <имя хоста> <порт> Выход (0); } INT sockfd, portno, п; структура sockaddr_in serv_addr; структура hostent * сервер; символ буфера [256]; portno = atoi (ARGV [2]); sockfd = сокет (AF_INET, SOCK_STREAM, 0); если (sockfd < 0) { fprintf (STDERR,"ОШИБКА, сокет открытия \ п"); Выход (0); } Сервер = gethostbyname (ARGV [1]); если (сервер == NULL) { fprintf (STDERR,"не ОШИБКИ, нет такого хоста \ п"); Выход (0); } bzero ((символ *) &serv_addr, SizeOf (serv_addr)); serv_addr.sin_family = AF_INET; bcopy ((символ *) server->h_addr, (Символ *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons (portno); если (подключение (sockfd (структура SOCKADDR *) &serv_addr, SizeOf (serv_addr)) < 0) { fprintf (STDERR,"ОШИБКА, соединяясь \ п"); Выход (0); } snprintf (буфер, SizeOf (буфер), "% s", ARGV [3]); п = записи (sockfd, буфер, STRLEN (буфер)); если (п < 0) { fprintf (STDERR,"ERROR, запись в сокет \ п"); Выход (0); } близко (sockfd); возвращать 0; Выход (0); } Сервер, PHP Код: PHP включают 'Bitcoin_lib.php'; $ Bitcoin = новый Bitcoin('HTTP: // пользователь: pass@127.0.0.1: 8332 /'); $ TXID = Массив ( «Неподтвержденные» знак равно> Массив (), «Подтвердил» знак равно> Массив () ); $ currentBlock знак равно 0; // текущий блок $ minConfirmation знак равно 3; // минимальное Подтверждения tansaction $ blockThreshold знак равно 3; // блоки ждать проверки транзакции для подтверждения $ сервер знак равно stream_socket_server("ТСР: //127.0.0.1: 1337", $ ERRNO, $ ErrorMessage); если ($ сервер === ложный) { бросить новый UnexpectedValueException(«Не удалось выполнить привязку к гнезду: $ ErrorMessage"); } для (;;) { $ клиент знак равноstream_socket_accept($ сервер); если ($ клиент) { $ сообщение знак равно stream_get_contents($ клиент); если (StrLen($ сообщение) == 64) { // RECIVED в TXID эхо «Новый ТХ:».$ сообщение.«\ П»; $ TXID[«Неподтвержденные»] [] = Массив ( 'OnBlock' знак равно> $ currentBlock + $ blockThreshold, 'TXID' знак равно> $ сообщение ); } еще { // RECIVED текущего блока $ currentBlock знак равно $ Bitcoin->getblockcount(); эхо «Новый блок:».$ currentBlock.«\ П»; // цикл по неподтвержденным операций на новом блоке для каждого ($ TXID[«Неподтвержденные»] в виде $ ключ знак равно> $ unconfirmedTX) { если($ currentBlock >знак равно $ unconfirmedTX['OnBlock']) { эхо $ unconfirmedTX['TXID'].': Достиг blockThreshold'.«\ П»; $ gettransaction знак равно $ Bitcoin->gettransaction($ unconfirmedTX['TXID']); если($ gettransaction[«Подтверждение»] >знак равно $ minConfirmation) { // сделка была подтверждена эхо $ unconfirmedTX['TXID'].«: Подтвердил».«\ П»; снята с охраны ($ TXID[«Неподтвержденные»] [$ ключ]); $ TXID[«Подтвердил»знак равно $ gettransaction; } еще { // сделка не имеет мин подтверждения эхо $ unconfirmedTX['TXID'].«: Неподтвержденные ожидания».$ unconfirmedTX[«Подтверждение»].«блоки».«\ П»; $ blockstowait знак равно $ minConfirmation - $ unconfirmedTX[«Подтверждение»]; // набор блоков ожидания до перепроверки сделки $ gettransaction['OnBlock'знак равно $ currentBlock + $ blockstowait; $ TXID[«Неподтвержденные»] [$ ключзнак равно $ gettransaction; } } еще { $ blockstowait знак равно $ unconfirmedTX['OnBlock'] - $ currentBlock; эхо $ unconfirmedTX['TXID'].«: Не достиг blockThreshold, ждать».$ blockstowait.«блоки».«\ П»; } } } fclose($ клиент); } } ?> Я на правильном пути, или я сошел с ума? |
10 августа 2013, 6:32:52 AM | # 6 |
Сообщений: 34
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
Кроме того, что это правильный поток транзакций? В настоящее время у меня есть вещи созданы так, но, как это рекомендуется избегать обоих счетов и getbalance это явно не так.
|
10 августа 2013, 10:25:42 AM | # 7 |
Сообщения: 1610
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
Да, не делайте этого, если вы не конечно что ваш объем сделок будет крайне низким. Вы хотите, чтобы этот процесс управляется -walletnotify очень быстро. В идеале, он должен выплюнуть линию в трубе (или файл или сокет) и заканчиваться в кратчайшие сроки. Затем вы должны иметь другой процесс, либо демон или хроны, читали этот поток и собирать любую информацию, вам нужно. Вы должны проверять счетчик с подтверждением сделок, а не баланс счета. В этом отношении, используя счета вы можете получить в беду. Убедитесь, что вы знаете, что вы делаете, если вы собираетесь использовать их на всех. -walletnotify срабатывает, когда транзакция входит в блок, но он может также вызвать, если сделка показывает вверх по сети в свободной сделки. Таким образом, вы должны проверить подтверждение подсчитывать каждый раз -walletnotify хитов, пока не увидите, по крайней мере одно подтверждения. После этого, вы должны проверить его каждый раз, когда вы видите блок, чтобы убедиться, что счетчик достиг порога. Вы могли бы оптимизировать, что немного, пропуская медленные вызовы RPC, пока <порог> количество блоков были замечены после того, как сделка была первой включена. Если честно, когда я прочитал Ваш комментарий несколько часов назад я понятия не имел, что было трубопровода, штуцеры и хрон работу, но после того, как много прибегая к помощи, кофе и Wu Tang позже я придумал что-то вроде этого. Код: walletnotify = / дом / btcdev / walletnotifyclient 127.0.0.1 1337% s walletnotifyclient.c Код: #включают #включают #включают #включают #включают #включают #включают #включают ИНТ основной (интермедиат ARGC, символ * ARGV []) { если (ARGC < 4) { Е ("\ П Использование:% s <имя хоста> <порт> Выход (0); } INT sockfd, portno, п; структура sockaddr_in serv_addr; структура hostent * сервер; символ буфера [256]; portno = atoi (ARGV [2]); sockfd = сокет (AF_INET, SOCK_STREAM, 0); если (sockfd < 0) { fprintf (STDERR,"ОШИБКА, сокет открытия \ п"); Выход (0); } Сервер = gethostbyname (ARGV [1]); если (сервер == NULL) { fprintf (STDERR,"не ОШИБКИ, нет такого хоста \ п"); Выход (0); } bzero ((символ *) &serv_addr, SizeOf (serv_addr)); serv_addr.sin_family = AF_INET; bcopy ((символ *) server->h_addr, (Символ *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons (portno); если (подключение (sockfd (структура SOCKADDR *) &serv_addr, SizeOf (serv_addr)) < 0) { fprintf (STDERR,"ОШИБКА, соединяясь \ п"); Выход (0); } snprintf (буфер, SizeOf (буфер), "% s", ARGV [3]); п = записи (sockfd, буфер, STRLEN (буфер)); если (п < 0) { fprintf (STDERR,"ERROR, запись в сокет \ п"); Выход (0); } близко (sockfd); возвращать 0; Выход (0); } Сервер, PHP Код: PHP $ TXID = Массив (); $ сервер знак равно stream_socket_server("ТСР: //127.0.0.1: 1337", $ ERRNO, $ ErrorMessage); если ($ сервер === ложный) { бросить новый UnexpectedValueException(«Не удалось выполнить привязку к гнезду: $ ErrorMessage"); } для (;;) { $ клиент знак равноstream_socket_accept($ сервер); если ($ клиент) { $ TXIDзнак равно stream_get_contents($ клиент); var_dump($ TXID); fclose($ клиент); } } ?> Я на правильном пути, или я сошел с ума? |
10 августа 2013, 12:15:13 PM | # 8 |
Сообщения: 1302
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
Цитирование для архивных целей. Но ничего себе, вы ловите на быстро. Без шуток. Когда я увидел это, freeloader247 стал моим любимым человеком. Я до сих пор не было возможности прочитать его программы в деталях, но он, конечно, на правильном пути. Кроме того, что это правильный поток транзакций? В настоящее время у меня есть вещи созданы так, но, как это рекомендуется избегать обоих счетов и getbalance это явно не так.
Когда вы создаете новый адрес, чтобы принять платеж, копить копию в локальной базе данных, наряду с тем, что идентификация вам нужно. Это может быть как простой, как {адрес, номер заказа} или {адрес, идентификатор пользователя}. Поскольку система уведомления транзакций на основе, можно использовать что-то вроде gettransaction или getrawtransaction с подробный флаг для обработки. Если вы пара это с -blocknotify, вы можете реально уменьшить количество медленных RPC вызовы, которые вы должны сделать. В принципе, вы gettransaction каждый раз -walletnotify триггеров, пока он не возвращает 1 подтверждение. Если вы хотите 6 подтверждения, вы делаете заметки, чтобы вернуться и проверить еще раз после того, как -blocknotify хиты еще 5 раз. В этот момент, gettransaction должен прочитать 6 подтверждений. Если это не так, то поздравляю, ваша система была достаточно умна, чтобы не ведитесь на цепи REORG, положил его обратно в очереди, чтобы проверить еще раз после того, как X более блоков. |
10 августа 2013, 5:34:27 PM | # 9 |
Сообщений: 34
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
[Удалено]
|
12 августа 2013, 2:49:31 PM | # 10 |
Сообщения: 1582
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
PHP может быть запущен через командную строку тоже. Посмотрите на PHP CLI. То, что я имею в виду, что команда управляет walletnotify может быть сам скрипт.
|
12 августа 2013, 3:02:30 PM | # 11 |
Сообщения: 1302
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
Изменить: Я идиот -blocknotify возвращает новый блок хэша не текущую высоту блока. Edit: если кто-то код для идентификации блока хэшей из транзакции Идентификаторы завербовать меня, иначе я буду спать и будет делать это завтра. Blocknotify просто дает хэш. Хэш даже не важно, просто событие. Большая часть времени, получая блок означает, что вы расширили основную цепь, но не всегда. Если вам нужно больше 5 подтверждений, то нет проверки статуса транзакции, пока не появятся 5 новых блоков точки. Но, видя 5 новых блоков не автоматически означает, что сделка вы смотрите видела 5 дополнительных подтверждений. Если есть вилка, или REORG, или что-то еще, ваш счетчик подтверждения может быть на самом деле пошли вниз. Так, как только у вас есть достаточное количество блоков, которые вы мог бы иметь достаточное количество подтверждений, вы убедитесь, проверив gettransaction, чтобы быть уверенным. |
13 августа 2013, 5:15:38 AM | # 12 |
Сообщений: 34
цитировать ответ |
Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?
[Удалено]
|