Медленное распространение и медленная проверка — это не одна и та же проблема

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

Как короткие идентификаторы помогают восстановить блок

Компактный блок, описанный в BIP152, содержит заголовок блока, случайное число, используемое для генерации короткого идентификатора, предварительно заполненные транзакции и короткие идентификаторы для других транзакций. Принимающий узел пытается сопоставить транзакции из своего локального пула памяти, а затем восстанавливает блок последовательно. Короткий идентификатор не является полным идентификатором транзакции и не является доказательством баланса; это компактная подсказка, разработанная для этого процесса распространения, и её нельзя использовать независимо для проверки подлинности транзакций.

Что происходит, когда отсутствуют локальные транзакции

Если принимающий узел не имеет транзакций, сталкивается с неоднозначностью соответствия или не может восстановить блок, он запросит недостающую часть у своего партнера. Сетевые политики, различия в пуле памяти и такие факторы, как запуск узла, могут влиять на частоту попаданий. Наблюдение за записью «запрос на завершение транзакций» не должно сразу же приводить к выводу о злонамеренности другой стороны или о программной ошибке; необходимо учитывать долю отсутствующих транзакций, качество соединения и то, была ли завершена последующая проверка.

Пример процесса восстановления

Предположим, что новый блок содержит несколько транзакций, и узел уже видел большинство из них в мемпуле. После получения компактного блока он может напрямую заполнить известные позиции, а затем загрузить оставшиеся транзакции. Если узел только что завершил синхронизацию, а мемпул невелик, стоимость завершения обработки данных увеличится. Этот пример лишь объясняет механизм и не должен рассматриваться как реальная сетевая статистика, а также не может гарантировать задержку распространения в майнинговом пуле.

Что должны отслеживать операторы узлов

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

Как избежать недоразумений при чтении новостей по теме

При появлении заголовков типа «сжатие блоков» или «синхронизация второго уровня» уточните, относится ли сообщение к распространению блоков, исторической синхронизации или окончательности консенсуса. Сжатые блоки не снижают требования к проверке транзакций в реестре и не делают подтвержденные транзакции абсолютно неорганизуемыми. Сохраните версию BIP, реализацию программного обеспечения и тестовую среду для сравнения с выводами автора; показатели скорости без этих условий не следует сравнивать напрямую.