Stale Block splňuje pravidla Bitcoinu, ale nepatří do aktivního řetězce. To je historie, podle které uzel určuje počet potvrzení a dostupné prostředky. Uzel je počítač, který ověřuje bloky a transakce. Mezi platnými větvemi rozhoduje nahromaděná těžební práce. Pro příjemce platby to může znamenat ztrátu potvrzení a další čekání, nikoli automaticky ztrátu bitcoinů.
Představme si těžaře Annu a Pavla. Oba pracují na pokračování stejného posledního bloku. Anna najde nový blok, ale než se zpráva dostane k Pavlovi, najde svůj také on. Oba bloky mohou být v pořádku; jen obsahují trochu jiný výběr transakcí. Uzly, které ověřují bloky a transakce, se o nich dozvědí v různém pořadí. Na chvíli proto sledují různé konce řetězce. Jakmile jedna platná větev získá více nahromaděné práce a uzly ji ověří, přejdou na ni. Blok na opuštěné větvi nazýváme Stale Block. [1]
Bitcoin potřebuje jednu historii, aby stejné prostředky nešlo úspěšně utratit dvakrát. Nestačí tedy zjistit, že každý z obou bloků zvlášť dodržuje pravidla. Uzel také musí vybrat, po které platné větvi bude pokračovat. To jsou dvě různé otázky: platnost bloku a výběr řetězce. Stale Block může mít správný Proof of Work, tedy důkaz těžební práce, správné transakce i podpisy, a přesto do zvolené historie nepatřit. Není tím označen za vadný nebo podvodný. [1] [2]
Předpokládejme, že Pavlův blok obsahoval vaši platbu a peněženka ukázala jedno potvrzení. Pokud nakonec zvítězí Annina větev, záleží na jejím obsahu. Stejná transakce v ní může být také; pak zůstává potvrzená. Jinak se může vrátit do Mempoolu, místního seznamu nepotvrzených transakcí, a čekat na další blok. Návrat ale není zaručený: transakce musí být nadále přijatelná a nesmí odporovat nové historii. Pokud ta už obsahuje jinou transakci utrácející stejné prostředky, původní platba v ní nemůže být současně potvrzena. [2]
Běžnou platbu je potřeba odlišit od Coinbase Transaction, první transakce v bloku, která připisuje těžaři odměnu. Ta zahrnuje nově vydané bitcoiny a poplatky za transakce. Pokud Pavlův blok zůstane mimo aktivní řetězec, odměna z jeho coinbase není v této historii utratitelná. Do Mempoolu se nepřesune jako běžná platba. Spotřebovanou elektřinu přitom Pavel zpět nedostane. Proto těžařům záleží nejen na nalezení bloku, ale i na tom, aby se o něm ostatní rychle dozvěděli. [1] [2]
V článcích a průzkumnících můžete pro Stale Block narazit také na označení Orphan Block. Bývají používána jako synonyma, ale v přesnějším významu je rozdíl důležitý. Orphan Block je blok, jehož předchůdce uzel zatím nezná, takže ho ještě neumí zařadit. U Stale Blocku může být předchůdce známý a blok platný; pouze leží mimo zvolenou větev. Podobné slovo orphan se používá i pro transakce, u nichž uzlu chybí předchozí transakce potřebné k ověření vstupů. Vždy tedy záleží, co daný zdroj tímto slovem myslí. [1]
Pokud uzel už Pavlův blok používal a potom ho nahradí Anninou větví, provede Reorg: změní část historie, kterou považuje za aktivní. Proto se může změnit počet potvrzení v peněžence. Krátký závod jako v našem příkladu vzniká i při poctivé těžbě. Útočník se ovšem může pokusit změnu historie využít pro Double Spend, tedy prosazení jiné platby ze stejných prostředků. Samotný Stale Block takový úmysl nedokazuje. Je třeba sledovat průběh události a případné konfliktní transakce. [1] [2]
Zpráva o novém bloku neobletí svět okamžitě. Čím déle se šíří, tím déle mohou další těžaři nevědomky pracovat na stejném předchůdci. Význam má rychlost přenosu, propojení uzlů i doba šíření ve vztahu k času mezi bloky. Stale Rate označuje podíl nalezených platných bloků, které nezůstanou v aktivním řetězci. Není to pevné procento určené pravidly Bitcoinu; při porovnávání údajů záleží i na sledovaném období a na tom, které bloky pozorovatel zachytil. [1] [3]
Specifikace BIP152 popisuje Compact Block Relay. Uzel často zná většinu transakcí nového bloku už ze svého Mempoolu, takže není nutné posílat celý jejich obsah znovu. Pomocí krátkých identifikátorů může blok sestavit z dat, která má, a chybějící transakce si vyžádá. Tím se šetří přenesená data a za vhodných podmínek se uzly dozvědí o novém bloku rychleji. Je to pomoc při šíření, nikoli změna pravidel platnosti. Téměř současné nálezy dvou bloků nedokáže úplně vyloučit. [3]
Nahromaděná práce větve se technicky nazývá chainwork. Nejde o měření skutečně spotřebované elektřiny ani o hlasování počtem počítačů. Každý blok přispívá hodnotou odvozenou od obtížnosti svého Proof of Work, tedy důkazu těžební práce. Proto je zkratka „delší řetězec vítězí“ méně přesná než „platná větev s větším chainwork“. Uzel musí dodržení pravidel ověřit; ani velké množství práce neudělá neplatné transakce platnými. Označení stale navíc popisuje vztah bloku k právě zvolené historii konkrétního uzlu. [1] [2]
Průzkumník bloků je užitečný přehled, ale zobrazuje pohled své služby. Vlastní Full Node, uzel ověřující pravidla, vám umožní podívat se na vlastní přijatou historii. Má-li uzel uložená data daného bloku, vrací příkaz getblock v Bitcoin Core pro blok mimo aktivní řetězec hodnotu confirmations: -1. Pokud data chybějí, příkaz skončí chybou. Data mohl odstranit například režim pruning, který maže stará bloková data kvůli úspoře místa. Sama tato hodnota ještě nedokazuje, že blok prošel všemi kontrolami platnosti. Pro přesné zařazení sledujte také jeho hash, tedy identifikátor, předchozí blok, výšku (počet bloků před ním) a chainwork; osud konkrétní platby pak ověřte zvlášť. Dva bloky mohou mít stejnou výšku, ale jiný hash. [4] [5]
Pro nejúplnější obraz čtěte toto heslo společně s Reorg, Potvrzení, Block, Block Header, Proof of Work, Těžba. Opačným směrem na něj odkazují také Reorg, Mining Pool, Hashrate, Selfish Mining.