Stale Block відповідає правилам Bitcoin, але не належить до активного ланцюга. Це історія, за якою вузол рахує підтвердження й визначає доступні для витрачання кошти. Вузол — комп’ютер, що перевіряє блоки й транзакції. Вибір між дійсними гілками залежить від накопиченої роботи майнінгу. Для одержувача платежу це може означати втрату підтвердження та нове очікування, а не автоматичну втрату біткоїнів.
Уявімо майнерів Анну й Павела. Обоє працюють над продовженням того самого останнього блоку. Анна знаходить новий блок, але перш ніж Павел дізнається про нього, він знаходить свій. Обидва блоки можуть бути дійсними, лише з дещо різними наборами транзакцій. Вузли перевіряють блоки й транзакції. Вони отримують ці блоки в різному порядку й деякий час слідують за різними кінцями ланцюга. Коли одна дійсна гілка накопичить більше роботи й вузли її перевірять, вони перейдуть на неї. Блок на залишеній гілці називають Stale Block. [1]
Мережі Bitcoin потрібна спільна історія, щоб ті самі кошти не можна було успішно витратити двічі. Тому недостатньо перевірити, що кожен із двох блоків окремо відповідає правилам. Вузол має також вибрати, яку дійсну гілку продовжувати. Це різні питання: дійсність блоку та вибір ланцюга. Stale Block може містити правильний Proof of Work, тобто доказ роботи майнінгу, дійсні транзакції й підписи, але все одно не належати до обраної історії. Це не робить його помилковим чи шахрайським. [1] [2]
Припустімо, блок Павела містив ваш платіж, а гаманець показав одне підтвердження. Якщо переможе гілка Анни, усе залежить від її вмісту. Та сама транзакція може бути й у ній — тоді вона залишиться підтвердженою. Інакше вона може повернутися до Mempool, локального списку непідтверджених транзакцій вузла, й чекати іншого блоку. Проте повернення не гарантоване: транзакція має залишатися прийнятною й не суперечити новій історії. Якщо там уже є інша транзакція, що витрачає ті самі кошти, початковий платіж не може бути підтверджений у ній одночасно. [2]
Звичайний платіж відрізняється від Coinbase Transaction — першої транзакції блоку, яка нараховує майнеру винагороду. Вона включає нові біткоїни та комісії за транзакції. Якщо блок Павела залишається поза активним ланцюгом, його винагороду coinbase не можна витратити в цій історії. Вона не переходить до Mempool як звичайний платіж. Витрачену електроенергію Павел при цьому не поверне. Тому майнерам важливо не лише знайти блок, а й швидко повідомити про нього інших. [1] [2]
У статтях та оглядачах блоків Stale Block іноді називають Orphan Block. Ці назви часто вживають як синоніми, але в точнішому значенні вони різняться. Orphan Block — блок, попередник якого вузлу ще невідомий, тож вузол поки не може приєднати його до ланцюга. У Stale Block попередник може бути відомий, а сам блок — дійсний; він просто лежить поза обраною гілкою. Словом orphan також називають транзакції, коли вузлу бракує попередніх транзакцій для перевірки їхніх входів. Тому важливо з’ясувати, яке значення має на увазі джерело. [1]
Якщо вузол уже використовував блок Павела, а потім замінює його гілкою Анни, він виконує Reorg: змінює частину історії, яку вважає активною. Саме тому може змінитися кількість підтверджень у гаманці. Коротке змагання з нашого прикладу можливе й за чесного майнінгу. Проте зловмисник може спробувати використати зміну історії для Double Spend — провести інший платіж із тих самих коштів. Сам Stale Block не доводить такого наміру. Потрібно розглянути перебіг подій і можливі конфліктні транзакції. [1] [2]
Звістка про новий блок не облітає світ миттєво. Що довше вона поширюється, то довше інші майнери можуть несвідомо працювати над тим самим попередником. Важливі швидкість передавання, зв’язки між вузлами та час поширення відносно інтервалу між блоками. Stale Rate — частка знайдених дійсних блоків, які не залишаються в активному ланцюзі. Це не фіксований відсоток, установлений правилами Bitcoin. Порівнюючи показники, слід також враховувати період спостереження й те, які блоки спостерігач узагалі побачив. [1] [3]
Специфікація BIP152 описує Compact Block Relay. Вузол часто вже знає більшість транзакцій нового блоку зі свого Mempool, тож немає потреби повторно передавати весь їхній вміст. Короткі ідентифікатори дають змогу зібрати блок із наявних даних, а відсутні транзакції — запросити. Це зменшує обсяг передавання і за відповідних умов допомагає вузлам швидше дізнаватися про нові блоки. Механізм поліпшує передавання, але не змінює правил перевірки блоків. Повністю виключити майже одночасне знаходження двох блоків він не може. [3]
Накопичену роботу гілки технічно називають chainwork. Це не вимірювання фактично витраченої електроенергії й не голосування за кількістю комп’ютерів. Кожен блок додає значення, обчислене зі складності його Proof of Work — доказу роботи майнінгу. Тому вислів «перемагає довший ланцюг» менш точний, ніж «перемагає дійсна гілка з більшим chainwork». Вузол повинен перевірити дотримання правил: навіть велика робота не робить недійсні транзакції дійсними. Крім того, stale описує зв’язок блоку з історією, яку саме зараз обрав конкретний вузол. [1] [2]
Оглядач блоків дає корисний огляд, але показує дані, які бачить цей сервіс. Власний Full Node, вузол перевірки правил, дає змогу дослідити незалежно прийняту вами історію. Якщо вузол зберігає дані блоку, команда getblock у Bitcoin Core повертає confirmations: -1 для блоку поза активним ланцюгом. Якщо даних немає, наприклад їх видалено для економії місця під час pruning, команда поверне помилку. Саме це значення ще не доводить, що блок пройшов усі перевірки відповідності правилам. Для точного розуміння перевірте також його hash — ідентифікатор, попередній блок, висоту (кількість блоків перед ним) та chainwork; долю конкретного платежу перевіряйте окремо. Два блоки можуть мати однакову висоту, але різні хеші. [4] [5]
Для повної картини прочитайте також Reorg, Підтвердження, Block, Block Header, Proof of Work, Майнінг. На цю статтю також посилаються Reorg, Mining Pool, Hashrate, Selfish Mining.