Могут ли быть устаревшие блоки в реализации «header first»?

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

PS Я подумываю использовать блокчейн для подсчета очков в своей игре, чтобы иметь универсальную десятку. Приветствуются любые комментарии.

Ответы (2)

Устаревшие и сиротские блоки запутывают термины со многими значениями, в зависимости от того, кого вы спрашиваете.

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

Если под блоками-сиротами вы подразумеваете «блоки, родительский заголовок которых неизвестен», то их действительно больше не существует. Они были артефактом реализации синхронизации, использовавшейся до версии 0.9. Начиная с версии 0.10, мы запрашиваем блоки только после проверки всех заголовков в их родословной, поэтому блоки без известных заголовков больше не могут появляться.

Хорошо, вы только что сделали то же самое.
@SiteNook: Если вы хотели попросить Питера прояснить ситуацию, я не думаю, что вы поняли свою точку зрения понятно.
Важно отметить, что термин «сиротский блок» почти повсеместно используется для обозначения «устаревшего блока». Причина этой путаницы заключается в том, что если вы майнер и добываете блок, а затем этот блок становится устаревшим, транзакция coinbase, показывающая платеж в вашем кошельке, показывает состояние «осиротевший», потому что кошелек больше не отслеживает блок, из которого он пришел. -- с точки зрения кошелька у транзакции нет родителя. Поэтому люди стали называть устаревшие блоки блоками-сиротами, хотя «блоки-сироты» уже использовались в системе и означали нечто совершенно другое.

Хорошо, я узнал больше об устаревших блоках в Memory Pools .
Существует описание того, как устаревшие блоки повторно добавляются в пул один за другим с заменой, чтобы быть немедленно удаленными, если замещающий блок уже включен, или иным образом повторно добавляются ядром Bitcoin в качестве новых транзакций, удаляя подтвержденные транзакции.
Вот абзац на случай, если ссылка не работает:

Транзакции, преобразованные в блоки, которые впоследствии становятся устаревшими блоками, могут быть добавлены обратно в пул памяти. Эти повторно добавленные транзакции могут быть повторно удалены из пула почти сразу же, если они включаются в замещающие блоки. Так обстоит дело в Bitcoin Core, который удаляет устаревшие блоки из цепочки один за другим, начиная с вершины (самый высокий блок). Когда каждый блок удаляется, его транзакции добавляются обратно в пул памяти. После того, как все устаревшие блоки удалены, в цепочку один за другим добавляются новые блоки, заканчивающиеся новым наконечником. По мере добавления каждого блока все транзакции, которые он подтверждает, удаляются из пула памяти.

Судя по вашему ответу, я думаю, вы пытаетесь понять, как происходит реорганизация сети. Возможно, вы хотите проверить вопросы, помеченные тегом реорганизации цепи .