Salve, nell’articolo precedente abbiamo esaminato il processo di transazione utilizzando il P2SH-P2PK. In questo nuovo articolo, ci concentreremo sulla procedura di validazione. Come nelle discussioni precedenti, esploreremo lo stack utilizzando la libreria btcdeb e faremo riferimento al codice del libro “Bitcoin In Action – SegWit, Bitcoin Script e Smart Contracts”, disponibile sul nostro GitHub. La logica adottata in questo libro prevede di passare uno specifico parametro di debug allo script (DEBUG=1) per invocare la libreria btcdeb. Ora, procediamo con l’analisi pratica.
Come nei casi precedenti, inizieremo con una blockchain a zero blocchi. Mineremo successivamente 101 blocchi per ottenere la ricompensa, trasferendola successivamente a un nuovo indirizzo. Se desideri seguire passo dopo passo questi procedimenti, ti consiglio di leggere l’articolo precedente.
Il nostro compito è avviare il file sh con il comando:
$ ./main.sh debug=1
Il codice è disponibile nel nostro repository e nel libro “Bitcoin In Action – SegWit, Bitcoin Script e Smart Contracts”.
Lo script si interromperà prima dell’invio della transazione in broadcast, consentendoci di verificare la sua validità. Analogamente ai casi P2PK e P2PKH, lo stack inizia vuoto, con i primi elementi inseriti nello scriptSig.
Cosa troveremo nello scriptSig? Come discusso nell’articolo precedente, troveremo la firma digitale e il redeem script in chiaro. La composizione degli elementi nello scriptSig varierà a seconda dello script utilizzato.
Nella foto allegata, vediamo la firma digitale e il redeem script inseriti nello stack. Successivamente, procediamo inserendo gli elementi dello scriptPubKey, utilizzando l’operazione OP_HASH160 che applica SHA256 e RIPEMD160. Il risultato viene inserito nello stack.
Come viene ottenuto il redeem script Hash? Applicando SHA256 e RIPEMD160, la stessa operazione utilizzata per l’HASH160. Il redeem script hash viene poi pushato nello scriptPubKey.
L’operazione successiva, OP_EQUAL, verifica se i primi due elementi nello stack sono uguali. In caso affermativo, inserisce 1; in caso contrario, invalida la transazione. Questo controllo è necessario per garantire la retrocompatibilità del P2SH con i miner non aggiornati.
Se tutto procede correttamente, vedremo uno 01, risultato di OP_EQUAL, che viene rimosso dallo stack (pop) per eseguire il redeem script e il successivo controllo OP_CHECKSIG, simile a un normale P2PK come discusso in precedenza.
Il processo potrebbe sembrare intricato, ma con la conoscenza degli script come P2PK e P2PKH, diventa più lineare.
Ciao!
— — –
🐳 Playground Bitcoin in Action
—
🐙 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