29 апреля 2012, 10:02:39 AM   # 1
 
 
Сообщения: 488
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о blockheight поведении

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Здравствуй,

я пытаюсь сделать bitcoinmonitor.net более автоматизированной отказоустойчивыми. Одна вещь, которая в настоящее время требует ручного вмешательства администратора является простои основного приложения, а bitcoind все еще работает. В этом сценарии bitcoind будет пытаться уведомить приложение о новых блоках. Поскольку приложение вниз, эти уведомления теряются.
Результат: Когда приложение работает снова администратор должен вручную убедиться, что пропущенные блоки собираются и обрабатываются apropriately.

Идея автоматизировать этот процесс:
- App хранит для каждого принятого блока хэш и высоту.
- Если новый блок поставляется в приложении вычисляет дельту между высотой нового блока и высотами в последний раз видел блок.
- Обычно дельта должна быть ровно 1, но в случае, если блоки были пропущены приложением дельта будет больше.
- Если блоки пропустили запросы приложения недостающие блоки, используя getblockhash (высота) и getblock (хэш) команды Rpc

Так что, если последний принятый блок имеет высоту 10 и новый блок высоты 15 приходит в приложении будет пытаться получить дополнительно блоки высоты 11,12,13 и 14.

Я думаю, что это должно работать нормально в обычном случае, но я не уверен, если это будет безопасно для blockchain сценариев Reorg.
Может случиться так, что после того, как REORG новейший блок имеет высоту, чем последний видел?
Или, может случиться так, что после повторного орга нового блок принимается на ту же высоту последнего блока?

Обратите внимание, что мой bitcoind патча triggeres уведомление о новых блоках только тогда, когда они принимаются и часть основной цепи (запускающий делаются в конце CBlock :: AcceptBlock ())
Герберт сейчас офлайн Пожаловаться на Herbert   Ответить с цитированием Мультицитирование сообщения от Herbert Быстрый ответ на сообщение Herbert


Как заработать Биткоины?
Без вложений. Не майнинг.


29 апреля 2012, 10:15:45 AM   # 2
 
 
Сообщения: 1050
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о blockheight поведении

Получил 1806 Биткоинов
Реальная история.





CBlock :: AcceptBlock () вызывается для каждого блока, который прикрепляется к блоку дерева на диске, то есть каждый действительный блок, который имеет историю, ведущую обратно к блоку генеза. Он также призвал к блокам, которые не подключать впоследствии (те, с двойником проводит в них) или несвежих блоков, которые просто никогда не делают его в лучшей цепи.

Я думаю, что вы лучше зацепов в ConnectBlock () и, возможно, DisconnectBlock (). Они вызываются для каждого блока соединения и оставляя текущую лучшую цепь.
Pieter Wuille сейчас офлайн Пожаловаться на Pieter Wuille   Ответить с цитированием Мультицитирование сообщения от Pieter Wuille Быстрый ответ на сообщение Pieter Wuille

29 апреля 2012, 6:49:34 PM   # 3
 
 
Сообщения: 488
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о blockheight поведении

Ну, bitcoind только уведомляет мое приложение в случае, если принятый блок является частью текущей лучшей цепи:
Код:
если (hashBestChain == хэш)
{
    monitorBlock (* это, pindexBest);
}

Так что я не буду получать уведомления о блоках, которые не входят в основной цепи. Но, глядя на код, действительно, кажется, я мог бы пропустить новые блоки во время REORG.

Некоторая более справочная информация:
Обычно я беру новое уведомление блока только в качестве триггера для проверки отслеживаемых операций, если они получили больше подтверждений в настоящее время. Я только смотрю на содержавшихся сделок нового блока поймать случаи, когда начальная, неподтвержденные сделки не было получено. Это может произойти, если bitcoind или основное приложение в автономном режиме по любой причине или настроить адрес для контроля только после того, как сделка пришла пользователь.

Таким образом, это приводит обратно к первоначальному вопросу: Для того, чтобы поймать в этих офлайновых случаях, могу я просто взять текущую высоту, вычислить дельту с последней видели высоту блока и получить высоту-дельту по высоте 1 блоки от bitcoind догнать? Или может ли быть случаи, когда blockheight является "скачущий", Например, не линейна?

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

