Проверка блока является более сложной, чем проверка транзакций.
В дополнение к проверке заголовка и того, что значение хеша заголовка находится в допустимом диапазоне, узлы должны проверять каждую транзакцию, включенную в блок.
Наконец, узел будет ретранслировать блок только в том случае, если он основывается на самой длинной ветви цепочки блоков.
Это позволяет избежать образования вилок.
Но, как и при транзакциях, узлы могут реализовать различную логику, если они этого захотят – они могут ретранслировать блоки, которые недопустимы, или блоки, которые строятся из более ранней точки в цепочке блоков.
Это создаст вилку, но все будет в порядке, потому что протокол биткойна разработан таким образом, чтобы противостоять этому.
Теперь вопрос, какова латентность алгоритма наводнения или сплетен?
График на слайде показывает среднее время, за которое новые блоки распространяются в каждый узел сети.
Три линии показывают время покрытия блоком 25, 50 и 75 процентов сети.
Как вы можете видеть, время распространения пропорционально размеру блока.
Это связано с тем, что пропускная способность сети является узким местом.
Большие блоки занимают более 30 секунд для распространения на большинство узлов в сети.
Таким образом, это не очень эффективный протокол.
В Интернете 30 секунд довольно долгое время.
В дизайне Биткойна наличие простой сети с простой структурой, где узлы равны и могут приходить и уходить в любое время, имеют приоритет над эффективностью.
Таким образом, блоку может потребоваться пройти через множество узлов, прежде чем он достигнет самых отдаленных узлов в сети.
Если бы сеть была разработана сверху вниз для повышения эффективности, тогда путь между любыми двумя узлами был бы коротким.
Теперь вопрос, какой размер сети биткойнов.
Трудно измерить, насколько велика сеть, так как она динамична, и не существует центрального узла.
Ряд исследователей дают разные оценки.
Некоторые говорят, что более миллиона IP-адресов действуют одновременно, как узлы биткойна.
С другой стороны, оценивают, что в сети находятся только от 5000 до 10000 узлов, которые постоянно подключены и полностью проверяют каждую транзакцию, которую они слышат.
Полностью проверяющие узлы должны быть постоянно подключены, чтобы слышать обо всех данных.
Чем дольше узел находится в автономном режиме, тем ему дольше придется восстанавливать актуальность данных, когда он снова присоединиться к сети.
Такие узлы должны хранить полную цепочку блоков и нуждаются в хорошем сетевом соединении, чтобы иметь возможность слышать каждую новую транзакцию и пересылать ее пирам.
Полностью проверяющим узлам требуется хранить несколько десятков гигабайт данных полного блокчейна.
Наконец, полностью проверяющие узлы должны создавать полный набор неизрасходованных выходов транзакций, которые можно потратить, и хранить этот набор в оперативной памяти, так что, слушая новую предлагаемую транзакцию в сети, узел смог бы быстро найти выходы транзакций, которые пытаются потратить, запустить скрипты, посмотреть, действительно ли действительны подписи, и добавить транзакцию в пул транзакций.
На сегодняшний день, в блочной цепочке насчитывается около 300 миллионов транзакций, из которых около 60 миллионов остались неизрасходованными.
В отличие от полностью проверяющих узлов, существуют легковесные узлы, также называемые тонкими клиентами или клиентами Simple Payment Verification (SPV).
Фактически, подавляющее большинство узлов в сети Биткойн – это легкие узлы.
Они отличаются от полностью проверяющих узлов тем, что они не хранят полную цепочку блоков.
Они хранят только те части, которые им необходимы, чтобы проверить конкретные транзакции, которые им интересны.
Если вы используете программу кошелька, она обычно включает узел Simple Payment Verification (SPV).
Узел загружает заголовки блоков и транзакции, которые представляют платежи на ваши адреса.
У узла SPV нет уровня безопасности полностью проверяющего узла.
Поскольку узел имеет заголовки блоков, он может проверить, что блоки были добыты, но он не может проверить, что каждая транзакция, включенная в блок, действительно валидная, так как узел не имеет истории транзакций и не знает набор неизрасходованных транзакций.
Узлы SPV могут только проверять транзакции, которые на самом деле влияют на них.
Поэтому они, по сути, доверяют полностью проверяющим узлам, которые подтвердили все остальные транзакции, которые там есть.
Это не плохой компромисс.
Они предполагают, что существуют полностью проверяющие узлы, которые выполняют тяжелую работу, и что, если майнеры добыли этот блок, что является очень дорогостоящим процессом, они, вероятно, также выполнили проверки, чтобы убедиться, что этот блок не будет отброшен.
Экономия затрат на создание узла SPV огромная.
Заголовки блоков составляют примерно 1/1000 размера цепочки блоков.
Поэтому вместо хранения нескольких десятков гигабайт, это всего несколько десятков мегабайт.
Даже смартфон может легко выступать в качестве узла SPV в сети Bitcoin.
Так как биткойн опирается на открытый протокол, в идеале должно быть много разных реализаций, которые легко взаимодействуют друг с другом.
Таким образом, если в одной из них есть ошибка, это вряд ли приведет к разрушению всей сети.
Хорошей новостью является то, что протокол успешно реализуется.
Есть реализации на разных языках, таких как C ++ и Go, и люди создают много других реализаций.
Плохая новость заключается в том, что большинство узлов в сети работают с базовой библиотекой биткойнов, написанной на C ++, поддерживаемой базовыми разработчиками Bitcoin, а некоторые из этих узлов используют предыдущие устаревшие версии, которые не были обновлены.
В любом случае большинство из узлов используют некоторые вариации этого стандартного общего клиента.
Ограничения протокола
Поговорим о некоторых встроенных ограничениях протокола Bitcoin и почему их сложно улучшить.
Есть много ограничений, жестко закодированных в протоколе биткойнов, которые были определены, когда Биткойн был предложен в 2009 году, прежде чем кто-либо действительно подумал, что он может превратиться в глобально важную валюту.
К ним относятся ограничения на среднее время на блок 10 минут, размер блоков 1 мегабайт, количество подписей в блоке 20000, и делимость валюты (биткойны делятся только на 8 знаков после запятой), общее количество биткойнов 21 миллион, и структуру вознаграждения блока, которое начиналось с 50 биткойнов и делится пополам каждые 210000 блоков, и другие ограничения.
Ограничения на общее количество существующих биткойнов, а также структура вознаграждения за майнинг, скорее всего, никогда не будут изменены, поскольку экономические последствия их изменения слишком велики.
Майнеры и инвесторы сделали слишком большие ставки в системе, полагая, что структура вознаграждения Биткойна и ограниченная поставка биткойнов останутся такими, как планировалось.
Если это изменится, возникнут большие финансовые последствия для людей.
Поэтому сообщество в основном согласилось с тем, что эти аспекты, независимо от того, были ли они выбраны разумно, не изменятся.
Однако существуют другие изменения, которые, казалось бы, улучшают протокол, потому что некоторые первоначальные варианты дизайна не кажутся совершенно правильными с учетом ретроспективного анализа.