Come creare un address P2SH–P2PK Bitcoin

Pay To Script Hash — Pay To Public Key

Nell’ 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 .

Il codice che stiamo per mostrare lo potete trovare nel libro e di conseguenza nel nostro GitHub di riferimento.

Bitcoin–In–Action–Copertina-Rigida

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

In Action

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 .

$ 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!

— — –

🐳

🎥

🐙 GitHub:

— –

📕

📕

— –

📒
📒
📒

📒

🎥


📙
📙

📙
📙

► ITA: , , , , ,

► ENG: , , , , ,

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