Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
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 =
Jouke сейчас офлайн Пожаловаться на Jouke   Ответить с цитированием Мультицитирование сообщения от Jouke Быстрый ответ на сообщение Jouke

9 августа 2013, 3:44:37 AM   # 3
 
 
Сообщений: 34
Цитировать по имени
цитировать ответ
по умолчанию Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?

Есть ли пример реализации -walletnotify в PHP? Сейчас мой код выглядит примерно так

Код:
$ Bitcoin = новый Bitcoin (jsoncredentials);

$ bitcoin->getbalance (счет);

если ($ Баланс >= Get_Price (ID)) {
}

и он чувствует себя очень неаккуратно / хаком.
freeloader247 сейчас офлайн Пожаловаться на freeloader247   Ответить с цитированием Мультицитирование сообщения от freeloader247 Быстрый ответ на сообщение freeloader247

9 августа 2013, 3:59:04 AM   # 4
kjj
 
 
Сообщения: 1302
Цитировать по имени
цитировать ответ
по умолчанию Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?

Да, не делайте этого, если вы не конечно что ваш объем сделок будет крайне низким.

Вы хотите, чтобы этот процесс управляется -walletnotify очень быстро. В идеале, он должен выплюнуть линию в трубе (или файл или сокет) и заканчиваться в кратчайшие сроки.

Затем вы должны иметь другой процесс, либо демон или хроны, читали этот поток и собирать любую информацию, вам нужно. Вы должны проверять счетчик с подтверждением сделок, а не баланс счета. В этом отношении, используя счета вы можете получить в беду. Убедитесь, что вы знаете, что вы делаете, если вы собираетесь использовать их на всех.

-walletnotify срабатывает, когда транзакция входит в блок, но он может также вызвать, если сделка показывает вверх по сети в свободной сделки. Таким образом, вы должны проверить подтверждение подсчитывать каждый раз -walletnotify хитов, пока не увидите, по крайней мере одно подтверждения. После этого, вы должны проверить его каждый раз, когда вы видите блок, чтобы убедиться, что счетчик достиг порога. Вы могли бы оптимизировать, что немного, пропуская медленные вызовы RPC, пока <порог> количество блоков были замечены после того, как сделка была первой включена.
kjj сейчас офлайн Пожаловаться на kjj   Ответить с цитированием Мультицитирование сообщения от kjj Быстрый ответ на сообщение kjj

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 <имя хоста> <порт> \ п", ARGV [0]);
Выход (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
Код:
включают '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($ клиент);
}

}
?>


Я на правильном пути, или я сошел с ума?
freeloader247 сейчас офлайн Пожаловаться на freeloader247   Ответить с цитированием Мультицитирование сообщения от freeloader247 Быстрый ответ на сообщение freeloader247

10 августа 2013, 6:32:52 AM   # 6
 
 
Сообщений: 34
Цитировать по имени
цитировать ответ
по умолчанию Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?

Кроме того, что это правильный поток транзакций? В настоящее время у меня есть вещи созданы так, но, как это рекомендуется избегать обоих счетов и getbalance это явно не так.

  • Регистрация: getnewaddress для пользователя setaccount для идентификатора пользователя.
  • Сделка: getbalance пользователей счета и убедитесь, что больше, чем цена покупки.

