Come è validata una transazione P2SH-P2PK

Bitcoin In Action
4 min readDec 6, 2023

--

Ciao,

nell’articolo precedente abbiamo analizzato come avviene una transazione utilizzando il P2SH-P2PK.

In questo articolo vogliamo andare ad analizzare come questa viene validata. Come negli articoli precedenti, andremo ad analizzare lo stack grazie alla libreria btcdeb e utilizzeremo il codice del libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts. che potete trovare al nostro indirizzo GitHub.

La logica che abbiamo deciso di utilizzare nel libro per analizzare lo stack è quello di passare allo script un parametro DEBUG=1 in modo tale da invocare la libreria btcdeb.

Ma analizziamola utilizzando la pratica

In Action!

Come per gli esempi precedenti, partiremo utilizzando una blockchain con 0 blocchi, successivamente ne mineremo 101 per prendere il reward che sposteremo verso un nuovo indirizzo. Se hai bisogno di analizzare step by step questi passaggi, ti consiglio ti leggere l’articolo precedente.

Il nostro compito è semplicemente avviare il file sh, con il comando.

$ ./main.sh debug=1

Il codice lo potete trovare nel nostro repository e nel nostro libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts.

Lo script si fermerà esattamente prima dell’invio della transazione in broadcast, cosi da poter verificare la sua validità.

Come per il P2PK e il P2PKH, lo stack parte vuoto, e i primi elementi che sono pushati (inseriti) sono quelli che troviamo nello scriptSig.

Che cosa troviamo nello scriptSig?

Se vi ricordate l’articolo precedente, nello scriptSig ci troviamo

  • la firma digitale
  • il redeem script in “chiaro”.
Frame del video Bitcoin in Action — Come è formata una transazione P2SH-P2PK

Ci sono sempre questi elementi nello scriptSig?

No, dipende dallo script che si vuole utilizzare o che si crea. Per essere più precisi, il redeem script in chiaro sarà sempre presente, cambierà la prima parte.

In questo caso sarà sufficiente la firma digitale perchè è l’elemento che servirà per soddisfare la nostra transazione.

Come riportato nella foto, sono stati inseriti nello stack la firma digitale e il redeem script. Successivamente, si “passa” ad inserire gli elementi dello scriptPubKey, inserendo OP_HASH160, il quale, come già affrontato negli articoli precedenti, esegue il pop dell’elemento on top e applica la funzione crittografica SHA256 e RIPEMD160. Il risultato viene inserito nello stack.

Vi ricordate come viene ottenuto il redeem script Hash?
Viene ottenuto applicando lo SHA256 e il RIPEMD160, esattamente la stessa operazione dell’HASH160.

Successivamente viene pushato il redeem script hash, contenuto nello scriptPubKey. L’operazione successiva è OP_EQUAL la quale prende i primi due elementi on top e li verifica tra loro. Se questi sono uguali inserisce 1, se invece sono diversi invalida la transazione.

Perchè questo controllo? Per prima cosa per rendere il P2SH retro-compatibile con quei miner che non avevo aggiornato.

Nel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts affrontiamo nel dettaglio questo tema. Successivamente perchè confrontare due stringhe è sicuramente più veloce e ottimizzato che eseguire lo stack, perchè se l’hash del redeem script è diverso dall’hash del redeem script ottenuto dal redeem script in chiaro, è evidente che le operazioni al suo interno siano diverse, proprio perchè non è possibile ottenere digest uguali da input differenti.

Se tuto va a buon fine, vedremo uno 01, ovvero il risultato ottenuto da OP_EQUAL, il quale poi viene rimosso dallo stack (pop) per eseguire il redeem script, e quindi il controllo vero e proprio, che risulta essere un normale P2PK, come già analizzato nei video precedenti.

Verrà quindi confrontata la firma digitale con la chiave pubblica fornita, grazie all’operation code OP_CHECKSIG

Il processo può sembrare macchinoso e difficile da capire, ma se si conosce la natura degli script, come ad esempio il P2PK e il P2PKH, il processo risulterà lineare

— — –

🐳 Playground Bitcoin in Action

🎥 Bitcoin in Action (YouTube)

🐙 GitHub: https://bit.ly/2Lj3yeY

— –

📕 Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (Amazon)

📕 Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (pagamento in bitcoin)

— –

📒 Libro Bitcoin dalla teoria alla pratica (Amazon)
📒 Libro Bitcoin dalla teoria alla pratica (pagamento in bitcoin)
📒 Book Bitcoin from theory to practice (Amazon)

📒 Book Bitcoin from theory to practice (accept bitcoin)

🎥 Video Corso Bitcoin dalla teoria alla pratica


📙 Tascabile Bitcoin 199 domande (Amazon)
📙 Tascabile Bitcoin 199 domande (pagamento in bitcoin)

📙 Pocket Book Bitcoin 199 questions (Amazon)
📙 Pocket Book Bitcoin 199 questions (accept bitcoin)

► ITA: Twitter , Facebook, Medium, Instagram, Youtube, GitHub

► ENG: Twitter , Facebook, Medium, Instagram, Youtube, GitHub

Television isn’t a good idea (Radio Stations)
Email isn’t a good idea (Post offices)
Amazon isn’t a good idea (Retail stores)
Bitcoin isn’t a good idea (Central banks)

In crypto we trust

--

--

No responses yet