1.
Может быть, я не проверял его достаточно хорошо, но у меня сложилось впечатление, что оригинальный клиент, когда он посылает "getblocks", Он всегда спрашивает, как можно глубже - почему это сделать? Он просто создает ненужный трафик. Вы можете, конечно, оптимизировать его, без особых усилий.
Не уверен, что вы имеете в виду "как можно глубже", Мы всегда посылаем GetData, начиная с любым блоком, который мы уже знаем. Причина, начиная с ранних блоков и двигаться вперед, потому что проверка делается, этапы, и в каждой точке как можно больше уже подтверждено (как средство для предотвращения DoS-атак, в основном). Поскольку большинство проверок могут быть сделаны только тогда, когда у вас есть вся цепочка блоков от генезиса до одного проверяются, вы нуждаетесь в них более или менее в порядке.
2.
ИМО, вы должны также оптимизировать, как вы делаете "получить данные",
Не просто отправить GetData для всех блоков, которые вы не знаете, для всех коллег, в то же время - это безумие.
Вместо этого попытайтесь т.е. попросить каждый узел для другого блока - по одному, пока не соберете их всех ...
Это не так, мы просим только для каждого блока один раз (и повторить попытку после тайм-аута), но это делается для одного партнера (не все, и не сбалансировано по всем узлам). Это известная вредность, но изменение не является тривиальным, так как это делается проверка.
Существует одна стратегия, однако, что это в значительной степени приняты как способ пойти, но, конечно, кто-то еще должен реализовать, протестировать его, ... и это очень большое изменение. Основная идея заключается в том, что загрузка происходит в несколько этапов, а также, где первые только заголовки надуманным (с использованием getheaders) в процессе, подобном тому, как getblocks делается сейчас, только гораздо быстрее, конечно. Однако, вместо того, чтобы сразу извлечение блоков, подождите, пока длинная цепочка заголовков не доступна и проверено. Затем вы можете начать выборку отдельных блоков из отдельных сверстников, собрать их и проверить, как они подключены к сети. Преимущество заключается в том, что вы уже знаете, какая цепочка для извлечения блоков из, и не нужно делать вывод, что от того, что другие говорят вам.
3.
Последний, но тем не менее важный.
Прости меня сарказм, но я действительно не знаю, что все люди в Bitcoin Foundation делал в течение последних лет, к тому же судятся друг с другом и увеличение операционных издержек
Bitcoin Foundation только вокруг в течение года или около того, и они не контролируют развитие. Они платят зарплату Гэвина, но и другие разработчики являются добровольцами, которые работают на Bitcoin в свое свободное время.
Мы все знаем, что текущий протокол Bitcoin не масштабируется - так что было сделано, чтобы улучшить его?
Ничего!
Блоки становится все больше, но не было никаких улучшений к протоколу, вообще.
Вы не можете попросить то пэра для части блока - вам просто нужно скачать все 1Мбы его из одного IP.
BIP37 фактически ввели способ для извлечения частей блоков, и он может быть использован для извлечения блока с помощью всего сделок вы не слышали о, так что это позволяет избежать повторной передачи тех, которые уже были переданы в качестве отдельных сделок (хотя я не знать любого программного обеспечения, которое использует этот механизм блока Fetching еще, когда BIP37 доступен на нескольких узлах, я ожидаю, что это будет). Любая другая система, которая требует ведения переговоров, какие операции для отправки добавляет латентность блокировать время распространения, так что это не обязательно улучшение вы хотите.
Кроме того, каждый блок имеет точный хэш, так что это просто глупо, что во времена, когда даже MtGox API проходит через CloudFlare, чтобы сохранить пропускную способность, нет никакого решения, которое позволило бы узлу просто загрузить блок с сервера HTTP, и поэтому его вынуждена пиявки его из бедных, в основном DSL вооружен, сверстники.
Как я вижу это, решение было бы очень просто: каждый майнинг может легко использовать CloudFlare (или любой другой облачный сервис) для обслуживания блоков через HTTP.
Так что, если мой узел говорит "получить данные ...", Я не обязательно означает, что я хочу, чтобы это мегабайта данных от плохого узла и его тонкой связи DSL. Я был бы более чем счастлив просто получить URL, где я могу загрузить блок из - это, безусловно, будет быстрее, и не будет стекать пропускной способности восходящего канала партнёра, что много.
Есть много идей о том, как улучшить исторический блок загрузки. Я спорил для разделения между архивным хранением и свежим блоком релейной защитой, поэтому узлы могут быть полностью проверку активных узлов в сети без необходимости предоставлять какой-либо древний блок для тех, кто спрашивает. Что касается перехода к другим протоколам, есть bootstrap.dat поток, и там в последнее время говорят о другом механизме на рассылки Bitcoin-разработки.