29 апреля 2012, 8:23:46 PM   # 4
 
 
Сообщения: 144
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о blockheight поведении

Теоретически, может быть новый лучший цепь, где высота блока остается неизменным или снижается. Лучшая цепь определяется как цепь с наибольшей общей работы, а не большинство блоков, так что возможно цепь содержит меньше блоков еще представляют больше работы (блоки имели более высокий уровень сложности).

На практике это вряд ли произойдет в основной сети Bitcoin. Может быть, если двое горняков одновременно генерировать последний блок в период сложности с различными печатными метками времени и, таким образом, различными трудностями для следующего периода сложности, а затем два шахтеров, которые решили построить на разных блоках одновременно генерировать блоки еще раз, вы можете увидеть новую лучшие цепь, которая является такой же высоты, как и предыдущий лучший цепи. Это было бы довольно редко, хотя.
twobitcoins сейчас офлайн Пожаловаться на twobitcoins   Ответить с цитированием Мультицитирование сообщения от twobitcoins Быстрый ответ на сообщение twobitcoins

4 мая 2012, 5:38:41 PM   # 5
 
 
Сообщений: 61
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о blockheight поведении

Не могли бы вы добавить код bitcoind добавить все данные в базу данных по себе, не уведомляя ваше приложение. Я предполагаю, что ваше приложение делает, что, когда он получает уведомление, так почему бы не вырезать посредник? Если это не представляется возможным, потому что ваше приложение использует какое-то внутренняя базу данных, вы могли бы bitcoind сохранить данные в плоский файл, если он не может подключиться к приложению, и когда ваше приложение возвращается в Интернет он может искать этот файл и импорт оттуда автоматически.
randomproof сейчас офлайн Пожаловаться на randomproof   Ответить с цитированием Мультицитирование сообщения от randomproof Быстрый ответ на сообщение randomproof

8 мая 2012, 8:08:23 AM   # 6
 
 
Сообщения: 488
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о blockheight поведении

Не могли бы вы добавить код bitcoind добавить все данные в базу данных по себе, не уведомляя ваше приложение. Я предполагаю, что ваше приложение делает, что, когда он получает уведомление, так почему бы не вырезать посредник? Если это не представляется возможным, потому что ваше приложение использует какое-то внутренняя базу данных, вы могли бы bitcoind сохранить данные в плоский файл, если он не может подключиться к приложению, и когда ваше приложение возвращается в Интернет он может искать этот файл и импорт оттуда автоматически.
Хм, это будет работать, но я хочу сохранить набор патчей для bitcoind как можно.
Поскольку это все равно только для экстренных случаев незапланированного простоя я осуществил первоначальное предложение в зависимости от blockheight. Кажется, очень маловероятно, что у меня есть незапланированных простоев веб-приложение, и в то же время в blockchain REORG. И если это произойдет, я все еще могу убрать, что вручную.
Спасибо всем за ваши ответы
Герберт сейчас офлайн Пожаловаться на Herbert   Ответить с цитированием Мультицитирование сообщения от Herbert Быстрый ответ на сообщение Herbert

8 мая 2012, 6:50:17 PM   # 7
 
 
Сообщения: 1652
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о blockheight поведении

При перезапуске, вы должны быть в состоянии спросить bitcoind для блока топ-оф-цепи (с использованием getblockcount / getblockhash / getblock).

Если это не в вашей базе данных, а затем добавить его. Тогда посмотрите на предыдущий блок хэша, и если это не в вашей базе данных попросить bitcoind для него (и так далее).

Для большей безопасности, после того, как вы все сделали спросить bitcoind снова для блока топ-оф-цепи, чтобы увидеть, если был блок повторно орг пока вы догоняли.
Гэвин Андресен сейчас офлайн Пожаловаться на Гэвин Андресен   Ответить с цитированием Мультицитирование сообщения от Gavin Andresen Быстрый ответ на сообщение Гэвин Андресен



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW