chaos | entropie | generátor| hash | mmBIP32-84 | adresy | transakce | blockchain | halving |
![](https://www.agamapoint.com/wp-content/uploads/2024/07/maze50.png)
Bitcoinová transakce je proces, při kterém jsou bitcoiny převedeny z jedné adresy na druhou v rámci blockchainu. Transakce zahrnuje vstupy, což jsou reference na předchozí transakce, kde bitcoiny původně pocházejí, a výstupy, což jsou nové adresy, na které jsou bitcoiny posílány. Každá transakce je digitálně podepsána soukromým klíčem odesílatele, což zajišťuje autentizaci a integritu. Transakce jsou vysílány do bitcoinové sítě, kde jsou ověřovány uzly a poté zařazeny do bloku těžaři. Těžaři validují transakce tím, že řeší kryptografický problém (Proof of Work), kdo ho vyřeší nejdříve, má právo přidat blok do blockchainu (a získává také odměnu, ve formě nově vzniklých bitcoinů). Tento proces zabezpečuje síť proti dvojímu utrácení a zajišťuje nezměnitelnost transakcí.
| transakce v první tisícovce bloků | BTCscripts | learnBTC | equalverify | agamapoint.com/blocks/blocks-1-1000-v01.html
![](https://www.agamapoint.com/wp-content/uploads/2020/12/btc-transactions.png)
transaction – https://en.bitcoin.it/wiki/Transaction
P2PK
P2PK (Pay to Public Key) je historicky nejstarší metoda, která umožňuje posílat bitcoiny přímo na veřejný klíč. Nevýhodou této metody je, že veřejný klíč příjemce je odhalen už při samotném přijetí prostředků, což snižuje bezpečnost a soukromí.
Bezpečnost: P2PK odhaluje veřejný klíč příjemce už při vytváření transakce. To znamená, že útočník, který by našel slabinu v eliptické křivce secp256k1, by mohl teoreticky napadnout klíč dříve, než by byl utracen. P2PKH místo toho uchovává veřejný klíč skrytý až do okamžiku, kdy je transakce utracena, což výrazně zvyšuje bezpečnost.
Adresa P2PK není ve skutečnosti standardní „adresa“ jako taková, ale přímo veřejný klíč (který je obvykle 65 bajtů dlouhý) a je přímo součástí skriptu. Veřejný klíč je tedy viditelný již při odesílání transakce!
<public key> OP_CHECKSIG
Při utrácení prostředků je nutné předložit podpis, který odpovídá tomuto veřejnému klíči.
P2PKH [1]
P2PKH (Pay to Public Key Hash) vznikl jako vylepšení, které zachovává veřejný klíč skrytý až do okamžiku, kdy jsou prostředky utraceny, a zároveň zmenšuje velikost transakce.
První platba typu P2PKH se uskutečnila 15. července 2010 (blok 74850), což bylo dříve, než byly formálně předloženy BIPy 13, 32, a 44.
BIP13 byl předložen jako první z těchto tří BIPů v roce 2012, ačkoliv nepřímo podporoval P2PKH adresy standardizací formátu Base58Check.
BIP32 a BIP44 se týkají hierarchických deterministických peněženek, což je technologie, která usnadňuje správu klíčů a adres, včetně P2PKH adres, ale byly předloženy až po tom, co se P2PKH adresy běžně používaly.
Adresa začínající číslem 1 je standardní adresa typu „Pay to Public Key Hash„. Vzniká zahashováním veřejného klíče pomocí SHA-256 a poté RIPEMD-160, přidáním prefixu verze (0x00) a následným zakódováním do formátu Base58Check.
BIP13 | BIP32 | BIP44
Platby na P2PKH jsou směrovány „na hash“ veřejného klíče, což znamená, že veřejný klíč zůstává skrytý až do chvíle, kdy jsou prostředky utraceny.
Adresa P2PKH je také kratší než veřejný klíč použitý v P2PK, což šetří místo v blockchainu.
OP_DUP OP_HASH160 <Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG
Při utrácení prostředků musí příjemce poskytnout veřejný klíč (který odpovídá hashi) a podpis, který odpovídá tomuto veřejnému klíči.
scripty:
Alice: OP_DUP OP_HASH160 <Bob_public_key_hash> OP_EQUALVERIFY OP_CHECKSIG Bob: OP_DUP OP_HASH160 <Charlie_public_key_hash> OP_EQUALVERIFY OP_CHECKSIG --> <Bob_signature> <Bob_public_key> OP_DUP OP_HASH160 <Bob_public_key_hash> OP_EQUALVERIFY OP_CHECKSIG
Směrování na hash veřejného klíče: P2PKH adresy obsahují hash veřejného klíče příjemce, což zvyšuje bezpečnost a efektivitu.
Odhalení veřejného klíče při utracení: Při utrácení prostředků musí příjemce poskytnout svůj veřejný klíč a podpis, které jsou zahrnuty ve vstupním skriptu transakce.
Proces ověření: Bitcoinový skriptový systém ověří, že hash poskytnutého veřejného klíče odpovídá hashi uloženému ve výstupním skriptu, a že podpis odpovídá tomuto veřejnému klíči.
https://learnmeabitcoin.com/technical/script/p2pkh/
P2SH [3]
Adresa začínající číslem 3 je adresa typu „Pay to Script Hash„. Skript vytvořený příjemcem je zahashován pomocí SHA-256 a RIPEMD-160. Tento hash je pak zakódován do formátu Base58Check s prefixem verze (0x05).
| BIP16 |
Definition:
OP_HASH160 <Redeem Script Hash> OP_EQUAL
Redeem Script Hash: 20-byte-hash-value
scriptSig: [signature] {[pubkey] OP_CHECKSIG}
scriptPubKey: OP_HASH160 [20-byte-hash of {[pubkey] OP_CHECKSIG} ] OP_EQUAL
Pay-to-Script-Hash umožňuje vytváření složitějších skriptů, které se provádějí při utracení. Místo hash veřejného klíče se používá hash skriptu.
P2WPKH [bc1q]
Adresa začínající „bc1q“ je SegWit adresa typu „Pay to Witness Public Key Hash„. Je zakódována do formátu Bech32 a používá witness program (0x00) o délce 20 bajtů. Umožňuje efektivní a levnější transakce než klasické P2PKH.
BIP141 | BIP173
P2TR [bc1p]
Adresa začínající „bc1p“ je SegWit adresa využívající Taproot. Je zakódována do formátu Bech32m a má specifický witness program (0x01) o délce 32 bajtů. Využívá schnorr podpisy a umožňuje efektivní a soukromé transakce.
BIP340 | BIP341 | BIP342
„prehistoricky“ se používaly (dost často jen „jednorázově“) adresy generované z WIF (wallet import format)
HMAC – Keyed-hash Message Authentication Code
je typ autentizačního kódu zprávy počítané s použitím kryptografické HASHovací funkce v kombinaci s tajným šifrovacím klíčem > https://en.wikipedia.org/wiki/HMAC
UTXO – Unspent transaction output – neutracené transakční výstupy
…
Příklad skriptu Multisig:
Multisig (vícepodpisová) transakce vyžaduje, aby bylo více podpisů poskytováno k utracení výstupu.
OP_1 <Public Key 1> <Public Key 2> <Public Key 3> OP_3 OP_CHECKMULTISIG
prvních několik transakcí: https://www.agamapoint.com/blocks/blocks-1-1000-v01.html
{ 'txid': '000000...000000000000', 'vout': 4294967295, 'prevout': None, 'scriptsig': '04ffff001d0102', 'scriptsig_asm': 'OP_PUSHBYTES_4 ffff001d OP_PUSHBYTES_1 02', 'is_coinbase': True, 'sequence': 4294967295 }
vstup transakce:
txid: „Transaction ID“ (ID transakce) je unikátní identifikátor pro danou transakci. V tomto případě je txid
samé nuly, což naznačuje, že jde o coinbase transakci.
vout: „Output Index“ (index výstupu) je číslo, které označuje konkrétní výstup předchozí transakce. 4294967295
(hexadecimálně 0xFFFFFFFF
) se používá u coinbase transakcí.
prevout: „Previous Output“ (předchozí výstup) je výstup z předchozí transakce, který je zde prázdný (None
), protože jde o coinbase transakci.
scriptsig: „Script Signature“ je skript, který poskytuje důkaz, že majitel výstupu souhlasí s touto transakcí. V případě coinbase transakce zde vidíme speciální hodnotu 04ffff001d0102
.
scriptsig_asm: Assemblerová reprezentace scriptsig.
- OP_PUSHBYTES_4 ffff001d: Příkaz pro vložení 4 bajtů (
ffff001d
). - OP_PUSHBYTES_1 02: Příkaz pro vložení 1 bajtu (
02
).
is_coinbase: Indikuje, že tato transakce je coinbase (nově vytěžené bitcoiny).
sequence: Hodnota 4294967295
(hexadecimálně 0xFFFFFFFF
) znamená, že sequence číslo není použito.
{ 'scriptpubkey': '4104d46c...725bac', 'scriptpubkey_asm': 'OP_PUSHBYTES_65 04d46c4968bde...725b OP_CHECKSIG', 'scriptpubkey_type': 'p2pk', 'value': 5000000000 }
výstup transakce:
scriptpubkey: „Script Public Key“ je skript, který určuje podmínky, za kterých může být výstup utracen. Tento konkrétní skript obsahuje veřejný klíč a OP_CHECKSIG operátor.
scriptpubkey_asm: Assemblerová reprezentace scriptpubkey.
- OP_PUSHBYTES_65: Příkaz pro vložení 65 bajtů (
04d46c...725bac
). - OP_CHECKSIG: Operátor, který zajišťuje, že podpis transakce odpovídá veřejnému klíči.
scriptpubkey_type: Typ scriptpubkey, zde p2pk
(pay-to-public-key), což znamená, že bitcoiny lze utratit podpisem odpovídajícím tomuto veřejnému klíči.
value: Hodnota výstupu v satoshi. 5000000000
satoshi je 50 BTC, což byla odměna za vytěžení bloku v počátečních fázích bitcoinu.
{ 'txid': '0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9', 'vout': 0, 'prevout': { 'scriptpubkey': '410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac', 'scriptpubkey_asm': 'OP_PUSHBYTES_65 0411db93e1...60bfa9b8b64f9d4c03f999b8643f656b412a3 OP_CHECKSIG', 'scriptpubkey_type': 'p2pk', 'value': 5000000000 }, 'scriptsig': '47304402204e45e1...768d1d0901', 'scriptsig_asm': 'OP_PUSHBYTES_71 304402204e45e169.....68d1d0901', 'is_coinbase': False, 'sequence': 4294967295 }
vstup transakce:
txid: ID transakce, ze které pochází tento vstup. 0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9
je unikátní identifikátor předchozí transakce.
vout: Index výstupu v předchozí transakci, který je použit jako vstup v této transakci. V tomto případě je to výstup s indexem 0
.
prevout: Obsahuje informace o výstupu z předchozí transakce, který je zde použit jako vstup.
- scriptpubkey: Skript veřejného klíče předchozího výstupu.
- scriptpubkey_asm: Assemblerová reprezentace scriptpubkey.
- scriptpubkey_type: Typ scriptpubkey, zde
p2pk
(pay-to-public-key). - value: Hodnota předchozího výstupu v satoshi (5000000000 satoshi = 50 BTC).
scriptsig: Skript, který poskytuje důkaz, že majitel výstupu souhlasí s touto transakcí. Obsahuje podpis.
scriptsig_asm: Assemblerová reprezentace scriptsig.
- OP_PUSHBYTES_71: Příkaz pro vložení 71 bajtů (
3044...d0901
).
is_coinbase: Indikuje, že tato transakce není coinbase (nově vytěžené bitcoiny).
sequence: Hodnota 4294967295
(hexadecimálně 0xFFFFFFFF
) znamená, že sequence číslo není použito.
[ { 'scriptpubkey': '4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac', 'scriptpubkey_asm': 'OP_PUSHBYTES_65 04ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84c OP_CHECKSIG', 'scriptpubkey_type': 'p2pk', 'value': 1000000000 }, { 'scriptpubkey': '410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac', 'scriptpubkey_asm': 'OP_PUSHBYTES_65 0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3 OP_CHECKSIG', 'scriptpubkey_type': 'p2pk', 'value': 4000000000 } ]
výstup transakce:
- scriptpubkey: Skript veřejného klíče, který určuje podmínky, za kterých může být výstup utracen. Obsahuje veřejný klíč a OP_CHECKSIG operátor.
- scriptpubkey_asm: Assemblerová reprezentace scriptpubkey.
- OP_PUSHBYTES_65: Příkaz pro vložení 65 bajtů.
- OP_CHECKSIG: Operátor, který zajišťuje, že podpis transakce odpovídá veřejnému klíči.
- scriptpubkey_type: Typ scriptpubkey, zde
p2pk
(pay-to-public-key). - value: Hodnota výstupu v satoshi.
- První výstup má hodnotu 1000000000 satoshi (10 BTC).
- Druhý výstup má hodnotu 4000000000 satoshi (40 BTC).
Shrnutí
Tato transakce přebírá 50 BTC z předchozí transakce (identifikované txid
a vout
) a rozděluje je na dva výstupy: 10 BTC (první výstup) a 40 BTC (druhý výstup). Skripty veřejného klíče (scriptpubkey) definují podmínky, za kterých mohou být tyto prostředky utraceny v budoucích transakcích.
![](https://www.agamapoint.com/wp-content/uploads/2024/02/b170_3d1-1024x704.png)
Běžné Bitcoin opcodes:
- OP_DUP – Zkopíruje horní prvek zásobníku.
OP_DUP
- OP_HASH160 – Zpracuje
RIPEMD-160
hash zSHA-256
hashe horního prvku zásobníku.OP_HASH160
- OP_EQUAL – Porovná dva prvky na vrcholu zásobníku a vrátí
true
, pokud jsou stejné.OP_EQUAL
- OP_EQUALVERIFY – Kombinuje
OP_EQUAL
aOP_VERIFY
, což znamená, že porovná dva prvky na vrcholu zásobníku a pokud nejsou stejné, script selže.OP_EQUALVERIFY
- OP_CHECKSIG – Zkontroluje, zda podpis odpovídá veřejnému klíči a transakčnímu hash.
OP_CHECKSIG
- OP_CHECKMULTISIG – Zkontroluje více podpisů proti sadě veřejných klíčů.
OP_CHECKMULTISIG
- OP_VERIFY – Zkontroluje horní prvek zásobníku a pokud není pravdivý, skript selže.
OP_VERIFY
úplný přehled: https://en.bitcoin.it/wiki/Script
Jak funguje Bitcoinový skript
Každá Bitcoinová transakce má dva základní typy skriptů:
- ScriptPubKey (Output Script): Tento skript je součástí výstupu (output) transakce. Definuje podmínky, za kterých může být tento výstup utracen. ScriptPubKey je často nazýván „zámek“.
- ScriptSig (Input Script): Tento skript je součástí vstupu (input) transakce. Obsahuje data, která odemykají výstup. ScriptSig je často nazýván „klíč“.
Kdy a kde se provádí Bitcoinový skript
Skript se provádí během ověřování transakce, kdy se kontroluje, zda transakce splňuje podmínky stanovené předchozím výstupem. Proces provádění skriptu se skládá ze dvou kroků:
- Sestavení skriptu: Když se vytvoří nová transakce, každý vstup obsahuje ScriptSig, který se sestaví se ScriptPubKey z předchozí transakce. ScriptSig je umístěn před ScriptPubKey, a výsledkem je kompletní skript.
- Provádění skriptu: Sestavený skript je prováděn virtuálním strojem Bitcoin Script VM. Pokud skript provede bez chyb a vrátí
true
, transakce je považována za platnou. Pokud dojde k chybě nebo vrátífalse
, transakce je neplatná.
Pojem „umístění na zásobník“ je klíčovým konceptem v Bitcoinovém skriptovacím jazyce. Zde je přesné vysvětlení:
Zásobník (Stack) v Bitcoinovém skriptování
Zásobník je datová struktura, která se používá v Bitcoinovém skriptování k ukládání a manipulaci s daty a mezivýsledky během provádění skriptu. Zásobník je obvykle implementován jako LIFO (Last In, First Out) struktura, což znamená, že poslední položka umístěná na zásobník je první, která bude odebrána.
Umístění na zásobník
Když říkáme, že něco (například data, operátor, výsledek operace) se umístí na zásobník, myslíme tím, že daná položka je přidána na vrchol zásobníku. V Bitcoinovém skriptování může být na zásobník umístěno několik různých typů dat:
- Data: Bajty reprezentující například podpis, veřejný klíč nebo hash.
- Operátory (opcode): Speciální instrukce, které definují operace, které se mají provést (např. OP_DUP, OP_EQUALVERIFY).
- Mezivýsledky: Výsledky operací, které jsou dočasně uloženy na zásobníku a mohou být později použity v dalších operacích.
Proces umístění na zásobník v praxi
Například, pokud máme Bitcoinový skript OP_DUP OP_HASH160 <Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG
,
proces umístění na zásobník probíhá následovně:
OP_DUP
: Zkopíruje horní prvek zásobníku (duplikuje ho).OP_HASH160
: Vypočte hash z veřejného klíče a umístí ho na vrchol zásobníku.<Public Key Hash>
: Veřejný klíč je nahrazen jeho hashem na zásobníku.OP_EQUALVERIFY
: Porovnává horní dva prvky zásobníku (hash a hash) a potvrzuje jejich shodu.OP_CHECKSIG
: Ověřuje, že podpis transakce odpovídá veřejnému klíči.
Každá operace (opcode) a data jsou postupně umisťovány na zásobník, kde jsou poté zpracovávány podle požadavků skriptu.
Důležitost zásobníku v Bitcoinovém skriptování
Správné použití zásobníku je klíčové pro bezpečné a efektivní provádění Bitcoinových transakcí. Zásobník je prostředkem, jak manipulovat s daty a operátory, které definují podmínky utracení výstupů transakcí. Chyby v manipulaci se zásobníkem mohou vést k neplatným transakcím nebo zranitelnostem v bezpečnosti Bitcoinové sítě.
Přehled Taproot a Tapscript
Taproot je nová funkce Bitcoinu, která byla aktivována prostřednictvím soft forku v listopadu 2021. Taproot zlepšuje soukromí a efektivitu Bitcoinu tím, že kombinuje schopnosti Schnorr podpisů a MAST (Merkelized Abstract Syntax Tree).
Tapscript je nový skriptovací jazyk, který je součástí Taprootu a umožňuje složitější a efektivnější skriptování transakcí.
FFtx | …
OP_PUSHBYTES_32 0906446...19d516b43f00c720 OP_CHECKSIGVERIFY OP_PUSHBYTES_32 58b199...cbfccc95068625f OP_CHECKSIGVERIFY OP_PUSHBYTES_32 b6f8942cd6d...ab87114b OP_CHECKSIG
Tento Tapscript obsahuje tři veřejné klíče a tři podpisy.
- OP_PUSHBYTES_32 0906446c605a3d49e097b3804f92f518b4e3fea5354711dc19d516b43f00c720: Toto je první veřejný klíč (32 bajtů dlouhý).
- OP_CHECKSIGVERIFY: Tento operátor ověří podpis pomocí prvního veřejného klíče a pokud je podpis platný, pokračuje ve skriptu. Pokud ne, transakce je neplatná.
- OP_PUSHBYTES_32 58b1995fca8269039e3771953445a3b207c4dad0aaf85ff64cbfccc95068625f: Toto je druhý veřejný klíč (32 bajtů dlouhý).
- OP_CHECKSIGVERIFY: Tento operátor ověří podpis pomocí druhého veřejného klíče a pokud je podpis platný, pokračuje ve skriptu.
- OP_PUSHBYTES_32 b6f8942cd6dc8706e710f5ed6a11095fb64ec654d0d2682abb990f67ab87114b: Toto je třetí veřejný klíč (32 bajtů dlouhý).
- OP_CHECKSIG: Tento operátor ověří podpis pomocí třetího veřejného klíče a pokud je podpis platný, transakce je považována za platnou.
nSequence
0xfffffffd
Hodnota nSequence určuje časové nebo jiné podmínky, za kterých může být transakce zahrnuta do bloku. Hodnota 0xfffffffd znamená, že se nepoužívají žádné zvláštní podmínky pro zamčení (locktime).
Předchozí výstupní skript (Previous Output Script)
OP_PUSHNUM_1 OP_PUSHBYTES_32 bcf4e88bd0ed48373025ee12ecde569b691266d72ddde0f3fcb1f9b3b84f25e4
Toto je skript, který byl použitý k určení předchozího výstupu, který se utrácí v této transakci.
- OP_PUSHNUM_1: Toto je operátor, který na zásobník umístí číslo 1.
- OP_PUSHBYTES_32 bcf4e88bd0ed48373025ee12ecde569b691266d72ddde0f3fcb1f9b3b84f25e4: Toto je hash veřejného klíče (32 bajtů dlouhý).
Předchozí typ výstupu (Previous Output Type)
V1_P2TR
Toto označuje, že předchozí výstup byl typu Pay-to-Taproot (P2TR), což znamená, že využívá Taproot skriptování.
Jak Tapscript funguje
- Vytvoření transakce: Uživatel vytvoří transakci, která zahrnuje vstupy a výstupy, a přiřadí k nim odpovídající skripty.
- Provádění skriptu: Když je transakce prováděna, Bitcoinový uzel spustí skript, který ověří podpisy a další podmínky.
- Ověření podpisů: Skript provede řadu ověřovacích operací (jako je OP_CHECKSIGVERIFY), které zajistí, že podpisy odpovídají veřejným klíčům a že transakce splňuje všechny stanovené podmínky.
- Výsledek: Pokud všechny operace ve skriptu proběhnou úspěšně a všechny podpisy jsou platné, transakce je považována za platnou a může být zahrnuta do bloku.
Zásobník v akci
Zde je, jak by mohl vypadat zásobník během provádění tohoto Tapscriptu:
- Začátek: Zásobník je prázdný.
- Po OP_PUSHBYTES_32 0906446c…: Na zásobníku je první veřejný klíč.
- Po OP_CHECKSIGVERIFY: Ověřený podpis je odstraněn a skript pokračuje.
- Po OP_PUSHBYTES_32 58b1995f…: Na zásobníku je druhý veřejný klíč.
- Po OP_CHECKSIGVERIFY: Ověřený podpis je odstraněn a skript pokračuje.
- Po OP_PUSHBYTES_32 b6f8942c…: Na zásobníku je třetí veřejný klíč.
- Po OP_CHECKSIG: Ověřený podpis je odstraněn a pokud je platný, transakce je úspěšná.
Závěr
Tato transakce je složitější než základní Bitcoinové transakce, protože využívá nových funkcí Taprootu a Tapscriptu. Pomocí těchto nových technologií Bitcoin umožňuje efektivnější a soukromější transakce s vyšší flexibilitou a funkcionalitou.
V1_P2TR: Význam a kontext
- V1: Označuje verzi Bitcoinového skriptu nebo transakce. Verze 1 je specifická pro Taproot transakce.
- P2TR (Pay-to-Taproot): Typ výstupu transakce, který kombinuje výhody Schnorr podpisů a MAST (Merkelized Abstract Syntax Tree).
Jak funguje V1_P2TR
- Veřejný klíč Taprootu:
- P2TR výstupy obsahují jediný 32-bajtový veřejný klíč Taprootu. Tento klíč může být přímo veřejný klíč nebo kořenový hash stromu skriptů (MAST).
- Schnorr podpisy:
- Taproot využívá Schnorr podpisy, které jsou kratší a rychlejší než tradiční ECDSA podpisy používané v předchozích verzích Bitcoinových transakcí.
- Schnorr podpisy umožňují vytvářet agregované podpisy (muSig), což zvyšuje soukromí a snižuje velikost transakcí.
- MAST (Merkelized Abstract Syntax Tree):
- MAST umožňuje zakódovat více možných skriptů do jednoho stromu a odhalit pouze ten konkrétní skript, který je potřeba k utrácení.
- To zvyšuje soukromí, protože ostatní skripty zůstávají skryté.
Proces provádění V1_P2TR transakce
- Vytvoření výstupu:
- Když je vytvořen P2TR výstup, je zahrnut Taproot veřejný klíč (32 bajtů).
- Výstup je identifikován jako V1 (verze 1) P2TR.
- Vytvoření vstupu:
- Když se utrácí P2TR výstup, jsou zahrnuty podpisy vytvořené pomocí Schnorr schématu.
- Pokud výstup odkazuje na MAST, musí být odhalen konkrétní skript a cesta k němu.
- Ověření transakce:
- Bitcoinové uzly ověřují Schnorr podpisy a provádějí odpovídající skript.
- Pokud je skript platný a všechny podpisy jsou ověřeny, transakce je považována za platnou.
Příklad V1_P2TR transakce
Představme si, že máme transakci s V1_P2TR výstupem a chceme ji utratit:
- Výstup:
OP_PUSHNUM_1
OP_PUSHBYTES_32 <Taproot veřejný klíč>
- Vstup:
nSequence
– 0xfffffffd (nejsou žádné zvláštní podmínky pro zamčení)- Skript, který zahrnuje:
OP_PUSHBYTES_32 <podpis>
OP_CHECKSIG
Výhody V1_P2TR
- Zvýšené soukromí: Použití MAST umožňuje skrýt nevyužité skripty, čímž se zvyšuje soukromí.
- Vyšší efektivita: Schnorr podpisy jsou kratší a rychlejší na ověřování, což zlepšuje škálovatelnost.
- Flexibilita: Možnost kombinovat více skriptů a odhalit pouze ten potřebný poskytuje vyšší flexibilitu.
Shrnutí
V1_P2TR je pokročilý typ Bitcoinové transakce, který využívá nové funkce Taprootu a Tapscriptu. Přináší zlepšení v oblasti soukromí, efektivity a flexibility transakcí, což zvyšuje celkovou užitnost a bezpečnost Bitcoinové sítě.
.:.:.