Что такое потерянные и устаревшие блоки?

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

Но что такое осиротевший блок. Как он создается? Как проверяется, что он потерян, и что делается с потерянным блоком?

Независимо от того, было ли оно принято большинством, это определение не имеет значения.

Ответы (4)

Устаревшие блоки :

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

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

Потерянные блоки :

Блоки Detached или Orphaned являются действительными блоками, которые не являются частью основной цепочки. Они могут возникать естественным образом, когда два майнера производят блоки в одно и то же время, или они могут быть вызваны злоумышленником (с достаточной вычислительной мощностью), пытающимся отменить транзакции.

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

Это означает, что пользователь может увидеть транзакцию как имеющую одно подтверждение, а затем, если будет получен более длинный блокчейн, не включающий транзакцию, он может вернуться к 0 подтверждениям.

Как написал Питер в своем ответе, то, что вы называете «сиротским блоком», является вымершим блоком, который может содержать «осиротевшие транзакции». Фактические блоки-сироты — это блоки, которые были получены узлом до того, как узел получил родительский блок.

Есть несколько определений с перекрывающимися значениями.

Первый, пожалуй, лучше всего назвать вымершими блоками. Это блоки, которые были созданы путем построения блока, который больше не является активным концом цепочки. Некоторые узлы могли в какой-то момент счесть его лучшим блоком, но они переключились на другую цепочку, которая больше не содержит соответствующего блока. Они действительны, проверены, и их происхождение до блока генезиса полностью известно — просто в настоящее время они не «активны». Их иногда называют устаревшими блоками (обычно в контексте программного обеспечения для майнинга, понимающего, что оно построено на старых данных) или блоками-сиротами. Последнее название происходит от того факта, что выплаты из вымерших блоков обозначаются как «осиротевшие» в эталонном клиенте (имея в виду тот факт, что их транзакции на базе монет теперь лишены родительских прав).

Однако существуют и настоящие сиротские блоки, где сиротство имеет исходное значение «не имеющий родителя». Это блоки, полученные узлом, который еще не имеет полного предка и, следовательно, не может быть проверен. Узлы сохраняют такие блоки в памяти, при этом просят своих пиров заполнить пробел в своей истории. Клиент их не показывает, поэтому, когда люди говорят о блоках-сиротах, они, скорее всего, имеют в виду вымершие блоки. Обратите внимание, что начиная с Bitcoin Core v0.10 таких блоков-сирот больше нет из-за значительного изменения механизма загрузки.

Терминология здесь запутанная :)

Хорошее объяснение. Питер, не могли бы вы подробнее рассказать о текущем механизме загрузки, который использует Bitcoin Core? Интересно, как это решает проблему сиротского блока.
@eugenkr Сначала загружаются и проверяются заголовки, еще до того, как клиент запрашивает данные блока. В результате он никогда не получит блоки, о родителях которых он не знает.
Попал в эту тему из Твиттера. Мое предложение - "одинокий блок".
Итак, чтобы подтвердить, эта диаграмма на blockchain.com показывает то, что вы предпочитаете называть вымершими блоками.

Сироты не находятся в цепочке (с точки зрения обрабатывающего узла), потому что их родители отсутствуют, устаревшие не находятся в цепочке, потому что у них нет дочерних элементов в цепочке.

Источник: глоссарий на bitcoin.org:

устаревшие блоки : «Блоки, которые были успешно добыты, но не включены в текущую лучшую цепочку блоков, вероятно, потому, что какой-то другой блок той же высоты сначала расширил свою цепочку».

и блоки-сироты : «Блоки, родительский блок которых не был обработан локальным узлом, поэтому они еще не могут быть полностью проверены».

«Сироты не в цепочке, потому что у них нет в цепочке родителей» — это утверждение неверно. потерянные блоки имеют «родительские» блоки, которые являются частью блокчейна
Согласно en.bitcoin.it/wiki/Vocabulary#Orphan_Block : «Блок-сирота — это блок, у которого нет известного родителя в самой длинной в настоящее время цепочке блоков. Не путать с устаревшим блоком (у которого есть известный родитель, но больше не является частью самой длинной цепочки)».

Оба ответа неплохие и хорошо объясняют концепцию потерянного блока ( или более точное название, согласно Питеру Вуили: вымершие блоки ). Я просто хочу дать конкретное представление будущим читателям, которые, как и я, могут также захотеть взглянуть на настоящие блоки-сироты в цепочке Биткойн :)

На веб-сайте blockchain.info есть некоторые подробные записи для этих потерянных блоков . Если вы нажмете на высоту блока, для вас будет даже информация о заголовке этих потерянных блоков, например, потерянный блок 503949 , добытый SlushPool.

Он также имеет представление статистики потерянных блоков , я загружаю его историю csv и могу рассчитать , что скорость потерянных блоков Биткойн составляет около 0,31% (с 2014/3/18 по 2017/6/14). Excel файл со статистикой здесь .