не слежу за BSV,BCH. Мне технически не понятно как по сети будут распространятся большие блоки 128 мегабайт?
Это может вызвать проблемы
Если использовать фильтры для исключения передачи данных, которые у ноды уже есть, то особых проблем не возникнет. Даже если блок будет весить терабайт.
Реализация у коры и крейгофорков разная, но общий принцип такой:
1. Нода 1 получает анонс от ноды 2 с заголовком нового блока. Если такой блок уже есть, то анонс игнорируется, иначе проверяем PoW и идем дальше, если PoW валиден.
2. Нода 1 создает bloom фильтр и забивает в него хэши всех транзакций, которые есть в локальном мемпуле и в данных, ранее добавленных в очередь обработки новых блоков.
3. Нода 1 отправляет ноде 2 запрос содержимого нового блока, включающий полученный в анонсе хэш и сгенерированный ранее фильтр.
4. Нода 2, получив запрос содержимого, проверяет есть ли такой блок. Если есть, то отвечает сообщением, содержащим транзакции, хэши которых дают отрицательный результат при проверке переданным фильтром. Вместо транзакций, дающих положительный результат, вставляются просто их хэши.
5. Нода 1, получив сообщение с данными блока, валидирует их. Если данные некорректны, то ноде 2 даются очки "нехорошего поведения" и это сообщение далее не обрабатывается. Если в очереди были какие-либо данные, связанные с этим сообщением, то они удаляются.
6. Нода 1 пробует собрать блок из полученного заголовка и данных, подставив вместо отсутствующих транзакций то, что у неё есть в мемпуле и в очереди сообщений, полученных ранее.
7. Если в мемпуле есть все нужные данные и сборка блока прошла успешно, то он валидируется так, как будто был получен целиком. Затем, из очереди удаляются все сообщения, связанные с полученным блоком, а всем пирам ноды отправляется анонс, аналогичный тому, который был получен на шаге 1.
8. Если в мемпуле не хватает данных, нода 1 возвращается к шагу 2.
9. Конец.
Итоговый объем данных, передаваемых при обмене информацией о новых блоках в сети, может быть до смешного маленьким. Размер блум фильтра будет около 60-70 килобайт, а размер сообщения с данными о блоке в случае 100% совпадения с мемпулом - это 80 байт заголовка плюс размеры хэшей всех включенных транзакций.