freeloader247 сейчас офлайн Пожаловаться на freeloader247   Ответить с цитированием Мультицитирование сообщения от freeloader247 Быстрый ответ на сообщение freeloader247

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 <имя хоста> <порт> \ п", ARGV [0]);
Выход (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
Код:
$ TXID = Массив ();
$ сервер знак равно stream_socket_server("ТСР: //127.0.0.1: 1337"$ ERRNO$ ErrorMessage);

если (
$ сервер === ложный) {
    бросить новый 
UnexpectedValueException(«Не удалось выполнить привязку к гнезду: $ ErrorMessage");
}

для (;;) {
    
$ клиент знак равноstream_socket_accept($ сервер);

    если (
$ клиент) {
$ TXIDзнак равно stream_get_contents($ клиент);
var_dump($ TXID);
        
fclose($ клиент);
    }
}
?>


Я на правильном пути, или я сошел с ума?
Цитирование для архивных целей. Но ничего себе, вы ловите на быстро.
Помните, помните 5 ноября сейчас офлайн Пожаловаться на Помните, помните 5 ноября   Ответить с цитированием Мультицитирование сообщения от Помните помню 5 ноября Быстрый ответ на сообщение Помните, помните 5 ноября

10 августа 2013, 12:15:13 PM   # 8
kjj
 
 
Сообщения: 1302
Цитировать по имени
цитировать ответ
по умолчанию Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?

Цитирование для архивных целей. Но ничего себе, вы ловите на быстро.

Без шуток. Когда я увидел это, freeloader247 стал моим любимым человеком.

Я до сих пор не было возможности прочитать его программы в деталях, но он, конечно, на правильном пути.

Кроме того, что это правильный поток транзакций? В настоящее время у меня есть вещи созданы так, но, как это рекомендуется избегать обоих счетов и getbalance это явно не так.

  • Регистрация: getnewaddress для пользователя setaccount для идентификатора пользователя.
  • Сделка: getbalance пользователей счета и убедитесь, что больше, чем цена покупки.

Когда вы создаете новый адрес, чтобы принять платеж, копить копию в локальной базе данных, наряду с тем, что идентификация вам нужно. Это может быть как простой, как {адрес, номер заказа} или {адрес, идентификатор пользователя}. Поскольку система уведомления транзакций на основе, можно использовать что-то вроде gettransaction или getrawtransaction с подробный флаг для обработки.

Если вы пара это с -blocknotify, вы можете реально уменьшить количество медленных RPC вызовы, которые вы должны сделать.

В принципе, вы gettransaction каждый раз -walletnotify триггеров, пока он не возвращает 1 подтверждение. Если вы хотите 6 подтверждения, вы делаете заметки, чтобы вернуться и проверить еще раз после того, как -blocknotify хиты еще 5 раз. В этот момент, gettransaction должен прочитать 6 подтверждений. Если это не так, то поздравляю, ваша система была достаточно умна, чтобы не ведитесь на цепи REORG, положил его обратно в очереди, чтобы проверить еще раз после того, как X более блоков.
kjj сейчас офлайн Пожаловаться на kjj   Ответить с цитированием Мультицитирование сообщения от kjj Быстрый ответ на сообщение kjj

10 августа 2013, 5:34:27 PM   # 9
 
 
Сообщений: 34
Цитировать по имени
цитировать ответ
по умолчанию Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?

[Удалено]
freeloader247 сейчас офлайн Пожаловаться на freeloader247   Ответить с цитированием Мультицитирование сообщения от freeloader247 Быстрый ответ на сообщение freeloader247

12 августа 2013, 2:49:31 PM   # 10
 
 
Сообщения: 1582
Цитировать по имени
цитировать ответ
по умолчанию Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?

PHP может быть запущен через командную строку тоже. Посмотрите на PHP CLI. То, что я имею в виду, что команда управляет walletnotify может быть сам скрипт.
Abdussamad сейчас офлайн Пожаловаться на Abdussamad   Ответить с цитированием Мультицитирование сообщения от Abdussamad Быстрый ответ на сообщение Abdussamad

12 августа 2013, 3:02:30 PM   # 11
kjj
 
 
Сообщения: 1302
Цитировать по имени
цитировать ответ
по умолчанию Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?

Изменить: Я идиот -blocknotify возвращает новый блок хэша не текущую высоту блока.
Edit: если кто-то код для идентификации блока хэшей из транзакции Идентификаторы завербовать меня, иначе я буду спать и будет делать это завтра.

Blocknotify просто дает хэш. Хэш даже не важно, просто событие. Большая часть времени, получая блок означает, что вы расширили основную цепь, но не всегда.

Если вам нужно больше 5 подтверждений, то нет проверки статуса транзакции, пока не появятся 5 новых блоков точки.  Но, видя 5 новых блоков не автоматически означает, что сделка вы смотрите видела 5 дополнительных подтверждений. Если есть вилка, или REORG, или что-то еще, ваш счетчик подтверждения может быть на самом деле пошли вниз. Так, как только у вас есть достаточное количество блоков, которые вы мог бы иметь достаточное количество подтверждений, вы убедитесь, проверив gettransaction, чтобы быть уверенным.
kjj сейчас офлайн Пожаловаться на kjj   Ответить с цитированием Мультицитирование сообщения от kjj Быстрый ответ на сообщение kjj

13 августа 2013, 5:15:38 AM   # 12
 
 
Сообщений: 34
Цитировать по имени
цитировать ответ
по умолчанию Re: Есть ли лучший способ, чтобы получить уведомление о получает с bitcoind?

[Удалено]
freeloader247 сейчас офлайн Пожаловаться на freeloader247   Ответить с цитированием Мультицитирование сообщения от freeloader247 Быстрый ответ на сообщение freeloader247



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW