Merkle Tree neboli Merkleův strom postupně spojuje kryptografické otisky dat do jednoho výsledku. V Bitcoinu tak vzniká Merkle root uložený v hlavičce bloku. Pomocí několika dalších otisků lze ověřit, že určitá transakce odpovídá tomuto kořeni, aniž bychom přenášeli všechny ostatní transakce.
Peněženka vám ukáže, že platba byla zařazena do bloku. Jak to ověřit, pokud nechcete stahovat celý jeho obsah? Právě tady pomáhá Merkle Tree. Transakce se nejprve zastupují hashi, tedy krátkými kryptografickými otisky. Ty se postupně skládají do jediného společného otisku, kořene. Hlavička bloku tento Merkle root obsahuje a propojuje tak blok s jeho transakcemi. Kořen není archiv, ze kterého by šly všechny platby zpětně vyčíst; slouží k ověřování předložených dat. [1] [2]
Představte si čtyři transakce označené A, B, C a D. Vezmeme jejich otisky, spojíme A s B a z dvojice vypočítáme nový hash AB. Totéž uděláme s C a D a získáme CD. Nakonec spojíme otisky AB a CD a vypočítáme kořen. Písmena tu jen označují jednotlivé transakce a mezivýsledky, nejsou skutečnými hashi. Postup připomíná obrácený strom: mnoho listů se přes větve sbíhá do jednoho kořene. U většího počtu transakcí přibývají další patra, ale princip zůstává stejný. [3]
Chcete-li ověřit transakci B, máte její data a vypočítáte její otisk. Stačí získat otisk A a společný otisk CD, plus jejich správné pořadí. Z A a B sestavíte AB, potom z AB a CD kořen, který porovnáte s kořenem v hlavičce. Tato doplňující cesta se nazývá Merkle proof. Nemusíte znát obsah A, C ani D. Pro vyvážený strom s 1024 transakcemi má cesta 10 sourozeneckých hashů. S růstem bloku tedy důkaz roste mnohem pomaleji než celý seznam transakcí. [2] [3]
Shoda důkazu s kořenem sama neříká, že můžete slepě věřit předložené hlavičce. Potřebujete také ověřit Proof of Work, tedy že výsledek těžebního výpočtu splňuje požadovanou obtížnost, a návaznost hlavičky na odpovídající řetězec. Ani potom Merkle proof nekontroluje všechny podpisy a pravidla všech transakcí v bloku. To dělá Full Node. Zjednodušené ověřování SPV, popsané ve whitepaperu, má proto jiné bezpečnostní předpoklady než úplná validace. Navíc se blok může při reorganizaci dostat mimo aktivní větev: důkaz jeho obsahu tím nezmizí, ale postavení platby v aktuální historii se může změnit. [2]
V běžném bitcoinovém stromu jsou listy identifikátory txid v pořadí transakcí bloku; první je Coinbase Transaction, zvláštní transakce, kterou těžař uplatňuje odměnu za blok. Dvojice se spojují jako bajty a hashují dvakrát pomocí SHA-256. Zůstane-li na některém patře lichý poslední hash, pro tento výpočet se zdvojí. Nevzniká tím další platba. Pokud je transakce jediná, její txid je rovnou kořenem. Toto zdvojování vyžaduje pečlivé kontroly duplicit v implementaci. Vylepšení protokolu SegWit navíc odděluje witness data, například podpisy. S blokem je propojuje další kryptografický otisk uložený v Coinbase Transaction; tomuto otisku se říká witness commitment. Běžný txid strom proto nelze zaměňovat se stromem witness. [3] [4]
Pro nejúplnější obraz čtěte toto heslo společně s Block, Transakce, Block Header. Opačným směrem na něj odkazují také Block Header, Hash, SHA-256, Potvrzení.