Здравствуй,
я пытаюсь сделать bitcoinmonitor.net более автоматизированной отказоустойчивыми. Одна вещь, которая в настоящее время требует ручного вмешательства администратора является простои основного приложения, а bitcoind все еще работает. В этом сценарии bitcoind будет пытаться уведомить приложение о новых блоках. Поскольку приложение вниз, эти уведомления теряются.
Результат: Когда приложение работает снова администратор должен вручную убедиться, что пропущенные блоки собираются и обрабатываются apropriately.
Идея автоматизировать этот процесс:
- App хранит для каждого принятого блока хэш и высоту.
- Если новый блок поставляется в приложении вычисляет дельту между высотой нового блока и высотами в последний раз видел блок.
- Обычно дельта должна быть ровно 1, но в случае, если блоки были пропущены приложением дельта будет больше.
- Если блоки пропустили запросы приложения недостающие блоки, используя getblockhash (высота) и getblock (хэш) команды Rpc
Так что, если последний принятый блок имеет высоту 10 и новый блок высоты 15 приходит в приложении будет пытаться получить дополнительно блоки высоты 11,12,13 и 14.
Я думаю, что это должно работать нормально в обычном случае, но я не уверен, если это будет безопасно для blockchain сценариев Reorg.
Может случиться так, что после того, как REORG новейший блок имеет высоту, чем последний видел?
Или, может случиться так, что после повторного орга нового блок принимается на ту же высоту последнего блока?
Обратите внимание, что мой bitcoind патча triggeres уведомление о новых блоках только тогда, когда они принимаются и часть основной цепи (запускающий делаются в конце CBlock :: AcceptBlock ())