Timechain neboli bitcoinový Blockchain je navazující řetězec platných bloků od Genesis Blocku po současný vrchol sítě. Každý další blok odkazuje na hash svého předchůdce, tedy jeho digitální otisk, a přidává vlastní Proof of Work — důkaz výpočetní práce potřebné k vytvoření bloku. Uzly tak mohou samostatně ověřit, která historie splňuje pravidla a má největší kumulovanou práci. Slovo „čas“ zde neznamená přesné hodiny pro každou transakci; jde především o prokazatelné pořadí událostí.
Představ si veřejnou účetní historii, jejíž každou novou stránku mohou tisíce počítačů samostatně zkontrolovat. Jedna stránka je blok. Obsahuje sadu transakcí a odkaz na předchozí blok, takže stránky mají určité pořadí a nelze je libovolně přeházet. Timechain je celý tento navazující řetězec od prvního bloku až po dnešní vrchol. Neříká, kolik bitcoinů má kdo podle jména; uchovává historii transakcí, ze které uzly odvozují dosud neutracené výstupy. Nejde ani o server jedné společnosti. Kopii historie může stáhnout a ověřovat každý Full Node (uzel, který sám ověřuje transakce a pravidla sítě). [1] [3]
V bitcoinovém kontextu oba názvy označují stejnou historii bloků. Dochovaný předběžný kód z listopadu 2008 používal výraz timechain v komentářích a názvech proměnných či funkcí. Whitepaper naproti tomu mluví o časovém razítkování, řetězci bloků a řetězci Proof of Work; přesný výraz timechain v něm nenajdeme. Později se celosvětově rozšířilo slovo Blockchain. To je dnes obecný pojem i pro jiné sítě a databáze, zatímco bitcoinový Timechain je konkrétní řetězec Bitcoinu. Dvě slova v titulku tedy neoznačují dva protokoly. Připomínají historický název a zároveň současné běžné označení. [2] [1] [8]
Digitální podpis dokáže ověřit, že transakci autorizoval držitel potřebného klíče. Sám však nezabrání tomu, aby někdo podepsal dvě konfliktní transakce, které se pokoušejí utratit stejný dosud neutracený výstup dřívější transakce, označovaný jako UTXO. Jeden uzel může nejprve dostat platbu obchodníkovi, jiný vrácení stejné částky zpět odesílateli. Síť proto potřebuje společnou historii, podle které lze rozhodnout, která útrata byla potvrzena a která už platit nemůže. Bloky dávají transakcím ověřitelné místo v pořadí. Neprokazují ale, která zpráva vznikla jako první v lidském nebo síťovém čase; uzly mohly nepotvrzené transakce vidět v různém pořadí. [1]
Block Header je hlavička se základními údaji o bloku. Obsahuje mimo jiné hash předchozí hlavičky a Merkle Root, který shrnuje identifikátory transakcí tohoto bloku do jednoho hashe. Hash lze přirovnat k digitálnímu otisku: i malá změna vstupních dat vytvoří jiný výsledek. Kdyby někdo změnil starou transakci, změnil by se Merkle Root, hash daného bloku a tím i odkaz uložený v následujícím bloku. Změna by se tedy neomezila na jediný řádek historie; rozpojila by celý navazující úsek. Samotný hash ale neprokáže, že transakce dodržují pravidla. Důležité je, že uzly zároveň kontrolují platnost transakcí a každý blok musí splnit požadovaný Proof of Work. [3] [1]
Uzel nepřijímá větev jen proto, že je delší nebo ji propaguje velký těžař. Nejprve ověří pravidla: Proof of Work, návaznost, povolenou odměnu, transakce, podmínky utracení i to, zda vstupy neodkazují na již utracené prostředky. Neplatná větev zůstane neplatná bez ohledu na výkon svého autora. Teprve mezi platnými kandidáty uzel volí řetězec s největší kumulovanou prací. Označení „nejdelší řetězec“ je proto zkratka: rozhoduje nahromaděná práce platné větve, ne prostý počet bloků. Pole chainwork vyjadřuje odhad očekávaného počtu hashů potřebných k vytvoření řetězce podle obtížnosti jednotlivých bloků; není to počítadlo skutečně provedených pokusů těžařů. [4] [5] [6]
Proof of Work stojí čas, elektřinu a výpočetní výkon, ale jeho výsledek lze rychle ověřit. Kdo by změnil starý blok, musel by pro něj vytvořit nový platný Proof of Work, znovu navázat všechny pozdější bloky a současně dohánět práci, kterou poctivá větev dál přidává. Čím hlouběji je blok pod vrcholem, tím větší náskok má běžná historie. To není matematická záruka, že se minulost nikdy nezmění. Je to ekonomická a pravděpodobnostní obrana: s dalšími bloky obvykle rychle roste cena úspěšného přepisu. Útočník navíc nemůže do nové větve vložit libovolnou neplatnou platbu nebo vytvořit bitcoin nad povolený limit, protože ostatní uzly by takový blok odmítly. [1] [4]
Blok má v hlavičce časové razítko, které vkládá těžař. Konsenzuální pravidla mu dovolují určitou odchylku, takže hodnota time není přesný důkaz okamžiku, kdy blok nebo konkrétní transakce vznikly. Čas jednoho bloku dokonce nemusí být vyšší než čas jeho bezprostředního předchůdce. Pro některá pravidla proto Bitcoin používá Median Time Past: medián časů předchozích 11 bloků. Medián získáme seřazením těchto časových údajů a výběrem prostřední hodnoty. Ten se posouvá stabilněji než jednotlivá razítka. Ani průměrných deset minut mezi bloky není jízdní řád. Někdy přijdou dva bloky rychle po sobě, jindy síť čeká déle. Výška bloku proto určuje přesnou pozici v řetězci, nikoli přesnou hodinu v kalendáři. [4] [7]
Dva těžaři mohou téměř současně najít dva různé platné bloky ve stejné výšce. Část uzlů nejprve uvidí jednu větev a část druhou. Až další Proof of Work vytvoří mezi platnými větvemi rozdíl, uzly přejdou k té s větší kumulovanou prací. Tomuto přechodu se říká Reorganization. Transakce z odpojeného bloku se mohou potvrdit v nové větvi, vrátit se do Mempoolu nebo přestat platit, pokud nová historie potvrdila konfliktní útratu. První potvrzení znamená zařazení transakce do bloku; každý další blok nad ní přidává další potvrzení. Neexistuje univerzální magické číslo pro každou platbu. Potřebná míra jistoty závisí na hodnotě, riziku a možnosti čekat. [1] [3]
Bitcoin dovoluje vytvořit transakci, která se smí potvrdit až od určité výšky bloku nebo po dosažení určitého času. Takový Timelock není příkaz, aby se transakce v danou minutu automaticky provedla. Určuje pouze nejdřívější okamžik, od kterého ji smí platný blok zahrnout. BIP 113 používá pro časové nLockTime hodnotu Median Time Past předchozího bloku místo snadno posunutelného razítka právě vytvářeného bloku. Podmínka se tak opírá o historii několika bloků. I po jejím splnění musí být transakce vyslána, přijata uzly a vybrána těžařem; zařazení do konkrétního bloku není zaručeno. [7] [4]
RPC je rozhraní, kterým můžete uzlu zadávat příkazy a číst jeho odpovědi. Vlastní Full Node nemusí věřit webovému průzkumníku, že určitý blok nebo transakce patří do aktuální historie. Pomocí RPC getblock lze pro konkrétní hash zobrazit výšku, počet potvrzení, Merkle Root, time, mediantime, předchozí hash, obtížnost i chainwork. Každé pole odpovídá jiné otázce: height říká, kde blok leží; previousblockhash ukazuje návaznost; confirmations jeho hloubku vůči současnému vrcholu; time je údaj hlavičky; mediantime je medián a chainwork vyjadřuje kumulovanou očekávanou práci. Žádné z těchto čísel samo nestačí. Smysl Timechainu je právě v tom, že uzel kontroluje jejich souvislost a všechna konsenzuální pravidla jako jeden celek. [6] [4]
Pro nejúplnější obraz čtěte toto heslo společně s Genesis Block, Proof of Work, Transakce, Full Node, Difficulty Adjustment. Opačným směrem na něj odkazují také Bitcoin Whitepaper, Genesis Block, Proof of Work, Full Node.