Реальная история.
Большинство клиентов делают использовать контрольно-пропускной пункт (который обновляется от выпуска к выпуску). Важно понимать, что не существует централизованного реестра контрольно-пропускных пунктов это до каждого разработчика для осуществления контрольно-пропускные пункты (если таковые имеются).
Я считаю, что Satoshi клиент последняя контрольная точка находится примерно в блок 180000. Отдельные узлы будут отвергать любые представления блока до блокировки 180000, если он уже имеет действующую сеть. Кроме того, когда не bootstapping (не blockchain) отдельные узлы будут отвергать любые цепи, которые печатные хэш не совпадают с контрольной точкой хэш.
На редактирования:
Было бы перехитрили просто прочитать код.
https://github.com/bitcoin/bitcoin/blob/master/src/checkpoints.cpp статический MapCheckpoints mapCheckpoints =
повышение :: правопреемником :: map_list_of
(11111, uint256 ("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"))
(33333, uint256 ("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6"))
(74000, uint256 ("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20"))
(105000, uint256 ("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97"))
(134444, uint256 ("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe"))
(168000, uint256 ("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763"))
(193000, uint256 ("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317"))
;
Так в настоящее время первый контрольно-пропускной пункт находится в блоке 11,111 и последний находится в 193,000. Один потенциальный район "атака" (И это будет относительно слабым) является то, что контрольные точки являются редкими. Существует ~ 30К блоков между контрольно-пропускных пунктах. Таким образом, "плохой узел" может затопить узел, который самозагрузка (здание исторического blockchain). Теперь, как только узел попадает на контрольно-пропускной пункт (т.е. блок # 11111) плохой узел не сможет завершить эту цепочку. Однако плохой узел мог переключаться и обеспечить правильные блоки (возможно, через другой узел) через блок # 11,111, а затем обеспечить еще 22,222 плохие блоки.
Так как блоки могут быть построены, чтобы иметь большое количество сделок в "плохой узел" может значительно повысить требования к обработке хороших узлов. Это может быть смягчено путем обеспечения полного "контрольно-пропускной пункт списка" каждый blockhash через последний контрольно-пропускной пункт. (То есть выше код будет иметь записи для блоков 1 через 193,000). На редактирования: Мне нравится идея Гэвина лучше. По многим причинам, было бы полезно, если протокол позволяет вытягивать только блок заголовков. Он решает не только эту слабую атаку (которая не должна быть приоритетом, чтобы исправить), но и делает протокол более надежной.
В общих узлах относительно "наивный" в работе с узлами плохого поведения. Скорее всего, как раз идет о методе сбора сверстникам необходимо будет расширить. По существу, узел будет отслеживать все свои узлы плюс всех известных, но не связанные узлы. Узлы, которые предоставляют неверные данные, постоянно спам уже известные данные, имеют высокую латентность, ЧерезРетранслы значительно медленнее, чем сверстники, и т.д. могут быть засчитаны вниз и когда они падают ниже порог узел будет посылать им сообщение об ошибке, и игнорировать их в течение некоторого периода времени. Узел может затем попытаться подключиться к новому известному, но еще не используются узел. Код в настоящее время делает немного об этом, но она может быть расширена, чтобы сделать протокол более закаленным.
Узлы могут также использовать цифровые подписи, которые бы помочь в построении "Сеть доверия", Например, если я доверяю MtGox и blockchain.info я мог бы отметить их "узел открытых ключей" как доверенный. Они забиты выше, протокол может быть расширены таким образом, когда я запрашиваю доверенный узел для других узлов не только дает мне список, но и их оценку. Целый "если я вам доверяю, то я могу доверять людям, вы доверяете слишком" концепция.