Hey, bizantino.

Ottenere un address P2PKH e come è costruito (In Action!)

Negli articoli precedenti abbiamo visto come un address P2PKH viene generato e come una transazione viene validata. È arrivato il momento di fare sul serio, creeremo un address P2PKH e analizzeremo step by step la transazione e come questa viene validata.

Vi ricordo velocemente che l’address P2PKH (pay to public key hash) ha nel suo scriptPubKey, l’hash della sua chiave pubblica compressa.

Nel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (Amazon) analizziamo e creiamo un address P2PKH manualmente, partendo dalla generazione della chiave privata.
In questo esempio, invece, utilizzeremo il metodo getnewaddress per ottenere un address dal nostro nodo di regtest.

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

Per prima cosa avviamo il nostro nodo regtest. (Se non sai come installarlo guarda questo articolo)

https://youtu.be/EAq99ZRlttA

Richiediamo quindi un address P2PKH, utilizzando il comando getnewsaddress. Per sapere che parametri accetta, è possibile utilizzare il comando help.

Bene, accetta come parametri una label, facoltativa, e il tipo di address voluto. Il P2PKH è un address legacy, per questo utilizzeremo il comando:

Abbiamo ottenuto un address che inizia o con N o con M, nel mio caso con M. Vi ricordate perchè? Durante la costruzione dell’address inseriamo un address prefixes. In questo caso è stato il software bitcoin core a farlo per noi. Se l’address P2PKH è destinato alla mainnet il primo carattere sarà 1, se invece l’address ha come destinazione la testnet o la regtest, l’address avrà come primo carattere la m o la n.

Analizziamo meglio l’address. Per comodità salvo l’address nella variabile d’ambiente ADDR, in modo tale da non dovermi portare in “giro” 34 caratteri esadecnmali. Per fare questa operazione digito:

Per poi verificare il contenuto di ADDR, utilizzo il comando echo, richiamando la variabile preceduta dal simbolo del dollaro.

Per comodità salvo anche l’address prefix del P2PKH per l’ambiente di regtest.

Adesso possiamo utilizzare il metodo getaddressinfo , che come è facile intuire, restituisce una serie di informazioni relative all’address.

La chiamata restituisce un pò di informazioni, noi ci concentreremo su, scriptPubKey e Public Key.

Come abbiamo analizzato nei video precedenti, sappiamo che nello scriptPubKey, c’è l’hash160 della chiave pubblica compressa. Sappiamo inoltre che la public key che lèggiamo dalla chiamata getaddressinfo, è una public key compressa, perchè non inizia con il byte 04.

Vi ricordate come si ottiene l’address P2PKH? Ecco la lavagna di qualche lezione precedente.

Adesso abbiamo a disposizione, , l’address prefix e la chiave pubblica compressa. Applicando la funzione crittografica

hash160, che include lo SHA256 e successivamente il RIPEMD160. saremo in grado di ottenere il nostro address!

Per fare questo, utilizziamo ancora una variabile d’ambiente, ad esempio PB, per salvare il valore della chiave pubblica.

Oppure per prenderla in maniera dinamica, possiamo anche utilizzare Jq.

Applichiamo la funzione crittografica SHA256

Al digest ottenuto, applichiamo la funzione crittografica ripemd160

Come vedete, per comodità ho utilizzato delle variabili d’ambiente.

Che cosa manca per ottenere l’address? Applicare l’encoding base58 checksum.

L’address che ottengo è lo stesso che ho ottenuto con la chiamata getnewsaddress.

Vi ricordate che cosa contiene lo scriptPubKey?

Contiene anche l’hash160 della chiave pubblica. quello che noi abbiamo calcolato all’interno della variabile d’ambiente ADDR_RIPEMD160.

Analizziamo nuovamente la chiamata getaddressinfo sfruttando jq

Infatti troviamo corrispondenza!
Nel prossimo video vedremo come creare una transazione e come questa viene validata!

Ciao e alla prossima!

— — –

🎥 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 , FacebookMediumInstagramYoutubeGitHub

► ENG: Twitter , FacebookMediumInstagramYoutubeGitHub

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