Polia nie sú bankový príkaz
Transakcia obsahuje verziu, zoznam vstupov, zoznam výstupov a nLockTime. Každý vstup odkazuje na txid a poradové číslo skoršieho výstupu; každý nový výstup určí počet satoshi a skriptovú podmienku.
Vstup v základnej transakcii nenesie svoju hodnotu ako nové tvrdenie. Uzol vyhľadá odkazované UTXO, skontroluje jeho sumu a podmienku a overí, že súčet výstupov neprekračuje súčet vstupov. Rozdiel je poplatok.
Serializácia musí byť jednoznačná
Polia sa prevádzajú do presného poradia bajtov. Aj malá zmena údajov vytvorí iný hash; zobrazenie v block exploreri je len ľudská interpretácia týchto bajtov.
txid je dvojitý SHA-256 tradičnej serializácie. BIP 141 pridal wtxid, ktorý používa serializáciu s witnessom. Pri transakcii bez witnessu sú oba odtlačky rovnaké.
Čo rieši oddelený witness
Pred SegWitom mohla zmena formy podpisových údajov zmeniť txid bez zmeny ekonomického výsledku. To komplikovalo reťazce nepotvrdených transakcií. Pri SegWit vstupoch podpisové údaje nie sú súčasťou txid, hoci wtxid ich naďalej zaväzuje.
SegWit neznamená, že podpisy nie sú v bloku alebo sa neoverujú. Witness má vlastný záväzok v coinbase transakcii a plné uzly ho potrebujú na kontrolu platnosti.
Sighash je rozsah podpisu
Algoritmus vytvorí digest, ktorý sa podpíše. Bežný SIGHASH_ALL zaväzuje všetky vstupy a výstupy podľa pravidiel danej verzie; iné príznaky môžu obmedziť výstupy alebo použiť ANYONECANPAY. Sú užitočné v špecializovaných protokoloch, ale menia bezpečnostný význam podpisu.
Podpis neznamená automaticky „súhlasím so všetkým, čo vidí aplikácia“. Hardvérová peňaženka musí správne zostaviť prevouty, sumy, skripty a sighash a používateľ musí skontrolovať zobrazené výstupy a poplatok.