Come creare un address P2SH–P2PK Bitcoin

Pay To Script Hash — Pay To Public Key

Bitcoin In Action
3 min readMay 4, 2021

Nell’articolo precedente abbiamo analizzato ad alto livello come è costruito l’address P2SH, che cosa è il redeem script, che cosa è il redeem script hash e dove è posizionato per la generazione dell’address.

In questo articolo andiamo più nel dettaglio ed iniziamo a mettere il primo mattoncino per la generazione di un address P2SH-P2PK

Il nostro compitò sarà quindi quello di creare un redeem script che conterrà la logica del P2PK classico, il primo address che abbiamo analizzato in questa playlist.

Il codice che stiamo per mostrare lo potete trovare nel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts e di conseguenza nel nostro GitHub di riferimento.

Bitcoin–In–Action–Copertina-Rigida
Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts

Quindi andiamo a vedere con la pratica come è possibile creare un address P2SH-P2PK

In Action

Address P2SH–P2PK Bitcoin

Al momento non è possibile creare questo tipo di address da Bitcoin-core in quanto si preferisce utilizzare P2SH-SegWit, ma è comunque indispensabile per capire il corretto funzionamento. Tralasciamo la generazione delle chiavi pubblica e privata e soffermiamoci alla costruzione del redeem script. Come vedete per questo esempio utilizzo direttamente il libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts.

$ cat compressed_public_key_1.txt

Partendo da questa chiave pubblica andiamo a creare il redeem script, che sarà formato dalla chiave pubblica e dall’operation code OP_CHECKSIG, proprio come un normale P2PK.

PBLENGTH=$(char2hex.sh $(cat compressed_public_key_1.txt | wc -c))#P2PK Script
#PB LENGTH - PB - OP_CHECKSIG
SCRIPT=$PBLENGTH$(cat compressed_public_key_1.txt)"AC"printf $SCRIPT > redeem_script.txt

Abbiamo quindi creato il Redeem script che contiene la la chiave pubblica, la sua relativa lunghezza e l’operation code OP_CHECKSIG rappresentato dall’esadeciamle AC

Successivamente creiamo parte del scriptPubKey, ovvero il redeem script hash, ottenuto applicando le funzioni crittografiche SHA256 e RIPEMD160.

#---------- scriptPubKey ---------ADDR_SHA=`printf $SCRIPT | xxd -r -p | openssl sha256| sed 's/^.* //'`ADDR_RIPEMD160=`printf $ADDR_SHA |xxd -r -p | openssl ripemd160 | sed 's/^.* //'`printf $ADDR_RIPEMD160 > scriptPubKey.txt

Il digest del redeem script lo troveremo nello scriptPubKey, come avremo modo di vedere successivamente.
Ed infine applichiamo il version prefix e il base58 checksum, ottenendo così l’address P2SH-P2PK

#ADDRESSVERSION_PREFIX_ADDRESS=C4ADDR=`printf $VERSION_PREFIX_ADDRESS$ADDR_RIPEMD160 | xxd -p -r | base58 -c`echo $ADDR > address_P2SH.txt

Avviando il nostro script possiamo verificare l’address il redeem script utilizzando il comando cat.

Possiamo verificare il nostro redeem script.

$ cat redeem_script.txt210250a1991342dd7f57792df122baa02c6a5c98aa8daeb8e106ae7d2345d020f082AC

Il nostro scriptPubKey, o redeem script Hash

$ cat scriptPubKey.txt3647d6bf3fb8e75f26f15888a471808cb4253afb

e il nostro address:

$ cat address_P2SH.txt---------- 🔑 ADDRESS P2SH ---------2MxCEY6QTacDQhHFx9rmNeXkpfXEQ17xZQM

Utilizzando il comando decodescript sul redeem script possiamo analizzare il nostro redeem script in formato assembly:

bitcoin-cli decodescript $(cat redeem_script.txt){"asm": "02329013c3c2c6bd4a5b1597b008a1ce6e750aa43cf8d2e509e8497bc491c6cb64 OP_CHECKSIG","type": "pubkey","p2sh": "2MxWUqeZaaBgKyNMxx9PzLJywr8LqkRUUor","segwit": {"asm": "0 83e34929132fffbdcffe251c289b68fb178fda06","hex": "001483e34929132fffbdcffe251c289b68fb178fda06","reqSigs": 1,"type": "witness_v0_keyhash","addresses": ["bcrt1qs035j2gn9llmmnl7y5wz3xmglvtclksx2j0yk6"],"p2sh-segwit": "2N7G1k7HomEQA8GZemXQQN3JLRPUDY75Keq"}}

Nel prossimo articolo vedremo come è costruita una transazione!

Ciao alla prossima!

— — –

🐳 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

--

--