[{"content":"Bitcoin In Action accompagna il lettore attraverso l’aggiornamento di Bitcoin SegWit e l’utilizzo del linguaggio di programmazione Bitcoin Script.\nAlzare il cofano, controllare ogni singolo bit, accendere la macchina e guardare se e come funzionacco che cosa farà il lettore, grazie alla teoria sarà in grado di replicare ogni singolo esempio con il supporto di file appositamente preparati dagli autori, iniziando così a prendere conoscenza del mondo programmable money, di cui tutti parlano ma che pochi hanno le capacità di spiegarlo.\nIl libro è il sequel di Bitcoin – Dalla teoria alla pratica, indispensabile per seguire Bitcoin In Actionogliamo rimanere ancora a guardare?\nPer seguire questo nuovo testo è indispensabile il primo libro, Bitcoin dalla teoria alla pratica, proprio perché non saranno spiegati concetti già affrontati precedentemente —come ad esempio il mining— quindi la proof of work, il problema dei generai bizantini o la blockchain, quindi hard fork e soft fork, ma abbiamo deciso di andare giù nella buca del Bianconiglio. 🐰\nL’obiettivo del libro è quello di spiegare, sempre utilizzando la pratica, gli aggiornamenti più corposi del protocollo Bitcoin, analizzando prima le problematichenfatti il primo capitolo è dedicato alla transaction malleability, la quale viene risolta con l’aggiornamento SegWit.\nUna sezione completamente dedicata ai timelocks, dove è necessario prendere confidenza con Bitcoin Script e lo stackrriveremo infine a creare degli smart contracts in grado di sbloccare dei fondi solo se determinate condizioni sono verificate, utilizzando delle operation code come OP_IF, OP_ELSE o per meglio dire le operation code del flow control.\nUn libro molto corposo che porta due novità fondamentali rispetto al precedente: le mappe mentali e la pratica.\nCapitoli # I bit del mestiere: Prepariamo il nostro banco di lavoro: Prima di sporcarci le mani con transazioni reali, dobbiamo configurare gli strumenti giusti. In questo capitolo prepariamo l\u0026rsquo;ambiente di lavoro: librerie, terminale, e tutto ciò che serve per seguire gli esempi pratici del corso senza inciampare nei dettagli tecnici.\nTransaction malleability: Una transazione Bitcoin firmata può essere modificata da terzi prima di essere confermata, senza invalidare la firma. In questo capitolo scopriamo come funziona questo bug storico, perché ha bloccato lo sviluppo di Lightning Network per anni e come SegWit lo ha risolto definitivamente.\nP2MS – Pay to Multi Signature: Il multisig nella sua forma più primitiva. In questo capitolo analizziamo il primo script multifirma di Bitcoin, come funziona il meccanismo M-di-N, i suoi limiti pratici — dimensione dello script, costi elevati e mancanza di privacy — e perché è stato rapidamente superato da soluzioni più eleganti.\nP2SH – Pay to Script Hash: Con P2SH l\u0026rsquo;onere di fornire lo script di spesa passa dal mittente al destinatario. In questo capitolo vediamo come funziona questo cambiamento architetturale, come l\u0026rsquo;hash dello script diventa l\u0026rsquo;indirizzo di ricezione e perché P2SH ha reso il multisig praticabile per il mondo reale.\nP2SH Multisig – Pay To Script Hash: Il multisig moderno, quello che trovi nei cold wallet e nei servizi di custodia. In questo capitolo costruiamo un indirizzo P2SH 2-di-3 da zero, analizziamo il redeem script, vediamo come viene risolto lo stack durante la verifica e perché questo standard è ancora oggi ampiamente usato.\nFirmare una transazione legacy: In questo capitolo firmiamo una transazione legacy passo per passo: selezione degli UTXO, costruzione degli input e output, calcolo del sighash, firma ECDSA e serializzazione finale. Un percorso completo che ti permette di capire esattamente cosa succede dietro le quinte di ogni wallet.\nFirmare una transazione P2SH Multisig: Firmare una transazione multisig richiede la coordinazione di più chiavi private. In questo capitolo vediamo come raccogliere le firme, come assemblarle nello scriptSig nel corretto ordine, come gestire il bug di OP_CHECKMULTISIG con OP_0 e come trasmettere la transazione alla rete.\nSegWit – Segregated Witness: SegWit è l\u0026rsquo;aggiornamento più importante nella storia di Bitcoin dopo il genesis block. In questo capitolo analizziamo perché è stato necessario, cosa significa separare il witness dagli input, come cambia la struttura della transazione, il nuovo calcolo del peso in vbyte e tutti i vantaggi che ha portato alla rete.\nFirmare una transazione SegWit: Il processo di firma di una transazione SegWit è diverso da quello legacy: il sighash include il valore dell\u0026rsquo;input, risolvendo la transaction malleability. In questo capitolo costruiamo e firmiamo una transazione P2WPKH da zero, analizzando il nuovo formato di serializzazione witness campo per campo.\nTimelocks: Presto che è tardi!: I timelocks permettono di bloccare i bitcoin fino a un certo momento nel tempo o a una certa altezza di blocco. In questo capitolo analizziamo i quattro tipi di timelock — nLockTime, nSequence, CLTV e CSV — le loro differenze, come vengono verificati dal protocollo e i casi d\u0026rsquo;uso reali come i payment channel di Lightning Network.\nAdvanced Script: Gli smart contracts di Bitcoin: Bitcoin Script non è solo per pagamenti semplici. In questo capitolo esploriamo gli script avanzati: HTLC, script condizionali con OP_IF, contratti con timelock combinati e le basi degli smart contract su Bitcoin. Scopriamo fino a dove si può spingere il linguaggio stack-based più robusto e battle-tested della storia.\n101110, 01, 0x. 01000111 01110010 01100001 01111010 01101001 01100101\nAcquista su Amazon ","date":"1 gennaio 2020","externalUrl":null,"permalink":"/prodotti/bitcoin-in-action/","section":"UTXO","summary":"Bitcoin In Action accompagna il lettore attraverso l’aggiornamento di Bitcoin SegWit e l’utilizzo del linguaggio di programmazione Bitcoin Script.\nAlzare il cofano, controllare ogni singolo bit, accendere la macchina e guardare se e come funzionacco che cosa farà il lettore, grazie alla teoria sarà in grado di replicare ogni singolo esempio con il supporto di file appositamente preparati dagli autori, iniziando così a prendere conoscenza del mondo programmable money, di cui tutti parlano ma che pochi hanno le capacità di spiegarlo.\n","title":"Bitcoin In Action: SegWit, Bitcoin Script \u0026 Smart Contracts","type":"prodotti"},{"content":"Segui il video corso completo che affronta le tematiche principali del protocolloetti in pratica la teoria utilizzando veri nodi!\n7 ore di video on-demand su Udemy 7 risorse scaricabili Certificato di fine corso Requirements # Dimestichezza con il terminale se si vuole replicare gli esempi Non è necessario avere un full nodo, è possibile fare le stesse chiamate con servizi esterni o con una regtest Minima conoscenza dei comandi bash Description # Che corso di Bitcoin state cercando?\nSe state cercando un corso su come investire in criptovalute e diventare ricchi, questo non è per voi. Se state cercando un corso su come iscriversi ai vari exchanges, questo corso non è per voi. Se state cercando delle dritte su quale criptovaluta comprare per fare TO THE MOON, questo corso non è per voi.\nSe state cercando un corso che vi faccia vedere come è formato un blocco utilizzando un fullnode Bitcoin, questo corso è per voi. Se state cercando un corso che vi faccia capire Bitcoin senza passare dalla parte speculativa, questo corso è per voi. Se state cercando un corso che vi faccia vedere come ottenere chiavi pubbliche e private, questo corso è per voi. Se state cercando un corso che vi faccia capire le transazioni, questo corso è per voi.\nL\u0026rsquo;obiettivo di questo corso è capire il protocollo Bitcoin grazie ad esempi pratici. Ogni lezione parte da una introduzione con slide, per poi mettere in pratica quanto spiegato.\nQuesto è il corso completo che comprende le macro sezioni:\nBlockchain Mining Wallet Transazioni oltre a sezioni extra come: La storia Crittografia e molto altro. Se sei interessato ad una sezione in particolare, puoi trovare il corso che fa per te a costo minore sempre qui su Udemy.\nCosa intendiamo con esempi pratici? # Chiamate RPC ad un vero fullnode Calcolare la difficoltà del blocco tramite codice, così da capire la potenza del Proof Of Work Ricalcolare il merkle root partendo dal merkle block message Calcolare le proprie chiavi private e pubbliche Capire come una seed phrase possa generare un Wallet HD Che cosa sono le xprv e le xpub Capire che cosa sono i forks Creare transazioni da zero e molto altro \u0026hellip; Tutto seguito da Quiz!\nAbbiamo deciso di utilizzare solo riga di comando, cercando di mantenersi più possibile a basso livello. Il nostro obiettivo non è scrivere del codice performante o riutilizzabile, il nostro obiettivo è scrivere del codice per capire al meglio il protocollo Bitcoin. È anche per questo motivo che abbiamo deciso di, ove possibile, non utilizzare librerie esterne le quali potrebbero fare il \u0026ldquo;lavoro sporco\u0026rdquo; per noi.\nE\u0026rsquo; consigliata una minima conoscenza dei comandi shell. Il corso potrà avere degli aggiornamenti nel tempo.\nThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks\nIscriviti al corso su Udemy ","date":"1 gennaio 2020","externalUrl":null,"permalink":"/prodotti/videocorso-teoria-pratica/","section":"UTXO","summary":"Segui il video corso completo che affronta le tematiche principali del protocolloetti in pratica la teoria utilizzando veri nodi!\n7 ore di video on-demand su Udemy 7 risorse scaricabili Certificato di fine corso Requirements # Dimestichezza con il terminale se si vuole replicare gli esempi Non è necessario avere un full nodo, è possibile fare le stesse chiamate con servizi esterni o con una regtest Minima conoscenza dei comandi bash Description # Che corso di Bitcoin state cercando?\n","title":"Bitcoin dalla teoria alla pratica - Corso Completo","type":"prodotti"},{"content":"Siamo sempre stati convinti che per capire veramente il potenziale di una qualsiasi tecnologia dobbiamo provarla con mano, vedendo con i nostri occhi i risultati che possiamo ottenereuesto libro analizza dettagliatamente il protocollo Bitcoin, mettendo in pratica la teoria con esempi concreti e reali.\nNon è necessario essere un programmatore per capire che è arrivato il momento di unirsi alla rivoluzione tecnologica.\nThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks.\nBitcoinenaro dei nerds? Oro digitale? Forse, sicuramente rivoluzione sociale.\nQuesto il pensiero dei due autori dopo aver messo in pratica, con esempi reali e concreti, il protocollo Bitcoin. Il loro mantra è: “Per comprendere profondamente una qualsiasi tecnologia dobbiamo toccarla con mano, vedendo con i nostri occhi i risultati che possiamo ottenere”. Non si sono accontentati di sapere superficialmente che cosa è una transazione e come viene identificata nella blockchain, oppure perché viene utilizzato il merkle tree, o ancora come sono gestite le chiavi private nel wallet deterministicoanno voluto ottenere i risultati passo passo spiegandone tutte le sfumature.\nAllacciate le cinture, state per intraprendere un viaggio nel cypherspazio, al vostro ritorno sarete consapevoli, vi renderete conto del perché Bitcoin ha le carte in regola per spostare gli equilibri.\nNon è necessario essere un minatore per fare mining come non è necessario essere programmatore per capire che non c’è più tempo per ignorarlo.\nIl treno sta fischiando: investite l’asset più prezioso a vostra disposizione, il tempo, e prendete posto in carrozza per raggiungere il futuro decentralizzato dove la globalizzazione ci sta portando.\nCapitoli # Storia e termini base: In questo capitolo parleremo della storia di Bitcoin e dei termini base. Scopriremo che cos\u0026rsquo;è un movimento cypherpunk, che cos\u0026rsquo;è un sistema centralizzato e una rete P2P. Per capire la rivoluzione dobbiamo partire dalle basi e dare merito a tutte le persone che hanno reso questa tecnologia il futuro.\nCrittografia: La crittografia proviene dal greco e significa \u0026ldquo;scrittura nascosta\u0026rdquo;. Può essere usata per cifrare dei messaggi, quindi nasconderli, oppure per verificare che un messaggio non sia stato manomesso e che sia stato inviato dal mittente voluto.\nBlockchain: Come possiamo definire la blockchain? Le definizioni più gettonate sono \u0026ldquo;un libro mastro distribuito\u0026rdquo;, \u0026ldquo;un database immutabile\u0026rdquo;, o ancora \u0026ldquo;un raccoglitore di transazioni ordinate temporalmente\u0026rdquo;. Queste definizioni hanno tutte qualcosa di vero: la blockchain è immutabile, raccoglie transazioni, è distribuita e ogni blocco è marcato temporalmente.\nMerkle tree: Il Merkle tree è una struttura dati ad albero in cui ogni nodo foglia contiene l\u0026rsquo;hash di un dato, e ogni nodo interno contiene l\u0026rsquo;hash dei suoi figli. In Bitcoin viene usato per organizzare le transazioni all\u0026rsquo;interno di un blocco in modo efficiente e verificabile.\nBloom filters: I Bloom filters sono una struttura dati probabilistica che permette di verificare se un elemento appartiene a un insieme in modo rapido e con poco consumo di memoria. In Bitcoin vengono usati dai nodi SPV per filtrare le transazioni rilevanti senza rivelare esattamente quale informazione si sta cercando.\nBig endian – Little endian: Quando lavoriamo con dati binari dobbiamo sapere in che ordine vengono scritti i byte. Big endian scrive il byte più significativo per primo, Little endian al contrario. Bitcoin usa entrambe le convenzioni a seconda del contesto, ed è fondamentale saperle distinguere per interpretare correttamente i dati on-chain.\nMerkle block message: Il Merkle block message è il messaggio che un full node invia a un nodo SPV in risposta a una richiesta filtrata. Contiene il block header e il Merkle path necessario per verificare che una transazione sia inclusa nel blocco senza scaricare l\u0026rsquo;intera blockchain.\nMerkle block message a senso unico: Approfondiamo il Merkle block message analizzando come il percorso di verifica funziona in una sola direzione, dal nodo foglia fino alla radice. Questo meccanismo garantisce l\u0026rsquo;integrità della transazione con un numero minimo di hash da verificare.\nTipi di blockchain: Non tutte le blockchain sono uguali. In questo capitolo distinguiamo tra blockchain pubbliche, private e consortili, analizzando le differenze architetturali, i casi d\u0026rsquo;uso e perché Bitcoin rappresenta il modello di blockchain pubblica per eccellenza.\nBlockchain fork: Un fork della blockchain avviene quando due miner trovano un blocco valido contemporaneamente, creando due rami concorrenti. Scopriamo come la rete risolve questa situazione, perché accade frequentemente e cosa succede al blocco orfano.\nI miners: I miner sono i nodi della rete che si occupano di creare nuovi blocchi raccogliendo le transazioni dalla mempool e risolvendo il Proof of Work. In questo capitolo analizziamo il loro ruolo, i loro incentivi economici e come interagiscono con il resto della rete.\nProof of Work – Primi passi: La Proof of Work è il meccanismo con cui un miner dimostra di aver speso energia computazionale per trovare un hash valido. In questo capitolo introduciamo il concetto, spieghiamo il ruolo del nonce e perché questo processo è fondamentale per la sicurezza di Bitcoin.\nCalcolare la difficoltà: La difficoltà della rete Bitcoin si aggiusta ogni 2016 blocchi per mantenere un tempo medio di mining di 10 minuti. In questo capitolo vediamo come viene calcolata, quale formula usa il protocollo e perché questo meccanismo di aggiustamento è essenziale per la stabilità della rete.\nDifficoltà di un blocco passato: Analizziamo come leggere e interpretare la difficoltà di un blocco già minato, decodificando il campo bits del block header e convertendolo nel valore target effettivo. Un esercizio pratico per capire come funziona il protocollo nel mondo reale.\nBizantini all\u0026rsquo;attacco: Il problema dei generali bizantini descrive la sfida di raggiungere il consenso in un sistema distribuito dove alcuni partecipanti possono essere disonesti. Scopriamo come Bitcoin ha risolto questo problema millenario attraverso il Proof of Work e la regola della catena più lunga.\nHard fork – Soft fork: Un hard fork introduce modifiche al protocollo incompatibili con le versioni precedenti, mentre un soft fork è retrocompatibile. In questo capitolo analizziamo le differenze, gli esempi storici più importanti e le implicazioni politiche e tecniche di ciascun tipo di aggiornamento.\nCripto gratis: Quando avviene un hard fork, i possessori di Bitcoin ricevono spesso una quantità equivalente della nuova criptovaluta. In questo capitolo analizziamo come funziona questo meccanismo, cosa significa per la sicurezza della rete e come gestirlo praticamente.\nWallet – Introduzione: Il wallet Bitcoin non contiene bitcoin, ma le chiavi per spenderli. In questo capitolo introduciamo i concetti fondamentali: chiave privata, chiave pubblica e indirizzo, spiegando la relazione tra loro e perché la custodia delle chiavi è la vera responsabilità dell\u0026rsquo;utente.\nChiave privata: La chiave privata è un numero casuale a 256 bit che rappresenta la proprietà dei bitcoin. In questo capitolo vediamo come viene generata, quali formati esistono, come viene protetta e perché la sua sicurezza è l\u0026rsquo;elemento più critico di tutto il sistema.\nChiave pubblica: La chiave pubblica viene derivata dalla chiave privata tramite la crittografia a curva ellittica. In questo capitolo analizziamo la matematica alla base della derivazione, le proprietà della curva secp256k1 usata da Bitcoin e perché è impossibile risalire alla chiave privata partendo dalla chiave pubblica.\nBitcoin address: L\u0026rsquo;indirizzo Bitcoin è una rappresentazione compatta della chiave pubblica, ottenuta tramite una serie di operazioni di hashing. In questo capitolo vediamo come viene costruito, perché si usa l\u0026rsquo;hash invece della chiave pubblica diretta e come si verifica la sua validità tramite il checksum.\nI formati: Bitcoin utilizza diversi formati per rappresentare chiavi e indirizzi: WIF, compressed, uncompressed, Base58Check e Bech32. In questo capitolo analizziamo ciascun formato, quando viene usato e come riconoscerli a colpo d\u0026rsquo;occhio.\nWallet deterministici e non: Un wallet non deterministico genera chiavi casuali indipendenti tra loro, mentre un wallet deterministico le deriva tutte da un unico seed. In questo capitolo confrontiamo i due approcci, i vantaggi del backup con una sola frase e perché i wallet HD sono diventati lo standard.\nDall\u0026rsquo;entropia al seed phrase: La seed phrase è una sequenza di parole che rappresenta l\u0026rsquo;entropia iniziale del wallet. In questo capitolo vediamo come viene generata secondo lo standard BIP39, come l\u0026rsquo;entropia viene convertita in parole dalla wordlist e perché 12 o 24 parole sono sufficienti per proteggere tutti i tuoi bitcoin.\nDal seed phrase al seed: La seed phrase non è direttamente il seed usato per derivare le chiavi. In questo capitolo analizziamo il processo di derivazione tramite la funzione PBKDF2, il ruolo della passphrase opzionale e come si ottiene il seed a 512 bit che è il punto di partenza dell\u0026rsquo;albero HD.\nCreare le chiavi HD wallet: Un HD wallet genera una struttura ad albero di chiavi partendo dal master seed. In questo capitolo vediamo come viene creata la master private key e il master chain code, i due elementi fondamentali da cui dipende l\u0026rsquo;intera gerarchia del wallet.\nChild key derivation: La Child Key Derivation (CKD) è il processo con cui si derivano chiavi figlio da una chiave genitore. In questo capitolo analizziamo l\u0026rsquo;algoritmo HMAC-SHA512 alla base del processo, il ruolo del chain code e come ogni livello dell\u0026rsquo;albero viene generato in modo deterministico.\nPurpose: Il campo Purpose è il primo livello della gerarchia BIP44 e indica lo standard di derivazione usato dal wallet. In questo capitolo vediamo perché è stato introdotto, come distingue tra BIP44, BIP49 e BIP84, e come garantisce l\u0026rsquo;interoperabilità tra wallet diversi.\nCKD hardened: La derivazione hardened crea chiavi figlio che non possono essere derivate conoscendo solo la chiave pubblica estesa del genitore. In questo capitolo vediamo quando usarla, qual è la differenza matematica rispetto alla derivazione normale e perché i primi livelli della gerarchia HD usano sempre la derivazione hardened.\nCKD non hardened: La derivazione non hardened permette di generare chiavi figlio pubbliche partendo dalla chiave pubblica estesa del genitore, senza mai esporre la chiave privata. In questo capitolo vediamo i casi d\u0026rsquo;uso pratici, come funziona nei wallet watch-only e i rischi di sicurezza da conoscere.\nExtended public keys: Una extended public key (xpub) contiene la chiave pubblica e il chain code, e permette di derivare tutte le chiavi pubbliche figlio di un ramo senza conoscere la chiave privata. In questo capitolo vediamo come viene codificata, come usarla per generare indirizzi di ricezione e i rischi per la privacy che comporta.\nExtended private keys: Una extended private key (xprv) contiene la chiave privata e il chain code, e permette di derivare l\u0026rsquo;intero albero di chiavi di un wallet. In questo capitolo vediamo la sua struttura, come viene codificata in Base58Check e perché va protetta con la stessa cura del seed.\nIntroduzione alle transazioni: Una transazione Bitcoin è il messaggio con cui il proprietario di bitcoin autorizza il loro trasferimento. In questo capitolo introduciamo la struttura generale, il concetto di input e output, e come una transazione viene propagata, verificata e inclusa in un blocco.\nUTXO: L\u0026rsquo;Unspent Transaction Output è il modello contabile di Bitcoin. In questo capitolo vediamo come funziona il set UTXO, perché Bitcoin non usa saldi ma output non spesi, come il database Chainstate mantiene traccia di tutti gli UTXO esistenti e perché questo modello è fondamentale per la verifica delle transazioni.\nStruttura della transazione: Una transazione Bitcoin è composta da version, inputs, outputs e locktime. In questo capitolo analizziamo ogni campo nel dettaglio, vediamo come viene serializzata in formato esadecimale e come interpretare una transazione reale estratta dalla blockchain.\nFees: Le fee sono la differenza tra il totale degli input e il totale degli output di una transazione. In questo capitolo vediamo come vengono calcolate, perché esistono, come influenzano la priorità di inclusione in un blocco e come stimare la fee ottimale in base alle condizioni della mempool.\nInput: Un input è il riferimento a un UTXO precedente che si vuole spendere. In questo capitolo analizziamo i campi che compongono un input: txid, vout, scriptSig e sequence, e vediamo come il nodo verifica che chi firma abbia effettivamente il diritto di spendere quell\u0026rsquo;output.\nSerialized input transaction: In questo capitolo vediamo come un input viene serializzato in byte, analizzando il formato esadecimale campo per campo. Un esercizio pratico fondamentale per capire come funziona realmente il protocollo Bitcoin a livello di dati.\nOutput: Un output definisce la destinazione dei bitcoin e le condizioni necessarie per spenderli in futuro tramite lo scriptPubKey. In questo capitolo analizziamo i campi che compongono un output, i diversi tipi di locking script e come un output diventa un UTXO disponibile nel set globale.\nOutput in action: Mettiamo in pratica quanto appreso sugli output analizzando transazioni reali sulla blockchain. In questo capitolo vediamo come decodificare il valore in satoshi, interpretare lo scriptPubKey e identificare il tipo di output direttamente dai dati esadecimali.\nQuanti locking script esistono?: Bitcoin supporta diversi tipi di locking script: P2PK, P2PKH, P2SH, P2WPKH, P2WSH e P2TR. In questo capitolo facciamo una panoramica di tutti i formati esistenti, le loro caratteristiche, quando sono stati introdotti e quali sono oggi i più usati.\nScript: Bitcoin Script è un linguaggio stack-based non Turing-completo usato per definire le condizioni di spesa degli output. In questo capitolo introduciamo il funzionamento dello stack, i principali opcode e come scriptPubKey e scriptSig interagiscono durante la verifica di una transazione.\nVerificare lo script: In questo capitolo vediamo passo per passo come un nodo esegue la verifica di uno script, simulando l\u0026rsquo;esecuzione dello stack con esempi concreti. Capire questo processo è fondamentale per comprendere come Bitcoin garantisce che solo il legittimo proprietario possa spendere un UTXO.\nCoinbase: La transazione coinbase è la prima transazione di ogni blocco e non ha input reali. In questo capitolo vediamo come viene costruita dal miner, come include il block reward e le fee delle transazioni, il campo coinbase data e perché i bitcoin della coinbase non sono spendibili per 100 blocchi.\nCoinbase vs UTXO: In questo capitolo confrontiamo la transazione coinbase con una transazione normale, evidenziando le differenze strutturali e le regole speciali che la governano. Un\u0026rsquo;analisi che chiarisce come nascono i nuovi bitcoin e come entrano nel set UTXO.\nCreare la transazione: In questo capitolo vediamo come costruire una transazione Bitcoin da zero, selezionando gli UTXO da spendere, definendo gli output, calcolando le fee e serializzando il tutto nel formato corretto pronto per essere firmato e trasmesso alla rete.\nFirmare la transazione: La firma di una transazione avviene tramite l\u0026rsquo;algoritmo ECDSA applicato alla chiave privata del mittente. In questo capitolo vediamo come viene calcolato il sighash, come viene prodotta la firma DER, come viene inserita nello scriptSig e come un nodo la verifica usando la chiave pubblica.\nEND.: Sei arrivato alla fine del corso. Hai percorso l\u0026rsquo;intero stack tecnologico di Bitcoin, dalla storia alle firme digitali. Ora hai gli strumenti per leggere la blockchain, costruire transazioni e capire perché Bitcoin funziona esattamente come funziona. La rivoluzione è cominciata. 👊\nAcquista su Amazon ","date":"1 gennaio 2019","externalUrl":null,"permalink":"/prodotti/bitcoin-dalla-teoria-alla-pratica/","section":"UTXO","summary":"Siamo sempre stati convinti che per capire veramente il potenziale di una qualsiasi tecnologia dobbiamo provarla con mano, vedendo con i nostri occhi i risultati che possiamo ottenereuesto libro analizza dettagliatamente il protocollo Bitcoin, mettendo in pratica la teoria con esempi concreti e reali.\nNon è necessario essere un programmatore per capire che è arrivato il momento di unirsi alla rivoluzione tecnologica.\nThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks.\n","title":"Bitcoin dalla teoria alla pratica","type":"prodotti"},{"content":"Bitcoin — money for nerds? Digital gold? Perhaps, but certainly it is a social revolution.\nThis is what the two authors think, after they put into practice the Bitcoin protocol with real and concrete examples. Their mantra is: \u0026ldquo;To thoroughly understand any technology, we must touch it with our hands and see with our own eyes the results we can achieve\u0026rdquo;.\nThey were not satisfied with superficially knowing what a transaction is and how it is identified in the blockchain, or why the merkle tree is used, or how private keys are managed in the deterministic wallet. They wanted to obtain each result step by step and explain all its connotations.\nSo, fasten your seatbelts, because you are about to embark on a journey into cyberspace. Upon your return you will be aware of why Bitcoin has the credentials to shift the world balance. You don\u0026rsquo;t need to be a miner to start mining, as you don\u0026rsquo;t need to be a developer to understand that it is no more time to ignore it.\nAcquista su Amazon ","date":"1 gennaio 2020","externalUrl":null,"permalink":"/prodotti/bitcoin-from-theory-to-practice/","section":"UTXO","summary":"Bitcoin — money for nerds? Digital gold? Perhaps, but certainly it is a social revolution.\nThis is what the two authors think, after they put into practice the Bitcoin protocol with real and concrete examples. Their mantra is: “To thoroughly understand any technology, we must touch it with our hands and see with our own eyes the results we can achieve”.\nThey were not satisfied with superficially knowing what a transaction is and how it is identified in the blockchain, or why the merkle tree is used, or how private keys are managed in the deterministic wallet. They wanted to obtain each result step by step and explain all its connotations.\n","title":"Bitcoin from theory to practice","type":"prodotti"},{"content":"We cannot stand stille cannot be witnesses of history, just watching this train passing by.It is not acceptable to be parasites of this technology.This is the moment to try to understand how the greatest payment revolution worksitcoin is the answer to the eternal question, is the change that society has been waiting for since the dawn of time.How we can be really free from any bonds, independent from institutions, masters of our own life.In order to truly understand how some bits can turn the world upside down, we need to take the path towards knowledge, starting from scratch.We are sure that this short book will arouse both beginners’ and experts’ curiosity and provide the answers everyone needs.\nAcquista su Amazon ","date":"1 gennaio 2019","externalUrl":null,"permalink":"/prodotti/bitcoin-199-questions/","section":"UTXO","summary":"We cannot stand stille cannot be witnesses of history, just watching this train passing by.It is not acceptable to be parasites of this technology.This is the moment to try to understand how the greatest payment revolution worksitcoin is the answer to the eternal question, is the change that society has been waiting for since the dawn of time.How we can be really free from any bonds, independent from institutions, masters of our own life.In order to truly understand how some bits can turn the world upside down, we need to take the path towards knowledge, starting from scratch.We are sure that this short book will arouse both beginners’ and experts’ curiosity and provide the answers everyone needs.\n","title":"Bitcoin 199 questions","type":"prodotti"},{"content":"Viviamo in una società in continua evoluzione, internet è entrato in maniera prepotente nelle nostre vite, l’email è diventata uno strumento indispensabile per la comunicazione, il mondo dei pagamenti sta cambiando, spazzando via il vecchio per far spazio al nuovo.\nSiamo convinti che Bitcoin è il cambiamento che la società sta aspettando da tempo, non c’è più tempo per essere analfabeti, non è ammissibile partecipare passivamente.\nLa vera rivoluzione deve iniziare dentro di noi.\nLa sfida che ci siamo prefissati è stata quella di rispondere esaustivamente utilizzando poche righe, chiarendo dubbi ai neofiti e incuriosendo i più esperti.\nSiamo però consapevoli che domane più tecniche hanno bisogno di risposte più ampie, per questo consigliamo il libro “Bitcoin dalla teoria alla pratica” che affronta in modo dettagliato il protocollo con esempi pratici e reali.\nBenvenuti nel futuro.\nAcquista su Amazon ","date":"1 gennaio 2019","externalUrl":null,"permalink":"/prodotti/bitcoin-199-domande/","section":"UTXO","summary":"Viviamo in una società in continua evoluzione, internet è entrato in maniera prepotente nelle nostre vite, l’email è diventata uno strumento indispensabile per la comunicazione, il mondo dei pagamenti sta cambiando, spazzando via il vecchio per far spazio al nuovo.\nSiamo convinti che Bitcoin è il cambiamento che la società sta aspettando da tempo, non c’è più tempo per essere analfabeti, non è ammissibile partecipare passivamente.\nLa vera rivoluzione deve iniziare dentro di noi.\n","title":"Bitcoin 199 domande","type":"prodotti"},{"content":"","date":"15 marzo 2026","externalUrl":null,"permalink":"/categories/bitcoin/","section":"Categories","summary":"","title":"Bitcoin","type":"categories"},{"content":"","date":"15 marzo 2026","externalUrl":null,"permalink":"/tags/bitcoin/","section":"Tags","summary":"","title":"Bitcoin","type":"tags"},{"content":"","date":"15 marzo 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"15 marzo 2026","externalUrl":null,"permalink":"/tags/medio/","section":"Tags","summary":"","title":"Medio","type":"tags"},{"content":"","date":"15 marzo 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Se bazzicate un po\u0026rsquo; nel mondo Bitcoin, vi sarà sicuramente capitato di sentire la parola SegWit. È l\u0026rsquo;abbreviazione di Segregated Witness — \u0026ldquo;Testimone isolato\u0026rdquo; — ed è stato uno degli aggiornamenti più importanti per la rete. Pensato nel 2015 da Pieter Wuille e attivato nell\u0026rsquo;agosto del 2017.\nIl problema di partenza era semplice: un blocco Bitcoin non può pesare più di 1 megabyte. Con questo limite, la rete reggeva al massimo 3-7 transazioni al secondo — pochissime. Aumentare la dimensione dei blocchi d\u0026rsquo;un colpo avrebbe richiesto hardware sempre più potente e minacciato la decentralizzazione. Bisognava trovare un\u0026rsquo;altra strada.\nLa firma si sposta, e tutto cambia # L\u0026rsquo;idea di SegWit è questa: prendere le firme digitali — il \u0026ldquo;testimone\u0026rdquo; che prova che quei Bitcoin sono tuoi — e spostarle in un campo separato chiamato txinwitness. I vecchi nodi non aggiornati vedono la transazione senza firme ma la considerano valida lo stesso, e ci guadagnano spazio. In più, la firma non influenza più il TXID della transazione: il bug della transaction malleability, risolto.\nCon SegWit nasce anche una nuova unità di misura, il Block Weight, che può arrivare a 4 megabyte virtuali. I dati classici pesano 4 unità, i dati SegWit (le firme) pesano solo 1. Risultato: lo spazio reale medio di un blocco è salito a circa 2,3 MB, con più transazioni per blocco.\nMeno commissioni, indirizzi che iniziano con bc1 # Le commissioni Bitcoin si calcolano sulla vsize (virtual size), ottenuta dividendo il peso totale per 4. Dato che le firme SegWit pesano un quarto rispetto al formato legacy, la transazione risulta più leggera ai fini del calcolo. Il risparmio usando indirizzi nativi SegWit va dal 39% al 58%.\nGli indirizzi nativi SegWit usano il formato Bech32 e iniziano sempre con bc1. Sono solo minuscole, rilevano fino a 5 caratteri errati e producono QR code più compatti. Se il tuo wallet usa ancora indirizzi che iniziano con 1 (P2PKH) o 3 (P2SH), stai probabilmente pagando commissioni più alte del necessario. Vale la pena controllare.\nSe vuoi approfondire come funzionano gli indirizzi Bitcoin prima di SegWit, puoi leggere come è costruito un indirizzo P2PKH oppure l\u0026rsquo;introduzione a P2SH.\n","date":"15 marzo 2026","externalUrl":null,"permalink":"/posts/segwit-cosa-e-perche-risparmiare-commissioni-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Se bazzicate un po’ nel mondo Bitcoin, vi sarà sicuramente capitato di sentire la parola SegWit. È l’abbreviazione di Segregated Witness — “Testimone isolato” — ed è stato uno degli aggiornamenti più importanti per la rete. Pensato nel 2015 da Pieter Wuille e attivato nell’agosto del 2017.\n","title":"SegWit: cos'è e perché ti fa risparmiare sulle commissioni Bitcoin","type":"posts"},{"content":"","date":"15 marzo 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"15 marzo 2026","externalUrl":null,"permalink":"/tags/tutorial/","section":"Tags","summary":"","title":"Tutorial","type":"tags"},{"content":"Adoriamo perseguire allucinazioni e le loro conseguenti idee, come scrivere questi libri. Leggendoli non troverete né un saggio, né un’analisi economica, né una ricerca accademica sulla crittografia.\nTroverete l’esperienza di chi, davanti ad articoli che narrano di leggendarie stregonerie digitali, non si accontenta del luccichio mistico e, sentendosi inspiegabilmente attratto dalla curiosità di strofinare una lampada di Aladino per scoprire cosa ne esce, scoperchia il vaso di Pandora con l’intenzione di non lasciarsi dietro alcun amletico dubbio.\nChe tu sia un minutatore del codice o meno non ha importanza.\nBenvenuto nel cypherspazio.\n","date":"14 marzo 2026","externalUrl":null,"permalink":"/","section":"Corso Bitcoin","summary":"Adoriamo perseguire allucinazioni e le loro conseguenti idee, come scrivere questi libri. Leggendoli non troverete né un saggio, né un’analisi economica, né una ricerca accademica sulla crittografia.\nTroverete l’esperienza di chi, davanti ad articoli che narrano di leggendarie stregonerie digitali, non si accontenta del luccichio mistico e, sentendosi inspiegabilmente attratto dalla curiosità di strofinare una lampada di Aladino per scoprire cosa ne esce, scoperchia il vaso di Pandora con l’intenzione di non lasciarsi dietro alcun amletico dubbio.\n","title":"Corso Bitcoin","type":"page"},{"content":"In questa sezione raccogliamo gli output del nostro lavoro: risorse di approfondimento, protocollo e codice, create per chi non si accontenta della superficie.\n","date":"14 marzo 2026","externalUrl":null,"permalink":"/prodotti/","section":"UTXO","summary":"In questa sezione raccogliamo gli output del nostro lavoro: risorse di approfondimento, protocollo e codice, create per chi non si accontenta della superficie.\n","title":"UTXO","type":"prodotti"},{"content":"Queste sono le nostre storie, gli stessi percorsi (e aneddoti) che potete trovare in calce ai nostri libri.\nAlessio Barnini # Nato a Livorno all’ombra del cacciucco nel 1983.\nFin dai primi anni della mia vita sono stato affascinato dai computer. Il primo amore è stato il Commodore64 di mio padre, non ricordo l’età che avevo, ma sicuramente non ero ancora in grado di leggere e scrivere. Riuscivo però a caricare i giochi, i dischi di cartone, perché mi ricordavo la sequenza delle lettere e il disegno che formavano.\nMi ricordo la passione che mettevo nello sconfiggere i miei fratelli ai videogiochi, che mi prendevano in giro facendomi giocare con il joystick scollegato. A tanto volavo con la fantasia che non serviva un controller per immaginare di essere dentro a un altro mondo, proprio come TRON. Ancora oggi mi ricordano questo episodio.\nArrivò poi l’Amiga 500 che mio padre prontamente portò in casa. Non facevamo niente di programmazione, ma ricordo che iniziavamo a utilizzare gli utility. Era qualcosa che andava oltre il semplice gioco.\nCi fu poi il grande passo con il PC. Iniziammo a esplorare un mondo per noi sconosciuto, MS-DOS ricordo ancora oggi che mio padre teneva un quaderno con tutti i comandi da eseguire e ricordo con estremo piacere il giorno, o meglio la notte, che mi svegliò perché voleva provare un gioco, ma era archiviato con ARJ. Non ricordava il comando per scompattarlo, io lo ricordavo a memoria.\nSolo oggi, con il passare degli anni, mi rendo conto che già a quell’età avevo scelto la mia strada e questo grazie alla curiosità che mio padre trasmetteva.\nNel corso degli anni ho iniziato a studiare da autodidatta, come spesso accade in questo mondo. I primi esperimenti, i primi server, i primi siti web, i primi terribili tentativi di fare il grafico.\nFino a che è arrivato a essere il mio lavoro, che mi ha portato a lasciare la mia Livorno per approdare prima a Roma e poi a Milano, dove ho conosciuto Alessandro Aglietti, co-autore di questo libro, il quale con un entusiasmo simile al mio quando venni svegliato per scompattare l’archivio ARJ, mi parlò di Bitcoin.\nNon ricordo mai episodio in cui si soffermava sulla parte speculativa, era affamato di condividere le informazioni che anche lui stava costruendo, con una passione come per dire “è impossibile che tu non sia affascinato da questa cosa”.\nLe nostre strade lavorative poi si sono divise, ma è rimasta l’amicizia e la passione verso questa rivoluzione che ci porta a fare esperimenti notturni. Ogni esempio di codice su questo libro è frutto di un nodo Bitcoin che abita a casa sua e che mi ha permesso di usare. Non poteva essere diversamente 🙂\nÈ grazie ad Alessandro che ho incontrato Bitcoin e ancora grazie a lui se ho avuto la “fame” di capirne ogni singolo bit.\nAlessandro Aglietti # Nato a Firenze, classe 1989, vive a Milano con la sua compagna Stefania e con Eli, un’amica a quattro zampe mix pastore tedesco. Da piccolo ha sempre avuto la campagna nel cuore, ma con il passare degli anni si è ritrovato sempre più davanti al computer, inizialmente per giocare ma anche a perder tempo, a onor del vero.\nConosce l’amore della sua vita alle superiori e se non fosse stato per lei sarebbe rimasto rintanato in sperdute cascine toscane, coltivando la terra e giocando a Caesar III, Warhammer e così via. Tutt’oggi questo scenario rappresenta il suo piano B.\nIl buon esempio della sua compagna lo ha spronato nel dedicarsi ad un’attività nella quale riuscisse a ottenere ottimi risultati, e l’utilizzo del computer è quindi diventato prima la fine del percorso di studi e successivamente la professione.\nConvinto che tutti gli individui abbiano eguali capacità, adora spronare i suoi compagni di merende nel dare il massimo anche se di fronte ad arditi obiettivi. Questa sua indole si è trasformata in un percorso, parallelo al lavoro, come formatore di supporto nella scuola dove si è diplomato.\nAdora consolidare i risultati di esperimenti tecnologici e/o attività lavorative realizzando talk presso meetup e conferenze, sempre con il secondo fine di spronare la platea a porsi nuove sfide e obiettivi.\nGrazie ad una rivista, Linux \u0026amp; C., lesse di Bitcoin per la prima volta nel 2009 senza però coglierne a pieno le potenzialità. Nell’estate 2016, grazie al fermento della community milanese, ha ripreso in mano questa tecnologia.\nApprofondendo il funzionamento di Bitcoin è rimasto affascinato dall’eleganza della soluzione ed è stato un passaggio naturale decidere di trasformare le competenze apprese in contenuto divulgativo.\nSempre nel 2016, grazie alla startup brumbrum.it dove lavora tuttora, conosce “il Barno” con il quale – a botte di campanilismi classici degli abitanti del Granducato – entra in grande sintonia, e insieme decidono che oltre al lavoro avrebbero dovuto combinare qualcosa di divertente. Questo libro ne è il primo risultato.\n","date":"14 marzo 2026","externalUrl":null,"permalink":"/chi-siamo/","section":"Corso Bitcoin","summary":"Queste sono le nostre storie, gli stessi percorsi (e aneddoti) che potete trovare in calce ai nostri libri.\nAlessio Barnini # Nato a Livorno all’ombra del cacciucco nel 1983.\nFin dai primi anni della mia vita sono stato affascinato dai computer. Il primo amore è stato il Commodore64 di mio padre, non ricordo l’età che avevo, ma sicuramente non ero ancora in grado di leggere e scrivere. Riuscivo però a caricare i giochi, i dischi di cartone, perché mi ricordavo la sequenza delle lettere e il disegno che formavano.\n","title":"Chi siamo","type":"page"},{"content":" Difficoltà: Medio TUTORIAL Creare e Firmare una Transazione Bitcoin Multisig P2SH # Nel precedente articolo abbiamo visto come creare un address P2SH Multisig, in questo articolo vedremo come firmarlo\nCome sempre utilizziamo l’ambiente di Docker che abbiamo a disposizione\nin Action\nUtilizzeremo i wallet descriptor come spiegato in questo articolo, qiundi avvio la regtest completamente pulita e creo il wallet\nbitcoin-cli stop \u0026amp;\u0026amp; sleep 5 \u0026amp;\u0026amp; rm -Rf $HOME/.bitcoin/regtest \u0026amp;\u0026amp; bitcoind \u0026amp;\u0026amp; sleep 5bitcoin-cli -named createwallet wallet_name=\u0026#34;bitcoin in action\u0026#34; Successivamente recupero l’address che avevamo creato nell’articolo precedente e mino 101 blocchi cosi da avere 50 bitcoin a disposizione\nADDR_MITT=`bitcoin-cli getnewaddress \u0026#34;mittente\u0026#34; \u0026#34;legacy\u0026#34;`#Get P2SH addressADDR_DEST=`cat address_P2SH.txt`#Mint 101 blocks and get reward to spendbitcoin-cli generatetoaddress 101 $ADDR_MITT \u0026gt;\u0026gt; /dev/null Una volta ottenuto il reward, salvo dentro le variabili, le informazioni necessarie per crearela prossima transazione verso l’address multisignature\nTXID=$(bitcoin-cli listunspent 1 101 \u0026#39;[\u0026#34;\u0026#39;$ADDR_MITT\u0026#39;\u0026#34;]\u0026#39; | jq -r \u0026#39;.[0].txid\u0026#39;)VOUT=$(bitcoin-cli listunspent 1 101 \u0026#39;[\u0026#34;\u0026#39;$ADDR_MITT\u0026#39;\u0026#34;]\u0026#39; | jq -r \u0026#39;.[0].vout\u0026#39;)AMOUNT=$(bitcoin-cli listunspent 1 101 \u0026#39;[\u0026#34;\u0026#39;$ADDR_MITT\u0026#39;\u0026#34;]\u0026#39; | jq -r \u0026#39;.[0].amount-0.001\u0026#39;)printf \u0026#34;\\n \\e[31m######### TX_DATA #########\\e[39m \\n\u0026#34;TX_DATA=`bitcoin-cli createrawtransaction \u0026#39;[{\u0026#34;txid\u0026#34;:\u0026#34;\u0026#39;$TXID\u0026#39;\u0026#34;,\u0026#34;vout\u0026#34;:\u0026#39;$VOUT\u0026#39;}]\u0026#39; \u0026#39;[{\u0026#34;\u0026#39;$ADDR_DEST\u0026#39;\u0026#34;:\u0026#39;$AMOUNT\u0026#39;}]\u0026#39;`bitcoin-cli decoderawtransaction $TX_DATA | jq Quello che otteniamo è qualcosa del genere\n######### TX_DATA #########{ \u0026#34;txid\u0026#34;: \u0026#34;8f5c26dbbadf64aba4e97ed36d90d9b45d1a2f514412b224857414da340e8a4a\u0026#34;, \u0026#34;hash\u0026#34;: \u0026#34;8f5c26dbbadf64aba4e97ed36d90d9b45d1a2f514412b224857414da340e8a4a\u0026#34;, \u0026#34;version\u0026#34;: 2, \u0026#34;size\u0026#34;: 83, \u0026#34;vsize\u0026#34;: 83, \u0026#34;weight\u0026#34;: 332, \u0026#34;locktime\u0026#34;: 0, \u0026#34;vin\u0026#34;: [ { \u0026#34;txid\u0026#34;: \u0026#34;22f0ddcbf458da9f43f0ea17dec31f800f2f2d6bba61723f76df649711f57e30\u0026#34;, \u0026#34;vout\u0026#34;: 0, \u0026#34;scriptSig\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;\u0026#34; }, \u0026#34;sequence\u0026#34;: 4294967293 } ], \u0026#34;vout\u0026#34;: [ { \u0026#34;value\u0026#34;: 49.999, \u0026#34;n\u0026#34;: 0, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;OP_HASH160 e873186916376b9584872da96679c422b45bad16 OP_EQUAL\u0026#34;, \u0026#34;desc\u0026#34;: \u0026#34;addr(2NESJdkgbe9bmc7oaAisDXkNPiz16tqo4Xo)#6fndqkt5\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;a914e873186916376b9584872da96679c422b45bad1687\u0026#34;, \u0026#34;address\u0026#34;: \u0026#34;2NESJdkgbe9bmc7oaAisDXkNPiz16tqo4Xo\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;scripthash\u0026#34; } } ]} Come si può vedere nel vout (scriptPubKey) abbiamo\n\u0026#34;asm\u0026#34;: \u0026#34;OP_HASH160 e873186916376b9584872da96679c422b45bad16 OP_EQUAL\u0026#34;, ovvero lo script P2SH.\nSiamo quindi pronti ad inviare la transazione e a minare 6 blocchi\nTX_DATA_SIGNED=$(bitcoin-cli signrawtransactionwithwallet $TX_DATA | jq -r \u0026#39;.hex\u0026#39;)TXID=`bitcoin-cli sendrawtransaction $TX_DATA_SIGNED`bitcoin-cli generatetoaddress 6 $ADDR_MITT Adesso abbiamo a disposizione dei bitcoin da spendere dall’address P2SH.\nCon questo comando\nbitcoin-cli getrawtransaction $TXID 2 | jq -r possiamo vedere quanti bitcoin ha l’address $ADDR_DEST ipotizzando che sia un address nuovo e che abbia una solo UTXO da utilizzare\nbitcoin-cli getrawtransaction $TXID 2 | jq -r{ \u0026#34;txid\u0026#34;: \u0026#34;6575f8a7c21cad84f20a658a48863414133ab29743aef99f70f5446a739b23b0\u0026#34;, \u0026#34;hash\u0026#34;: \u0026#34;6575f8a7c21cad84f20a658a48863414133ab29743aef99f70f5446a739b23b0\u0026#34;, \u0026#34;version\u0026#34;: 2, \u0026#34;size\u0026#34;: 189, \u0026#34;vsize\u0026#34;: 189, \u0026#34;weight\u0026#34;: 756, \u0026#34;locktime\u0026#34;: 0, \u0026#34;vin\u0026#34;: [ { \u0026#34;txid\u0026#34;: \u0026#34;22f0ddcbf458da9f43f0ea17dec31f800f2f2d6bba61723f76df649711f57e30\u0026#34;, \u0026#34;vout\u0026#34;: 0, \u0026#34;scriptSig\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;30440220540e9f7921c074503a2d422d11a3c7a77c35f60674debc420a425c07b2fe005a022074246df812ba4d644c8e21646f36be3c2ce76c4adab2ac7ab9564262d1f95a31[ALL] 02cbf09f88786b713dce56c1e2b468fb96711f916a37d8085209f29b8d8fe9b006\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;4730440220540e9f7921c074503a2d422d11a3c7a77c35f60674debc420a425c07b2fe005a022074246df812ba4d644c8e21646f36be3c2ce76c4adab2ac7ab9564262d1f95a31012102cbf09f88786b713dce56c1e2b468fb96711f916a37d8085209f29b8d8fe9b006\u0026#34; }, \u0026#34;prevout\u0026#34;: { \u0026#34;generated\u0026#34;: true, \u0026#34;height\u0026#34;: 1, \u0026#34;value\u0026#34;: 50, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;OP_DUP OP_HASH160 9bc88e5752f7afc9ead6d83d7d1ee341985085f9 OP_EQUALVERIFY OP_CHECKSIG\u0026#34;, \u0026#34;desc\u0026#34;: \u0026#34;addr(muifHfUx7LPiKzdCwGMdAZeJzxUtSmWazJ)#8w5jejp8\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;76a9149bc88e5752f7afc9ead6d83d7d1ee341985085f988ac\u0026#34;, \u0026#34;address\u0026#34;: \u0026#34;muifHfUx7LPiKzdCwGMdAZeJzxUtSmWazJ\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;pubkeyhash\u0026#34; } }, \u0026#34;sequence\u0026#34;: 4294967293 } ], \u0026#34;vout\u0026#34;: [ { \u0026#34;value\u0026#34;: 49.999, \u0026#34;n\u0026#34;: 0, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;OP_HASH160 e873186916376b9584872da96679c422b45bad16 OP_EQUAL\u0026#34;, \u0026#34;desc\u0026#34;: \u0026#34;addr(2NESJdkgbe9bmc7oaAisDXkNPiz16tqo4Xo)#6fndqkt5\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;a914e873186916376b9584872da96679c422b45bad1687\u0026#34;, \u0026#34;address\u0026#34;: \u0026#34;2NESJdkgbe9bmc7oaAisDXkNPiz16tqo4Xo\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;scripthash\u0026#34; } } ], \u0026#34;fee\u0026#34;: 0.001, \u0026#34;hex\u0026#34;: \u0026#34;0200000001307ef5119764df763f7261ba6b2d2f0f801fc3de17eaf0439fda58f4cbddf022000000006a4730440220540e9f7921c074503a2d422d11a3c7a77c35f60674debc420a425c07b2fe005a022074246df812ba4d644c8e21646f36be3c2ce76c4adab2ac7ab9564262d1f95a31012102cbf09f88786b713dce56c1e2b468fb96711f916a37d8085209f29b8d8fe9b006fdffffff01606b042a0100000017a914e873186916376b9584872da96679c422b45bad168700000000\u0026#34;, \u0026#34;blockhash\u0026#34;: \u0026#34;1ae53d3f40eceba92c532cdfb99640636ac2da2a4a66c4424665d786aa05cb00\u0026#34;, \u0026#34;confirmations\u0026#34;: 6, \u0026#34;time\u0026#34;: 1711103449, \u0026#34;blocktime\u0026#34;: 1711103449} Possiamo quindi creare l’amount da spostare e recuperare le tre chiavi private relative all’address in questione\nAMOUNT=`bitcoin-cli getrawtransaction $TXID 2 | jq -r \u0026#39;.vout[0].value-0.0001\u0026#39;`VOUT=0PK1=`cat compressed_private_key_WIF_1.txt`PK2=`cat compressed_private_key_WIF_2.txt`PK3=`cat compressed_private_key_WIF_3.txt` Siamo quindi pronti a importare il descriptor, ottenendo prima il suo checksum.\nCHECKSUM=$(bitcoin-cli getdescriptorinfo \u0026#34;sh(multi(2,$PK1,$PK2,$PK3))\u0026#34; | jq -r.checksum)bitcoin-cli importdescriptors \u0026#39;[{ \u0026#34;desc\u0026#34;: \u0026#34;sh(multi(2,\u0026#39;$PK1\u0026#39;,\u0026#39;$PK2\u0026#39;,\u0026#39;$PK3\u0026#39;))#\u0026#39;$CHECKSUM\u0026#39;\u0026#34;, \u0026#34;timestamp\u0026#34;: \u0026#34;now\u0026#34;, \u0026#34;internal\u0026#34;: true }]\u0026#39; Salviamo il Reedem script in una variabile\nREDEEM=`cat redeem_script.txt` e creiamo lo scriptPubKey\nSCRIPTPUBKEY=\u0026#34;A914\u0026#34;`cat scriptPubKey.txt`\u0026#34;87\u0026#34; Ricordate che lo scriptPubKey è cosi formato\n# A9 =\u0026gt; OP_HASH160# 14 =\u0026gt; 20 bytes, 40 caratteri esadecimali da inserire nello stack $(expr `echo \u0026#34;ibase=16; $(printf 14 | tr \u0026#39;[:lower:]\u0026#39; \u0026#39;[:upper:]\u0026#39;)\u0026#34; | bc` \u0026#34;*\u0026#34; 2 )# 87 =\u0026gt; OP_EQUAL siamo finalmente in grado di creare la transazione\nTX_DATA=$(bitcoin-cli createrawtransaction \u0026#39;[{\u0026#34;txid\u0026#34;:\u0026#34;\u0026#39;$TXID\u0026#39;\u0026#34;,\u0026#34;vout\u0026#34;:\u0026#39;$VOUT\u0026#39;,\u0026#34;scriptPubKey\u0026#34;:\u0026#34;\u0026#39;$SCRIPTPUBKEY\u0026#39;\u0026#34;,\u0026#34;redeemScript\u0026#34;:\u0026#34;\u0026#39;$REDEEM\u0026#39;\u0026#34;}]\u0026#39; \u0026#39;[{\u0026#34;\u0026#39;$ADDR_MITT\u0026#39;\u0026#34;:\u0026#39;$AMOUNT\u0026#39;},{\u0026#34;data\u0026#34;:\u0026#34;636f72736f626974636f696e2e636f6d0a\u0026#34;}]\u0026#39;) ed infine di firmarla\nTX_SIGNED=$(bitcoin-cli signrawtransactionwithwallet $TX_DATA \u0026#39;[{\u0026#34;txid\u0026#34;:\u0026#34;\u0026#39;$TXID\u0026#39;\u0026#34;,\u0026#34;vout\u0026#34;:\u0026#39;$VOUT\u0026#39;,\u0026#34;scriptPubKey\u0026#34;:\u0026#34;\u0026#39;$SCRIPTPUBKEY\u0026#39;\u0026#34;,\u0026#34;redeemScript\u0026#34;:\u0026#34;\u0026#39;$REDEEM\u0026#39;\u0026#34;}]\u0026#39; | jq -r \u0026#39;.hex\u0026#39;) ottnendo cosi la transazione firmata che potrebbe assomigliare a qualcosa del genere\nbitcoin-cli decoderawtransaction $TX_SIGNED | jq{ \u0026#34;txid\u0026#34;: \u0026#34;bb446403925d846ea4b60bcfc384dfc1ce7be7cb1fbb84f2a5b934e5e599bbf0\u0026#34;, \u0026#34;hash\u0026#34;: \u0026#34;bb446403925d846ea4b60bcfc384dfc1ce7be7cb1fbb84f2a5b934e5e599bbf0\u0026#34;, \u0026#34;version\u0026#34;: 2, \u0026#34;size\u0026#34;: 365, \u0026#34;vsize\u0026#34;: 365, \u0026#34;weight\u0026#34;: 1460, \u0026#34;locktime\u0026#34;: 0, \u0026#34;vin\u0026#34;: [ { \u0026#34;txid\u0026#34;: \u0026#34;6575f8a7c21cad84f20a658a48863414133ab29743aef99f70f5446a739b23b0\u0026#34;, \u0026#34;vout\u0026#34;: 0, \u0026#34;scriptSig\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;0 304402205b7a4971ae3842c94c9da7ecf64fd54b2d4769de02c87e6f7e22dd08a8e5271c022015848e673b28d4b924dd257838aa1d2727bbeaeebb484da30ae1fc4cc0c2923b[ALL] 304402204e66ffdd82cce4b2fef619f26774412a5f0745f7bd415fdfdfd7f5059335506502207309335c016d763a7624fe9155ced18727eb4e44a713d43608a5f2ea3795ba9b[ALL] 5221034b7e5d9998d4d123157019b100f45f284278ff12802c811ac16ba8122dbe1c7921032b7ba8b88703df89dea5c91a46c7d7e6926da3134e7e48da141b5ebcf1200e5d21032aa059f3c1f245802c228221b220395070b1b7ab7f693ac191603657c2654a2753ae\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;0047304402205b7a4971ae3842c94c9da7ecf64fd54b2d4769de02c87e6f7e22dd08a8e5271c022015848e673b28d4b924dd257838aa1d2727bbeaeebb484da30ae1fc4cc0c2923b0147304402204e66ffdd82cce4b2fef619f26774412a5f0745f7bd415fdfdfd7f5059335506502207309335c016d763a7624fe9155ced18727eb4e44a713d43608a5f2ea3795ba9b014c695221034b7e5d9998d4d123157019b100f45f284278ff12802c811ac16ba8122dbe1c7921032b7ba8b88703df89dea5c91a46c7d7e6926da3134e7e48da141b5ebcf1200e5d21032aa059f3c1f245802c228221b220395070b1b7ab7f693ac191603657c2654a2753ae\u0026#34; }, \u0026#34;sequence\u0026#34;: 4294967293 } ], \u0026#34;vout\u0026#34;: [ { \u0026#34;value\u0026#34;: 49.9989, \u0026#34;n\u0026#34;: 0, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;OP_DUP OP_HASH160 9bc88e5752f7afc9ead6d83d7d1ee341985085f9 OP_EQUALVERIFY OP_CHECKSIG\u0026#34;, \u0026#34;desc\u0026#34;: \u0026#34;addr(muifHfUx7LPiKzdCwGMdAZeJzxUtSmWazJ)#8w5jejp8\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;76a9149bc88e5752f7afc9ead6d83d7d1ee341985085f988ac\u0026#34;, \u0026#34;address\u0026#34;: \u0026#34;muifHfUx7LPiKzdCwGMdAZeJzxUtSmWazJ\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;pubkeyhash\u0026#34; } }, { \u0026#34;value\u0026#34;: 0, \u0026#34;n\u0026#34;: 1, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;OP_RETURN 636f72736f626974636f696e2e636f6d0a\u0026#34;, \u0026#34;desc\u0026#34;: \u0026#34;raw(6a11636f72736f626974636f696e2e636f6d0a)#ewaggvhr\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;6a11636f72736f626974636f696e2e636f6d0a\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;nulldata\u0026#34; } } ]} siamo finalmente in grado di inviarla\nbitcoin-cli generatetoaddress 6 $ADDR_MITT Ottenendo gli hash dei 6 blocchi\nbitcoin-cli generatetoaddress 6 $ADDR_MITT[ \u0026#34;441a32ae9511faa4292516cff6809087db820ad2d683f1dcc5516b1fb9071c3f\u0026#34;, \u0026#34;7b68f807d854b54af0a954fb31595d395fe999e97591adb3b392cede25fcde5f\u0026#34;, \u0026#34;68751ccb18d19e47373244d29a6b33719e8d7619104499651eb2d8897c7228fa\u0026#34;, \u0026#34;533db5b216108d277aabe11e69fdda41dbc6b0abf732a69cc6f8fce05c3c358f\u0026#34;, \u0026#34;4d2413893a93f522df8ef83057a28c9ef7d7be0fa2735f0281b2fda8c27e2424\u0026#34;, \u0026#34;4027a93d0babfbe0cc0a980b3c5e3cceef3f0dead9e0ac6236a8910c7d0b07a6\u0026#34;] Analizziamo adesso grazie a btcdeb (https://github.com/bitcoin-core/btcdeb) come avviane la validazione passo passo\nbtcdeb --tx=$TX_SIGNED --txin=$(bitcoin-cli getrawtransaction $TXID) con il comando step, possiamo proseguire\nvengono inserite le due chiavi pubbliche e il redeem script. I piu attenti avranno visti 0x come primo elemento dello stack, ecco il motivo:\nCHECKMULTISIG BUG: Esegue un pop in più sullo stack. Viene usato OP_0 come workaround.\nsuccessivamente viene applicata la funzione OP_HASH160 sul redeem script che successivamente sarà confrontata con OP_EQUAL\nSuccessivamente saranno inserite nello stack le tre firme.\nOP_CHECKMULTISIG ha proprio il compito di confrontarle le firma digitali con le chiavi pubbliche inserite nello stack, per validare la loro autenticità e integrità, in poche parole se sono valide.\ntransazione andata a buon fine!\nPer esempi più approfonditi, unisciti a noi nel nostro libro:\n📕 Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts\n📕 Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts\n📌 https://linktr.ee/satoshiwantsyou\nTelevision 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)\nIn crypto we trust\n","date":"22 marzo 2024","externalUrl":null,"permalink":"/posts/creare-e-firmare-una-transazione-bitcoin-multisig-p2sh/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Creare e Firmare una Transazione Bitcoin Multisig P2SH # Nel precedente articolo abbiamo visto come creare un address P2SH Multisig, in questo articolo vedremo come firmarlo\nCome sempre utilizziamo l’ambiente di Docker che abbiamo a disposizione\n","title":"Creare e Firmare una Transazione Bitcoin Multisig P2SH","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL In Bitcoin in Action, siamo appassionati di svelare i segreti di Bitcoin.\nOggi, ci immergeremo nelle profondità del protocollo, creando manualmente un indirizzo P2SH-P2PKH multisig.\nPerché ci prendiamo il tempo di farlo? Semplice: vogliamo capire appieno il funzionamento di Bitcoin sotto il cofano.\nNaturalmente, è possibile generare un indirizzo simile utilizzando Bitcoin Core (ma tranquilli, approfondiremo questo argomento in un futuro articolo, concentrandoci su un SegWit multisig).\nRicordatevi che tutto il codice che useremo nei nostri libri, nei video e negli articoli, potete trovarlo su GitHub: https://github.com/bitcoin-dalla-teoria-alla-pratica/.\nPer questo esempio, opteremo per l’utilizzo di chiavi pubbliche compresse. Cominciamo creando tre chiavi private attraverso la bash, attraverso un ciclo di 3 iterazioni.\nfor i in 1 2 3do printf \u0026#34;\\n \\e[31m ######### Create private key and public key ${i} #########\\e[0m\\n\\n\u0026#34; #private key openssl ecparam -genkey -name secp256k1 -rand /dev/urandom -out private_key_$i.pem #private key bitcoin openssl ec -in private_key_$i.pem -outform DER|tail -c +8|head -c 32 |xxd -p -c 32 \u0026gt; btc_priv_$i.key #uncompressed private key printf \u0026#34;\\n \\n 🗝 Uncompressed private key WIF $i \\n\u0026#34; C=`printf $VERSION_PREFIX_PB$(\u0026lt;btc_priv_$i.key) | xxd -r -p | base58 -c` printf $C\u0026#34;\\n\u0026#34; printf $C \u0026gt; uncompressed_private_key_WIF_$i.txt #Compressed private key printf \u0026#34;\\n \\n 🗝 Compressed private key WIF $i \\n\u0026#34; C=`printf $VERSION_PREFIX_PB$(\u0026lt;btc_priv_$i.key)\u0026#34;01\u0026#34; | xxd -r -p | base58 -c` printf $C\u0026#34;\\n\u0026#34; printf $C \u0026gt; compressed_private_key_WIF_$i.txt #Uncompressed public key openssl ec -in private_key_$i.pem -pubout -outform DER|tail -c 65|xxd -p -c 65 \u0026gt; btc_pub_$i.key printf \u0026#34;\\n \\n 🔑 Uncompressed public key $i \\n\u0026#34; cat btc_pub_$i.key \u0026gt; uncompressed_public_key_$i.txt cat uncompressed_public_key_$i.txt #Compressed Address legacy printf \u0026#34;\\n \\n 🔑 Compressed Address legacy ${i}\\n\u0026#34; ADDR_SHA=`printf $(cat uncompressed_public_key_$i.txt) | xxd -r -p | openssl sha256| sed \u0026#39;s/^.* //\u0026#39;` ADDR_RIPEMD160=`printf $ADDR_SHA |xxd -r -p | openssl ripemd160 | sed \u0026#39;s/^.* //\u0026#39;` # echo $ADDR_RIPEMD160 ADDR=`printf $VERSION_PREFIX_ADDRESS$ADDR_RIPEMD160 | xxd -p -r | base58 -c` echo $ADDR \u0026gt; uncompressed_btc_address_$i.txt echo $ADDR #Check the last byte. U=`cat btc_pub_$i.key | cut -c 129-131` U=`echo \u0026#34;$U\u0026#34; | tr \u0026#39;[:lower:]\u0026#39; \u0026#39;[:upper:]\u0026#39;` U=`echo \u0026#34;ibase=16; $U\u0026#34; | bc` if [ $(($U%2)) -eq 0 ]; then #key even PREF=02 else #key odd PREF=03 fi #Compressed public key printf \u0026#34;\\n \\n 🔑 Compressed public key ${i}\\n\u0026#34; cat btc_pub_$i.key | tr -d \u0026#34; \\t\\n\\r\u0026#34; | tail -c $((64*2)) | sed \u0026#39;s/.\\{64\\}/\u0026amp; /g\u0026#39;| awk \u0026#39;{print $1}\u0026#39;| sed -e \u0026#39;s/^/\u0026#39;$PREF/ \u0026gt; compressed_public_key_$i.txt cat compressed_public_key_$i.txtdone Creazione delle Chiavi: Un Mondo da Esplorare # Il codice mostrato sopra ha generato con successo tre chiavi private e le rispettive chiavi pubbliche. Se siete curiosi di capire come vengono create le chiavi private e come derivano le chiavi pubbliche, non perdetevi l’ articolo completo e il nostro libro “Bitcoin dalla teoria alla pratica”.\nOra, entriamo nella parte successiva della nostra esplorazione: la creazione del redeem script.\nSCRIPT=\u0026#34;5221\u0026#34;$(cat compressed_public_key_1.txt)\u0026#34;21\u0026#34;$(cat compressed_public_key_2.txt)\u0026#34;21\u0026#34;$(cat compressed_public_key_3.txt)\u0026#34;53AE\u0026#34; Il redeem script è un componente chiave, rappresentando le condizioni necessarie per sbloccare l’UTXO.\nDiamo uno sguardo più approfondito a cosa contiene e quale ruolo svolge nel contesto di Bitcoin.\nDecodificando il Redeem Script: Un’Analisi Dettagliata # Facendo riferimento alla documentazione ufficiale di Bitcoin Script https://en.bitcoin.it/wiki/Script, possiamo capire ciò che contiene il nostro script.\nIl redeem script che abbiamo generato è composto dai seguenti elementi:\n52: Rappresenta l\u0026rsquo;OP_CODE OP_2. In altre parole, questo indica l\u0026rsquo;inizio di una sequenza che coinvolgerà due elementi nello stack. 21: Indica quanti byte verranno successivamente inseriti nello stack. Convertendo 0x21 in decimale otteniamo 33. Dato che un byte è rappresentato da due caratteri esadecimali, avremo esattamente 66 caratteri esadecimali. Questo è il punto in cui la nostra chiave pubblica compressa entra in gioco. cat compressed_public_key_1.txt | wc -m66 53: Rappresenta l\u0026rsquo;OP_CODE OP_3. Ora, stiamo inserendo un\u0026rsquo;altra sequenza nello stack che coinvolgerà tre elementi. AE: Rappresenta l\u0026rsquo;OP_CODE OP_CHECKMULTISIG. Questo indica che il redeem script include ora l\u0026rsquo;operazione di verifica multisignature. Per comodità, salviamo questo script per ulteriori analisi e riferimenti.\nprintf $SCRIPT \u0026gt; redeem_script.txt Redeem Script: Applicazione di SHA256 e RIPEMD160 # In una fase successiva del nostro percorso, applicheremo l’hash SHA256 e RIPEMD160 al redeem script che abbiamo creato. Questa è una parte cruciale del processo di creazione di un indirizzo Bitcoin P2SH-P2PKH.\nP2SH — Guarda il video completo sul canale Youtube Bitcoin in Action\nADDR_SHA=`printf $SCRIPT | xxd -r -p | openssl sha256| sed \u0026#39;s/^.* //\u0026#39;` ADDR_RIPEMD160=`printf $ADDR_SHA |xxd -r -p | openssl ripemd160 | sed \u0026#39;s/^.* //\u0026#39;` printf $ADDR_RIPEMD160 \u0026gt; scriptPubKey.txt printf \u0026#34;\\n \\n\\e[46m ---------- scriptPubKey --------- \\e[49m\\n\u0026#34; printf $ADDR_RIPEMD160 #ADDRESS printf \u0026#34;\\n \\n\\e[46m ---------- 🔑 ADDRESS P2SH️ --------- \\e[49m\\n\u0026#34; ADDR=`printf $VERSION_PREFIX_ADDRESS$ADDR_RIPEMD160 | xxd -p -r | base58 -c` echo $ADDR \u0026gt; address_P2SH.txt echo $ADDR In questo blocco di codice:\nADDR_SHA contiene l\u0026rsquo;hash SHA256 del redeem script. ADDR_RIPEMD160 contiene l\u0026rsquo;hash RIPEMD160 dell\u0026rsquo;hash SHA256. Questo ci porterà allo scriptPubKey, che è essenziale per ottenere l’indirizzo Bitcoin P2SH-P2PKH.\nSe vuoi seguire passo dopo passo questo processo, ti suggerisco di dare un’occhiata all’articolo dettagliato su /posts/introduzione-a-p2sh-bitcoin/.\nInfine, applicheremo il “Version Prefix” e il processo di Base58Check per ottenere il nostro indirizzo Bitcoin P2SH-P2PKH. Per la regtest e testnet, il “Version Prefix” è 0xC4.\nADDR contiene l\u0026rsquo;indirizzo Bitcoin P2SH-P2PKH ottenuto applicando il \u0026ldquo;Version Prefix\u0026rdquo; e il processo di Base58Check all\u0026rsquo;hash RIPEMD160. Concludiamo così la creazione manuale dell’indirizzo Bitcoin P2SH-P2PKH. L’indirizzo è ora pronto per essere utilizzato nella rete regtest o testnet.\nBase58 evita di utilizzare caratteri ambigui come lo 0 (zero) e O. 123456789 ABCDEFGHJKLMNPQRSTUVWXYZ abcdefghijkmnopqrstuvwxyz Da notare che il nostro indirizzo inizierà con il numero 2, una caratteristica specifica dei P2SH nelle reti regtest/testnet.\n######### P2SH ######### ---------- Redeem Script ---------522102bd13132bea99bcd50f93dedc6cab13e0f973a8a5f6aec0150f9e835ce41bcbf42102a95dc9d317e57da0ad149eca4cc85aa2665cbb35ced8ccf41c0aec3d5c0333672102ebf7690e84552c3c01a5f01ecd4a1442fb411b501c29c91b7ff27766c8a494f453AE ---------- scriptPubKey ---------03d9f8e4487229f0bd3f3af5ce4b6301930f18de ---------- 🔑 ADDRESS P2SH️ ---------2Msbb8qRdT5N3YJYc8BDbQ25sMJQUuKUKMW Per chi fosse interessato al codice completo, è disponibile nel in questo gist oltre che nel nostro repository\nPer esempi più approfonditi, unisciti a noi nel nostro libro:\n📕 Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts\n📕Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts\n","date":"11 gennaio 2024","externalUrl":null,"permalink":"/posts/creare-un-indirizzo-p2sh-p2pkh-multisignature-manualmente/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL In Bitcoin in Action, siamo appassionati di svelare i segreti di Bitcoin.\nOggi, ci immergeremo nelle profondità del protocollo, creando manualmente un indirizzo P2SH-P2PKH multisig.\nPerché ci prendiamo il tempo di farlo? Semplice: vogliamo capire appieno il funzionamento di Bitcoin sotto il cofano.\n","title":"Creare un Indirizzo P2SH-P2PKH Multisignature manualmente","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Esplorando le Differenze tra Transazioni Legacy e Descriptor in Bitcoin # In questo articolo, esploreremo concretamente le differenze apportate dall’introduzione dell’aggiornamento descriptor a partire da Bitcoin Core 0.17.0 nel 2018.\nCome sempre, gli esempi possono essere replicati utilizzando il nostro docker e il nostro repository.\nCon l’aggiornamento descriptor, non è più possibile utilizzare dumpprivkey e quindi utilizzare la chiave privata per firmare le transazioni raw con il comando signrawtransactionwithkey.\nSarà invece il nodo a occuparsi di firmare la transazione utilizzando il comando signrawtransactionwithwallet.\nIn questo esempio, eseguiremo due transazioni: una dal descriptor a un indirizzo legacy e successivamente dall’indirizzo legacy al descriptor.\nCreeremo due portafogli per gestire i due casi e avvieremo il nodo con la direttiva -deprecatedrpc=create_bdb per poter utilizzare i comandi legacy.\nQuesto esempio utilizza il nodo Bitcoin versione 26.\nRiproduzione dell’Esempio # Per replicare l’esperimento:\nClona il nostro repository. docker exec -it bitcoin-in-action-youtube zsh Entra nel container e spostati nella cartella Video 13 — P2PKH legacy vs P2PKH descriptor. ./main.sh In Azione # I nostri esempi si basano sempre sulla regtest, sia qui che nei nostri libri Bitcoin In Action — SegWit, Bitcoin Script e Smart Contractse Libro Bitcoin dalla teoria alla pratica\nhttps://linktr.ee/satoshiwantsyou\nDopo aver lanciado docker compo\ndocker-compose up entriamo nel container con il comando\ndocker exec -it bitcoin-in-action-youtube bash Per prima cosa, fermiamo e puliamo tutta la regtest con il seguente comando:\nbitcoin-cli stop \u0026amp;\u0026amp; sleep 5 \u0026amp;\u0026amp; rm -Rf $HOME/.bitcoin/regtest \u0026amp;\u0026amp; bitcoind -deprecatedrpc=create_bdb \u0026amp;\u0026amp; sleep 5 Dobbiamo avviarlo con bitcoind -deprecatedrpc=create_bdb per avere la possibilità di utilizzare i comandi legacy.\nSuccessivamente, creiamo due portafogli: uno legacy e uno descriptor, e creiamo due indirizzi.\nPartiamo facendo la transazione dal Descriptor al Legacy:\nbitcoin-cli -named createwallet wallet_name=\u0026#34;biaDescriptor\u0026#34;bitcoin-cli -named createwallet wallet_name=\u0026#34;biaLegacy\u0026#34; descriptors=\u0026#34;false\u0026#34;ADDR_DESC=`bitcoin-cli -rpcwallet=\u0026#34;biaDescriptor\u0026#34; getnewaddress \u0026#34;\u0026#34; \u0026#34;legacy\u0026#34;`ADDR_LEGACY=`bitcoin-cli -rpcwallet=\u0026#34;biaLegacy\u0026#34; getnewaddress \u0026#34;\u0026#34; \u0026#34;legacy\u0026#34;` Da notare che “legacy” qui si riferisce agli indirizzi legacy, non ai portafogli legacy. Gli indirizzi legacy sono quelli che iniziano con 1 nella mainnet e con m/n nella testnet/regtest.\nSuccessivamente, mineremo 101 blocchi per ottenere un reward da spendere:\nbitcoin-cli generatetoaddress 101 $ADDR_DESC \u0026gt;\u0026gt; /dev/null Recuperiamo quindi le UTXO dell’indirizzo collegato al portafoglio descriptor:\nUTXO=`bitcoin-cli -rpcwallet=\u0026#34;biaDescriptor\u0026#34; listunspent 1 101 \u0026#39;[\u0026#34;\u0026#39;$ADDR_DESC\u0026#39;\u0026#34;]\u0026#39;` Quando abbiamo più di un portafoglio, dobbiamo specificare con -rpcwallet a quale portafoglio ci stiamo riferendo. In questo caso, immagazziniamo la lista degli UTXO nella variabile d’ambiente UTXO.\nNel mio caso, l’output di $UTXO sarà:\n[ { \u0026#34;txid\u0026#34;: \u0026#34;d2be3c5230c6a3e65c9f1b00c45b27b87126623c3a64720bbda301985897000a\u0026#34;, \u0026#34;vout\u0026#34;: 0, \u0026#34;address\u0026#34;: \u0026#34;mhWDh6GAhuCGLjAZeT8HikfRgRtXRmfBuU\u0026#34;, \u0026#34;label\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;scriptPubKey\u0026#34;: \u0026#34;76a91415ccb044249a2c23fc6e8b88a3826b4cfa6f3fe088ac\u0026#34;, \u0026#34;amount\u0026#34;: 50, \u0026#34;confirmations\u0026#34;: 101, \u0026#34;spendable\u0026#34;: true, \u0026#34;solvable\u0026#34;: true, \u0026#34;desc\u0026#34;: \u0026#34;pkh([ebaa1b3b/44h/1h/0h/0/0]03f05c3456b1790be65cdd9b976fa1746711b50491a7165335b4435298ee10a96f)#ly95qp65\u0026#34;, \u0026#34;parent_descs\u0026#34;: [ \u0026#34;pkh(tpubD6NzVbkrYhZ4Y1YBXnXsfxHZyDneWSBzrZqMmHqk1YDJkALiaREhzFnxobkgqtqXvz1PVSfbL1Kqx9i1CndiWwYKBnjpcqU1f5Mcz85ecty/44h/1h/0h/0/*)#5ufyz2pg\u0026#34; ], \u0026#34;safe\u0026#34;: true }] Se stai utilizzando il nostro docker, all’interno c’è anche un block explorer (btc-rpc-explorer) e puoi quindi analizzare la UTXO generata utilizzando (http://localhost:3002/tx/d2be3c5230c6a3e65c9f1b00c45b27b87126623c3a64720bbda301985897000), dove d2be3c5230c6a3e65c9f1b00c45b27b87126623c3a64720bbda301985897000a è la UTXO spendibile.\nQuesto link funzionerà solo se stai utilizzando il nostro docker.\nGrazie a Jq, posso immagazzinare all’interno delle variabili d’ambiente il codice necessario per effettuare la transazione:\nTXID=$(echo $UTXO | jq -r \u0026#39;.[0].txid\u0026#39;)VOUT=$(echo $UTXO | jq -r \u0026#39;.[0].vout\u0026#39;)AMOUNT=$(echo $UTXO | jq -r \u0026#39;.[0].amount-0.009\u0026#39;)TOTAL_UTXO_AMOUNT=$(echo $UTXO | jq -r \u0026#39;.[0].amount\u0026#39;)TXIN=`bitcoin-cli getrawtransaction $TXID` Dall’amount tolgo una “cifra simbolica” destinata alla fee. Sono quindi pronto a creare la transazione:\nTX_DATA=$(bitcoin-cli createrawtransaction \u0026#39;[{\u0026#34;txid\u0026#34;:\u0026#34;\u0026#39;$TXID\u0026#39;\u0026#34;,\u0026#34;vout\u0026#34;:\u0026#39;$VOUT\u0026#39;}]\u0026#39; \u0026#39;[{\u0026#34;\u0026#39;$ADDR_LEGACY\u0026#39;\u0026#34;:\u0026#39;$AMOUNT\u0026#39;}]\u0026#39;) A questo punto, abbiamo il “nuovo” metodo inserito con l’aggiornamento descriptor, ovvero createrawtransaction:\nTX_SIGNED=$(bitcoin-cli -rpcwallet=\u0026#34;biaDescriptor\u0026#34; signrawtransactionwithwallet $TX_DATA | jq -r \u0026#39;.hex\u0026#39;) In questo caso, non passo la chiave privata, ma sarà il metodo signrawtransactionwithwallet a preoccuparsi di firmare la transazione con la relativa chiave privata.\nIl risultato è salvato all’interno di TX_SIGNED.\nSuccessivamente, viene inviata la transazione:\nbitcoin-cli sendrawtransaction $TX_SIGNED Facciamo ora l’operazione inversa, dal legacy al descriptor. Abbiamo già dei bitcoin spendibili grazie alla transazione appena creata, quindi l’operazione sarà più veloce.\nRecupero le informazioni necessarie per creare la transazione:\nUTXO=`bitcoin-cli -rpcwallet=\u0026#34;biaLegacy\u0026#34; listunspent 1 101 \u0026#39;[\u0026#34;\u0026#39;$ADDR_LEGACY\u0026#39;\u0026#34;]\u0026#39;`TXID=$(echo $UTXO | jq -r \u0026#39;.[0].txid\u0026#39;)VOUT=$(echo $UTXO | jq -r \u0026#39;.[0].vout\u0026#39;)AMOUNT=$(echo $UTXO | jq -r \u0026#39;.[0].amount-0.009\u0026#39;)TOTAL_UTXO_AMOUNT=$(echo $UTXO | jq -r \u0026#39;.[0].amount\u0026#39;)SCRIPTPUBKEY=$(echo $UTXO | jq -r \u0026#39;.[0].scriptPubKey\u0026#39;)TXIN=`bitcoin-cli getrawtransaction $TXID` In questo caso, useremo -rpcwallet=”biaLegacy”. Successivamente, prendo la chiave privata con il comando dumpprivkey:\nPK=$(bitcoin-cli -rpcwallet=\u0026#34;biaLegacy\u0026#34; dumpprivkey $ADDR_LEGACY) Sono quindi pronto ad inviare la transazione. Creo la transazione:\nTX_DATA=$(bitcoin-cli createrawtransaction \u0026#39;[{\u0026#34;txid\u0026#34;:\u0026#34;\u0026#39;$TXID\u0026#39;\u0026#34;,\u0026#34;vout\u0026#34;:\u0026#39;$VOUT\u0026#39;}]\u0026#39; \u0026#39;[{\u0026#34;\u0026#39;$ADDR_DESC\u0026#39;\u0026#34;:\u0026#39;$AMOUNT\u0026#39;}]\u0026#39;) La firmo con la chiave privata e aggiungo anche lo scriptPubKey:\nTX_SIGNED=$(bitcoin-cli signrawtransactionwithkey $TX_DATA \u0026#39;[\u0026#34;\u0026#39;$PK\u0026#39;\u0026#34;]\u0026#39; \u0026#39;[{\u0026#34;txid\u0026#34;:\u0026#34;\u0026#39;$TXID\u0026#39;\u0026#34;,\u0026#34;vout\u0026#34;:\u0026#39;$VOUT\u0026#39;,\u0026#34;scriptPubKey\u0026#34;:\u0026#34;\u0026#39;$SCRIPTPUBKEY\u0026#39;\u0026#34;}]\u0026#39; | jq -r \u0026#39;.hex\u0026#39;) Infine, invio la transazione in broadcast:\nTXSPENT=$(bitcoin-cli sendrawtransaction $TX_SIGNED) Ci sono quindi due differenze principali:\nNon è possibile dare il dumpprivkey dal portafoglio descriptor, che è ora di default in Bitcoin. Se proviamo a fare il dump, otterremo un errore: bitcoin-cli -rpcwallet=\u0026#34;biaDescriptor\u0026#34; dumpprivkey $ADDR_DESCerror code: -4error message:Only legacy wallets are supported by this command La seconda differenza è il metodo da chiamare per firmare la transazione: da signrawtransactionwithkey a signrawtransactionwithwallet. Alla luce di queste differenze sostanziali tra l’utilizzo di indirizzi legacy e descriptor in Bitcoin, emergono nuove prospettive sulla gestione delle transazioni e sulla sicurezza delle chiavi private.\nL’evoluzione del protocollo continua ad offrire agli utenti nuovi strumenti per interagire in modo sicuro e flessibile.\nPer ulteriori informazioni e per immergerti nel mondo di Bitcoin, visita il nostro linktree: https://linktr.ee/satoshiwantsyou\n","date":"27 dicembre 2023","externalUrl":null,"permalink":"/posts/esplorando-le-differenze-tra-transazioni-legacy-e-descriptor-in-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Esplorando le Differenze tra Transazioni Legacy e Descriptor in Bitcoin # In questo articolo, esploreremo concretamente le differenze apportate dall’introduzione dell’aggiornamento descriptor a partire da Bitcoin Core 0.17.0 nel 2018.\nCome sempre, gli esempi possono essere replicati utilizzando il nostro docker e il nostro repository.\n","title":"Esplorando le Differenze tra Transazioni Legacy e Descriptor in Bitcoin","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL In questo articolo, ci immergeremo nell’analisi delle differenze tra i wallet legacy e i wallet descriptor di Bitcoin.\nPotresti non essertene accorto, ma a partire da Bitcoin Core 0.17.0 nel 2018, è stata implementata questa significativa funzionalità, destinata a rendere obsoleti i wallet legacy nel prossimo futuro.\nUn Aggiornamento Silenzioso, Ma Cruciale # L’avvento dei wallet descriptor è stato un aggiornamento silenzioso per gli utenti, ma la sua influenza si riflette in una maggiore sicurezza e flessibilità.\nQuesto progresso nell’ecosistema Bitcoin è stato ben documentato nell’articolo “Output Script Descriptors” scritto dallo sviluppatore Ava Chown, che fornisce una panoramica approfondita delle migliorìe introdotte.\nDescrizione dei Wallet: Legacy vs. Descriptor # Una delle differenze chiave tra i Legacy Wallets e i nuovi Descriptor Wallets è l’approccio nello sviluppo.\nQuesti ultimi sono progettati per supportare il linguaggio Bitcoin Script, mentre i Legacy Wallets sono stati concepiti basandosi sul concetto di chiavi.\nCambiamenti nei Comandi RPC # Con l’avvento dei Descriptor Wallets, sono stati apportati cambiamenti significativi ai comandi RPC.\nAd esempio, i comandi dumpprivkey e signrawtransactionwithkey sono stati sostituiti dal più moderno signrawtransactionwithwallet Questo cambiamento è parte integrante dell’approccio più sicuro adottato dai Descriptor Wallets.\nMaggiore Sicurezza con Descriptor Wallets # Una delle caratteristiche distintive dei Descriptor Wallets è quella di non esporre la chiave privata attraverso il comando dumpprivkey.\nQuesta scelta è mirata a proteggere gli utenti da possibili manovre errate o compromissioni di sicurezza.\nInoltre, i Descriptor Wallets risolvono il problema critico legato alle chiavi non rinforzate.\nPrima, se un attaccante avesse ottenuto l’extended public key (xpub) e una chiave privata non hardned, avrebbe potuto dedurre la chiave privata dell’extended public key.\nCiò implicava la possibilità di ottenere ogni chiave derivabile da essa, sia hardned che non hardned.\nPer ulteriori approfondimenti sulla tematica hardned e non hardned, si consiglia di libro Bitcoin dalla Teoria alla Pratica\nBitcoin dalla Teoria alla Pratica\nIl Futuro dei Wallet Bitcoin # L’avvento dei Descriptor Wallets rappresenta un passo avanti cruciale nella creazione di portafogli più sicuri e flessibili.\nCon i wallet legacy destinati a essere deprecati nelle versioni future, è fondamentale comprendere e adottare le nuove tecnologie per mantenere un ambiente di gestione delle chiavi più sicuro ed efficiente.\n","date":"22 dicembre 2023","externalUrl":null,"permalink":"/posts/wallet-legacy-vs-wallet-descriptor/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL In questo articolo, ci immergeremo nell’analisi delle differenze tra i wallet legacy e i wallet descriptor di Bitcoin.\nPotresti non essertene accorto, ma a partire da Bitcoin Core 0.17.0 nel 2018, è stata implementata questa significativa funzionalità, destinata a rendere obsoleti i wallet legacy nel prossimo futuro.\n","title":"Wallet Legacy vs. Wallet Descriptor","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Ciao,\nIn questo articolo vedremo come è costruito un multisignature P2SH, NON SegWit.\nGrazie agli articoli precedenti abbiamo potuto capire come e dove è costruito lo script.\nAbbiamo infatti analizzato script conosciuti, quali il P2PK e il P2PKH.\nIn questo articolo andremo a costruire uno script, o se vi piace di più uno smart contract 2–3.\nChe cosa significa un address 2–3?\nSignifica che, una transazione per essere valida deve avere almeno due firme, le quali possono essere comprovate su tre chiavi pubbliche.\nVi ricordate dove vengono inserite le condizioni da soddisfare?\nLe condizioni da soddisfare sono inserite nel redeem script durante la generazione dell’address.\nCerchiamo quindi di dare forma al redeem script. Il nostro obiettivo è avere la prova che due firme digitali siano valide, provandole su tre chiavi pubbliche.\nQuindi il mio script avrà sicuramente 3 chiavi pubbliche: 🔑 🔑 🔑.\nDobbiamo inoltre comunicare al nostro script, il numero minimo di firme che vogliamo avere per rendere la transazione valida, in questo caso 2.\nAggiungiamo la condizione al nostro script: 2️⃣🔑 🔑 🔑 Altra condizione che dobbiamo dichiarare, è il numero massimo di chiavi che devono essere presenti nel nostro script, in questo caso 3.\nAggiungiamo la condizione al nostro script: 2️⃣🔑 🔑 🔑3️⃣ Manca un ultimo elemento per completare lo script.\nSe lo script fosse completo, indicheremo all’interprete di inserire nello stack il numero 2 (per ora pensiamolo come numero ma in realtà 2 è OP_2) all’interno dello stack, successivamente le 3 chiavi pubbliche, e il numero 3.\nManca effettivamente l’operazione da compiere!\nNello script P2PK, il controllo da fare è OP_CHECKSIG, nello script P2PKH il controllo da fare è un pò più complesso, ovvero la verifica dell’hash della chiave pubblica fornita e la verifica della firma utilizzando sempre l’operazione OP_CHECKSIG.\nIn questo caso non possiamo utilizzare OP_CHECKSIG perchè il suo compito è quello di verificare la firma digitale su una chiave pubblica e inserire 1 se la firma è verificata e 0 se la verifica non va a buon fine.\nIn questo modo però andremo a verificare una sola firma, il nostro compito invece è verificare 2 firme su 3 chiavi pubbliche.\nLeggendo la documentazione troviamo l’operazione OP_CHECKMULTISIG.\nQuesta operazione controlla la firma ECDSA, ovvero la firma ottenuta dalla crittografia a curva ellittica sulle chiavi pubbliche messe a disposizione.\nAggiungiamo la condizione al nostro script: 2️⃣🔑 🔑 🔑3️⃣OP_CHECKMULTISIG Lo script, o per essere più precisi il redeem script è pronto.\nI Passaggi successivi sono quelli che abbiamo analizzato negli articoli precedenti al fine di arrivare all’address.\nOvvero SHA256 RIPEMD160, Version Prefix e base58 checksum, per ottenere finalmente l’address, che inizierà con il numero 3 nell’ambiente di Mainnet, o con il numero 2 nell’ambiente di Testnet/Regtest\n📒Libro Bitcoin dalla teoria alla pratica (Amazon)📕Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (Amazon)\n","date":"6 dicembre 2023","externalUrl":null,"permalink":"/posts/come-costruito-un-address-multisignature-p2sh/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Ciao,\nIn questo articolo vedremo come è costruito un multisignature P2SH, NON SegWit.\nGrazie agli articoli precedenti abbiamo potuto capire come e dove è costruito lo script.\nAbbiamo infatti analizzato script conosciuti, quali il P2PK e il P2PKH.\nIn questo articolo andremo a costruire uno script, o se vi piace di più uno smart contract 2–3.\n","title":"Come è costruito un address MultiSignature P2SH?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Ciao,\nnell’articolo precedente abbiamo analizzato come avviene una transazione utilizzando il P2SH-P2PK.\nIn questo articolo vogliamo andare ad analizzare come questa viene validata.\nCome 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.\nLa 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.\nMa analizziamola utilizzando la pratica\nIn Action!\nCome 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.\nSe hai bisogno di analizzare step by step questi passaggi, ti consiglio ti leggere l’articolo precedente.\nIl nostro compito è semplicemente avviare il file sh, con il comando.\n$./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.\nLo script si fermerà esattamente prima dell’invio della transazione in broadcast, cosi da poter verificare la sua validità.\nCome per il P2PK e il P2PKH, lo stack parte vuoto, e i primi elementi che sono pushati (inseriti) sono quelli che troviamo nello scriptSig.\nChe cosa troviamo nello scriptSig?\nSe vi ricordate l’articolo precedente, nello scriptSig ci troviamo\nla firma digitale il redeem script in “chiaro”. Frame del video Bitcoin in Action — Come è formata una transazione P2SH-P2PK\nCi sono sempre questi elementi nello scriptSig?\nNo, 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.\nIn questo caso sarà sufficiente la firma digitale perchè è l’elemento che servirà per soddisfare la nostra transazione.\nCome riportato nella foto, sono stati inseriti nello stack la firma digitale e il redeem script.\nSuccessivamente, 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.\nIl risultato viene inserito nello stack.\nVi ricordate come viene ottenuto il redeem script Hash?\nViene ottenuto applicando lo SHA256 e il RIPEMD160, esattamente la stessa operazione dell’HASH160.\nSuccessivamente viene pushato il redeem script hash, contenuto nello scriptPubKey.\nL’operazione successiva è OP_EQUAL la quale prende i primi due elementi on top e li verifica tra loro.\nSe questi sono uguali inserisce 1, se invece sono diversi invalida la transazione.\nPerchè questo controllo? Per prima cosa per rendere il P2SH retro-compatibile con quei miner che non avevo aggiornato.\nNel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts affrontiamo nel dettaglio questo tema.\nSuccessivamente 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.\nSe 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.\nVerrà quindi confrontata la firma digitale con la chiave pubblica fornita, grazie all’operation code OP_CHECKSIG\nIl 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\n","date":"6 dicembre 2023","externalUrl":null,"permalink":"/posts/come-validata-una-transazione-p2sh-p2pk/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Ciao,\nnell’articolo precedente abbiamo analizzato come avviene una transazione utilizzando il P2SH-P2PK.\nIn questo articolo vogliamo andare ad analizzare come questa viene validata.\nCome 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.\n","title":"Come è validata una transazione P2SH-P2PK","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Ciao,\nNel nostro precedente articolo, abbiamo esaminato la creazione del redeem script per un indirizzo P2SH 2–3.\nIn questo capitolo, esploreremo come lo stack viene risolto per rendere la transazione valida.\nCome accennato in articoli precedenti, nello scriptPubKey della UTXO, troviamo l’hash del redeem script.\nAttraverso le operazioni OP_HASH160 e OP_EQUAL, ottimizziamo il processo verificando l’hash prima di interpretare il redeem script.\nIl formato dello scriptPubKey è il seguente: OP_HASH160 redeem script hash OP_EQUAL\nLa sezione di input, lo scriptSig, conterrà le condizioni necessarie per validare la transazione.\nSappiamo già che lo scriptSig contiene il redeem script in chiaro, insieme alle firme corrispondenti.\nRicordando che lo script è di tipo 2–3, richiedendo almeno due firme, il redeem script sarà composto da 2 PB PB PB 3 OP_CHECKMULTISIG.\nDi conseguenza, lo scriptSig assumerà la forma: OP_0 Signature Signature 2 PB PB PB 3 OP_CHECKMULTISIG, dove PB identifica le chiavi pubbliche.\nLa logica sottostante rimane simile agli script P2SH-P2PK o P2SH-P2PKH, con ovvie differenze nelle condizioni richieste per la validità.\nPer quanto riguarda gli script multisignature, dobbiamo gestire un bug nell’operation code OP_CHECKMULTISIG.\nQuesto codice opera una pop (estrazione) in eccesso nello stack.\nPer risolvere il problema, aggiungiamo un elemento inutile all’estrazione, che è OP_0.\nQuindi, lo scriptSig finale avrà il seguente formato: OP_0 Signature Signature 2 PB PB PB 3 OP_CHECKMULTISIG.\nPer ulteriori dettagli sul bug, ti invitiamo a consultare la documentazione sugli script di Bitcoin.\nCompares the first signature against each public key until it finds an ECDSA match. Starting with the subsequent public key, it compares the second signature against each remaining public key until it finds an ECDSA match. The process is repeated until all signatures have been checked or not enough public keys remain to produce a successful result. All signatures need to match a public key. Because public keys are not checked again if they fail any signature comparison, signatures must be placed in the scriptSig using the same order as their corresponding public keys were placed in the scriptPubKey or redeemScript. If all signatures are valid, 1 is returned, 0 otherwise. Due to a bug, one extra unused value is removed from the stack.\nNel prossimo articolo, esploreremo il processo di validazione di una transazione multisignature.\n","date":"6 dicembre 2023","externalUrl":null,"permalink":"/posts/multisignature-p2sh-su-bitcoin-come-costruita-la-transazione/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Ciao,\nNel nostro precedente articolo, abbiamo esaminato la creazione del redeem script per un indirizzo P2SH 2–3.\nIn questo capitolo, esploreremo come lo stack viene risolto per rendere la transazione valida.\nCome accennato in articoli precedenti, nello scriptPubKey della UTXO, troviamo l’hash del redeem script.\n","title":"Multisignature P2SH su Bitcoin, come è costruita la transazione","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Utilizzare gli esempi dei libri con Docker # Ciao a tutti, abbiamo pensato di creare un repository per facilitare gli esempi che troviamo nei due nostri libri, Bicoin dalla teoria alla pratica e Bitcoin in Action.\nPer questo andremo ad utilizzare Docker!\nIl nostro Repositoryhttps://github.com/bitcoin-dalla-teoria-alla-pratica/Docker-bitcoin\nChe cosa è Docker? # Docker è una piattaforma open source per la creazione, distribuzione e gestione di applicazioni in container. I container Docker sono degli ambienti virtuali isolati che includono tutto il necessario per eseguire un’applicazione, tra cui il codice, le librerie e le dipendenze.\nAbbiamo quindi creato un’immagine docker che contiene tutto quello necessario, dall’installazione del nodo (ad oggi versione 24.0) la verifica dell’integrità del pacchetto e il nostro caro debugger btcdeb!\nA questo indirizzo è possibile verificare come è stata creata l’immagine che andremo ad utilizzare e le istruzioni necessarie per interagire con gli esempi del libro.\nIn Action!\nPer prima cosa sarà necessario installare Docker nel proprio computer.\nSuccessivamente cloniamo i repository necessari.\ngit clone https://github.com/bitcoin-dalla-teoria-alla-pratica/Docker-bitcoin.git --depth 1cd Docker-bitcoin Cloniamo quindi gli esempi dei libri.\ngit clone https://github.com/bitcoin-dalla-teoria-alla-pratica/errata-corrige-e-sorgente-esempi.git --depth 1 \u0026amp;\u0026amp;git clone https://github.com/bitcoin-dalla-teoria-alla-pratica/Bitcoin-in-action-book.git --depth 1 A questo punto non ci resta che avviare docker con\ndocker-compose up Il comando docker-compose up viene utilizzato per avviare i container specificati in un file di configurazione docker-compose.yml.\nAppena avviato il container leggeremo tutti i log, assicurarsi che il nodo stia utilizzando la rete regtest! Come? se vedere che sta scaricando dei blocchi dalla rete significa che qualcosa è andato storto!\nApriamo quindi un altro terminale, e digitiamo\ndocker ps Il quale restituisce tutti i container che sono in esecuzione. Questo è di vitale importanza, perchè dobbiamo “entrare” all’interno del container ed eseguire l’esempi del libro.\nQuesto è il risultato che ottengo utilizzando docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf693d16b1961 docker-bitcoin-bitcoin-in-action \u0026#34;/entrypoint.sh\u0026#34; 2 hours ago Up 2 hours 0.0.0.0:18443-18444-\u0026gt;18443-18444/tcp docker-bitcoin-bitcoin-in-action-1 Entro quindi dentro il container\ndocker exec -it docker-bitcoin-bitcoin-in-action-1 zsh Immaginiamo di voler eseguire l’esempio del Capitolo 3.\ncd Bitcoin-in-action-bookcd Capitolo\\ 3cd P2SH\\ -\\ P2PK./main.sh Se vogliamo eseguire l’esempio utilizzando il debug, niente di più facile, sarà necessario passare il parametro DEBUG=1\n./main.sh DEBUG e btcdeb sarà attivato!\n","date":"12 maggio 2023","externalUrl":null,"permalink":"/posts/utilizzare-gli-esempi-dei-libri-con-docker/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Utilizzare gli esempi dei libri con Docker # Ciao a tutti, abbiamo pensato di creare un repository per facilitare gli esempi che troviamo nei due nostri libri, Bicoin dalla teoria alla pratica e Bitcoin in Action.\n","title":"Utilizzare gli esempi dei libri con Docker","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Come aggiornare/installare il nodo Bitcoin 22.0 # Ciao! Oggi vediamo come aggiornare o installare il nodo Bitcoin versione 22.0. Questa verisone porta diversi cambiamenti che potete leggere nel change log relativo https://bitcoin.org/en/releases/22.0/\nIn questo articolo ci concentriamo sull’aggiornamento di un nodo su OSX, lo stesso che abbiamo utilizzato nel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (Amazon).\nPer aggiornarlo in altri sistemi operativi sarà sufficiente cambiare il pacchetto da scaricare.\nAggiorneremo il nodo direttamente da terminale, perchè? Così se avete la necessità di aggiornare un nodo raspberry, avete una traccia da seguire.\nCliccami per un nodo su raspberry\nPer praticità utilizzo due variabili d’ambiente, cosi che questo tutorial possa avere lunga vita!\n$ VERSION=22.0 $ SO=osx64 Il passo successivo è scaricare il pacchetto desiderato.\nwget https://bitcoincore.org/bin/bitcoin-core-$VERSION/bitcoin-$VERSION-$SO.tar.gz Scarico i relativi SHA256 dei pacchetti che mi serviranno a verificare l’integrità del pacchetto che ho scaricato\n$ wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS Scarico le firme PGP\n$ wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS.asc Successivamente le importo e verifo le firme sul pacchetto scaricato\n$ gpg --verify SHA256SUMS.asc SHA256SUMS Posso finalmente scompattare l’archivio\n$ tar -xvf bitcoin-$VERSION-$SO.tar.gz Sposto i file all’interno di un percorso eseguibile, in questo caso /usr/local/bin/ Se vuoi conoscere i percorsi eseguibili: echo $PATH\n$ sudo cp bitcoin-$VERSION/bin/bitcoin* /usr/local/bin/. Se tutto è andato a buon fine, dovresti vedere la nuova versione scaricata utilizzando il comando:\n$ bitcoind -versionBitcoin Core version v22.0.0 Per sapere il percorso del tuo demone\n$ which bitcoind/usr/local/bin/bitcoind Non ti resta che avviare nuovamente demone\nbitcoind Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (Amazon)\n","date":"15 febbraio 2022","externalUrl":null,"permalink":"/posts/come-aggiornare-installare-il-nodo-bitcoin-22-0/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Come aggiornare/installare il nodo Bitcoin 22.0 # Ciao! Oggi vediamo come aggiornare o installare il nodo Bitcoin versione 22.0. Questa verisone porta diversi cambiamenti che potete leggere nel change log relativo https://bitcoin.org/en/releases/22.0/\n","title":"Come aggiornare/installare il nodo Bitcoin 22.0","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Ciao,\nNell’articolo precedente abbiamo analizzato come si costruisce un address Bitcoin P2SH il quale script è il P2PK.\nIn questo video, andremo ad analizzare come viene creata la transazione, e quindi come viene popolato lo scriptSig.\nPer questo esempio utilizzeremo ancora il codice che abbiamo messo a disposizione per il libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts. il quale potete trovare al nostro indirizzo GitHub.\nIn Action\nAbbiamo già il nostro address, che abbiamo ottenuto con i passaggi spiegati con l’articolo precedente. Per comodità lo ricreiamo lanciando il file\nsh create_p2sh_address_p2pk.sh Se avete bisogno di approfondire tematiche quali Redeem script, redeem script hash, vi consiglio l’articolo precedente.\nAndiamo nel vivo della transazione.\nSe state utilizzando la versione 0.19.0 di bitcoin–core potrebbe essere necessario creare un wallet per utilizzare un address del nodo stesso.\nL’address ottenuto dal wallet sarà il destinatario, mentre l’address P2SH-P2PK, creato precedentemente sarà il miner.\n$ bitcoin-cli createwallet \u0026#34;bia\u0026#34; Associamo anche il nome bia al wallet, ovvero Bitcoin In Action, fantasia mostruosa :).\nSuccessivamente per comodità salviamo in variabile d’ambiente il mittente-miner, ovvero l’address P2SH e il destinatario, che in questo caso è un address legacy, un normale P2PKH, affrontato nei articoli precedenti.\n$ ADDR_P2SH=`cat address_P2SH.txt` $ ADDR_DEST=`bitcoin-cli getnewaddress \u0026#34;\u0026#34; \u0026#34;legacy\u0026#34;` Miniamo quindi 101 blocchi, per ottenere 50 bitcoin di reward da utilizzare per il nostro esempio.\nPer comodità, ogni esempio che andiamo a replicare, utilizziamo una regtest vuota, in modo tale da poter creare transazioni più facilmente.\n$ bitcoin-cli generatetoaddress 101 $ADDR_P2SH \u0026gt;\u0026gt; /dev/null Il passo successivo è importare l’address P2SH nel nodo con il comando importaddress.\nPerché questa operazione? Dato che l’address non è ottenuto dal wallet del nodo, ma è stato ottenuto dall’esterno, abbiamo la necessità di importarlo cosi da analizzare le UTXO\n$ bitcoin-cli importaddress $ADDR_P2SH Utilizzando il comando listuspent possiamo analizzare le UTXO dell’address selezionato, ovvero il P2SH.\n$ UTXO=`bitcoin-cli listunspent 1 101 \u0026#39;[\u0026#34;\u0026#39;$ADDR_P2SH\u0026#39;\u0026#34;]\u0026#39;` Il risultato di tale chiamata viene inserito nella variabile d’ambiente UTXO. Per analizzare il suo contenuto possiamo utilizzare il comando echo.\n$ echo $UTXO Per creare una transazione ho bisogno di:\nla Txid della UTXO di riferimento. In questo caso ne usiamo soltanto una. Il vout, ovvero l’indice della UTXO di riferimento L’amount. PK: la chiave privata per firmare la transazione. Successivamente, a differenza di una transazione legacy, avrò bisogno di:\nRedeem script: ovvero le condizioni, IN CHIARO, necessarie per sbloccare la UTXO di riferimento lo scriptPubKey, dato da OP_HASH160 redeem script hash OP_EQUAL Bene, con l’auto di JQ, un json parser che abbiamo ampiamente utilizzato durante i libri e durante i nostri video, andiamo a salvare in variabili d’ambiente quelle che sono le informazioni necessarie appena descritte.\n$ TXID=$(echo $UTXO | jq -r \u0026#39;.[0].txid\u0026#39;) $ VOUT=$(echo $UTXO | jq -r \u0026#39;.[0].vout\u0026#39;) $ AMOUNT=$(echo $UTXO | jq -r \u0026#39;.[0].amount-0.009\u0026#39;) $ PK=`cat compressed_private_key_WIF_1.txt` $ REDEEM=`cat redeem_script.txt` $ SCRIPTPUBKEY=\u0026#34;A914\u0026#34;`cat scriptPubKey.txt`\u0026#34;87\u0026#34; Dove:\nA9 corrisponde a OP_HASH160 14 alla lunghezza del redeem script Hash 87 corrisponde a OP_EQUAL Siamo pronti per creare la transazione.\nTX_DATA=$(bitcoin-cli createrawtransaction \u0026#39;[{\u0026#34;txid\u0026#34;:\u0026#34;\u0026#39;$TXID\u0026#39;\u0026#34;,\u0026#34;vout\u0026#34;:\u0026#39;$VOUT\u0026#39;}]\u0026#39; \u0026#39;[{\u0026#34;\u0026#39;$ADDR_DEST\u0026#39;\u0026#34;:\u0026#39;$AMOUNT\u0026#39;}]\u0026#39;) Il risultato viene salvato nella variabile d’ambiente TX_DATA. grazie al comando echo è possibile visualizzare il contenuto.\n$TX_DATA sarà argomento della prossima funzione, ovvero signrawtransactionwithkey.\nPer firmarla utilizzando, a differenza del P2PKH, anche il redeem script e il redeem script hash.\nTX_SIGNED=$(bitcoin-cli signrawtransactionwithkey $TX_DATA \u0026#39;[\u0026#34;\u0026#39;$PK\u0026#39;\u0026#34;]\u0026#39; \u0026#39;[{\u0026#34;txid\u0026#34;:\u0026#34;\u0026#39;$TXID\u0026#39;\u0026#34;,\u0026#34;vout\u0026#34;:\u0026#39;$VOUT\u0026#39;,\u0026#34;scriptPubKey\u0026#34;:\u0026#34;\u0026#39;$SCRIPTPUBKEY\u0026#39;\u0026#34;,\u0026#34;redeemScript\u0026#34;:\u0026#34;\u0026#39;$REDEEM\u0026#39;\u0026#34;}]\u0026#39; | jq -r \u0026#39;.hex\u0026#39;) Anche in questo caso abbiamo salvato nella variabile d’ambiente il risultato restituito dalla funzione signrawtransactionwithkey.\nNon ci resta che inviarla in broadcast, utilizzando la funzione sendrawtransaction.\n$ bitcoin-cli sendrawtransaction $TX_SIGNED E tutto è andato a buon fine!\nMa come viene validata?\nNel prossimo articolo andremo, step by step nella validazione, il codice è disponibile nel GitHub del libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts.\nCiao e alla prossima!\n📕Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (pagamento in bitcoin)\n","date":"4 ottobre 2021","externalUrl":null,"permalink":"/posts/come-creare-una-transazione-p2sh-p2pk/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Ciao,\nNell’articolo precedente abbiamo analizzato come si costruisce un address Bitcoin P2SH il quale script è il P2PK.\nIn questo video, andremo ad analizzare come viene creata la transazione, e quindi come viene popolato lo scriptSig.\nPer questo esempio utilizzeremo ancora il codice che abbiamo messo a disposizione per il libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts. il quale potete trovare al nostro indirizzo GitHub.\n","title":"Come creare una transazione P2SH-P2PK","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Video disponibile sul canale YouTube Bitcoin in Action # Ciao,\nNegli articoli precedenti abbiamo analizzato come è costruito un address P2SH-P2PK, e in questa introduzione andremo invece ad analizzare come è costruita la transazione.\nFrame del video Bitcoin in Action —Come è formata una transazione P2SH-P2PK\nNell’immagine della lavagna è riportata una simil transazione, ovvero come poi verrà eseguito lo script.\nNello scriptSig, ovvero la parte dell’input della transazione, troviamo le condizioni necessarie per soddisfare lo scriptPubKey della UTXO di riferimento.\nAvendo preso come riferimento un P2SH–P2PK nello scriptSig è presente la firma digitale e il redeem script in chiaro.\nEsatto, il redeem script, è posizionato nello scriptSig, gli stessi elementi che sono stati utilizzati per creare l’address negli articoli precedenti.\nNello scriptPubKey è invece presente l’operation code OP_HASH160 il redeem script hash e l’operation code OP_EQUAL.\nLo script sarà sempre così? Lo scriptPubKey avrà sempre questa forma OP_HASH160 Redeem Script Hash OP_EQUAL.\nLa parte che andrà a cambiare sarà lo scriptSig, in base allo script utilizzato.\nAd esempio, per lo script P2PKH, nello scriptSig troveremo la firma digitale e la chiave pubblica, esattamente come una normale P2PKH.\nCome vedremo nei video successivi la transazione sarà validata in questo modo:\n— –SCRIPTSIG\n– PUSH della firma digitale\n– PUSH del redeem script\n— –SCRIPTPUBKEY\n– HASH160 sul redeem script\n– PUSH del redeem script HASH\n– OP_EQUAL il quale confronta i due digest on top, ovvero il redeem script\nSe tutto va a buon fine il redeem script viene deserializzato e viene validata la transazione.\nLa transazione validata step by step è spiegata nel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts.\nBitcoin In Action — SegWit, Bitcoin Script e Smart Contracts\nCiao e alla prossima!\n","date":"1 giugno 2021","externalUrl":null,"permalink":"/posts/come-formata-una-transazione-bitcoin-p2sh-p2pk/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Video disponibile sul canale YouTube Bitcoin in Action # Ciao,\nNegli articoli precedenti abbiamo analizzato come è costruito un address P2SH-P2PK, e in questa introduzione andremo invece ad analizzare come è costruita la transazione.\n","title":"Come è formata una transazione Bitcoin P2SH-P2PK","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Pay To Script Hash — Pay To Public Key # Come creare un address P2SH–P2PK\nNell’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.\nIn questo articolo andiamo più nel dettaglio ed iniziamo a mettere il primo mattoncino per la generazione di un address P2SH-P2PK\nIl 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.\nIl 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.\nBitcoin In Action — SegWit, Bitcoin Script e Smart Contracts\nQuindi andiamo a vedere con la pratica come è possibile creare un address P2SH-P2PK\nIn 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.\nTralasciamo la generazione delle chiavi pubblica e privata e soffermiamoci alla costruzione del redeem script.\nCome vedete per questo esempio utilizzo direttamente il libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts.\n$ 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.\nPBLENGTH=$(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)\u0026#34;AC\u0026#34; printf $SCRIPT \u0026gt; 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.\n#---------- scriptPubKey --------- ADDR_SHA=`printf $SCRIPT | xxd -r -p | openssl sha256| sed \u0026#39;s/^.* //\u0026#39;` ADDR_RIPEMD160=`printf $ADDR_SHA |xxd -r -p | openssl ripemd160 | sed \u0026#39;s/^.* //\u0026#39;` printf $ADDR_RIPEMD160 \u0026gt; 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\n#ADDRESS VERSION_PREFIX_ADDRESS=C4 ADDR=`printf $VERSION_PREFIX_ADDRESS$ADDR_RIPEMD160 | xxd -p -r | base58 -c` echo $ADDR \u0026gt; address_P2SH.txt Avviando il nostro script possiamo verificare l’address il redeem script utilizzando il comando cat.\nPossiamo verificare il nostro redeem script.\n$ cat redeem_script.txt 210250a1991342dd7f57792df122baa02c6a5c98aa8daeb8e106ae7d2345d020f082AC Il nostro scriptPubKey, o redeem script Hash\n$ cat scriptPubKey.txt 3647d6bf3fb8e75f26f15888a471808cb4253afb e il nostro address:\n$ cat address_P2SH.txt ---------- 🔑 ADDRESS P2SH --------- 2MxCEY6QTacDQhHFx9rmNeXkpfXEQ17xZQM Utilizzando il comando decodescript sul redeem script possiamo analizzare il nostro redeem script in formato assembly:\nbitcoin-cli decodescript $(cat redeem_script.txt) { \u0026#34;asm\u0026#34;: \u0026#34;02329013c3c2c6bd4a5b1597b008a1ce6e750aa43cf8d2e509e8497bc491c6cb64 OP_CHECKSIG\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;pubkey\u0026#34;, \u0026#34;p2sh\u0026#34;: \u0026#34;2MxWUqeZaaBgKyNMxx9PzLJywr8LqkRUUor\u0026#34;, \u0026#34;segwit\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;0 83e34929132fffbdcffe251c289b68fb178fda06\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;001483e34929132fffbdcffe251c289b68fb178fda06\u0026#34;, \u0026#34;reqSigs\u0026#34;: 1, \u0026#34;type\u0026#34;: \u0026#34;witness_v0_keyhash\u0026#34;, \u0026#34;addresses\u0026#34;: [ \u0026#34;bcrt1qs035j2gn9llmmnl7y5wz3xmglvtclksx2j0yk6\u0026#34; ], \u0026#34;p2sh-segwit\u0026#34;: \u0026#34;2N7G1k7HomEQA8GZemXQQN3JLRPUDY75Keq\u0026#34; } } Nel prossimo articolo vedremo come è costruita una transazione!\nCiao alla prossima!\n","date":"4 maggio 2021","externalUrl":null,"permalink":"/posts/come-creare-un-address-p2sh-p2pk-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Pay To Script Hash — Pay To Public Key # Come creare un address P2SH–P2PK\nNell’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.\n","title":"Come creare un address P2SH–P2PK Bitcoin","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Che cosa contiene il P2SH? #### Video completo sul nostro canale YouTube – Bitcoin in Action! # P2SH: Come è costruito?\nEntriamo nel vivo dell’address Pay to script Hash. Come dicevamo nel precedente video, l’utente andrà a pagare ad un hash di uno script.\nCollegandoci agli address affrontati precedentemente, abbiamo potuto capire che le condizioni necessarie per sbloccare la transazione sono dichiarate all’interno dello scriptPubKey, che storicamente prende il nome anche di locking script.\nIn un address Pay To Script Hash, è possibile inserire qualsiasi tipo di script, anche custom.\nCon lo script custom sarà l’utente a prendersi la responsabilità di scrivere un giusto script.\nCon questo che cosa voglio dire? Non è obbligatorio inserire la firma digitale all’interno di uno script, è possible inserire anche una semplice uguaglianza.\nFacciamo un esempio. Immaginiamo che nello scriptPubKey sia presente uno script del genere OP_1 OP_EQUAL.\nVi sembra sicuro? È vero che, come vedremo successivamente, lo script in chiaro si vede solo se il proprietario dell’address ha effettuato almeno una transazione, perchè come il nome dello script stesso ci suggerisce, nello scriptPubKey troveremo l’hash.\nMa è anche vero che dopo la prima transazione, chiunque è in grado di inserire un OP_1 per soddisfare l’uguaglianza, proprio perchè questa condizione (OP_1 OP_EQUAL) sarà visibile nello scriptSig.\nEcco perchè si usano le firme digitali che risolvono dei problemi fondamentali, quali:\nIntegrità: Il messaggio non deve essere alterato durante la trasmissione. Bob manda un messaggio a Alice con scritto W i bitcoin. Peter lo intercetta cambiandolo con W gli ether. Alice deve essere in grado di accorgersi di tale cambiamento. Autenticità: Alice deve essere sicura che il messaggio che ha ricevuto sia stato inviato da Bob, e non da Peter che si è spacciato per Bob. Non ripudio: Il mittente non potrà disconoscere il messaggio che ha firmato. Quindi abbiamo capito che è compito dell’utente gestire uno script custom, in più, se si utilizza uno script custom dovremo firmare manualmente la transazione, come spiegato nel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts.\nBitcoin In Action — SegWit, Bitcoin Script e Smart Contracts\nVediamo invece come è costruito un address P2SH-P2PK, ovvero un address che racchiude lo script P2PK.\nFacendo riferimento all’esempio di prima, nello scriptPubKey ci saranno le condizioni che abbiamo trovato nel video P2PK, ovvero: Public Key OP_CHECKSIG.\nQuesto è conosciuto anche come redeem script.\nMa quando viene dichiarato? Durante la generazione dell’address, subito dopo aver ottenuto la chiave pubblica compressa, (se non ti ricordi di che cosa sto parlando guarda i video precedenti), viene costruito il redeem script. Redeem script = PB OP_CHECKSIG Successivamente ci vengono applicate le funzioni crittografiche, SHA256 e RIPEMD160, ottenendo così il redeem script Hash.\nAl digest ottenuto viene aggiunto l’address prefix e applicato l’encoding base58 comprensivo di checksum.\nPiccolo Spoiler:\nVi ricorda niente SHA256 e RIPEMD160? Esatto sono le stessa operazioni che si ottengono con l’ OP_HASH160, e dopo vedremo perchè!\nIn questo modo è possibile ottenere un P2SH che wrappa, un P2PK.\nIn informatica, e in particolare in programmazione, è un modulo software che ne “riveste” un altro.\nCome si ottiene un P2SH che Wrappa un P2PKH?\nP2SH — Guarda il video completo sul canale Youtube Bitcoin in Action\nIl Redeem script sarà composto dallo script del P2PKH: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG e successivamente applicate le stesse funzioni crittografiche e di encoding al fine di ottenere l’address.\nNella prossima lezione vedremo con la pratica come analizzare un Address P2SH!\nCiao!\n","date":"26 aprile 2021","externalUrl":null,"permalink":"/posts/che-cosa-contiene-il-p2sh/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Che cosa contiene il P2SH? #### Video completo sul nostro canale YouTube – Bitcoin in Action! # P2SH: Come è costruito?\n","title":"Che cosa contiene il P2SH?","type":"posts"},{"content":"","date":"26 marzo 2021","externalUrl":null,"permalink":"/tags/bip/","section":"Tags","summary":"","title":"BIP","type":"tags"},{"content":" Difficoltà: Medio TUTORIAL Introduzione a P2SH #### Pay to Public Key # Dopo aver analizzato gli script P2PK (Pay to Public key) e P2PKH (Pay to Public key Hash) siamo arrivato al P2SH (Pay to script hash), gli address che iniziano con il numero 3.\nCome la parola stessa ci suggerisce, andiamo a pagare alla vista di un hash di uno script.\nQuesto tipo di script è affrontato in modo molto dettagliato nel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts.\nAndiamo per gradi.\nQuesto script è una evoluzione del P2MS (pay to multi sig) uno script che non ha avuto lunga vita a causa delle sue limitazioni, come ad esempio la costruzione dello script a carico del destinatario e non del mittente.\nPrima di introdurre la costituzione dello script è bene ricordare due elementi fondamentali. Lo scriptSig e lo ScriptPubKey.\nNello scriptSig ci sono gli elementi necessari per soddisfare lo scriptPubKey, il quale è locato nella UTXO di riferimento.\nLo P2PKH si presenta così:\nlo scriptSig è formato da: Signature, Public key compressa. lo scriptPubKey è formato dalle operation code OP_DUP OP_HASH PBH OP_EQUALVERIFY OP_CHECKSIG dove PBH rappresenta l’hash della chiave pubblica compressa. Lo P2SH è invece formato in questo modo:\nLo scriptSig è formato da signatures {serialized script} Lo scriptPubKey è formato da OP_HASH160 [20-byte-hash-value] OP_EQUAL Che cosa sono il serialized Script e 20-byte hash?\nPremettendo che, in questi articoli andremo ad analizzare solo template riconosciuti da bitcoin-core, non andremo quindi a creare script custom, i quali invece sono affrontati nel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts.\nIl serialised script, viene descritto nel Il BIP0016, Bitcoin Improve Proposal (2013), e rappresenta lo script da eseguire al fine di ottenere una transazione valida.\nQuesto è conosciuto anche come redeem script.\nIl suo hash è ottenuto dall’op_code HASH160, ovvero il digest della funzione crittografica SHA256 e RIPEMD160, è posizionato nello scriptPubKey.\nChe cosa può contenere il redeem script? Può contenere qualsiasi cosa, come scritto in precedenza, anche script custom.\nCi sono dei template *standard, *che vengono riconosciuti da Bitcoin core al momento della firma, tra questi troviamo i vari Wrap di P2PK, P2PKH, Multisig e SegWit (non nativo).\nLa cosa interessante da sottolineare è che, quando andiamo a pagare a un address P2SH, se questo non ha mai fatto nessuna transazione, non sapremo mai che condizioni sono necessarie per sbloccare il suo UTXO, proprio perchè nel suo ScriptPubKey troviamo l’hash del redeem script.\nSolo al momento di una sua spesa, potremo andare ad analizzare il suo redeem script, nel suo scriptSig di riferimento, proprio perchè in chiaro.\nNel prossimo articolo andremo nel dettaglio della costruzione dell’address P2SH Wrap P2PK.\nCiao!\n","date":"26 marzo 2021","externalUrl":null,"permalink":"/posts/introduzione-a-p2sh-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Introduzione a P2SH #### Pay to Public Key # Dopo aver analizzato gli script P2PK (Pay to Public key) e P2PKH (Pay to Public key Hash) siamo arrivato al P2SH (Pay to script hash), gli address che iniziano con il numero 3.\n","title":"Introduzione a P2SH Bitcoin","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Dopo alcuni articoli di teoria, siamo arrivati alla pratica. In questo video analizzeremo come sia possibile creare una transazione P2PKH utilizzando un nodo bitcoin in modalità Regtest.\nPer questo esempio utilizzeremo un progetto che stiamo portando avanti io a Alessandro, ovvero un playground.\nFaremo un video dettagliato prima possibile, ma per adesso vi basta pensare che è, accedendo dei container docker, abbiamo a disposizione due nodi, Hansel e Gretel, che parlano tra loro, e alcuni utility tra cui un blockchain explorer.\nSe volete replicare l’esempio che stiamo per vedere, potete creare il vostro ambiente di lavoro, clonando il progetto e seguendo le istruzioni che trovate nella pagina del playground.\nCreeremo una transazione P2PKH utilizzando il nodo Bitcoin con la versione 0.21.0 e analizzeremo come la transazione è validata.‌\nPer rendere le cose più semplici da spiegare, partiremo da una blockchain vuota, quindi prima di lanciare i container, utilizzo il comando ./regtest-delete.sh, e successivamente avvio i container con docker-compose up.\nIl prossimo passaggio è sarà quello di entrare nel container di hansel, ovvero di un nodo:\n$ docker exec -ti hansel bash‌ e verificare che la blockchain abbia 0 blocchi, utilizzando il comando:\n$ bitcoin-cli getblockcount ‌La prima operazione che vado a fare è creare un wallet, con il comando:\n$ bitcoin-cli createwallet \u0026#34;hansel\u0026#34;‌ Successivamente creo l’address del mittente e l’address del destinatario. Utilizzerò delle variabili d’ambiente per salvare il contenuto.\n$ ADDR_MITT=$(bitcoin-cli getnewaddress \u0026#39;mitt\u0026#39; \u0026#39;legacy\u0026#39;) $ ADDR_DEST=$(bitcoin-cli getnewaddress \u0026#39;dest\u0026#39; \u0026#39;legacy\u0026#39;)‌ In questo momento i miei wallet non hanno nessuna UTXO, ovvero non hanno nessun bitcoin disponibile, quindi mineremo 101 blocchi (in modo tale da soddisfare la COINBASE_MATURITY) utilizzando l\u0026rsquo;address $ADDR_MITT.\n$ bitcoin-cli generatetoaddress 101 $ADDR_MITT \u0026gt; /dev/null ‌Adesso ho dei bitcoin a disposizione, o meglio delle UTXO, per visualizzarli posso usare la chiamata listunspent, la quale mi mostra tutte i saldi a disposizione.\nUtilizzo anche il Json Parser, JQ, per aiutarmi a estrapolare solamente le informazioni necessarie per effettuare la transazione.\n‌Per prima cosa salvo tutta la UTXO all’interno della variabile d’ambiente $UTXO\n$ UTXO=$(bitcoin-cli listunspent | jq -r.[0])‌ Successivamente creo la transazione utilizzando la chiamata sendtoaddress, utilizzando una fee_rate e decidendo di sottrarre le fees direttamente dall’amount.\n$ TXID=$(bitcoin-cli -named sendtoaddress address=\u0026#34;$ADDR_DEST\u0026#34; amount=$(echo $UTXO | jq -r.amount) fee_rate=25 subtractfeefromamount=true) ‌Adesso possiamo finalmente analizzare la nostra transazione, la quale si troverà nella mempool, e quindi in attesa di essere minata.\n‌Per analizzarla possiamo utilizzare il comando getrawtransaction, e utilizzare la TXID appena ottenuta\n$ bitcoin-cli getrawtransaction $TXID 2 | jq ‌Nel libro Libro Bitcoin dalla teoria alla pratica e Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts , spieghiamo byte per byte la transazione.\nGrazie al nostro docker, è possibile visualizzare la blockchain locale a anche la transazione che è in mempool.‌\nIn questo caso la nostra transazione ha come ID 49021cb4a1ebb0c74feaa3a9df2ea7e3e74afeb50df9a630023e8822786add73, inserendola nel campo di ricerca otteniamo un qualcosa di simile:\nEnter a caption for this image (optional)\nEnter a caption for this image (optional)\n‌Come possiamo analizzare lo stack e la sua esecuzione?\n‌Utilizziamo il progetto btcdeb! I vostri parametri potrebbero cambiare, ma se avete seguito alla lettera il tutorial, lanciando questo comando, lo stack si popolerà.\n$ btcdeb --tx=$(bitcoin-cli getrawtransaction $TXID) --txin=$(bitcoin-cli getrawtransaction $(echo $UTXO | jq -r.txid))‌ Al momento dell’avvio lo stack è vuoto, e premendo e digitando step, si effettua l’operazione successiva.‌\nIn questo caso con step, si inserisce prima lo scriptSig, ovvero la firma e successivamente la chiave pubblica compressa.\nI vostri valori saranno sicuramente diversi, ma la logica non cambia.‌\nSuccessivamente abbiamo lo scriptPubKey.\nIl primo elemento che inseriamo è OP_DUP, che come abbiamo visto nelle precedenti lezioni, duplica l\u0026rsquo;elemento on top, quindi la nostra chiave pubblica non compressa.\nSuccessivamente, l’operazione che si effettua è HASH160, che ha il compito di prendere l\u0026rsquo;elemento on top e applicare la funzione crittografica SHA256 e RIPEMD160.\n‌Successivamente si inserisce l’hash della chiave pubblica compressa.\nLa prossima OP_CODE è OP_EQUALVERIFY, la quale ha il compito di verificare due elementi, e se sono uguale non inserire niente, altrimenti invalida lo stack.\nIn questo caso sono uguali, e quindi non viene inserito niente e lo stack è ancora valido.\nUltimo OP_CODE, OP_CHECKSIG, come è facile intuire, controlla la firma confrontandola utilizzando la chiave pubblica corrispondente.\nSe non ricordi come si verifica la firma digitale, guarda questo video.‌\nLe operazioni che si effettuano sono, POP della chiave pubblica, pop della firma, e verifica della firma stessa. Se la verifica va a buon fine, si pusha 1, validando la transazione.‌\nLe operazioni che abbiamo fatto, sono le stesse che abbiamo visto nel video “Come si valida una Transazione P2PKH”.‌\nDi seguito è riportata la lavagna utilizzata durante quel video:\nChe cosa ci rimane da fare?‌\nMinare!\n$ bitcoin-cli generatetoaddress 1 $ADDR_MITT ‌A questo punto, utilizzando il nostro explorer, potete analizzare l’ultimo blocco minato, il quale conterrà 2 transazioni, la coinbase e la transazione appena creata.\nSe volete divertivi con il nostro playground, ecco il link! https://app.gitbook.com/@corsobitcoin/s/bitcoin-in-action-playground/\nCiao alla Prossima!\nBitcoin In Action — SegWit, Bitcoin Script e Smart ContractseBitcoin dalla teoria alla pratica\n–––––\n","date":"17 marzo 2021","externalUrl":null,"permalink":"/posts/transazione-p2pkh-nel-bitcoin-playground/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Dopo alcuni articoli di teoria, siamo arrivati alla pratica. In questo video analizzeremo come sia possibile creare una transazione P2PKH utilizzando un nodo bitcoin in modalità Regtest.\nPer questo esempio utilizzeremo un progetto che stiamo portando avanti io a Alessandro, ovvero un playground.\n","title":"Transazione P2PKH nel Bitcoin Playground","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL 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.\nNel libro Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (Amazon) analizziamo e creiamo un address P2PKH manualmente, partendo dalla generazione della chiave privata.\nIn questo esempio, invece, utilizzeremo il metodo getnewaddress per ottenere un address dal nostro nodo di regtest.\n📕Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (pagamento in bitcoin)\nPer prima cosa avviamo il nostro nodo regtest. (Se non sai come installarlo guarda questo articolo)\n$ bitcoind Richiediamo quindi un address P2PKH, utilizzando il comando getnewsaddress. Per sapere che parametri accetta, è possibile utilizzare il comando help.\n$ bitcoin-cli help getnewaddress getnewaddress ( \u0026#34;label\u0026#34; \u0026#34;address_type\u0026#34; ) Bene, accetta come parametri una label, facoltativa, e il tipo di address voluto. Il P2PKH è un address legacy, per questo utilizzeremo il comando:\n$ bitcoin-cli getnewaddress \u0026#34;P2PKH bitcoin in action\u0026#34; \u0026#34;legacy\u0026#34; mfXmGhk1qovdUdtyWbuA5MKdpTiC4Ybz4C Abbiamo ottenuto un address che inizia o con N o con M, nel mio caso con M.\nVi ricordate perchè? Durante la costruzione dell’address inseriamo un address prefixes.\nIn questo caso è stato il software bitcoin core a farlo per noi.\nSe 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.\nAnalizziamo 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:\nADDR=mfXmGhk1qovdUdtyWbuA5MKdpTiC4Ybz4C Per poi verificare il contenuto di ADDR, utilizzo il comando echo, richiamando la variabile preceduta dal simbolo del dollaro.\n$ echo $ADDR mfXmGhk1qovdUdtyWbuA5MKdpTiC4Ybz4C Per comodità salvo anche l’address prefix del P2PKH per l’ambiente di regtest.\nPREFIX=6F Adesso possiamo utilizzare il metodo getaddressinfo , che come è facile intuire, restituisce una serie di informazioni relative all’address.\n$ bitcoin-cli getaddressinfo $ADDR { \u0026#34;address\u0026#34;: \u0026#34;mfXmGhk1qovdUdtyWbuA5MKdpTiC4Ybz4C\u0026#34;, \u0026#34;scriptPubKey\u0026#34;: \u0026#34;76a914002736d4bb3c8a6bed4957a92047a46acbcc5aa988ac\u0026#34;, \u0026#34;ismine\u0026#34;: true, \u0026#34;solvable\u0026#34;: true, \u0026#34;desc\u0026#34;: \u0026#34;pkh([664e540a/0\u0026#39;/0\u0026#39;/1\u0026#39;]03844e497f4b43968c90a493fafcc33ecedcd49ff94e2a534143761d3040a54991)#hkffnnyc\u0026#34;, \u0026#34;iswatchonly\u0026#34;: false, \u0026#34;isscript\u0026#34;: false, \u0026#34;iswitness\u0026#34;: false, \u0026#34;pubkey\u0026#34;: \u0026#34;03844e497f4b43968c90a493fafcc33ecedcd49ff94e2a534143761d3040a54991\u0026#34;, \u0026#34;iscompressed\u0026#34;: true, \u0026#34;label\u0026#34;: \u0026#34;P2PKH bitcoin in action\u0026#34;, \u0026#34;ischange\u0026#34;: false, \u0026#34;timestamp\u0026#34;: 1612087963, \u0026#34;hdkeypath\u0026#34;: \u0026#34;m/0\u0026#39;/0\u0026#39;/1\u0026#39;\u0026#34;, \u0026#34;hdseedid\u0026#34;: \u0026#34;cf10b47c5eb95369ee420118c2c3e4ed86f9f9a3\u0026#34;, \u0026#34;hdmasterfingerprint\u0026#34;: \u0026#34;664e540a\u0026#34;, \u0026#34;labels\u0026#34;: [ { \u0026#34;name\u0026#34;: \u0026#34;P2PKH bitcoin in action\u0026#34;, \u0026#34;purpose\u0026#34;: \u0026#34;receive\u0026#34; } ] } La chiamata restituisce un pò di informazioni, noi ci concentreremo su, scriptPubKey e Public Key.\nCome abbiamo analizzato nei video precedenti, sappiamo che nello scriptPubKey, c’è l’hash160 della chiave pubblica compressa.\nSappiamo inoltre che la public key che lèggiamo dalla chiamata getaddressinfo, è una public key compressa, perchè non inizia con il byte 04.\nVi ricordate come si ottiene l’address P2PKH? Ecco la lavagna di qualche lezione precedente.\nAdesso abbiamo a disposizione, , l’address prefix e la chiave pubblica compressa. Applicando la funzione crittografica\nhash160, che include lo SHA256 e successivamente il RIPEMD160. saremo in grado di ottenere il nostro address!\nPer fare questo, utilizziamo ancora una variabile d’ambiente, ad esempio PB, per salvare il valore della chiave pubblica.\nPB=03844e497f4b43968c90a493fafcc33ecedcd49ff94e2a534143761d3040a54991 Oppure per prenderla in maniera dinamica, possiamo anche utilizzare Jq.\nPB=$(bitcoin-cli getaddressinfo $ADDR | jq -r \u0026#39;.pubkey\u0026#39;) Applichiamo la funzione crittografica SHA256\nADDR_SHA=`printf $PB | xxd -r -p | openssl sha256| sed \u0026#39;s/^.* //\u0026#39;` echo \u0026#34;digest SHA256 \u0026#34;$ADDR_SHA Al digest ottenuto, applichiamo la funzione crittografica ripemd160\nADDR_RIPEMD160=`printf $ADDR_SHA |xxd -r -p | openssl ripemd160 | sed \u0026#39;s/^.* //\u0026#39;` echo \u0026#34;digest RIPEMD160 \u0026#34;$ADDR_RIPEMD160 Come vedete, per comodità ho utilizzato delle variabili d’ambiente.\nChe cosa manca per ottenere l’address? Applicare l’encoding base58 checksum.\n$ ADDR_2=$(printf $PREFIX$ADDR_RIPEMD160 | xxd -p -r | base58 -c) $ echo $ADDR_2 mfXmGhk1qovdUdtyWbuA5MKdpTiC4Ybz4C L’address che ottengo è lo stesso che ho ottenuto con la chiamata getnewsaddress.\nVi ricordate che cosa contiene lo scriptPubKey?\nContiene anche l’hash160 della chiave pubblica. quello che noi abbiamo calcolato all’interno della variabile d’ambiente ADDR_RIPEMD160.\n$ echo $ADDR_RIPEMD160 002736d4bb3c8a6bed4957a92047a46acbcc5aa9 Analizziamo nuovamente la chiamata getaddressinfo sfruttando jq\n$ bitcoin-cli getaddressinfo $ADDR | jq -r \u0026#39;.scriptPubKey\u0026#39; 76a914002736d4bb3c8a6bed4957a92047a46acbcc5aa988ac Infatti troviamo corrispondenza! Nel prossimo video vedremo come creare una transazione e come questa viene validata!\nCiao e alla prossima!\n","date":"10 marzo 2021","externalUrl":null,"permalink":"/posts/ottenere-un-address-p2pkh-e-come-e-costruito-in-action/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL 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.\n","title":"Ottenere un address P2PKH e come è costruito (In Action!)","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL O per meglio dire la chiave privata e la chiave pubblica? # In questo ultimo articolo affronteremo con la teoria come si ottiene la chiave privata e come si deriva la chiave pubblica.\nVideo disponibile nel canale Bitcoin in Action\nCome già spiegato nei precedenti articoli, per lo script P2PK, non esiste un address specifico.\nÈ molto importante comprendere come il protocollo Bitcoin si è evoluto per arrivare ad ottenere gli address che utilizziamo oggi.\nIl tutto parte dalla chiave privata. SPOILER P2PKH! 👀 — La parte iniziale è identica al P2PK\nLa chiave privata è una sequenza di byte ottenuti applicando l’algoritmo secp256k1, i valori che otteniamo devono ricadere all’interno del range di tale algoritmo.\nL’algoritmo secp256k1 è parte della crittografia delle curve ellittiche, spesso la troviamo l’acronimo ECC: Elliptic Curve Cryptography.\nTroviamo anche l’acronimo ECDSA che ci indica Elliptic Curve Digital Signature Algorithm.\nECC: **Elliptic Curve Cryptography ECDSA:Curve Digital Signature Algorithm **La chiave privata deve rispettare le direttive DER, Distinguished Encoding Rules. Brevemente, la chiave viene interpretata come un coding binario e non contiene plain text come le chiavi PEM, come ad esempio — — -BEGIN EC PRIVATE KEY — — -\n-----BEGIN EC PRIVATE KEY----- xxxxx -----END EC PRIVATE KEY----- Sulla chiave viene aggiunto un prefisso per identificare se la chiave privata è destinata all’ambiente di main o per l’ambiente di test.\nDa qui si ottiene la chiave privata in formato WIF, acronimo di Wallet Import Format.\nSe vogliamo importare una chiave privata nel nostro wallet utilizzeremo la chiave privata WIF con il comando importprivkey.\n$ bitcoin-cli help importprivkey Quando firmiamo la transazione utilizziamo la chiave privata PEM, come mostrato nel libro Bitcoin In Action – SegWit, Bitcoin Script \u0026amp; Smart Contracts\nBitcoin In Action — SegWit, Bitcoin Script \u0026amp; Smart Contracts\nApplicando un byte ( 01 ), in coda alla chiave, si ottiene la chiave privata WIF compressa, altrimenti si ha la chiave WIF non compressa.\nAd oggi si utilizza prevalentemente la chiave privata compressa.\nDalla chiave privata si deriva la chiave pubblica, compressa e non compressa.\nLa chiave pubblica non compressa è quella che abbiamo analizzato negli articoli precedenti dedicati al P2PK, la riconosciamo perchè inizia sempre con il byte 04 ed è lunga 130 caratteri esadecimali\nLa chiave pubblica compressa si ottiene applicando un version prefix, verificando l’ultimo byte e applicando la funzione crittografica RIPEMD160.\nNel video corso e nei nostri libri andiamo con la pratica a generare manualmente tutti gli indirizzi.\nPerchè è stata preferita la chiave pubblica compressa nel corso degli anni? Le fees si pagano in base a quanto è pesante la transazione in termini di bytes, o per meglio dire sulla vsize dopo l’introduzione di SegWit.\nCome ormai sappiamo, la chiave privata non deve essere assolutamente condivisa, perchè è in grado di generare quella firma digitale comprovabile dalla corrispondete chiave pubblica, che ovviamente è stata possibile derivare solo ed esclusivamente da quella chiave privata.\nSe ti stai chiedendo perchè è importante la firma,guarda gli articoli precedenti.\n","date":"3 febbraio 2021","externalUrl":null,"permalink":"/posts/come-si-ottiene-l-address-p2pk/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL O per meglio dire la chiave privata e la chiave pubblica? # In questo ultimo articolo affronteremo con la teoria come si ottiene la chiave privata e come si deriva la chiave pubblica.\n","title":"Come si ottiene l’address P2PK?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Come si riconosce la firma digitale in Bitcoin? # Come si riconosce la firma digitale in Bitcoin?\nNel video precedente, abbiamo analizzato con la pratica come la transazione viene P2PK viene validata.\nCi si potrebbe domandare: Come riesce il software a sapere cosa inserire all’interno dello stack?\nCome spiegato nei precedenti video, Bitcoin utilizza script, linguaggio di programmazione necessario per validare lo stack.\nPrima di analizzare come lo stack riesce a capire cosa inserire al suo interno, è necessario spiegare alcune informazioni di base.\nIl bit è l’acronimo di binary digit, ed è un’unità di misura informatica.\n0 spento\n1 acceso\nIl byte è formato da 8 bit (2⁸).\nIl nibble invece è formato da 4 bit.\nAnalizziamo anche i sistemi di numerazione. Base2, sistema di numerazione binaria, base della potenza è due. Simboli a disposizione sono 0 e 1.\n10 = (1*2¹+0*2⁰) = (1*2+0*1) = 2 Ed ecco come il simbolo 10 corrisponde a 2 in base10. Base10, sistema di numerazione decimale, ha come base della potenza è 10, ed è quello che utilizziamo noi umani. I simboli a disposizione sono da 0–9.\nPrendendo come riferimento l’esempio precedente, vediamo come è interpretiamo il numero 5201.\n5201=(5*10³+2*10²+0*10¹+1*10⁰) = 5000+200+0+1 = 5201. Piu semplicemente, ogni elemento viene moltiplicata per la sua posizione, per questo si chiama anche sistema di numerazione posizionale.\n5*1000 + 2*100 + 0*10 + 1*1 = 5201 Ogni unità viene moltiplicata per la sua posizione, ottenendo così:\n5*1000 + 2*100 + 0*10 + 1*1 = 5201 Il sistema esadecimale, o base16 o hex, è formato da 16 simboli\n0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, A, B, C, D, E, F. Ogni carattere esadecimale corrisponde a un nibble, per questo motivo è possibile rappresentare 1 byte con due caratteri esadecimali.\nAd esempio il numero 52 corrisponde a 0x34\nil numero 52 corrisponde a 34 in esadecimale.\nIl numero 52 in base due è rappresentato da 0011 0100, in totale 1 byte, 8 bit. Dato che un carattere esadecimale può essere rappresentato da un nibble, possiamo dividerlo a “meta”, 4 bit e 4 bit\n0011 = (0*2³)+(0*2²)+(1*2¹)+(1*2⁰) = 0+0+2+1 = 30100 = (0*2³)+(1*2²)+(0*2¹)+(0*2⁰) = 0+4+0+0 = 4 Potete utilizzare il comando obase, per ottenere numeri in esadecimale\n$ echo \u0026#34;obase=16;52\u0026#34; | bc34 Arriviamo quindi al momento di analizzare la transazione dell’articolo precedente:\n$ bitcoin-cli getrawtransaction f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16 2 | jq ... \u0026#34;scriptSig\u0026#34;: {\u0026#34;asm\u0026#34;: \u0026#34;304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d09[ALL]\u0026#34;,\u0026#34;hex\u0026#34;: \u0026#34;47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901\u0026#34;}, Analizziamo il primo dello scriptSig, ovvero l’esadecimale 47.\n47 non è mappato su nessuna Operation code, ma ci indica quanti elementi prendere successivamente.\nRicorda che sono caratteri esadecimali, quindi per sapere il numero in base10 dobbiamo convertire 47 in base10.\nquindi:\n(4*16¹) + (7*16⁰) = 71 Sappiamo che un byte può essere rappresentato da 2 caratteri esadecimali, quindi:\n71*2 = 144 Quindi saranno 144 i caratteri esadecimali da prendere in considerazione. Ed ecco come 47 ci indicati inserire 144 esadecimali nello stack (quelli in italico)\n47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901 I quali rappresentano la firma digitale.\nSuccessivamente si inserisce lo scriptPubKey, della UTXO (0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9) di riferimento. Lo scriptPubKey viene interpretato nel medesimo modo.\n\u0026#34;vout\u0026#34;: [ { \u0026#34;value\u0026#34;: 50, \u0026#34;n\u0026#34;: 0, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3 OP_CHECKSIG\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;pubkey\u0026#34; } } ], Il primo byte che troviamo è 41, il quale ricade nel range delle costanti di Bitcoin script e ci indica quanti caratteri esadecimali prendere successivamente.\n410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac 41 in base10 corrisponde a 65. Sappiamo che 1 byte può essere rappresentato da 2 caratteri esadecimale:\n65*2 = 130 Dobbiamo inserire 130 caratteri esadecimali all’interno dello stack, i quali corrispondono alla chiave pubblica NON compressa.\nIl byte successivo è rappresentato da ac. Attenzione l’esadecimale 0xac è tappato sull’operato code OP_CHECKSIG.\nQuindi viene inserito nello stack.\nSuccessivamente, come abbiamo affrontato nel precedente video, lo stack viene validato.\nEstratto dell’articolo\nI nostri libri disponibili su corsobitcoin.com\n","date":"12 gennaio 2021","externalUrl":null,"permalink":"/posts/come-si-riconosce-la-firma-digitale-in-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Come si riconosce la firma digitale in Bitcoin? # Come si riconosce la firma digitale in Bitcoin?\n","title":"Come si riconosce la firma digitale in Bitcoin?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL La transazione di Satoshi Nakamoto # https://www.youtube.com/watch?v=SMDeoY9x3HY\nNell’articolo precedente abbiamo spiegato con la teoria come viene validata una transazione P2PK, adesso con l’aiuto del tool btcdeb, analizziamolo con la pratica.\nVogliamo quindi analizzare la transazione avvenuta nel blocco 170, tra Hal Finney e Satoshi Nakamoto.\nSe non siamo a conoscenza dell’esadecimale della transazione è necessario recuperarlo dal suo blocco. e dato che non sappiamo neanche l’hash del blocco, lo recuperiamo tramite la sua altezza.\n$ bitcoin-cli getblockhash 170 00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee Adesso possiamo recuperare le transazioni.\n$ bitcoin-cli getblock 00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee { \u0026#34;hash\u0026#34;: \u0026#34;00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee\u0026#34;, \u0026#34;confirmations\u0026#34;: 662339, \u0026#34;strippedsize\u0026#34;: 490, \u0026#34;size\u0026#34;: 490, \u0026#34;weight\u0026#34;: 1960, \u0026#34;height\u0026#34;: 170, \u0026#34;version\u0026#34;: 1, \u0026#34;versionHex\u0026#34;: \u0026#34;00000001\u0026#34;, \u0026#34;merkleroot\u0026#34;: \u0026#34;7dac2c5666815c17a3b36427de37bb9d2e2c5ccec3f8633eb91a4205cb4c10ff\u0026#34;, \u0026#34;tx\u0026#34;: [ \u0026#34;b1fea52486ce0c62bb442b530a3f0132b826c74e473d1f2c220bfa78111c5082\u0026#34;, \u0026#34;f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16\u0026#34; ], \u0026#34;time\u0026#34;: 1231731025, \u0026#34;mediantime\u0026#34;: 1231716245, \u0026#34;nonce\u0026#34;: 1889418792, \u0026#34;bits\u0026#34;: \u0026#34;1d00ffff\u0026#34;, \u0026#34;difficulty\u0026#34;: 1, \u0026#34;chainwork\u0026#34;: \u0026#34;000000000000000000000000000000000000000000000000000000ab00ab00ab\u0026#34;, \u0026#34;nTx\u0026#34;: 2, \u0026#34;previousblockhash\u0026#34;: \u0026#34;000000002a22cfee1f2c846adbd12b3e183d4f97683f85dad08a79780a84bd55\u0026#34;, \u0026#34;nextblockhash\u0026#34;: \u0026#34;00000000c9ec538cab7f38ef9c67a95742f56ab07b0a37c5be6b02808dbfb4e0\u0026#34; } Le transazioni sono due, sappiamo però dai video precedenti, che la prima transazione è sempre la coinbase.\nAnalizziamo quindi la seconda transazione.\n$ bitcoin-cli getrawtransaction f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16 2 | jq { \u0026#34;txid\u0026#34;: \u0026#34;f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16\u0026#34;, \u0026#34;hash\u0026#34;: \u0026#34;f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16\u0026#34;, \u0026#34;version\u0026#34;: 1, \u0026#34;size\u0026#34;: 275, \u0026#34;vsize\u0026#34;: 275, \u0026#34;weight\u0026#34;: 1100, \u0026#34;locktime\u0026#34;: 0, \u0026#34;vin\u0026#34;: [ { \u0026#34;txid\u0026#34;: \u0026#34;0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9\u0026#34;, \u0026#34;vout\u0026#34;: 0, \u0026#34;scriptSig\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d09[ALL]\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901\u0026#34; }, \u0026#34;sequence\u0026#34;: 4294967295 } ], \u0026#34;vout\u0026#34;: [ { \u0026#34;value\u0026#34;: 10, \u0026#34;n\u0026#34;: 0, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;04ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84c OP_CHECKSIG\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;pubkey\u0026#34; } }, { \u0026#34;value\u0026#34;: 40, \u0026#34;n\u0026#34;: 1, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3 OP_CHECKSIG\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;pubkey\u0026#34; } } ], \u0026#34;hex\u0026#34;: \u0026#34;0100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd3704000000004847304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901ffffffff0200ca9a3b00000000434104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac00286bee0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000\u0026#34;, \u0026#34;blockhash\u0026#34;: \u0026#34;00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee\u0026#34;, \u0026#34;confirmations\u0026#34;: 662340, \u0026#34;time\u0026#34;: 1231731025, \u0026#34;blocktime\u0026#34;: 1231731025 } Analizzando il vout possiamo vedere i due output generati da questa transazione, entrambi sono pubkey. Il primo output ha 10 bitcoin, e la seconda transazione, che rappresenta il resto, è di 40 bitcoin.\nSono sicuro che rappresenti il resto perchè nello scriptPubKey troviamo la stessa chiave pubblica della transazione in ingresso, cioè 0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3 Analizziamo la transazione in ingresso, che troviamo nel vin:\n$ bitcoin-cli getrawtransaction 0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9 2 | jq { \u0026#34;txid\u0026#34;: \u0026#34;0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9\u0026#34;, \u0026#34;hash\u0026#34;: \u0026#34;0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9\u0026#34;, \u0026#34;version\u0026#34;: 1, \u0026#34;size\u0026#34;: 134, \u0026#34;vsize\u0026#34;: 134, \u0026#34;weight\u0026#34;: 536, \u0026#34;locktime\u0026#34;: 0, \u0026#34;vin\u0026#34;: [ { \u0026#34;coinbase\u0026#34;: \u0026#34;04ffff001d0134\u0026#34;, \u0026#34;sequence\u0026#34;: 4294967295 } ], \u0026#34;vout\u0026#34;: [ { \u0026#34;value\u0026#34;: 50, \u0026#34;n\u0026#34;: 0, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3 OP_CHECKSIG\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;pubkey\u0026#34; } } ], \u0026#34;hex\u0026#34;: \u0026#34;01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0134ffffffff0100f2052a0100000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000\u0026#34;, \u0026#34;blockhash\u0026#34;: \u0026#34;000000008d9dc510f23c2657fc4f67bea30078cc05a90eb89e84cc475c080805\u0026#34;, \u0026#34;confirmations\u0026#34;: 662502, \u0026#34;time\u0026#34;: 1231473279, \u0026#34;blocktime\u0026#34;: 1231473279 } Come vedete nel in hex troviamo la stessa chiave pubblica, nel prossimo video vedremo come identificarla meglio.\nCerchiamo invece di capire come lo stack viene validato sfruttando btcdeb.\nIl software si aspetta la transazione d’ingresso, e la transazione di uscita per costruire lo stack.\nPer fare questo possiamo utilizzare le variabile d’ambiente.\nChiamerò TX_IN la transazione in ingresso e TX_OUT la transazione in uscita, quella che contiene due output.\n➜ ~ $ TX_IN=$(bitcoin-cli getrawtransaction 0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9) ➜ ~ $ TX_OUT=$(bitcoin-cli getrawtransaction f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16) Per verificare il valore delle variabili d’ambiente, possiamo utilizzare il comando echo.\n➜ ~ $ echo $TX_IN 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0134ffffffff0100f2052a0100000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000 Utilizziamo quindi il programma btcdeb.\n$ btcdeb --tx=$TX_OUT --txin=$TX_IN Come mostrato nei video precedenti dove veniva utilizzata la lavagna, il primo elemento che viene inserito nello stack è lo scriptSig, che in questo caso contiene la firma digitale.\nl’operazione che viene effettuata è un’operazione di PUSH.\nSuccessivamente sono effettuate altre due operazioni di PUSH, quindi la chiave pubblica non compressa.\nSuccessivamente l’operation code OP_CHECKSIG ha il compito di fare POP di due elementi in top, quindi in cima alla pila, verificare firma, e pushare 1 se la firma è valida, 0 altrimenti\nLa firma è valida, quindi il numero che viene inserito l’elemento 1.\nLo stack è stato eseguito con successo dato che l’ultimo e unico elemento dello stack è 1, il quale rappresenta la buon riuscita del programma.\nwww.corsobitcoin.com\n","date":"1 gennaio 2021","externalUrl":null,"permalink":"/posts/come-viene-validata-la-transazione-p2pk/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL La transazione di Satoshi Nakamoto # https://www.youtube.com/watch?v=SMDeoY9x3HY\nNell’articolo precedente abbiamo spiegato con la teoria come viene validata una transazione P2PK, adesso con l’aiuto del tool btcdeb, analizziamolo con la pratica.\n","title":"Come viene validata la transazione P2PK","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL I 3 concetti base da conoscere # Come si valida una transazione P2PK?\nNel video precedenteabbiamo introdotto lo Stack e abbiamo capito che viene utilizzato per validare la transazione. L’obiettivo di questa serie è spiegare gli address, quindi partiremo con l’analisi dell’address P2PK.\nIn realtà è sbagliato dire l’address P2PK, proprio perchè non esiste nessun address P2PK.\nAnalizzando la prima transazione nel blocco 170, molti explorer riportano l’address: 1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3 ma in realtà non è corretto.\nL’address che si vede è un address P2PKH, mentre lo script P2PK non ha nessun address specifico. A quell’epoca si pagava a uno scriptPubKey e non a un address-\nAndiamo quindi per gradi, cercando di capire funzionava, ai tempi del buon Hal Finney e di Satoshi Nakamoto, il P2PK.\n\u0026#34;vin\u0026#34;: [ { \u0026#34;txid\u0026#34;: \u0026#34;0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9\u0026#34;, \u0026#34;vout\u0026#34;: 0, \u0026#34;scriptSig\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d09[ALL]\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901\u0026#34; }, \u0026#34;sequence\u0026#34;: 4294967295 } ], \u0026#34;vout\u0026#34;: [ { \u0026#34;value\u0026#34;: 10.00000000, \u0026#34;n\u0026#34;: 0, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;04ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84c OP_CHECKSIG\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;pubkey\u0026#34; } }, { \u0026#34;value\u0026#34;: 40.00000000, \u0026#34;n\u0026#34;: 1, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3 OP_CHECKSIG\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;pubkey\u0026#34; } } ], Come per tutti le derivazioni, il punto di partenza è sempre la generazione della chiave privata utilizzando la curva ellittica secp256k1 utilizzata in Bitcoin.\nUna delle parti fondamentali della generazione della chiave privata è l’entropia, più l’entropia è casuale più sicura sarà la chiave privata.\nSuccessivamente viene trasformata nel formato DER.\nPer adesso quello che ci interessa a noi è avere una chiave privata per derivare una chiave pubblica.\nPer questa spiegazione, noi utilizzeremo solo la chiave pubblica non compressa, proprio come la prima transazione avvenuta in Bitcoin.\nMa vediamo come viene validata la transazione:\nLo scriptSig viene inserito, si dice pushato all’interno dello stack, successivamente viene pushato lo scriptPubKey.\nIn questo caso lo scriptSig è rappresentato dalla firma digitale e lo scriptPubKey è rappresentato dalla chiave pubblica.\nUna transazione è valida quando nello stack rimane un solo e unico elemento con valore 1, ovvero true.\nInserendo la firma e la chiave pubblica, come fa il software a validare la transazione? Bitcoin utilizza un linguaggio di programmazione chiamato Script, da qui anche il sottotitolo del nostro libro.\nBitcoin Script ha un funzione, o per meglio dire un’operation code, che verifica una firma sulla chiave pubblica.\nL’operation in questione è OP_CHECKSIG.\nOra è più chiaro? Nello scriptPubKey ci dovrà essere quindi la chiave pubblica e successivamente lo OP_CHECKSIG.\nChe compito ha OP_CHECKSIG? Il suo compito è quello di fare due volte la funzione di pop, quindi estrarre i primi due valori on top dallo stack e verificare se la firma è valida, se è valida, esegue il push del valore 1, altrimenti 0.\nEstratti del videohttps://www.youtube.com/watch?v=iVWMaGO3m48\nEstratti del videohttps://www.youtube.com/watch?v=iVWMaGO3m48\nEstratti del videohttps://www.youtube.com/watch?v=iVWMaGO3m48\n","date":"23 dicembre 2020","externalUrl":null,"permalink":"/posts/come-si-valida-una-transazione-p2pk/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL I 3 concetti base da conoscere # Come si valida una transazione P2PK?\nNel video precedenteabbiamo introdotto lo Stack e abbiamo capito che viene utilizzato per validare la transazione. L’obiettivo di questa serie è spiegare gli address, quindi partiremo con l’analisi dell’address P2PK.\n","title":"Come si valida una transazione P2PK?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Che cosa è lo stack? # Ciao,\nabbiamo avuto l’idea di creare una nuova playlist per parlare degli address Bitcoin. Spesso sentiamo nomi come Pay to hash public key, oppure Pay to script hash, o ancora bech32.\nSono argomenti un pò impegnativi , per questo motivo utilizzeremo una lavagna per creare dei disegni per comprendere meglio l’argomento.\nPer andare nel dettaglio e capire meglio Bitcoin, io e Alessandro abbiamo scritto 3 libri, Bitcoin dalla teoria alla pratica, Bitcoin in Action e Bitcoin 199 domande.\nOltre a questo facciamo corsi live e offline che trovate su bitcoininaction.com in collaborazione con agli amici di Bitcoin People.\nPartiamo parlando dicendo che non esistono address, ma esistono solo script. Gli address sono il risultato di funzioni crittografiche applicate sulla chiave pubblica.\nUtilizzeremo come primo script, l’”address” P2PK.\nPensiamo per un attimo al significato di Pay to Public Key.\nChe cosa ci vuole comunicare? In italiano potremmo tradurla con pagare a una chiave pubblica.\nEd effettivamente è proprio quello che succede, quando si effettua una transazione, essa viene sbloccata confrontando la firma digitale su una chiave pubblica.\nQuesto non dovrebbe sorprendere, perchè come abbiamo visto nei primi video, forse proprio il primo video del canale, la firma digitale si valida utilizzando la chiave pubblica derivata dalla chiave privata che ha generato quella firma.\nDobbiamo fare un passo indietro prima di parlare della generazione dell’address, dobbiamo chiarire i concetti di Stack e di validazione.\nLo stack è una sequenza di dati, inseriti uno sopra l’altro.\nNel caso di Bitcoin si parla di stack LIFO, Last Input First output, quindi il primo elemento che entra è anche il primo ad uscire.\nUn ulteriore particolarità è che lo stack è Reverse Polish, ovvero gli operatori seguono l’operandi.\nSenza andare troppo nel dettaglio, vediamo un esempio.\nL’operazione che vogliamo fare è una somma 2 + 2, quindi secondo l’annotazione polacca prima mettiamo 22 e poi l’operazione somma, OP_ADD.\nViene inserito il primo elemento nello stack. quando un elemento viene inserito nello stack si chiama operazione di push.\nSuccessivamente viene inserito il secondo operatore\nEd infine viene inserito l’operando che ha il compito di prendere i primi due elementi in top, quindi in cima allo stack, applicare la funzione della somma, e inserire il risultato nello stack.\nQuindi l’operazione che farà saranno. POP di 2, POP di 2, PUSH di 4.\nQuesto è un primo passo per capire come vengono validate le transazioni.\nSe volete approfondire questo argomento iscrivetevi al canale e visitate il nostro sito corsobitcoin.com, dove trovate i nostri libri e i nostri contatti.\nCiao alla prossima\n","date":"22 dicembre 2020","externalUrl":null,"permalink":"/posts/address-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Che cosa è lo stack? # Ciao,\nabbiamo avuto l’idea di creare una nuova playlist per parlare degli address Bitcoin. Spesso sentiamo nomi come Pay to hash public key, oppure Pay to script hash, o ancora bech32.\n","title":"Address Bitcoin","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Bitcoin Core Gui Vs Cli ⚔️ # Vantaggi e svantaggi. # Ciao,\nOggi rispondiamo a Roberto che durante una nostra chiacchierata mi ha suggerito di far vedere la GUI di bitcoin-core.\nNon avevo mai utilizzato la parte grafica, ma mi rendo conto che alcune persone potrebbero preferire la GUI.\nL’ interfaccia grafica, nota anche come GUI (dall’inglese Graphical User Interface), in informatica è un tipo di interfaccia utente che consente l’interazione uomo-macchina in modo visuale utilizzando rappresentazioni grafiche\nTuttavia il mio consiglio è quello di prendere confidenza con il terminale, perchè se installiamo, ad esempio, un nodo su un raspberry molto probabilmente ci connetteremo in SSH.\nIn questo articolo metteremo in comunicazione la GUI e la riga di comando, così da creare una mini blockchain sul nostro computer.\nPer questo esempio utilizzeremo la regtest.\nIn Action # Ho già installato il nodo sul mio computer, se hai bisogno di installare bitcoin-core, fai riferimento a questo video.\nPrima di avviare Bitcoin-core, specifico di voler utilizzare la regtest. Mi sposto nella cartella di default del mac e creo o modifico il file di configurazione.\nSe voi non avete la cartella di default Bitcoin, potete crearla, il percorso predefinito del mac è:\n$ cd $HOME/Library/Application\\ Support/Bitcoin Per gli altri sistemi operativi, fare rifermineto alla wiki di Bitcoin.\nDi seguito è riportata la configurazione del mio nodo:\nregtest=1 daemon=1 txindex=1 # Options only for mainnet [main] # Options only for testnet [test] # Options only for regtest [regtest] Eliminiamo la cartella regtest, se esiste, così da partire da una blockchain vuota. Avviamo quindi Bitcoin-core versione grafica.\nIo per farlo digito:\n$ bitcoin-qt Dato che ho spostato l’eseguibile nel mio file $PATH. Se non sai come fare, guarda questo video\nBitcoin Core\nLa regtest è vuota, quindi la blockchain contiene un solo blocco, il genesis block.\nOtteniamo le sue informazioni, così da prendere confidenza con la GUI. Selezionando Window -\u0026gt; console, si aprirà una nuova finestra nella quale abbiamo la possibilità di eseguire dei comandi.\nBitcoin Core – Window Console\nDigitando help abbiamo tutta la lista del comandi. Utilizzando getblockhash 0 abbiamo la possibilità di ottenere l’hash del blocco genesi, e con il comando getblock 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206 possiamo analizzarlo.\nBitcoin-Core — Genesis Block\nTutto molto simile alla versione bash ovviamente. L’unica differenza degna di nota è che si omette il comando bitcoin-cli. Avviamo un secondo nodo, questa volta da terminale. Per prima cosa creo un’altra cartella sempre nel percorso di default, che chiamerò regtest-cli.\n$ mkdir regtest-cli Questa cartella ospiterà la blockchain e tutti i dati del secondo nodo. Per avviarlo abbiamo bisogno di creare un’altro file di configurazione nel quale dichiariamo la datadir, le porte differenti, e aggiungeremo l’ip e la porta del nodo con l’interfaccia grafica.\nCreo quindi un file con il nome bitcoin.conf_2 con questa configurazione:\nregtest=1 datadir=/Users/barno/Documents/Bitcoin-in-action-book/Bitcoin/regtest-cli # Options only for mainnet [main] # Options only for testnet [test] # Options only for regtest [regtest] daemon=1 rpcport=28443 port=28444 addnode=localhost:18444 Le porte di default della regtest sono 18444 e 18443 che al momento sono occupate dalla versione grafica.\nAvviamo il demone bash\n$ bitcoind --conf=bitcoin.conf_2 Appena avviamo, vediamo che nell’interfaccia grafica si ha un nodo collegato.\nBitcoin-core GUI con un nodo collegato\nSiamo noi!\nVerifichiamo a quanti nodi siamo connessi con il demone da riga di comando, che da questo momento chiameremo nodo2.\n$ bitcoin-cli —-conf=bitcoin.conf_2 getconnectioncount 1 Siamo connessi a un nodo, alla GUI.\nPossiamo ottenere più informazioni del nodo aggiunto con addnode con il comando getaddednodeinfo.\n$ bitcoin-cli --conf=bitcoin.conf_2 getaddednodeinfo [ { \u0026#34;addednode\u0026#34;: \u0026#34;localhost:18444\u0026#34;, \u0026#34;connected\u0026#34;: true, \u0026#34;addresses\u0026#34;: [ { \u0026#34;address\u0026#34;: \u0026#34;[::1]:18444\u0026#34;, \u0026#34;connected\u0026#34;: \u0026#34;outbound\u0026#34; } ] } ] Ma come funziona il bootstrap di un nodo Bitcoin? Nella modalità mainnet i nodi si collegano ad altri nodi con questa logica:\nAddress database (peers.dat) User-specified (-addnode and -connect) DNS seeding Hard-coded seeds From other peers (“getaddr” and “addr” messages) Quindi prendono gli indirizzi dei nodi dal file peers.dat, successivamente verificano se ci sono dei nodi specificati dall’utente, proprio come abbiamo fatto noi, e, se i peers falliscono, si connettono a dei DNS e a dei seeds hardcodati nel codice.\nMiniamo 211 blocchi dal nodo2.\n$ bitcoin-cli --conf=bitcoin.conf_2 generatetoaddress 211 $(bitcoin-cli --conf=bitcoin.conf_2 getnewaddress \u0026#34;\u0026#34; \u0026#34;bech32\u0026#34;) \u0026gt;\u0026gt; /dev/null Per sapere quanti blocchi contiene la blockchain possiamo utilizzare la chiamata getblockcount\n$ bitcoin-cli --conf=bitcoin.conf_2 getblockcount 211 Il risultato che otteniamo è 211. Come posso verificare che la GUI sia syncata?\nUtilizzando Window-\u0026gt;information troviamo una schermata che ci comunica i blocchi, che anche in questo caso risultano essere 211.\nBitcoin-core Syncata\nTorniamo nel nodo2 e creiamo una transazione. Per prima cosa verifico il saldo con la chiamata getwalletinfo.\n$ bitcoin-cli --conf=bitcoin.conf_2 getwalletinfo { \u0026#34;walletname\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;walletversion\u0026#34;: 169900, \u0026#34;balance\u0026#34;: 5550.00000000, \u0026#34;unconfirmed_balance\u0026#34;: 0.00000000, \u0026#34;immature_balance\u0026#34;: 3450.00000000, \u0026#34;txcount\u0026#34;: 211, \u0026#34;keypoololdest\u0026#34;: 1606752619, \u0026#34;keypoolsize\u0026#34;: 999, \u0026#34;keypoolsize_hd_internal\u0026#34;: 1000, \u0026#34;paytxfee\u0026#34;: 0.00000000, \u0026#34;hdseedid\u0026#34;: \u0026#34;50aacc53d11feb46bf8a159d1fb4fdb0ecc18e06\u0026#34;, \u0026#34;private_keys_enabled\u0026#34;: true, \u0026#34;avoid_reuse\u0026#34;: false, \u0026#34;scanning\u0026#34;: false } La chiamata restituisce anche i bitcoin non maturi, ovvero quelli che non hanno ancora passato la coinbase_maturity, ovvero 101 conferme.\nPer avere il balance confermato, possiamo utilizzare la chiamata getbalance.\n$ bitcoin-cli --conf=bitcoin.conf_2 getbalance 5550.00000000 Inviamo 1 bitcoin all’address del nodo GUI, per prima cosa ottengo un nuovo address.\nOttengo l’address dal nodo GUI\nSeleziono receive e clicco create a new receive address. Il software mi restituisce un address SegWit nativo.\nQuale è stato il comando che ha eseguito? È stato getnewaddres. Replichiamolo nel nodo2.\n$ bitcoin-cli --conf=bitcoin.conf_2 getnewaddress \u0026#34;\u0026#34; \u0026#34;bech32\u0026#34; bcrt1qg887l3jc0q3wmn9ldwtamn5cqhz63gyw4vy84g Ed ecco ottenuto l’address anche con il nodo2, che ovviamente è diverso dal nodo GUI.\nInviamo quindi 1 bitcoin dal nodo2 al nodo GUI, utilizzando il metodo sendtoaddress, il quale ha il compito di aggregare per noi le UTXO fino ad arrivare all’importo desiderato impostando automaticamente le fees.\n$ bitcoin-cli --conf=bitcoin.conf_2 sendtoaddress bcrt1qfak36m9lmm3uup9s4v2rkd0yeld7vgz9q6fvld 1 dde7dc0f4dca1c83fc86ac64a1c5522ecfeedb8f9c64bc013bf4cffce52cf4b7 La transazione è stata inviata, quindi adesso si trova nella mempool. Nella GUI, nella sezione transaction, possiamo verificare tutte le informazioni della transazione.\nBitcoin Core — Mempool\nCome è possibile ottenere le stesse informazioni dal nodo2? Utilizzando la chiamata getrawtransaction specificando una risultato più verboso, utilizzando la txid ottenuta dalla chiamata sendtoaddress.\n$ bitcoin-cli --conf=bitcoin.conf_2 getrawtransaction dde7dc0f4dca1c83fc86ac64a1c5522ecfeedb8f9c64bc013bf4cffce52cf4b7 2 { \u0026#34;txid\u0026#34;: \u0026#34;dde7dc0f4dca1c83fc86ac64a1c5522ecfeedb8f9c64bc013bf4cffce52cf4b7\u0026#34;, \u0026#34;hash\u0026#34;: \u0026#34;cd43d5f44c108b6ccad6649929bfd5c616d22082310a7dff4c5998d1b2052be7\u0026#34;, \u0026#34;version\u0026#34;: 2, \u0026#34;size\u0026#34;: 222, \u0026#34;vsize\u0026#34;: 141, \u0026#34;weight\u0026#34;: 561, \u0026#34;locktime\u0026#34;: 211, \u0026#34;vin\u0026#34;: [ { \u0026#34;txid\u0026#34;: \u0026#34;fb75baa7271a6c0c30002ba8587df3370aed4192c6ecd25a65a2f3ec36802033\u0026#34;, \u0026#34;vout\u0026#34;: 0, \u0026#34;scriptSig\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;\u0026#34; }, \u0026#34;txinwitness\u0026#34;: [ \u0026#34;304402200e6705b7ddb830422aee5b300a02b34bb46330698e0cd462220c190b0526e6e70220620f13fcbd17de115517a047e5b8c5c5b88b39aba4873af79af2dffc0cdaec7101\u0026#34;, \u0026#34;039434ddae8e96297683ff1117935682bfea0d4b7725ee037c3aa323cb04711a53\u0026#34; ], \u0026#34;sequence\u0026#34;: 4294967294 } ], \u0026#34;vout\u0026#34;: [ { \u0026#34;value\u0026#34;: 1.00000000, \u0026#34;n\u0026#34;: 0, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;0 4f6d1d6cbfdee3ce04b0ab143b35e4cfdbe62045\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;00144f6d1d6cbfdee3ce04b0ab143b35e4cfdbe62045\u0026#34;, \u0026#34;reqSigs\u0026#34;: 1, \u0026#34;type\u0026#34;: \u0026#34;witness_v0_keyhash\u0026#34;, \u0026#34;addresses\u0026#34;: [ \u0026#34;bcrt1qfak36m9lmm3uup9s4v2rkd0yeld7vgz9q6fvld\u0026#34; ] } }, { \u0026#34;value\u0026#34;: 48.99997180, \u0026#34;n\u0026#34;: 1, \u0026#34;scriptPubKey\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;0 8e54cf6eaefcd27c9297ed512ec3e6e0901287b1\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;00148e54cf6eaefcd27c9297ed512ec3e6e0901287b1\u0026#34;, \u0026#34;reqSigs\u0026#34;: 1, \u0026#34;type\u0026#34;: \u0026#34;witness_v0_keyhash\u0026#34;, \u0026#34;addresses\u0026#34;: [ \u0026#34;bcrt1q3e2v7m4wlnf8ey5ha4gjaslxuzgp9pa3mce9ja\u0026#34; ] } } ], \u0026#34;hex\u0026#34;: \u0026#34;0200000000010133208036ecf3a2655ad2ecc69241ed0a37f37d58a82b00300c6c1a27a7ba75fb0000000000feffffff0200e1f505000000001600144f6d1d6cbfdee3ce04b0ab143b35e4cfdbe62045fc051024010000001600148e54cf6eaefcd27c9297ed512ec3e6e0901287b10247304402200e6705b7ddb830422aee5b300a02b34bb46330698e0cd462220c190b0526e6e70220620f13fcbd17de115517a047e5b8c5c5b88b39aba4873af79af2dffc0cdaec710121039434ddae8e96297683ff1117935682bfea0d4b7725ee037c3aa323cb04711a53d3000000\u0026#34; } Questa chiamata restituisce molte più informazioni, nella GUI sono riportate solo quelle di interesse.\nChe cosa ci resta da fare? Minare dei blocchi! Utilizziamo la GUI per questo.\nPrima otteniamo un altro indirizzo.\nBitcoin Core — Indirizzo Miner\nQuesto indirizzo sarà il nostro miner. bcrt1qcad9r6cn037p3una2fum7v5jwgc2zgm8ssw7un Utilizziamo ancora la console della GUI. Miniamo 10 blocchi con il comando generatetoaddress.\nBitcoin Core — 10 blocchi minati\nAbbiamo minato 10 blocchi! Adesso mi aspetto di vedere il la transazione fatta dal nodo2 confermata!\nBitcoin Core — Transazione Confermata\nEsatto! la prima transazione è stata minata e ha 10 conferme.\nNella schermata vediamo altri blocchi minati con dei reward.\nNel primo blocco vediamo un reward un pò più corposo, perchè? Perchè è il blocco che contiene la nostra transazione.\nRicorda che il reward del miner è composta, dal reward impostato dal protocollo che cambia ogni 210.000 blocchi e dalle fees.\nPerchè qui non abbiamo 50 bitcoin di reward? In regtest l’halving non avviene ogni 210.000 blocchi. Per saperne di più guarda questo video.\nFacciamo anche l’operazione inversa, inviamo 0.5 bitcoin dalla GUI al nodo2.\nOtteniamo un address dal nodo2, aggiungiamo anche una label. Io aggiungerò “barno”.\n$ bitcoin-cli --conf=bitcoin.conf_2 getnewaddress \u0026#34;barno\u0026#34; \u0026#34;bech32\u0026#34; bcrt1qtc00wzrcae86rvyacanwd5l9t6fek4h8a6vna4 Spostiamoci nella tab send e inseriamo i valori desiderati.\nBitcoin Core — Transazione\nCi viene proposto un popup per confermare la transazione\nBitcoin Core — Conferma\nConfermiamo.\nDove sarà adesso la transazione? Di nuovo nella mempool! Dato che sappiamo che è prensente una sola transazione, possiamo utilizzare getrawmempool dal nodo2.\nbitcoin-cli --conf=bitcoin.conf_2 getrawmempool [ \u0026#34;20f2b335d8775d1237523b1f6583ea809716f74e82773c5ad285cbb66a5b3e91\u0026#34; ] Bitcoin Core GUI – Mempool\nTroviamo infatti corrispondenza con la GUI.\nAdesso possiamo aspettarci dei bitcoin non confermati con nell’address del nodo2.\nAbbiamo la verifica utilizzando il metodo listreceivedbyaddress passando come parametro 0, il quale rappresenta le conferme.\n$ bitcoin-cli --conf=bitcoin.conf_2 listreceivedbyaddress 0 [ { \u0026#34;address\u0026#34;: \u0026#34;bcrt1qtc00wzrcae86rvyacanwd5l9t6fek4h8a6vna4\u0026#34;, \u0026#34;amount\u0026#34;: 0.50000000, \u0026#34;confirmations\u0026#34;: 0, \u0026#34;label\u0026#34;: \u0026#34;barno\u0026#34;, \u0026#34;txids\u0026#34;: [ \u0026#34;20f2b335d8775d1237523b1f6583ea809716f74e82773c5ad285cbb66a5b3e91\u0026#34; ] } ] Non ci resta che minare! Mineremo utilizzando il nodo2.\n$ bitcoin-cli --conf=bitcoin.conf_2 generatetoaddress 11 $(bitcoin-cli --conf=bitcoin.conf_2 getnewaddress \u0026#34;\u0026#34; \u0026#34;bech32\u0026#34;) \u0026gt;\u0026gt; /dev/null Facendo nuovamente doppio click sulla transazione possiamo leggere che la transazione è stata minata e confermata!\nBitcoin core – Transazione minata e confermata\nVerifichiamo l’homepage della GUI.\nBitcoin Core GUI — Homepage\nAbbiamo un saldo disponibile di 0.49 bitcoin e un 250 bitcoin + fees immaturi. A questo punto sappiamo perchè!\nPer concludere: La GUI facilita alcune operazioni ma ne nasconde altre, la riga di comando è sicuramente meno user friendly ma è molto più consigliata in quanto su ogni sistema che andrete a lavorare non vi sentirete spaesati!\nCiao!\n📕Bitcoin In Action — SegWit, Bitcoin Script e Smart Contracts (Amazon)\n","date":"10 dicembre 2020","externalUrl":null,"permalink":"/posts/bitcoin-core-gui-vs-cli/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Bitcoin Core Gui Vs Cli ⚔️ # Vantaggi e svantaggi. # ","title":"Bitcoin Core Gui Vs Cli ⚔️","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Bitcoin In Action — Come replicare gli esempi Ciao, come sapete abbiamo rilasciato il nostro terzo libro —Bitcoin in Action,* SegWit, Bitcoin script \u0026amp; smart contracts*. # Bitcoin In Action — SegWit, Bitcoin Script \u0026amp; Smart Contracts\nCome per il libro precedente — Bitcoin dalla teoria alla pratica — abbiamo deciso di spiegare tutta la teoria utilizzando la pratica, così da facilitare l’utente alla comprensione della teoria stessa.\nQuesto video ha proprio questo obiettivo, preparare il nostro computer per seguire senza fatica il libro e replicare gli esempi.\nEcco quello che dobbiamo fare:\nClonare il repository Installare Bitcoin core Inserire nel $PATH il percorso delle utility del libro Installare JQ Avere Python 3 Vediamo come!\nIn Action\nAl momento sto utilizzando un Mac, ma i passaggi sono molto simili anche per gli altri sistemi operativi.\nPer prima cosa mi collego al repository GitHub del libro (https://github.com/bitcoin-dalla-teoria-alla-pratica/Bitcoin-in-action-book)\nApro quindi il terminale e mi posiziono nel percorso dove voglio clonare repository, nel mio caso in Documenti, e clono il repository sul mio computer.\n$ git clone https://github.com/bitcoin-dalla-teoria-alla-pratica/Bitcoin-in-action-book.git Mi sposto dentro la cartella appena clonata\n$ cd Bitcoin-in-action-book/Capitolo\\ 0 E installo Bitcoin-core.\nOvviamente se avete già un Bitcoin core installato potete utilizzare quello, oppure se volete installare ex-novo prestate attenzione alle vostre chiavi private.\nLa versione che abbiamo utilizzato durante la realizzazione del libro è la 0.19.0.1.\nAvvio quindi il file main.sh\n$ sh main.sh lo script scaricherà la versione di riferimento, effettuerà il controllo della firma PGP, e ci chiederà se spostare gli elementi appena scaricati in /usr/local/bin, percorso che solitamente fa parte del $PATH in modo tale da rendere il demone globale.\nCi viene quindi chiesta la password del nostro computer.\nUna volta inserita, il software viene installato.\nPotrebbe essere necessario installare PGP per il controllo delle chiavi.\nPer verificare che tutto sia andato a buon fine, possiamo digitare:\n$ bitcoind In questo momento Bitcoin sta scaricando la mainnet. Fermiamo il demone con Ctrl-c.\nIl secondo passaggio, non obbligatorio ma molto consigliato, è quello di creare un collegamento simbolico con la cartella datadir di Bitcoin e la directory appena creata.\nNel sistema operativo Mac Os, la cartella di default è salvata all’interno di Application Support, per gli altri sistemi operativi, fare riferimento a questo link\nQuesto è il comando che vado a effettuare:\n$ ln -s $HOME/Library/Application\\ Support/Bitcoin $HOME/Documents/Bitcoin-in-action-book La sintassi per creare un collegamento simbolico è il seguente.\nln -s /path/to/original /path/to/link $HOME invece è una variabile globale nei sistemi UNIX.\nPer essere certi che tutto sia corretto, possiamo spostarci nella root del nostro progetto e digitare\n$ ls -l Collegamento Simbolico con la Datadir di Bitcoin\nL’ultimo passaggio è inserire nel $PATH la cartella Utility, la quale contiene delle utility appunto, necessarie per evitare di scrivere più e più volte lo stesso snippet di codice durante la pratica\nPrima di tutto che cosa è il $PATH?\nÈ una variabile d’ambiente che contiene tutti i percorsi dove la bash può cercare per trovare dei file eseguibili.\nLo abbiamo appena utilizzato per spostarci Bitcoin core, così da evitare di scrivere il percorso assoluto al momento dell’avvio.\nSe noi eseguiamo\n$ echo $PATH Troviamo appunto tutte le cartelle dove la shell andrà a cercare per trovare l’eseguibile voluto.\nNei sistemi Mac Os, potete aggiungere il percorso assoluto nel file /etc/paths\nsudo vim /etc/paths Personalmente utilizzo zsh e lo aggiungo nel profilo di riferimento.\nIn rete troverete moltissimi tutorial per aggiungere un percorso al vostro $PATH.\nPer prima cosa apro il file profile di zsh\n$ vim ~/.zshrc Se non utilizzate zsh, il file che dovete cercare è molto probabilmente .bash_profile, l’operazione è la medesima.\nAggiungiamo il nuovo elemento che vogliamo che sia presente nella variabile globale $PATH\nexport PATH=\u0026#34;$HOME/Documents/Bitcoin-in-action-book/Utility:$PATH\u0026#34; Salviamo il file e ricarichiamo la configurazione con il comando\n$ source ~/.zshrc oppure aprite una nuova finestra del terminale\nPer essere sicuri che tutto sia andato a buon fine, possiamo verificare che il percorso faccia parte del $PATH\n$ echo $PATH /Users/barno/Documents/Bitcoin-in-action-book/Utility:/usr/local/sbin:/usr/local/opt/openssl@1.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/barno/.fzf/bin Il percorso aggiunto deve far parte della variabile globale $PATH.\nCome posso aver prova che tutto sia andato a buon fine?\nProva a eseguire questo comando:\n$ sh hello.sh Ciao barno! Divertiti con Bitcoin in Action Ricevi questo messaggio? Bene allora tutto è andato a buon fine!\nAltro elemento indispensabile JQ.\nLo abbiamo utilizzato anche nel libro precedente, JQ è un Json Processor.\nPer l’installazione fare riferimento al sito ufficiale https://stedolan.github.io/jq/.\nCome spiegato nel video precedente, il libro non utilizza la mainnet o la testnet per replicare gli esempi, ma utilizza la regtest.\nDobbiamo quindi creare il file di configurazione per comunicare a Bitcoin core che vogliamo utilizzare tale ambiente.\nCome spiegato nel libro Bitcoin dalla teoria alla pratica, possiamo utilizzare o i parametri da riga di comando quando avviamo il demone, oppure utilizzare un file di configurazione.\nNoi preferiamo quest’ultima soluzione.\nCreiamo quindi il file bitcoin.conf nella cartella Bitcoin all’interno del nostro progetto. Ecco perchè è comodo creare un collegamento simbolico\n$ vi bitcoin.conf ed inseriamo i seguenti valori\nregtest=1 daemon=1 txindex=1 # Options only for mainnet [main] # Options only for testnet [test] # Options only for regtest [regtest] è tutto pronto per provare l’esempio del primo capitolo.\nSpostiamoci quindi nel capitolo di riferimento, in questo caso Capitolo 1.\ne avviamo il file tx_mall.sh\n$ sh tx_mall.sh Ops, otteniamo un pò di errori!\nMake sure the bitcoind server is running and that you are connecting to the correct RPC port. error: Could not connect to the server 127.0.0.1:18443 Semplice, il demone non è avviato!\nBasterà quindi digitare\n$ bitcoind Bene, avviamo di nuovo l’esempio!\nSnapshot dell’esempio replicato.\nBenissimo l’esempio è stato replicato, i dettagli ovviamente sono descritti nel libro.\nSe non avete clonato il repository nella cartella Documenti, potreste ricevere un errore.\nPer replicarlo modifico il percorso del file, in tx_mall.sh, aggiungendo una S al mio percorso, così da ottenere l’errore\nError: Directory /Users/barno/Documents/Bitcoin-in-action-book/Bitcoins does not exist. Set $ABSOLUTE_PATH in tx_mall.sh before continue Che cosa fare in questi casi?\nO si clona il progetto in Documents, o prima di avviare l’esempio si modifica il percorso di $ABSOLUTE_PATH.\nTutto qui? NO!\nè possibile debuggare lo script! Grazie a questo bellissimo progetto (https://github.com/bitcoin-core/btcdeb) è possibile verificare come una transazione viene validata.\nDopo aver seguito le istruzione descritte nel loro repository, possiamo nuovamente avviare l’esempio passando come parametro debug.\n$ sh tx_mall.sh debug Stack ottenuto con il parametro debug\nNon è obbligatorio aver installato btcdeb, ma lo consigliamo, nonostante nel libro siano comunque riportati tutti gli stack.\nComplimenti, avete organizzato il vostro computer.\nPer qualsiasi informazione, segnalazione e miglioria, fate riferimento al nostro repository GitHub https://github.com/bitcoin-dalla-teoria-alla-pratica/Bitcoin-in-action-book, dove oltre alla possibilità di segnalare errori del libro, troverete le immagini ad alta risoluzione e le mappe mentali di ogni capitolo.\nIl libro è disponibile su Amazon in formato cartaceo e digitale, e sul nostro sito corsobitcoin.com dove è possibile acquistare i nostri libri con bitcoin.\nCiao!\n","date":"25 novembre 2020","externalUrl":null,"permalink":"/posts/bitcoin-in-action-come-replicare-gli-esempi/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Bitcoin In Action — Come replicare gli esempi Ciao, come sapete abbiamo rilasciato il nostro terzo libro —Bitcoin in Action,* SegWit, Bitcoin script \u0026 smart contracts*. # Bitcoin In Action — SegWit, Bitcoin Script \u0026 Smart Contracts\n","title":"Bitcoin In Action — Come replicare gli esempi","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Bitcoin in Action # Segwit, Bitcoin script \u0026amp; smart contracts # Ciao!\nDopo Bitcoin dalla teoria alla pratica e Bitcoin 199 Domande, abbiamo completato la nostra terza fatica – Bitcoin in Action * SegWit, Bitcoin script \u0026amp; Smart Contracts*.\nBitcoin In Action — SegWit, Bitcoin Script \u0026amp; Smart Contracts\nPer seguire questo nuovo testo è indispensabile il primo libro, Bitcoin dalla teoria alla pratica, proprio perchè non saranno spiegati concetti già affrontati precedentemente, come ad esempio il mining, quindi la proof of work, il problema dei generai bizantini o la blockchain, quindi hard fork e soft fork, ma abbiamo deciso di andare giù nella buca del Bianconiglio 🐰.\nL’obiettivo del libro è quello di spiegare, sempre utilizzando la pratica, gli aggiornamenti più corposi del protocollo Bitcoin, analizzando prima le problematiche.\nInfatti il primo capitolo è dedicato alla transaction malleability, la quale viene risolta con l’aggiornamento SegWit.\nL’argomento SegWit è affrontato nel dettaglio con più di 100 pagine, su un totale di 440 circa.\nSpiegheremo gli address, o per meglio dire gli script, non affrontati nel precedente libro, quali:\nP2MS - Pay to Multisig P2SH - Pay to script hash P2SH che effettua il Wrap di P2PK P2SH che effettua il Wrap di P2PKH P2SH Multisig P2SH Custom Script Quando andremo nel dettaglio di SegWit, utilizzeremo script quali:\nP2WPKH P2WSH P2WSH che effettua il Wrap di P2PKH P2WSH Multisg E anche gli script/address non nativi come:\nP2SH - P2WPKH P2SH - P2WSH Una sezione completamente dedicata ai timelocks, dove è necessario prendere confidenza con Bitcoin Script e lo stack.\nArriveremo infine a creare degli smart contracts in grado di sbloccare dei fondi solo se determinate condizioni sono verificate, utilizzando delle operation code come OP_IF, OP_ELSE o per meglio dire le operation code del flow control.\nUn libro molto corposo che porta due novità fondamentali rispetto al precedente.\nLa prima sono le mappe mentali, strumento che uso quotidianamente e che serviranno a fine capitolo per avere un quadro completo di quanto affrontato.\nMappe mentali disponibili nel repository GitHub\nLa seconda è la pratica.\nCome per il libro precedente spieghiamo ogni argomento tramite la pratica utilizzando esclusivamente riga di comando e qualche funzione python. Non amiamo utilizzare librerie esterne che fanno il lavoro per noi.\nSappiamo però che scrivere codice per replicare l’esempio può essere complicato, per questo motivo abbiamo deciso di creare un repository che ospita tutti gli esempi del libro.\nCome fare a replicarli quindi?\nSemplice, si clonerà il repository, si seguiranno le istruzioni descritte nel libro, o nel video tutorial che trovate nel nostro canale YouTube, e con l’avvio di un semplice file, replicherete tutto l’esempio.\nCome replicare gli esempi del libro con un semplice file sh\nSpenderai dei bitcoin per replicare l’esempio?\nSì, e sarai anche miner! 🚀\nInfatti utilizzeremo sempre l’ambiente di regtest, in modo tale da poter replicare gli esempi immediatamente!\nIl libro è disponibile su Amazon e su corsobitcoin.com con la possibilità di acquistarlo tramite bitcoin.\nCiao!\n","date":"17 novembre 2020","externalUrl":null,"permalink":"/posts/bitcoin-in-action/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Bitcoin in Action # Segwit, Bitcoin script \u0026 smart contracts # Ciao!\nDopo Bitcoin dalla teoria alla pratica e Bitcoin 199 Domande, abbiamo completato la nostra terza fatica – Bitcoin in Action * SegWit, Bitcoin script \u0026 Smart Contracts*.\n","title":"Bitcoin in Action","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Da dove inizio a studiare per imparare Bitcoin? #### Visita il nostrocanale youtube! # Dai subito un’occhiata al nostrocanale youtube!\nCiao a tutti,\noggi rispondiamo a una domanda che riceviamo frequentemente. Da dove inizio a studiare per imparare Bitcoin? La risposta non è assolutamente banale.\nPer prima cosa dobbiamo capire chi ci sta facendo questa domanda, se una persona con un background tecnico o un curioso senza competenze informatiche.\nLa seconda cosa, dobbiamo capire quanta voglia ha veramente e quanto in profondità vuole andare per conoscere la tecnologia.\nSe le informazioni che cerca sono “Come faccio a diventare ricco con Bitcoin?” oppure “Perchè Bitcoin non ha un ente centrale?” o ancora “quale criptovaluta comprare per comprarmi la lambo”, probabilmente è una persona che può trovare le informazioni che cerca con qualche video su youtube.\nCon questo non voglio dire che su youtube ci sono solo informazioni leggere, anzi. La scena italiana è molto attiva e piena di ottimi contenuti.\nSe invece è una persona non tecnica, ma non proprio acerba nel mondo dell’informatica, il libro che tutti dovrebbero leggere è Mastering Bitcoin: Programming the Open Blockchain di Andreas M.\nAntonopoulos.\nLibro che personalmente ho consumato e che ho letto e riletto più volte.\nMa se per questa persona è troppo, noi abbiamo pensato a un tascabile domande e risposte.\nIl tascabile si chiama “Bitcoin 199 domande” ed è diviso in sezioni.\nSi parte da un livello base, cercando di rispondere a domande comuni, come ad esempio: Che cosa è un nodo? Bitcoin è anonimo? Che cosa è un wallet? Successivamente un il livello intermedio, con domande del tipo: Che cosa è lo SHA256? Che cosa significa minare? Che cosa è la proof of work? Il livello successivo è il livello avanzato con domande un pò più tecniche. Che cosa è il nonce? Come viene calcolata la fee? Dove viene utilizzata la firma digitale in Bitcoin? E l’ultimo livello, chiamato Nerd Zone che contiene domande tecniche. Che cosa è lo ScriptPubKey? Che cosa è il Merkle root? Che cosa è la xpub? Le domande e le risposte sono di poche righe.\nBitcoin 199 domande\nMa se la domanda ci viene fatta da una persona tecnica, le risorse sono molteplici.\nResta sempre valido il libro di Antonopoulos il quale però non offre del codice da provare.\nEd è stato proprio questa la spinta che ci serviva per pensare a un qualcosa più pratico, che mettesse in pratica il protocollo stesso.\nEssendo io stesso un tecnico, ho bisogno di leggere errori, provare a rompere il software, e fare aaaaah! Ecco perchè!\nQuindi insieme ad Alessandro abbiamo prima fatto un video-corso disponibile su Udemy, Abbiamo inoltre deciso di suddividerlo in mini–corsi, ad esempio una sezione dedicata al mining, una sezione dedicata alle transazione e così via.\nOvviamente c’è anche il corso completo (al momento con 50% di sconto)\nAbbiamo approfittato del contenuto prodotto per fare il libro Bitcoin dalla teoria alla pratica.\nChe cosa contiene il libro?\nIl libro analizza il funzionamento Bitcoin dal lato tecnico.\nSpiega come viene effettuata la generazione dei blocchi, scoprendo con la pratica il lavoro del miner.\nSpiega e dimostra come viene creato un wallet deterministico, partendo dalla seed phrase, le famose 12/24 parole.\nAnalizza byte per byte la transazione P2PKH e lo stack.\nBitcoin dalla teoria alla pratica\nIl codice utilizzato è versionato nel nostro repository GitHub\nIl libro analizza il funzionamento Bitcoin dal lato tecnico.\nSpiega come viene effettuata la generazione dei blocchi, scoprendo con la pratica il lavoro del miner.\nSpiega e dimostra come viene creato un wallet deterministico, partendo dalla seed phrase, le famose 12/24 parole.\nAnalizza byte per byte la transazione P2PKH e lo stack.\nIl codice utilizzato è versionato nel nostro repository GitHub.\nQuindi se preferisci avere un video corso, puoi andare a vedere che cosa abbiamo combinato su Udemy.\nIl corso adesso è al 50% di sconto inserendo il coupon che trovi nel sito bitcoininaction.com, se invece vuoi prenderlo a noleggio, Udemy offre anche questa possibilità.\nSe invece preferisci il libro, lo puoi trovare su Amazon e nel sito corsobitcoin.com, dove puoi pagare anche in bitcoin.\nSe invece vuoi entrambi, all’interno del libro trovi dei tasks da completare per ottenere un ottimo sconto sul video corso.\nInsomma, la prossima volta che qualcuno ci chiede o vi chiede dove inizio per studiare Bitcoin, sapete come rispondere.\nAh, il vostro amico non è italiano?\nI libri sono tradotti in lingue inglese.\nCiao!\n","date":"6 agosto 2020","externalUrl":null,"permalink":"/posts/da-dove-inizio-a-studiare-per-imparare-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Da dove inizio a studiare per imparare Bitcoin? #### Visita il nostrocanale youtube! # Dai subito un’occhiata al nostrocanale youtube!\n","title":"Da dove inizio a studiare per imparare Bitcoin?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Che cosa è lo scriptPubKey? Come si valida la transazione in Bitcoin? #### Video completo nel nostro canale youtube Bitcoin in Action # Che cosa è lo scriptPubKey? Come si valida la transazione in Bitcoin?\nCiao,\nOggi rispondiamo a una domanda ricevuta dalla nostra pagina facebook. Pietro ci scrive:\n“Grazie per i contenuti che state producendo sto imparando moltissimo.\nMi collego al video precedente, dove avete parlato dello scriptSig.\nQuindi vi domando, potete spiegarmi meglio che cosa è lo scriptPubKey e come si valida una transazione?”\nBene Pietro, prima di tutto, grazie per i complimenti siamo molto contenti di aiutare la community italiana e non solo.\nInfatti i nostri articoli sono anche in lingua inglese e pubblicati su hackernoon, e proprio in questi giorni è uscito la traduzione del libro Bitcoin dalla teoria alla pratica (Bitcoin from theory to practice) in lingua inglese.\nLa transazione è una delle parti più importante in Bitcoin ed è bene avere chiara la sua struttura.\nCome detto nel video precedente, nelle transazioni non SegWit, nello scriptSig troviamo le condizioni che soddisfano lo scriptPubKey.\nFacciamo un esempio semplice per capire come funziona lo scriptPubKey.\nImmagina che nella tua UTXO, lo scriptPubKey contenga 4 OP_EQUAL.\nQuesto significa che per sbloccare l’importo di quell’output, devi soddisfare quelle richieste.\nCome si risolve questa uguaglianza?\nLa risposta più semplice è inserire nello scriptSig il numero 4.\nCome puoi immaginare, queste condizioni sono un pò “facili” chiunque può sbloccare questa UTXO.\nTrovami un numero uguale a 4…non ci bloccherei 1 bitcoin :), ecco perchè si utilizza la firma digitale per bloccare in sicurezza bitcoin nella UTXO.\nAnalizzando la transazione P2PKH utilizzata nel video precedente, ricorderai che lo scriptPubKey è così formato:\nOP_DUP OP_HASH160 \u0026lt;public key\u0026gt; OP_EQUALVERIFY OP_CHECKSIG Questo significa che nello scriptSig devono essere presenti degli elementi che devono soddisfare lo scriptPubKey, in modo tale che nello stack sia presente un unico e ultimo elemento con valore 1.\nOk andiamo di pratica.\nin Action\nPrendiamo in esame la transazione utilizzata nel video corso, così da sfruttarne le slide.\n$ bitcoin-cli getrawtransaction 3446bb5b86fa410d6c8676b0f93e665d06d4a18c97c7d0f2d80460d9696b2325 2 Analizziamo il primo elemento del vout, il quale “blocca” 20 bitcoins. Per estrarre solo quella porzione di risultato possiamo utilizzare jq.\n$ bitcoin-cli getrawtransaction 3446bb5b86fa410d6c8676b0f93e665d06d4a18c97c7d0f2d80460d9696b2325 2 | jq -r ‘.vout[0]’ { “value”: 20, “n”: 0, “scriptPubKey”: { “asm”: “OP_DUP OP_HASH160 5c9fcd1d188f8f5ebcbb2cd8b52f11290f44d634 OP_EQUALVERIFY OP_CHECKSIG”, “hex”: “76a9145c9fcd1d188f8f5ebcbb2cd8b52f11290f44d63488ac”, “reqSigs”: 1, “type”: “pubkeyhash”, “addresses”: [ “19SkbqGT3u82TkdyRQJZjTcwPeEoXBiwgs” ] } } Lo scriptPubKey è quello che si legge in asm, o in hex. Sono equivalenti, in hex abbiamo l’esadecimale corrispondente delle op_code.\nPrima di passare alle slide per spiegare nel dettaglio lo script, recuperiamo anche la transazione che ha consumato tale output.\n$ bitcoin-cli getrawtransaction 7408ac2f0230e779946e03911300dc39c4a48d39327aeb6c2cb13e1670c36371 2 { “txid”: “3446bb5b86fa410d6c8676b0f93e665d06d4a18c97c7d0f2d80460d9696b2325”, “vout”: 0, “scriptSig”: { “asm”: “304502200f45eb016b79bbc87208096034f2b037be247194e5a7e466103ca694a36cc1ae0221008fbb9067c2e1cdb0832e732062a63c9627bb597ce991d68d75e3aed144984691[ALL] 04ddd9f1b0ec593795d802cd27c442f3dd3db562b331616e554a88dddff62bba572bd535c853d5ef195db0cba621255669a5569caaaeae3802066c70fb2463b89e”, “hex”: “48304502200f45eb016b79bbc87208096034f2b037be247194e5a7e466103ca694a36cc1ae0221008fbb9067c2e1cdb0832e732062a63c9627bb597ce991d68d75e3aed144984691014104ddd9f1b0ec593795d802cd27c442f3dd3db562b331616e554a88dddff62bba572bd535c853d5ef195db0cba621255669a5569caaaeae3802066c70fb2463b89e” }, “sequence”: 4294967295 }, Come faccio a sapere che l’elemento da prendere in considerazione è il secondo elemento dell’array?\nNella transazione, all’interno all’interno di vin trovo l’identificativo della UTXO di riferimento, ovvero la txid di riferimento.\n$ bitcoin-cli getrawtransaction 7408ac2f0230e779946e03911300dc39c4a48d39327aeb6c2cb13e1670c36371 2 | jq -r \u0026#39;.vin[1]\u0026#39; { \u0026#34;txid\u0026#34;: \u0026#34;3446bb5b86fa410d6c8676b0f93e665d06d4a18c97c7d0f2d80460d9696b2325\u0026#34;, \u0026#34;vout\u0026#34;: 0, \u0026#34;scriptSig\u0026#34;: { \u0026#34;asm\u0026#34;: \u0026#34;304502200f45eb016b79bbc87208096034f2b037be247194e5a7e466103ca694a36cc1ae0221008fbb9067c2e1cdb0832e732062a63c9627bb597ce991d68d75e3aed144984691[ALL] 04ddd9f1b0ec593795d802cd27c442f3dd3db562b331616e554a88dddff62bba572bd535c853d5ef195db0cba621255669a5569caaaeae3802066c70fb2463b89e\u0026#34;, \u0026#34;hex\u0026#34;: \u0026#34;48304502200f45eb016b79bbc87208096034f2b037be247194e5a7e466103ca694a36cc1ae0221008fbb9067c2e1cdb0832e732062a63c9627bb597ce991d68d75e3aed144984691014104ddd9f1b0ec593795d802cd27c442f3dd3db562b331616e554a88dddff62bba572bd535c853d5ef195db0cba621255669a5569caaaeae3802066c70fb2463b89e\u0026#34; }, \u0026#34;sequence\u0026#34;: 4294967295 } Passiamo alle slide del video corso che sicuramente ci aiutano.\nBitcoin utilizza lo Stack per validare le transazioni.\nL’operazione di inserimento all’interno dello stack è conosciuta come push, l’operazione di estrazione è conosciuta come pop.\nQuindi per prima cosa viene fatto push degli elementi dello scriptSig, conosciuto anche come unlocking script.\nPush Signature\nPush Public Key\nSe non vi ricordate che cosa contiene lo scriptSig, vi lascio il link nei video consigliati.\nSlide del video corso Bitcoin dalla teoria alla pratica\nCome puoi vedere stiamo analizzando una transazione Pay to public key hash.\nSuccessivamente viene inserito nello stack OP_DUP che ha il compito di estrarre il primo elemento dallo stack, di duplicarlo e di fare push del risultato\nSlide del video corso Bitcoin dalla teoria alla pratica\nProssima operazione è OP_HASH160, la quale prende il primo elemento dello stack, quindi pop, e applica la funzione SHA256 e RIPEMD160 e fa push del risultato.\nSlide del video corso Bitcoin dalla teoria alla pratica\nVedendo con la pratica esegue:\nprintf $(echo 04ddd9f1b0ec593795d802cd27c442f3dd3db562b331616e554a88dddff62bba572bd535c853d5ef195db0cba621255669a5569caaaeae3802066c70fb2463b89e | xxd -r -p | openssl sha256| sed ‘s/^.* //’) |xxd -r -p | openssl ripemd160 | sed ‘s/^.* //’ Nota bene, l’operazione è fatta sulla chiave pubblica dello scriptSig.\nMa guarda un pò, il risultato è esattamente lo stesso di quello della UTXO.\nProssima operazione, push dell’elemento dello scriptPubKey, L’hash della chiave pubblica, ecco perchè si chiama Pay to Public key hash.\nSlide del video corso Bitcoin dalla teoria alla pratica\nProssima operazione OP_EQUALVERIFY.\nSlide del video corso Bitcoin dalla teoria alla pratica\nEsegue il pop dei due elementi in testa allo stack, li verifica, e se sono uguali non esegue nessun push nello stack, altrimenti fallisce.\nGuarda un pò chi è rimasto! Una chiave pubblica e una firma, mi è sembrato di averli già rivisti!\nE la prossima operazione da fare è OP_CHECKSIG! Coincidenze?\nChe cosa farà mai questa operazione?\nPop di due elementi dallo stack, verifica della firma, e se è la firma è valida esegue un push con il valore 1, ovvero true. Altrimenti lo stack fallisce\nEd ecco che l’ultimo e unico valore dello stack è 1, validando la transazione.\nSlide del video corso Bitcoin dalla teoria alla pratica\nL’argomento della validazione dello stack, lo stack stesso e le operation code sono argomenti molto ampi e meritano dei video e delle spiegazioni più dettagliate che affrontiamo nel video corso che trovate su Vimeo a metà prezzo, quindi accattateville!\nSpero comunque di aver risposto alla tua domanda\nCiao alla prossima!\nSlide del video corso Bitcoin dalla teoria alla pratica\nBitcoin dalla teoria alla pratica\n","date":"29 luglio 2020","externalUrl":null,"permalink":"/posts/che-cosa-lo-scriptpubkey-come-si-valida-la-transazione-in-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Che cosa è lo scriptPubKey? Come si valida la transazione in Bitcoin? #### Video completo nel nostro canale youtube Bitcoin in Action # Che cosa è lo scriptPubKey? Come si valida la transazione in Bitcoin?\n","title":"Che cosa è lo scriptPubKey? Come si valida la transazione in Bitcoin?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Video disponibile nel nostro canale Bitcoin in Action! # Che cosa è lo scriptSig?\nCiao,\nAbbiamo ricevuto una domanda da parte di Luca, che ci chiede.\nIn alcuni video avete parlato di scriptSig, che cosa è?\nBene Luca, lo scriptSig è parte della transazione di Bitcoin. Puoi immaginare la transazione non SegWit cosi strutturata.\nImmagine estratta dalvideocorsoe dal libroBitcoin dalla teoria alla pratica\nLa versione della transazione Il numero di input L’input Il numero di output l’output e il locktime Dove si posiziona lo scriptSig?\nLo scriptSig è all’interno di ogni singolo input, e contiene gli elementi che andranno a soddisfare la UTXO di riferimento.\nAttenzione, nelle transazioni Segwit native lo scriptSig è vuoto, risolvendo così la transaction malleability e la scalabilità della rete Bitcoin.\nPer questo esempio utilizzeremo una transazione legacy, una P2PKH e analizzeremo nel dettaglio ogni singolo byte, vediamo come.\nIn Action\nPrendiamo una semplice transazione dalla blockchain mainnet.\n$ bitcoin-cli getrawtransaction c2297c9fefdd058e2ce5477868bcbf88bd4f860fbb552399053e3666687809bd 2 La transazione contiene un input e due output. La nostra attenzione in questo momento ricade sull’input, all’interno dell’array vin\n“vin”: [ { “txid”: “d44cbca5911e53322e14fe0617f078dd1f162a7dcb97f83690eac285ed7ebe80”, “vout”: 1, “scriptSig”: { “asm”: “3044022059515b358d938d04c812177a2eefba52a4427b9e807c28538148e04edf042f3b022057e00e46acec7708b3087bfaadf25001ff449759b063aa9f39f5eb6606ceeef7[ALL] 04794dffa10783c305d72c44acc36003760a53c03a1e5529747a5ef7eef7c87c6c19ba26c7eee03ab6da9115d11bce3a46dd21aede86af19c3ee19eeb7f8d92732”, “hex”: “473044022059515b358d938d04c812177a2eefba52a4427b9e807c28538148e04edf042f3b022057e00e46acec7708b3087bfaadf25001ff449759b063aa9f39f5eb6606ceeef7014104794dffa10783c305d72c44acc36003760a53c03a1e5529747a5ef7eef7c87c6c19ba26c7eee03ab6da9115d11bce3a46dd21aede86af19c3ee19eeb7f8d92732” }, “sequence”: 4294967295 } ], Analizziamo quindi il suo hex, ovvero l’esadecimale. Questo è lo scriptSig e lo salviamo nella variabile d’ambiente SCRIPTSIG.\nSCRIPTSIG=473044022059515b358d938d04c812177a2eefba52a4427b9e807c28538148e04edf042f3b022057e00e46acec7708b3087bfaadf25001ff449759b063aa9f39f5eb6606ceeef7014104794dffa10783c305d72c44acc36003760a53c03a1e5529747a5ef7eef7c87c6c19ba26c7eee03ab6da9115d11bce3a46dd21aede86af19c3ee19eeb7f8d92732 Dato che stiamo analizzando una transazione P2PKH, all’interno dello scriptSig ci aspettiamo la firma digitale e la chiave pubblica.\nDobbiamo conoscere leggermente il linguaggio script, ma per questo esempio vi basterà sapere che esistono delle costanti che ci indicano quanti caratteri esadecimali prendere successivamente.\nAd esempio 47, ricade esattamente nel range delle costanti.\n$ echo $SCRIPTSIG | cut -c 1–2 Grazie al metodo cut riesco a prendere la porzione di byte di interesse\n47 in base2 è 71, i quali rappresentano i byte.\nSappiamo che un byte può essere rappresentato da 2 caratteri esadecimali, 71*2 = 142.\nQuesto significa che dobbiamo considerare i 142 caratteri successivi all’esadecimale 47.\nEcco il calcolo da base 16 a base 2, e la moltiplicazione per due per conoscere i caratteri esadecimali da prendere in considerazione\n$ expr `echo “ibase=16; $(printf 47)” | bc` “*” 2 Ed ecco la porzione di esadecimali che rappresentano la firma digitale.\n$ echo $SCRIPTSIG | cut -c 3–142 3044022059515b358d938d04c812177a2eefba52a4427b9e807c28538148e04edf042f3b022057e00e46acec7708b3087bfaadf25001ff449759b063aa9f39f5eb6606ceeef7 $ printf 3044022059515b358d938d04c812177a2eefba52a4427b9e807c28538148e04edf042f3b022057e00e46acec7708b3087bfaadf25001ff449759b063aa9f39f5eb6606ceeef7 | wc -c Contando gli esadecimali estratti grazie al metodo wc notiamo che sono 140 e non 142, perchè?\nPerchè il prossimo byte è il flag che indica come è stata firmata la transazione, solitamente SIGHASH_ALL rappresentato da 01\n$ echo $SCRIPTSIG | cut -c 143–144 01 il prossimo byte cade nuovamente nel range delle costante di Bitcoin script\n$ echo $SCRIPTSIG | cut -c 145–14641 e ci indica quanti esadecimali prendere in considerazione successivamente.\nRipeto l’operazione descritta poco fa\n$ expr `echo “ibase=16; $(printf 41)” | bc` “*” 2 130 estraggo quindi la porzione di esadecimali indicata\n$ echo $SCRIPTSIG | cut -c 147–277 04794dffa10783c305d72c44acc36003760a53c03a1e5529747a5ef7eef7c87c6c19ba26c7eee03ab6da9115d11bce3a46dd21aede86af19c3ee19eeb7f8d92732 I seguenti byte sono la chiave pubblica necessaria per verificare la firma e per soddisfare la UTXO di riferimento.\nCome?\nVediamo la UTXO grazie al metodo getrawtransaction\n$ bitcoin-cli getrawtransaction d44cbca5911e53322e14fe0617f078dd1f162a7dcb97f83690eac285ed7ebe80 2 Alla seconda posizione dell’array troviamo la UTXO da sbloccare, questo lo sappiamo dal valore vout contenuto in vin.\nChe cosa è quel valore dopo HASH160, ba716926b9313ca3bcf2791cf96a0f5f89472261?\nÈ il digest della nostra chiave pubblica dopo aver applicato le funzioni crittografiche sha256 e ripemd160.\n$ printf $(echo 04794dffa10783c305d72c44acc36003760a53c03a1e5529747a5ef7eef7c87c6c19ba26c7eee03ab6da9115d11bce3a46dd21aede86af19c3ee19eeb7f8d92732 | xxd -r -p | openssl sha256| sed ‘s/^.* //’) |xxd -r -p | openssl ripemd160 | sed ‘s/^.* //’ Lo script non confronterà solo l’hash della chiave pubblica ma anche la firma stessa.\nDiciamo che la domanda che il protocollo Bitcoin si pone è:\nL’hash (HASH160) della chiave pubblica dello scriptSig è uguale all’hash della chiave pubblica contenuta nello scriptPubKey della UTXO? La firma può essere verificata con la chiave pubblica presente nello scriptSig? Nel libro Bitcoin dalla teoria alla pratica e nel video corso, analizziamo byte per byte la transazione P2PKH andando nel dettaglio della firma e studiando la convenzione DER\nBene abbiamo chiarito che cosa è lo scriptSig e dove si trova.\nSpero che il video vi sia piaciuto, ciao e alla prossima\n","date":"15 luglio 2020","externalUrl":null,"permalink":"/posts/che-cosa-lo-scriptsig/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Video disponibile nel nostro canale Bitcoin in Action! # Che cosa è lo scriptSig?\nCiao,\nAbbiamo ricevuto una domanda da parte di Luca, che ci chiede.\n","title":"Che cosa è lo scriptSig?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Perché il mio address inizia con 1? # Video completo disponibile su youtube. # Ciao,\noggi rispondiamo a Marco che ci domanda:\nPerché il mio address inizia con il numero 1? Ho visto altri address che iniziato con il numero 3, che differenze ci sono?\nAllora Marco, il tuo address inizia con il numero 1 perchè sta utilizzando lo script Pay to Public key hash ( P2PKH ).\nL’address si ricava utilizzando delle funzioni crittografiche proprio sullo script che stiamo utilizzando, in P2PKH si ottiene il prefisso 1 dopo aver applicato SHA256 e RIPEMD160 sulla chiave pubblica compressa, preceduto dal version prefix di riferimento.\nNel video corso e nel nostro libro si ottiene un address P2PKH partendo da una chiave privata, generata da zero.\nQuando invece vedi address che iniziano con il numero 3, significa che la persona sta utilizzando un address Pay to script hash (P2SH), ed infine se vedi un address che inizia con bc1, significa che sta utilizzando SegWit.\nIn realtà non esistono address, ma esistono digest di script, il quale prende il nome di address.\nGli script quindi sono nati grazie a nuove implementazioni da parte della community Bitcoin al fine di migliorarne le prestazioni.\nVediamo con un esempio l’address P2PKH. Ad un certo punto vi lancio una sfida, dove in palio c’è una copia del libro Bitcoin dalla teoria alla pratica.\nIn action\nPer questo esempio utilizzeremo l’ambiente mainnet.Se non hai un nodo guarda questo articolo\nUtilizzo il metodo getnewaddress:\n$ bitcoin-cli getnewaddress “” “legacy” 1ExUh5vqcUjuuocAgnSyAJ74iBiRHBwnAU Ottengo così un address P2PKH.\nIl secondo parametro lasciato vuoto, rappresenta la label, utile per cercare un address particolare all’interno di Bitcoin core.\nPer ispezionare più a fondo l’address ottenuto, è possibile utilizzare il metodo getaddressinfo:\n$ bitcoin-cli getaddressinfo 1ExUh5vqcUjuuocAgnSyAJ74iBiRHBwnAU { “address”: “1ExUh5vqcUjuuocAgnSyAJ74iBiRHBwnAU”, “scriptPubKey”: “76a9149917a0e372343fde946253d1c60c7f479925b1e288ac”, “ismine”: true, “solvable”: true, “desc”: “pkh([5975a740/0\u0026#39;/0\u0026#39;/2\u0026#39;]02413df2a3977bb663c4fc7418e7e004129c5cfc2d3d2bb6c9210ea8ee13769610)#wsy7apvp”, “iswatchonly”: false, “isscript”: false, “iswitness”: false, “pubkey”: “02413df2a3977bb663c4fc7418e7e004129c5cfc2d3d2bb6c9210ea8ee13769610”, “iscompressed”: true, “label”: “”, “ischange”: false, “timestamp”: 1588801569, “hdkeypath”: “m/0\u0026#39;/0\u0026#39;/2\u0026#39;”, “hdseedid”: “27eae26f0861d81dfde79537fdbb0b8273f00211”, “hdmasterfingerprint”: “5975a740”, “labels”: [ { “name”: “”, “purpose”: “receive” } ] } il quale restituisce un pò di informazioni, tra cui la chiave pubblica compressa , la derivation path e lo scriptPubKey.\nNello scriptPubKey è possibile trovare lo script da soddisfare per sbloccare la UTXO di riferimento. Per UTXO si intente la Unspent transaction output.\nSfruttando un altro metodo messo a disposizione da Bitcoin core, possiamo approfondire ulteriormente lo script.\n$ bitcoin-cli decodescript 76a9149917a0e372343fde946253d1c60c7f479925b1e288ac { “asm”: “OP_DUP OP_HASH160 9917a0e372343fde946253d1c60c7f479925b1e2 OP_EQUALVERIFY OP_CHECKSIG”, “reqSigs”: 1, “type”: “pubkeyhash”, “addresses”: [ “1ExUh5vqcUjuuocAgnSyAJ74iBiRHBwnAU” ], “p2sh”: “3Ae5soRJUqiqZgfvFxVaLTZs2PrdqvjDTL”, “segwit”: { “asm”: “0 9917a0e372343fde946253d1c60c7f479925b1e2”, “hex”: “00149917a0e372343fde946253d1c60c7f479925b1e2”, “reqSigs”: 1, “type”: “witness_v0_keyhash”, “addresses”: [ “bc1qnyt6pcmjxslaa9rz20guvrrlg7vjtv0ztsmjag” ], “p2sh-segwit”: “3Mi5vTHySS8iCRpK2TWnTXsxU8FTDHQ3SQ” } } Le informazioni che otteniamo sono molto interessanti.\nAbbiamo i diversi tipi di address, quindi P2SH, Wrapped Segwit e SegWit nativo.\nAlla prima riga abbiamo lo script P2PKH, asm significa assembly.\nLe OP che si leggono sono le operation code del linguaggio script.\nOgni volta che si utilizza un P2PKH, Sarà effettuato HASH160 sulla chiave pubblica il quale digest deve essere identico a quello della UTXO di riferimento.\nPer questo prende il nome di Public key hash. Ovviamente poi viene verificata anche la firma grazie all’op code OP_CHECKSIG.\nCome premesso all’inizio del video, l’address è il digest dello SHA256 e del RIPEMD160 della chiave pubblica compressa preceduta dal version prefix.\nNella wiki di Bitcoin vediamo che per ottenere un address per l’ambiente mainnet dobbiamo utilizzare un byte di 0.\nQuindi con l’aiuto di variabili d’ambiente, salvo il digest dello SHA256 della chiave pubblica compressa all’interno della variabile d’ambiente ADDR_SHA\n$ ADDR_SHA=`printf 02413df2a3977bb663c4fc7418e7e004129c5cfc2d3d2bb6c9210ea8ee13769610 | xxd -r -p | openssl sha256| sed ‘s/^.* //’` Utilizzo il digest appena ottenuto per ottenere il digest della funzione crittografica ripemd160\n$ ADDR_RIPEMD160=`printf $ADDR_SHA |xxd -r -p | openssl ripemd160 | sed ‘s/^.* //’` ed infine ottengo l’address, utilizzando base58 comprensivo di checksum. Base58 non è una funzione crittografica ma un encoding.\n$ printf 00$ADDR_RIPEMD160 | xxd -p -r | base58 -c 1ExUh5vqcUjuuocAgnSyAJ74iBiRHBwnAU Ottenendo l’address mainnet.\nE qui la sfida, come ottengo l’address di testnet?\nChi posta (sul nostro canale youtube) la risposta corretta per primo, riceve in omaggio il libro Bitcoin dalla teoria alla pratica!\nGrazie a questo esempio abbiamo capito perchè P2PKH inizia con il numero 1.\nVi ricordo che il più veloce a rispondere al commento con la risposta esatta riceverà gratuitamente una copia di Bitcoin dalla teoria alla pratica, che copre molto più dettagliatamente la generazione dell’address.\nCiao alla prossima\n","date":"1 luglio 2020","externalUrl":null,"permalink":"/posts/perch-il-mio-address-inizia-con-1/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Perché il mio address inizia con 1? # Video completo disponibile su youtube. # ","title":"Perché il mio address inizia con 1?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Che cosa è la Proof of work? Come si mina un blocco? # Video completo su Bitcoin in Action! # Video completo suBitcoin in Action!\nCiao,\nsiamo orgogliosi di aver ricevuto la prima domanda da una donna! Infatti Eli ci domanda:\nChe cosa è la proof of work? Come si mina un blocco?\nLa risposta a questa domanda non è banale.\nAndando per gradi, la Proof of work, denominata PoW è l’algoritmo di consenso utilizzato in Bitcoin, è necessario per validare i blocchi e mettere in sicurezza la blockchain.\nPuoi immaginare la PoW come una competizione tra miners. I miners sono nodi che cercano di risolvere un problema matematico.\nCombinando degli elementi del blocco, devono trovare un numero minore di una soglia stabilita dal protocollo Bitcoin.\nPer trovarlo vengono effettuate moltissime prove utilizzando l’algoritmo SHA256. Come spiegato nel video inerente all’algoritmo SHA256, se l’input della della funzione crittografica è lo stesso, otterremo sempre lo stesso digest.\nEcco perchè si utilizza un parametro random da utilizzare solo una volta durante il calcolo della PoW per cercare di ottenere un digest sotto la soglia.\nQuesto parametro prende il nome di nonce.\nQuando la soluzione viene trovata è presentata alla rete, la quale la verifica e dà il proprio consenso.\nIl consenso da parte della rete è sotto forma di accettazione ed inoltro del blocco minato.\nIn caso di mancato consenso il blocco verra’ scartato e non inoltrato.\nQuesto procedimento è fatto da ogni nodo, arrivando a un consenso “globale” tramite il consenso emergente, appunto.\nIl miner sarà poi premiato per il suo sforzo computazionale nel trovare la risposta al problema.\nTale premio prende il nome di reward, il quale ad oggi è di 6,25 bitcoins a blocco più tutte le fees di ogni transazione che ha inserito nel blocco stesso.\nTale reward si dimezza ogni 210.000 blocchi, all’incirca 4 anni come spiegato nel video relativo all’halving.\nLa soglia di difficoltà viene aggiustata ogni 2016 blocchi, all’incirca 2 settimane.\nVediamo con un esempio come è stato minato un blocco passato.\nIn Action\nUtilizzeremo il blocco 1773164.\nRecuperiamo il suo hash con la chiamata getblockhash, e le sue informazioni con la chiamate getblock.\nUtilizzeremo le sottoshell per fare una chiamata unica.\n$ bitcoin-cli getblock $(bitcoin-cli getblockhash 1773164) { “hash”: “00000000000000eb74d096b83594d770f23d633e3a8b08813763489fbde7a0ef”, “confirmations”: 2, “strippedsize”: 1704, “size”: 2722, “weight”: 7834, “height”: 1773164, “version”: 545259520, “versionHex”: “20800000”, “merkleroot”: “75870dd46a503862af6fcf700be5e02e008db4521d96713bda51607ed05e2a18”, “tx”: [ “5e68fb0018f65216db1f559437705350934451da086c0bc3e4073c0f2b8df4cc”, “64b3ceadb693d33be7cdc4233c4607d77d37effcf426c9ce75146bfb269a93dd”, “8f4ce2cfa530a5f3912d2c75be3b4d018da18037a68c6b2fac0415d09bdd39b3”, “9d67968905df317779d3c92b7e052fae96020ccbc68d3f77d40bca0f2e50449d”, “4684cbc6831af10960835cd0c10831a23eb90e736dab9e96229e45828ded2760”, “6f66bcfab129e6d3a5b18e3e9554d54178b415cb54ecf82e350cc24d63209eff”, “fc874f84759c9c4944037af4b3be02efd03c6436ebc8b8571519658de1e5580a”, “6d11edc6b84444206dd97f9924e8ca6b273b0bce9ea58218590a275a64da740a”, “370151706116ba9ae7bff77d9244a6a3e5401aadb43de221bf3f804386724c4d”, “5d6c8801705493612138d3addfb0b0b5a49cc5177b5f2cee370d4b765d3e37b2” ], “time”: 1592919152, “mediantime”: 1592917919, “nonce”: 3940145976, “bits”: “1a01a5f2”, “difficulty”: 10178811.40698772, “chainwork”: “000000000000000000000000000000000000000000000160b51965fab057015d”, “nTx”: 10, “previousblockhash”: “00000000000001249b9a4e000135acecec2dcd7385eba54639ff962f3883e861”, “nextblockhash”: “0000000000000171c5c04355788d2531b349b55c6189e2e3719d2b5c82fa2026” } Come vedete il blocco contiene un pò di informazioni, ma non tutte sono utilizzate per provare a vincere la corsa del Pow.\nIl miner ha dovuto trovare un numero minore di quello riportato in bits.\nIl bits è la rappresentazione compressa del target del candidate block.\nIl candidate block è il blocco che il miner utilizza per effettuare le sue prove e vincere il proof of work al fine di inserirlo nella blockchain.\nCon il metodo getblocktemplate è possibile recuperare il candidate block attuale.\n$ bitcoin-cli getblocktemplate ‘{“rules”: [“segwit”]}’ E per trovare il target attuale è possibile filtrare il risultato con l’aiuto della libreria jq\n$ bitcoin-cli getblocktemplate ‘{“rules”: [“segwit”]}’ | jq -r ‘.target’ 00000000000001a5f20000000000000000000000000000000000000000000000 In questo momento il miner deve trovare un numero che deve stare sotto all’esadecimale appena estratto.\nNoi però, non essendo miner, replicheremo il lavoro che il miner ha fatto sul blocco che abbiamo scelto. I valori che il miner utilizza sono:\nVersion hex Previousblockhash merkleroot time bits nonce Per comodità utilizziamo delle variabili d’ambiente per salvare il loro valore.\nSalviamo nella variabile d’ambiente ver, il versionhex nella sua rappresentazione little endian.\n$ ver=`printf 20800000 | tac -rs..| tr -d ‘\\n’` Salviamo nella variabile d’ambiente prev, il previous blockhash nella sua rappresentazione little endian.\n$ prev=`printf 00000000000001249b9a4e000135acecec2dcd7385eba54639ff962f3883e861 | tac -rs.. | tr -d ‘\\n’` Salviamo nella variabile d’ambiente mkl, il merkle root hash nella sua rappresentazione little endian.\n$ mkl=`printf 75870dd46a503862af6fcf700be5e02e008db4521d96713bda51607ed05e2a18 | tac -rs.. | tr -d ‘\\n’` Salviamo nella variabile d’ambiente time, il time nella sua rappresentazione esadecimale e little endian.\n$ time=`printf ‘%x\\n’ 1592919152 | tac -rs.. | tr -d ‘\\n’` Salviamo nella variabile d’ambiente bits, il bits nella sua rappresentazione little endian.\n$ bits=`echo 1a01a5f2 | tac -rs.. | tr -d ‘\\n’` Salviamo nella variabile d’ambiente nonce, il nonce nella sua rappresentazione esadecimale e little endian.\n$ nonce=`printf ‘%x\\n’ 3940145976 | tac -rs.. | tr -d ‘\\n’` Otteniamo quindi il digest della concatenazione dei valori che abbiamo salvato nelle variabili d’ambiente, applicando per due volte la funzione crittografica SHA256\n$ printf $ver$prev$mkl$time$bits$nonce | xxd -r -p | sha256sum -b | xxd -r -p | sha256sum -b Otteniamo quindi la sua rappresentazione in little endian\n$ printf efa0e7bd9f48633781088b3a3e633df270d79435b896d074eb00000000000000 | tac -rs.. 00000000000000eb74d096b83594d770f23d633e3a8b08813763489fbde7a0ef Il risultato ottenuto è il numero che soddisfava la difficoltà dell’epoca. Come facciamo ad esserne sicuri? Convertiamo in base 10 sia l’hash ottenuto che il bits.\nPer ottenere il Bits in base 10 è necessario dividerlo in due parti, rispettivamente coefficiente ed esponente.\nDato il bits:\n1a01a5f2 il coefficiente è 0x1a il quale ci comunica la lunghezza dell’esponente.\nIn questo caso 26 byte, perchè 1a in base 10 è 26.\n$ echo ‘ibase=16; 1A’ | bc 26 Il coefficiente è la parte rimanente del bits, ovvero 01a5f2.\nDobbiamo quindi avere una stringa lunga 52 caratteri esadecimali compreso l’esponente.\nRicorda che 1byte può essere rappresentato da due caratteri esadecimali.\nOtteniamo quindi\n01a5f20000000000000000000000000000000000000000000000 Verifichiamo di aver scritto la lunghezza giusta\n$ printf 01a5f20000000000000000000000000000000000000000000000 | wc -c 52 Ottimo, convertiamolo in base 10 e salviamolo nella variabile d’ambiente BITS_10\n$ BITS_10=”$(echo “obase=10; ibase=16; -u; $(echo 01a5f20000000000000000000000000000000000000000000000 | tr ‘[:lower:]’ ‘[:upper:]’)” |bc | sed -n 2p)” Esaminiamo il risultato ottenuto\n$ echo $BITS_10 2648593653332025323234430866859553558338063400000453437554688 Convertiamo in base 10 anche l’hash ottenuto precedentemente e salviamolo nella variabile d’ambiente TARGET.\n$ TARGET=”$(echo “obase=10; ibase=16; -u; $(echo 00000000000000eb74d096b83594d770f23d633e3a8b08813763489fbde7a0ef | tr ‘[:lower:]’ ‘[:upper:]’)” |bc | sed -n 2p)” Adesso $TARGET deve essere minore di $BITS_10, ovvero della difficoltà imposta dal protocollo in quel momento storico.\n$ echo “$TARGET\u0026lt;$BITS_10”|bc 1 Otteniamo come risultato 1, quindi true, il miner ha risolto con successo il problema matematico.\nCome fa la rete a replicare il risultato? È molto semplice, sapendo i parametri, in particolar modo il nonce, verifica che il risultato sia corretto.\nSe, parametri differenti restituiscono lo stesso risultato, come detto nel video riguardante lo SHA256, siamo di fronte ad una collisione.\nI più attenti avranno notato che il risultato ottenuto è l’hash del blocco.\n$ test 00000000000000eb74d096b83594d770f23d633e3a8b08813763489fbde7a0ef = $(bitcoin-cli getblockhash 1773164) \u0026amp;\u0026amp; echo sono uguali || echo sono diversi Sono uguali!\nIl codice utilizzato è disponibile nel nostro repository GitHub.\nCon questo video un pò più tecnico abbiamo cercato di dimostrare che cosa un miner esegue per creare un blocco, e mettere in sicurezza la blockchain, ma come potete immaginare è un argomento molto ampio e non è sufficiente un video di pochi minuti per analizzare in maniera dettagliata ogni singola sfumatura.\nL’argomento invece è approfondito nel nostro libro e corso, trovate i link nella descrizione del video.\nSpero però di aver risposta alla tua domanda!\nCiao alla prossima\n","date":"24 giugno 2020","externalUrl":null,"permalink":"/posts/che-cosa-la-proof-of-work-come-si-mina-un-blocco/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Che cosa è la Proof of work? Come si mina un blocco? # Video completo su Bitcoin in Action! # Video completo suBitcoin in Action!\n","title":"Che cosa è la Proof of work? Come si mina un blocco?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Che cosa è lo SHA256? # Scopri il video sul canale Bitcoin in Action! # Scopri il video sul canale Bitcoin in Action\nCiao,\nUna delle domande ricorrenti che ci viene fatta durante i nostri corsi è: Che cosa è l’algoritmo SHA256 e dove viene utilizzato?\nIn Bitcoin l’algoritmo SHA256 viene utilizzato in molti scenari, dalla creazione dell’address, al calcolo della TXID fino ad arrivare all’identificativo del blocco, o per meglio dire, nella proof of work.\nSHA è l’acronimo di Secure Hash Algorithm, il suo scopo è prendere in ingresso una dei byte, ad esempio una stringa, quindi del testo, di una lunghezza arbitraria e restituire un’altra stringa lunga sempre lunga 256 bit, dato che stiamo utilizzando SHA256.\nÈ un algoritmo One Way (senza funzione inversa), questo significa che dal risultato ottenuto, chiamato digest (spesso si usa erroneamente il termine hash al posto di digest), non è possibile risalire al messaggio originale, chiamato anche anche messaggio in chiaro.\nDiciamo che risalire al messaggio in chiaro è talmente improbabile che possiamo dire che è impossibile, questo perchè il digest contiene troppe poche informazioni per effettuare questa operazione.\nUna volta lessi che è come trovare un atomo nell’universo, credo che sia difficile.\nCerchiamo di fare chiarezza con un esempio.\nIn Action\nBene, creiamo subito un digest, utilizzando il messaggio in chiaro bitcoininaction\n$ printf bitcoininaction | openssl dgst -sha256 (stdin)= b76b7041106a75de9fa4fbf880b3886cc114cbfd570e1a17adb58b937afee351 Dal digest è quindi impossibile capire che il messaggio in chiaro fosse bitcoininaction.\nChe cosa succede se applico nuovamente la funzione crittografica SHA256 a bitcoininaction?\nSe la vostra risposta è stata: Ottengo lo stesso risultato, avete dato la risposta esatta.\n$ printf bitcoininaction | openssl dgst -sha256 (stdin)= b76b7041106a75de9fa4fbf880b3886cc114cbfd570e1a17adb58b937afee351 Che cosa succede se cambio leggermente il messaggio in chiaro, ad esempio bitcoininaction.com?\n$ printf bitcoininaction.com | openssl dgst -sha256 (stdin)= 41dbcc447756ddd2c32ac99c76ef6f090fa0a63da5a6ecfda3311936f85daa85 Ottengo un digest completamente diverso. È per questo motivo che è molto veloce verificare un digest se si è in possesso del messaggio in chiaro. Ogni messaggio in chiaro su cui è applicato l’algoritmo SHA256 produce un digest unico. Se due messaggi diversi producessero lo stesso digest avremo un fenomeno chiamato collisione.\nOk, tutto interessante, ma voglio vedere almeno un esempio di Bitcoin!\nOtteniamo quindi l’hash della transazione effettuata nel video “Posso scrivere nella blockchain”.\nPer fare questa operazione dobbiamo effettuare due volte la funzione crittografica SHA256 e ottenere la sua rappresentazione in little endian. Molto brevemente Big Endian e Little Endian coinvolgono l’ordine dei byte.\nbig-endian: Si ha la memorizzazione dal byte più significativo per finire col meno significativo. little endian: Si ha la memorizzazione dal byte meno significativo per finire col più significativo. La transazione è stata fatta nella blockchain di testnet e ha come txid: edee419f93521f43259b763ffb42e4b882504534494381b7e18057015a27c548\nRecuperiamo quindi la transazione con il comando getrawtransaction.\n$ bitcoin-cli getrawtransaction edee419f93521f43259b763ffb42e4b882504534494381b7e18057015a27c548 2 { “txid”: “edee419f93521f43259b763ffb42e4b882504534494381b7e18057015a27c548”, “hash”: “12cf1e132b1d775f5403a875592b447a825f493c0eecdf6bbaa8f5e759c1c71d”, ... “hex”: “020000000001019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d0247304402205688399cb5a230f050330e2bc6d04d9864d459f85fec48a0118ca31be9239d530220228d7c04fe9e6eea3690033c01ed222284efaa01b28a9a7cae809bdb32d7ce7a0121020d12775323bbdaf0cb6e9a2b44ae7a591ef5872364e80e363a93d283c10b9e4f00000000”, ... } L’hash è 12cf1e132b1d775f5403a875592b447a825f493c0eecdf6bbaa8f5e759c1c71d ed è quella che noi dobbiamo ottenere. Dobbiamo applicare l’algoritmo SHA256 per due volte e ottenere la sua rappresentazione in little endian.\nOttengo il primo digest.\n$ printf 020000000001019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d0247304402205688399cb5a230f050330e2bc6d04d9864d459f85fec48a0118ca31be9239d530220228d7c04fe9e6eea3690033c01ed222284efaa01b28a9a7cae809bdb32d7ce7a0121020d12775323bbdaf0cb6e9a2b44ae7a591ef5872364e80e363a93d283c10b9e4f00000000 | xxd -r -p | sha256sum -b 33bf8e3e54327c84758e3442ccea54cfef3621ee4d7276cc1bdcde301d4c4796 Applichiamo nuovamente lo SHA256 al digest ottenuto, per ottenere il secondo digest.\n$ printf 33bf8e3e54327c84758e3442ccea54cfef3621ee4d7276cc1bdcde301d4c4796 | xxd -r -p | sha256sum -b 1dc7c159e7f5a8ba6bdfec0e3c495f827a442b5975a803545f771d2b131ecf12 Ed infine otteniamo la sua rappresentazione in little endian\n$ printf 1dc7c159e7f5a8ba6bdfec0e3c495f827a442b5975a803545f771d2b131ecf12 | tac -rs.. 12cf1e132b1d775f5403a875592b447a825f493c0eecdf6bbaa8f5e759c1c71d Il risultato coincide!\nQuello che abbiamo appena messo in pratica è solo un caso di dove e come il protocollo Bitcoin utilizza questo tipo di Algoritmo, ovviamente non è l’unico algoritmo ad essere utilizzato, ad RIPEMD-160 viene usato durante la generazione degli address. Come sempre il codice è disponibile nel nostro repository GitHub che trovare in descrizione e vi invito a lasciare domande nei commenti e se vi va iscrivetevi.\nCiao alla prossima\n","date":"18 giugno 2020","externalUrl":null,"permalink":"/posts/che-cosa-lo-sha256/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Che cosa è lo SHA256? # Scopri il video sul canale Bitcoin in Action! # Scopri il video sul canale Bitcoin in Action\n","title":"Che cosa è lo SHA256?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Video completo nel canale youtube Bitcoin in Action # Video completo nelcanale youtube Bitcoin in Action\nCiao, Oggi rispondiamo a Luca che ci domanda. È Possibile scrivere nella blockchain?\nSì, è possibile scrivere nella blockchain, possiamo lasciare un messaggio utilizzando un op code chiamato OP_RETURN, che rende la UTXO associata (non tutti gli UTXO della tx), quindi l’unspent transaction output, inspendibile.\nPuoi scrivere al massimo 80 bytes.\nL’operazione di scrittura viene spesso definita come “timestamping delle informazioni scritte” perchè la transazione che le contiene farà parte di un blocco al quale è associata una marca temporale, un timestamp per l’appunto.\nRicorda però che ogni volta che aggiungiamo delle informazioni alla transazione, aumentiamo il suo peso pagando di conseguenza più fee.\nQuando potrebbe essere utile? Ad esempio se vuoi lasciare una fingerprint di un documento marcato temporalmente.\nPer questo esempio utilizzeremo la testnet così da poter vedere il messaggio in un explorer.\nIn Action\nCome prima cosa ottengo un address SegWit dal mio nodo testnet.\n$ bitcoin-cli getnewaddress “” “bech32” tb1qrggdlvezgd4uy9mntz50mpmwd6l4vk9rm4ft3d Otteniamo quindi dei bitcoin dal servizio faucet https://bitcoinfaucet.uo1.net/send.php\nPossiamo verificare che la txid sia in mempool con la chiamata:\n$ bitcoin-cli getrawmempool | grep c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a dove c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a rappresenta la mia txid ottenuta dal servizio faucet.\nAppena la transazione è minata possiamo recuperare la UTXO con il comando listunspent.\n$ bitcoin-cli listunspent 1 101 ‘[“tb1qrggdlvezgd4uy9mntz50mpmwd6l4vk9rm4ft3d”]’ | jq [ { “txid”: “c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a”, “vout”: 1, “address”: “tb1qrggdlvezgd4uy9mntz50mpmwd6l4vk9rm4ft3d”, “label”: “”, “scriptPubKey”: “00141a10dfb322436bc2177358a8fd876e6ebf5658a3”, “amount”: 0.00100000, “confirmations”: 6, “spendable”: true, “solvable”: true, “desc”: “wpkh([3a46ecca/0\u0026#39;/0\u0026#39;/4\u0026#39;]020d12775323bbdaf0cb6e9a2b44ae7a591ef5872364e80e363a93d283c10b9e4f)#kxjva7dw”, “safe”: true } ] Dopo di che recupero la chiave privata del mio indirizzo, indispensabile per firmare la transazione.\n$ bitcoin-cli dumpprivkey tb1qrggdlvezgd4uy9mntz50mpmwd6l4vk9rm4ft3d cPHTHs7ERe6jDYiitj9eLVswsX3RpeKMB19eXYjpLb4CkEHd7drq Generiamo il messaggio che vogliamo inserire nella blockchain, ad esempio corsocompleto.bitcoininaction.com nel suo formato esadecimale.\n$ printf “corsocompleto.bitcoininaction.com” | xxd -ps 636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d Per creare la transazione devo usare il metodo createrawtransaction. Utilizzando help possiamo analizzare tutti i parametri a nostra disposizione.\n$ bitcoin-cli help createrawtransaction Il destinatario della transazione è l’address del faucet\n2NGZrVvZG92qGYqzTLjCAewvPZ7JE8S8VxE Ho tutto il necessario per creare la mia transazione utilizzando la chiamata createrawtransaction.\nCome valore di data inserisco l’esadecimale che voglio scrivere nella blockchain, il quale mi creerà una UTXO OP_RETURN.\n$ bitcoin-cli createrawtransaction ‘[{“txid”:”c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a”,”vout”:1}]’ ‘[{“2NGZrVvZG92qGYqzTLjCAewvPZ7JE8S8VxE”:0.00099000},{“data”:”636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d”}]’ 02000000019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d00000000 In questo caso effettuo una sola transazione nella quale sposto tutto il mio input, non necessito quindi di un change address, ovvero di un indirizzo di resto, dato che il resto non è presente.\nInoltre non ho utilizzato tutto il mio output perchè parte di questo è destinato alle fee.\nLa transaction data è stata quindi creata. Il prossimo step è firmarla e inviarla verso il secondo indirizzo. il metodo da utilizzare è signrawtransactionwithkey\n$ bitcoin-cli signrawtransactionwithkey 02000000019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d00000000 ‘[“cPHTHs7ERe6jDYiitj9eLVswsX3RpeKMB19eXYjpLb4CkEHd7drq”]’ ‘[{“txid”:”c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a”,”vout”:1,”scriptPubKey”:”00141a10dfb322436bc2177358a8fd876e6ebf5658a3\u0026#34;,”amount”:0.00100000}]’ { “hex”: “020000000001019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d0247304402205688399cb5a230f050330e2bc6d04d9864d459f85fec48a0118ca31be9239d530220228d7c04fe9e6eea3690033c01ed222284efaa01b28a9a7cae809bdb32d7ce7a0121020d12775323bbdaf0cb6e9a2b44ae7a591ef5872364e80e363a93d283c10b9e4f00000000”, “complete”: true } La transazione è stata firmata con successo, possiamo adesso inviare la transazione, utilizzando il metodo sendrawtransaction.\n$ bitcoin-cli sendrawtransaction 020000000001019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d0247304402205688399cb5a230f050330e2bc6d04d9864d459f85fec48a0118ca31be9239d530220228d7c04fe9e6eea3690033c01ed222284efaa01b28a9a7cae809bdb32d7ce7a0121020d12775323bbdaf0cb6e9a2b44ae7a591ef5872364e80e363a93d283c10b9e4f00000000 edee419f93521f43259b763ffb42e4b882504534494381b7e18057015a27c548 Ottenendo cosi la transaction id.\nAdesso possiamo utilizzare un qualsiasi explorer per verificare la transazione, ad esempio https://tbtc.bitaps.com/ e inseriamo la transaction id appena ottenuta.\nIl messaggio nella blockchain di Bitcoin — corsocompleto.bitcoininaction.com\nLa transazione è stata inviata correttamente ed è in attesa di essere minata. Contiene giustamente due output, uno verso il destinatario e l’altro è un OP_RETURN con il nostro messaggio.\nAbbiamo visto con esempi pratici come sia possibile scrivere nella blockchain, utilizzando l’operation code OP_RETURN che rende l’UTXO associato inspendibile.\nÈ comunque sconsigliato scrivere nella blockchain se non strettamente necessario.\nPer ottimizzare, in termini di fee e spazio occupato, le scritture sulla blockchain di Bitcoin si consiglia di utilizzare OpenTimestamps invece che reinventare la ruota!\nCiao alla prossima\n","date":"10 giugno 2020","externalUrl":null,"permalink":"/posts/posso-scrivere-nella-blockchain/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Video completo nel canale youtube Bitcoin in Action # Video completo nelcanale youtube Bitcoin in Action\nCiao, Oggi rispondiamo a Luca che ci domanda. È Possibile scrivere nella blockchain?\n","title":"Posso scrivere nella blockchain?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Come si utilizza un nodo # Bitcoin?\nSeguici sul canale youtube — Bitcoin in Action # Ciao,\nAbbiamo ricevuto un pò domande dai lettori del nostro libro —Bitcoin dalla teoria alla pratica — e dagli studenti del nostro video-corso, dove ci chiedevano come avere a disposizione un nodo Bitcoin.\nAbbiamo quindi deciso di risponderli tramite il nostro canale.\nDurante l’installazione utilizzeremo la verifica delle chiavi GPG così da essere sicuri di aver scaricato il pacchetto voluto.\nPersonalmente utilizzo Mac Os, quindi la cartella destinata alla blockchain è di default è all’interno di Application Support.\nWindows e Linux utilizzano un‘altro percorso, consultabile https://en.bitcoin.it/wiki/Data_directory.\nIn Action\nPer prima cosa dobbiamo scaricare il software Bitcoin core.\nPersonalmente non amo l’interfaccia grafica, quindi scarichiamo direttamente il bin dall’indirizzo https://bitcoincore.org/bin/.\nCopio il link e utilizzo wget per scaricare il pacchetto.\n$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.1/bitcoin-0.19.1-osx64.tar.gz Utilizzo wget perchè il vostro nodo potrebbe essere su un raspberry senza interfaccia grafica.\nScarico anche le relative firme per verificare l’integrità del pacchetto.\n$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.1/SHA256SUMS.asc$ wget https://bitcoin.org/laanwj-releases.asc Verifichiamo l’integrità del pacchetto\n$ sha256sum — check SHA256SUMS.asc — ignore-missing Con il comando shasum verifichiamo l’integrità e l’autenticità del file controllando il suo checksum creato con l’algoritmo SHA.\nControlliamo anche le chiavi.\n$ gpg — import./laanwj-releases.asc$ gpg — refresh-keys$ gpg — verify SHA256SUMS.asc gpg: Good signature from “Wladimir J. van der Laan …” Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964 Il controllo della firma è andato a buon fine e sappiamo di aver scaricato il file voluto.\nPer i più curiosi questo è il messaggio in mailing list “bitcoin dev” dove si comunicava quale sarebbe stata la fingerprint della chiave PGP utilizzata per le successive release dalla versione 0.11.0rc3.\nPossiamo finalmente installarlo.\n$ tar -xvf bitcoin-0.19.1-osx64.tar.gz Decomprimiamo l’archivio e spostiamo i file bin all’interno di /usr/local/bin cosi da renderlo globale.\n$ mv bitcoin-0.19.1/bin/* /usr/local/bin Se utilizzate un raspberry, il comando potrebbe è quello riportato qui sotto\n$ sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.19.1/bin/* /usr/local/bin deve far parte del $PATH. Il Path nei sistemi UNIX comunica in quali cartelle cercare dei file eseguibili\nPer verificare che tutto sia andato a buon fine, possiamo eseguire il comando\n$ bitcoind --version Se adesso lanciamo il demone, ovvero bitcoind, inizierà la sincronizzazione con la mainnet, e la datadir sarà posizionata all’interno Application support, proprio perchè io sto usando macOS\n$ cd /Users/$USER/Library/Application\\ Support/Bitcoin Se il vostro obiettivo è fare delle prove con il protocollo, vi consiglio di utilizzare la regtest.\nPer far questo o passate come opzione -regtest al demone, o più comodamente create un file bitcoin.conf all’interno della cartella di default.\nregtest=1txindex=1 regtest=1 indica che di default voglio usare la regtest senza doverla specificare.\ntxindex=1 che voglio che tutte le transazione siano indicizzate.\nPer avere una lista completa delle opzioni è possibile utilizzare\n$ bitcoind --help possiamo nuovamente accendere il demone.\nVerifichiamo l’ambiente con la chiamata\n$ bitcoin-cli getblockchaininfo { “chain”: “regtest”, …} Abbiamo tutto a disposizione per utilizzare il nostro nodo.\nAbbiamo visto come ottenere un nodo bitcoin e come interagirci per iniziare a prendere confidenza con il protocollo.\nIn descrizione trovate il nostro link a Github e un articolo scritto da noi sul nostro sito per installarlo su un raspberry.\nCiao alla prossima\n","date":"3 giugno 2020","externalUrl":null,"permalink":"/posts/come-si-utilizza-un-nodo-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Come si utilizza un nodo # Bitcoin?\nSeguici sul canale youtube — Bitcoin in Action # ","title":"Come si utilizza un nodo Bitcoin?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Il 24 Maggio 2020, non il 25 come molte testate hanno riportato, è stato pubblicato un messaggio anonimo su Debian Pastezone.\nLa traduzione in italiano del messaggio è: “Craig Steven Wright è un bugiardo e un truffatore.\nNon ha le chiavi usate per firmare questo messaggio.\nLightning Network è un risultato significativo.\nTuttavia dobbiamo continuare a lavorare per migliorare la capacità on-chain.\nSfortunatamente la soluzione non è solo cambiare una costante nel codice o permettere a partecipanti possenti di spingerne fuori altri.\nSiamo tutti Satoshi”\nPer un neofita questo messaggio risulterà criptico, proviamo a sintetizzarlo punto per punto.\nCraig Steven Wright (CSW) è un bugiardo e un truffatore. # Craig Steven Wright è una persona enigmatica della scena Bitcoin.\nPiù volte pubblicamente ha tentato di dimostrare, senza successo, di essere Satoshi Nakamoto o almeno di possedere le chiavi private attribuite a Satoshi.\nIl contesto è alquanto articolato e la storia si prolunga per anni quindi non possiamo offrirvi una sintesi giornalistica/sensazionalistica.\nVi consigliamo di leggere il capitolo dedicato alla questione all’interno del libro “La vita segreta”.\nCapitolo “L’affaire Satoshi” a p.121\nNon ha le chiavi usate per firmare questo messaggio. # Perché sono importanti le chiavi usate per firmare questo messaggio?\nSono importanti perchè risultano essere le stesse chiavi per le quali CSW ha dichiarato, in sede legale tramite l’allegato EXHIBIT 7, di possederne le corrispettive chiavi private. Le UTXO associate a queste chiavi, secondo CSW, risultano essere parte di un accordo, chiamato “Tulip Trust” fra CSW e Dave Kleiman. Dave è un altro early-adopter di Bitcoin sul quale vi consigliamo di documentarvi.\nLightning Network è un risultato significativo. Tuttavia dobbiamo continuare a lavorare per migliorare la capacità on-chain. Sfortunatamente la soluzione non è solo cambiare una costante nel codice o permettere a partecipanti possenti di spingerne fuori altri. # Questa parte contiene 3 messaggi distinti.\nIl primo: “LN è un ottimo progetto ma non dobbiamo scordarci di continuare ad aumentare la quantità di tx/secondo che Bitcoin è in grado di processare.”\nIl secondo: “per aumentare la capacità non bisogna aumentare ciecamente la dimensione dei blocchi”\nIl terzo: “non vogliamo riporre tutto il potere in pochi miners”.\nSintetizzando estremamente, chi è dietro a questo messaggio dice “LN è la via, Bitcoin Cash (ovvero il fork di Bitcoin che per aumentare le tx/secondo ha alzato la costante riguardante la dimensione dei blocchi) non è la soluzione, non siamo a favore della centralizzazione del mining”\nQuindi :) chi scrive probabilmente non è:\n— promotore di Bitcoin Cash e dell’approccio “big blockers”\n— Non e’ a favore di raggruppamenti di big miners\nQuindi quindi chi rimane escluso?\nRimangono esclusi early bitcoiners forti promotori di SegWit, LN ed in contrasto con l’approccio “big blockers”.\nPer diritto di cronaca dobbiamo dire che alcuni supporter di spicco orbitano attorno Blockstream.\nSiamo tutti Satoshi # Si riferisce al contenuto di una mail, purtroppo senza firma PGP, inviata da Satoshi nel 2015 che riportava “[I am not Craig Wright.\nWe are all Satoshi.](https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-December/011936.html)”\n“I am not Craig Wright. We are all Satoshi.”\nAdesso basta filosofia vogliamo vedere con la pratica se realmente 1. Gli indirizzi in questione sono quelli citati da CSW in sede legale\nLe firme associate ad ogni indirizzo sono vere In Action # Iniziamo confrontando il PDF “EXHIBIT 7” depositato in sede legale e l’elenco su Debian Pastezone.\nCerchiamo il primo indirizzo nel file PDF trovando corrispondenza.\nCome possiamo verificare la firma fornita nel Debian Pastezone e l’indirizzo? Nel primo video del canale Bitcoin in Action è stata spiegata proprio la firma digitale, per verificarla è necessario, la chiave pubblica, il messaggio e la firma digitale.\nSolo il possessore di una determinata chiave privata può generare una determinata firma che può essere comprovata con la corrispondente chiave pubblica.\nIn bitcoin-cli esiste il metodo verifymessage per ottenere la verifica che stiamo cercando.\nPer conoscere i suoi parametri è possibile utilizzare help.\nPer verificare le firme è necessario utilizzare la blockchain mainnet.\nPer prima cosa salviamo il messaggio nella variabile d’ambiente MSG così da utilizzarla più facilmente\n$ MSG=\u0026#34;Craig Steven Wright is a liar and a fraud. He doesn’t have the keys used to sign this message. The Lightning Network is a significant achievement. However, we need to continue work on improving on-chain capacity. Unfortunately, the solution is not to just change a constant in the code or to allow powerful participants to force out others. We are all Satoshi\u0026#34; per assicurarci che tutto sia andato a buon fine, eseguiamo il comando echo\necho $MSG Siamo pronti a verificare il messaggio, inserendo come primo parametro l’indirizzo, che non è altro che la chiave pubblica, la firma generata dalla chiave privata corrispondente, e il messaggio firmato.\nIl risultato di questa chiamata restituisce true se il controllo è andato a buon fine, false altrimenti.\n$ bitcoin-cli verifymessage \u0026#34;1FbPLPR1XoufBQRPGd9JBLPbKLaGjbax5m\u0026#34; \u0026#34;G3SsgKMKAOiOaMzKSGqpKo5MFpt0biP9MbO5UkSl7VxRKcv6Uz+3mHsuEJn58lZlRksvazOKAtuMUMolg/hE9WI=\u0026#34; $MSG true La verifica è andata a buon fine. Adesso andrebbero controllate tutte le firme manualmente. Abbiamo invece creato uno script disponibile nel nostro repository GitHub che svolge il lavoro in automatico. Inoltre lo script inserisce altre informazioni, quale l’altezza del blocco in cui si trova la transazione stessa.\nIl file si chiama, ovviamente, satoshi.sh\neseguiamolo\nsh satoshi.sh La verifiche sono andate tutte a buon fine. Bene, in questo appuntamento abbiamo approfondito un pò narrativa della community Bitcoin ed abbiamo provato con mano come sia possibile dichiarare la proprietà delle UTXO e di messaggi associati off-chain.\nhttps://twitter.com/adam3us/status/1264940026326061057\nAlla prossima!\n","date":"27 maggio 2020","externalUrl":null,"permalink":"/posts/satoshi-morto-lunga-vita-a-satoshi-we-are-all-satoshi/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Il 24 Maggio 2020, non il 25 come molte testate hanno riportato, è stato pubblicato un messaggio anonimo su Debian Pastezone.\nLa traduzione in italiano del messaggio è: “Craig Steven Wright è un bugiardo e un truffatore.\n","title":"Satoshi è morto, lunga vita a Satoshi! We are all Satoshi!","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Pizza day in SegWit #### Scopri il video su youtube — Bitcoin in Action # Scopri il video su Bitcoin in Action\nOggi, 22 Maggio 2020, è il 10° anniversario del pizza day.\nDi che cosa si tratta? L’utente Laszlo scrisse su bitcoin talk che avrebbe pagato 10.000 bitcoin per chi gli avesse consegnato 2 pizze belle grandi, così da mangiarla anche il giorno dopo.\nPost originale di Laszlo\nIl messaggio “provocatorio” fu accettato da un utente, che noi chiameremo Luigi, stereotipo del pizzaiolo italiano all’estero.\nSpesso si sente parlare che Laszlo ha pagato più di 90 milioni di dollari per una pizza! Certo convertiti al giorno d’oggi è esattamente così, ma che cosa dire per le fee?\nAnalizzando la transazione con un qualsiasi explorer possiamo vedere che le fee ammontano a quasi 0.99 bitcoin, quasi 9 mila dollari al tasso attuale !\nQuindi ci siamo chiesti, quando avrebbe speso di fee se Laszlo avesse usato segwit?\nPer rispondere alla domanda, che questa volta ci siamo auto-fatti, lo abbiamo messo in pratica.\nSappiamo che le fee dipendono da vari fattori, tra cui anche la congestione del network, cercheremo di avvicinarsi il più possibile alla transazione del 2010.\nIn Action!\nCerchiamo di replicare tutti gli importi che l’utente Laszlo ha utilizzato per generare la transazione.\nPer fare questo utilizzeremo due nodi regtest, in modo tale da utilizzare la chiamata sendtoaddress.\nEntrambi i nodi partono con una blockchain con zero blocchi e sono in collegamento tra di loro, quindi quando un nodo minerà un blocco, l’altro nodo si sincronizzerà.\nSono stati creati 3 Address Segwit.\nUn address per il miner e salvata nella variabile d’ambiente $MINER Un address per Laszlo e salvata nella variabile d’ambiente $LASZLO Un address per Luigi e salvata nella variabile d’ambiente $LUIGI Mineremo 1000 blocchi, così’ da avere un reward sufficiente da trasferire a Laszlo.\nGli importi sono gli stessi che aveva Laszlo durante quella transazione per cercare di replicare più fedelmente possibile.\nQuando Laszlo avrà ricevuto tutto il suo importo, dal nodo secondario, possiamo finalmente fare la transazione verso Luigi, consumando tutti gli input.\nAnalizzando la transazione possiamo verificare il suo peso in byte e vsize.\nAttenzione, dopo l’attivazione di segwit, le fee si pagano su vsize.\nil calcolo del vsize si effettua facendo la divisione per 4 del totale di weight e si considera l’intero successivo.\nIl weight si ha moltiplicando *4 tutti gli elementi non segwit.\nQuindi il vsize è 4070.\nQuanto pesa la transazione legacy?\nPossiamo fare lo stesso procedimento ma utilizzando address legacy. Quindi ricreare la transazione di LASZLO con gli stessi input e inviarla verso LUIGI.\nIl vsize in questo caso è 8896, più del doppio.\nCome vedete il vsize e i byte corrispondono, proprio perchè non esistono byte segwit che hanno un peso di 1, ma tutti i byte sono legacy, e hanno peso 4.\nQuindi possiamo dedurre che, facendo la stessa transazione con lo stesso numero di input, l’utente Laszlo avrebbe speso meno della metà in termini di fee.\nÈ sempre una cifra interessante, ma ricordatevi che le fee non dipendono dall’ammontare dell’importo spostato, ma da quanti byte, o meglio vsize è composta.\nRicorda che il codice è disponibile nel nostro repository 🐙 GitHub!\nCiao!\n","date":"22 maggio 2020","externalUrl":null,"permalink":"/posts/pizza-day-in-segwit/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Pizza day in SegWit #### Scopri il video su youtube — Bitcoin in Action # Scopri il video su Bitcoin in Action\n","title":"Pizza day in SegWit","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Bitcoin in Action — Che cosa è L’ halving? # Scoprilo su Youtube – Bitcoin in Action # Che cosa è l’halving? — Bitcoin in Action\nOggi (11 maggio 2020) è un giorno importante per Bitcoin, oggi avviene il cosiddetto halving.\nL’halving e’ un evento ricorrente in Bitcoin: ogni quattro anni il reward che i miner ottengono tramite la coinbase viene dimezzato.\nPer la precisione il reward si dimezza ogni 210000 blocchi.\nUn blocco viene minato ogni 10 minuti quindi 210000 blocchi corrispondono a 1458 giorni che equivalgono a 3.99 anni!\nIn questo momento il numero di blocchi minati è 629992, quando arriveremo al blocco numero 630000 saranno ufficialmente passati 12 anni dal primo blocco minato, dunque il reward passerà da 12.5 a 6.25 bitcoin.\nRicapitolando, attualmente, i miners stanno ricevendo 12.5 bitcoins per ogni blocco che riescono a minare.\nTra poco, intorno alle 21:22, questo reward passerà a 6.25 bitcoins.\nBando alle ciance, entriamo nel dettaglio e vediamo con precisione cosa succederà!\nIl codice che abbiamo utilizzato per la pratica è possibile scaricarlo da nostro repository GitHub!\n","date":"20 maggio 2020","externalUrl":null,"permalink":"/posts/bitcoin-in-action-che-cosa-l-halving/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Bitcoin in Action — Che cosa è L’ halving? # Scoprilo su Youtube – Bitcoin in Action # Che cosa è l’halving? — Bitcoin in Action\n","title":"Bitcoin in Action — Che cosa è L’ halving?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Bitcoin in action — Perché è così importante la chiave privata? # Scoprilo su Youtube — Bitcoin in Action # Perché è così importante la chiave privata?\nBenvenuto nel canale youtube Bitcoin in Action, io sono Alessio, ma per tutti Barno.\nInsieme ad Alessandro abbiamo pubblicato il video corso sulla piattaforma Udemy, il libro Bitcoin dalla teoria alla pratica e il tascabile Bitcoin 199 domande.\nQuesto canale ha come obiettivo rispondere a domande che spesso riceviamo dagli amici, che leggiamo su internet, e perchè no, alle vostre lasciate nei commenti.\nOggi rispondo a Paolo, mio carissimo amico, che mi domanda:\nLa chiave privata è molto importante quando parliamo di Bitcoin e non solo. Ma di che cosa si tratta? Che cosa è una firma digitale?\nPartiamo dicendo che Bitcoin utilizza la crittografia asimmetrica, dove abbiamo due chiavi, una privata e l’altra pubblica.\nSono legate matematicamente grazie a particolari proprietà dei numeri primi.\nDalla chiave privata si può derivare la chiave pubblica ma non si può fare il contrario.\nSi chiama crittografica asimmetrica proprio per la presenza delle due chiave, altrimenti parliamo di crittografia simmetrica.\nLa firma digitale si ottiene applicando una funzione crittografica utilizzando la chiave privata sul hash del messaggio.\nLa firma si può verificare grazie all’utilizzo della chiave pubblica corrispondente.\nLa firma risolve tre fondamentali concetti,\nNon ripudio: cioè chi ha firmato non potrà disconoscerlo Integrità: se il messaggio viene manomesso ce ne accorgiamo Autenticità: Il destinatario deve essere sicuro di aver ricevuto il messaggio dal mittente desiderato. In Bitcoin la firma digitale viene utilizzata nella verifica delle transazioni, tramite OP_CODE come OP_CHECKSIG e derivate.\nPassiamo alla pratica utilizzando l’algoritmo delle curve ellittiche utilizzato in Bitcoin.\nAbbiamo quindi visto quanto è importante custodire la chiave privata, perchè ci autentica verso qualcuno o verso un’intera rete.\nLa parte pratica che avete visto è possibile scaricarla dal nostro repository Github, l’indirizzo lo trovate nella descrizione del video.\nNon mi resta che salutarvi, di mettermi un like se il video vi è piaciuto e di iscrivervi a canale attivando la campanella per essere avvisati dei prossimi video.\nCiao!\n","date":"18 maggio 2020","externalUrl":null,"permalink":"/posts/bitcoin-in-action-perch-cos-importante-la-chiave-privata/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Bitcoin in action — Perché è così importante la chiave privata? # Scoprilo su Youtube — Bitcoin in Action # Perché è così importante la chiave privata?\n","title":"Bitcoin in action — Perché è così importante la chiave privata?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Dove posso leggere il famoso titolo de The Times? #### Seguici su Bitcoin in Action. # Oggi rispondo a una domanda che mi ha fatto Alberto che chiede: *Il primo blocco generato da Bitcoin è collegato a un famoso titolo del giornale * *The Times * *, testimoniando anche la data della sua nascita.\nLa pagina è dentro la blockchain*?\nBene Alberto, il primo blocco di Bitcoin, chiamato blocco genesi, è stato generato il 3 Gennaio 2009.\nNello stesso giorno nella prima pagina del Times potevamo leggere “ Chancellor on brink of second bailout for banks ”, che in italiano potremmo tradurre come “Il Cancelliere ipotizza un secondo salvataggio per le banche” dato che eravamo in piena crisi finanziaria.\nTitolo molto azzeccato per far conoscere al mondo Bitcoin. Sì, il titolo del Times è contenuto dentro la blockchain, ma non l’intera pagina.\nPiù precisamente lo possiamo leggere nella coinbase del genesis block, quindi al blocco numero 0.\nLa tua domanda ha un ottimo timing, perchè proprio ieri, l’11 maggio 2020 in occasione del terzo halving c’è stato un messaggio molto simile.\nVediamoli con un esempio.\nSappiamo che il messaggio è stato inserito nel blocco genesi, quindi nel primo blocco della blockchain.\nPossiamo identificare il blocco o tramite la sua altezza o tramite il suo hash, in questo caso la sua altezza sarà 0, dato che è il primo.\nbitcoin-cli getblockhash 0 Quindi utilizziamo la chiamata getblockhash e otteniamo il suo hash.\nAdesso che abbiamo il suo hash possiamo ottenere più dettagli con la chiamata getblock.\nbitcoin-cli getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f Nell’array tx vediamo che c’è una sola transazione, cerchiamo di ottenere più informazioni con la chiamata getrawtransaction.\nbitcoin-cli getrawtransaction 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b 2 Questa chiamata restituisce un errore, essendo una transazione particolare.\nIl metodo getblock mi permette di esplorare il blocco ancora più a fondo, per conoscere i parametri che accetta la chiamata è possibile utilizzare help prima del comando Utilizziamo quindi nuovamente la chiamata getblock chiedendo un risultato più verboso, aggiungendo il numero 2.\nbitcoin-cli getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 2 Abbiamo la possibilità di leggere l’esadecimale della coinbase, convertiamolo in ASCII usando il comando xxd.\necho 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73 | xxd -r -p Il risultato che otteniamo è il titolo del Times con tanto di data.\nProprio ieri, 11 maggio 2020 è avvenuto l’halving e la comunità Bitcoin ci ha deliziato con un altro messaggio. Utilizzando un qualsiasi explorer possiamo leggere il messaggio lasciato dal miner. Dove è scritto nella blockchain? Esattamente come il titolo del the times, il messaggio è nella coinbase, cerchiamo di estrarlo\nRecuperiamo l’hash del blocco\nbitcoin-cli getblockhash 629999 Una volta ottenuto l’hash del blocco, utilizziamo la chiamata getblock con l’hash appena ottenuto\nbitcoin-cli getblock 0000000000000000000d656be18bb095db1b23bd797266b0ac3ba720b1962b1e Recuperiamo la prima transazione, che sappiamo essere sempre la coinbase, utilizziamo la chiamata getrawtransaction richiedendo un risultato più verboso\nbitcoin-cli getrawtransaction aed3754889f65dff83504fd0a8b78e1b69fc22c5396c67df23b0e607bf4e0d67 2 |jq identifichiamo quindi la coinbase e convertiamo l’esadecimale in Ascii con il comando usato precedentemente\n$ printf 03ef9c0952f09f909f4e5954696d65732030392f4170722f3230323020576974682024322e335420496e6a656374696f6e2c20466564277320506c616e2046617220457863656564732032303038205265736375652020144d696e6564200500ba5e4800 | xxd -r -p ? R🐟NYTimes 09/Apr/2020 With $2.3T Injection, Fed’s Plan Far Exceeds 2008 Rescue Mined?^H Ecco il messaggio che ogni full node possiede all’interno del proprio hard-disk. È un chiaro riferimento a un sistema economico fallimentare. Si potrebbe tradurre così: Con un’iniezione di 2.3 trilioni di dollari, il piano della FED supera di molto il salvataggio del 2008\nAbbiamo quindi visto come sia possibile scrivere dei messaggi nella blockchain, anche se non è l’unico modo. Con il passare degli anni ci sono stati degli aggiornamenti che permettono di inserire messaggi in modi differenti. Anche questo esempio è possibile scaricarlo dal nostro repository GitHub.\nAbbiamo utilizzato #IPFS per salvare le due pagine storiche: https://bit.ly/3fJTYzN\nCiao alla prossima\nA destra il titolo storico del The Times — a sinistra Il giornale 10 anni dopo.\n","date":"13 maggio 2020","externalUrl":null,"permalink":"/posts/dove-posso-leggere-il-famoso-titolo-de-the-times/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Dove posso leggere il famoso titolo de The Times? #### Seguici su Bitcoin in Action. # Oggi rispondo a una domanda che mi ha fatto Alberto che chiede: *Il primo blocco generato da Bitcoin è collegato a un famoso titolo del giornale * *The Times * *, testimoniando anche la data della sua nascita.\n","title":"Dove posso leggere il famoso titolo de The Times?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Bitcoin in Action # Il nuovo canale youtube # In occasione del terzo halving di Bitcoin, abbiamo deciso di aprire il canale youtube “Bitcoin in Action”.\nCome ogni sezione del libro e del video corso, ogni volta che parliamo di “in Action” parliamo di mettere in pratica il protocollo Bitcoin con esempi pratici e replicabili.\nL’obiettivo del canale è quello di rispondere a domande comuni che abbiamo ricevuto in questo periodo, e perché no, anche a domande che riceveremo nei commenti.\nNel primo video rispondiamo a Paolo che ci domanda: che cosa è la chiave privata e perchè la firma digitale è cosi importante nel protocollo Bitcoin?\nIl secondo video è dedicato all’halving di Bitcoin, “scattato” ieri sera (11 Maggio 2020) al blocco 630.000.\nOltre a una piccola spiegazione, abbiamo messo in pratica il dimezzamento del reward, utilizzando la regtest.\nTutti gli esempi sono replicabili, potete scaricare il codice sorgente dal nostro repository GitHub! Che dire, seguiteci in questa nuova avventura 🚀\nCanale youtube —Bitcoin in Action\n","date":"12 maggio 2020","externalUrl":null,"permalink":"/posts/bitcoin-in-action/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Bitcoin in Action # Il nuovo canale youtube # In occasione del terzo halving di Bitcoin, abbiamo deciso di aprire il canale youtube “Bitcoin in Action”.\n","title":"Bitcoin in Action","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL I nostri libri alla libreria Hoepli di Milano. Siamo euforici! A partire da ieri (4 marzo 2020) i nostri libri sono disponibili presso la libreria Hoepli di Milano (Via Ulrico Hoepli). # Sembra incredibile che un progetto nato tra due amici sia arrivato sugli scaffali della libreria più fornita di Milano.\nPerché siamo euforici? Beh semplice!\nOltre 2000 metri quadrati di libreria con esposizione di libri su cinque piani. Oltre 40 metri lineari di vetrine. 2 chilometri di scaffali pieni di libri. Più di 100.000 libri, di cui circa il 20% in lingua straniera. La Grande Libreria Internazionale Hoepli è una tra le più grandi librerie in Italia e in Europa. Bitcoin dalla teoria alla praticaeBitcoin 199 domande— Milano libreria Hoepli I testi inerenti a Bitcoin e Blockchain sono tutti nella sezione economia, ma fortunatamente il personale dopo aver preso visione dei nostri testi, ha deciso di inserirli nel reparto informatica.\nEffettivamente non facciamo mai riferimento a prezzi o a grafici, a noi interessa sapere come funziona il protocollo Bitcoin utilizzando la pratica.\nIl prezzo non esiste.\nEssere affiancati a testi del calibro di “Mastering Ethereum” e la bibbia del settore “Mastering Bitcoin” dell’autore Andreas Antonopoulos, è per noi un onore senza pari.\nPer l’occasione i libri sono stati aggiornati con l’errata corrige segnalata dai nostri lettori nel repository Github, è stata migliorata l’impaginazione e abbiamo creato delle nuove grafiche social, grazie alla società BAR (civediamoalbar.com).\nGli autori —Alessandro AgliettieAlessio Barnini\nIl nostro progetto non ha intenzione di fermarsi, tutt’altro! È in fase di revisione la versione in inglese “Bitcoin From theory to practice”, la stesura di un nuovo libro e altre novità che condivideremo al più presto!\nIl bizantino alla libreria InternazionaleHoepli.\nIl bizantino al duomo di Milano.\n","date":"5 marzo 2020","externalUrl":null,"permalink":"/posts/i-nostri-libri-alla-libreria-hoepli-di-milano/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL I nostri libri alla libreria Hoepli di Milano. Siamo euforici! A partire da ieri (4 marzo 2020) i nostri libri sono disponibili presso la libreria Hoepli di Milano (Via Ulrico Hoepli). # Sembra incredibile che un progetto nato tra due amici sia arrivato sugli scaffali della libreria più fornita di Milano.\n","title":"I nostri libri alla libreria Hoepli di Milano.","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Non essere asociale. # Durante lo studio di Bitcoin dalla teoria alla pratica e il relativo video-corso abbiamo fatto un pò di esperimenti.\nUno di questi è far comunicare due o più nodi sullo stesso computer.\nFacendo riferimento all’articolo precedente, utilizziamo un nuovo demone e cerchiamo di farli comunicare.\nSappiamo che di default le porte del demone di Bitcoin sono 18444 e la 18443, per quanto riguarda l’ambiente di regtest.\nAmbiente: Porta - Porta RPC Mainnet:8333 - 8332Testnet:18333 - 18332Regtest:18444 - 18443 Quello che dobbiamo fare è creare un altro file di configurazione per il secondo nodo con un datadir differente e far comunicare i due nodi.\nPassiamo alla action!\nQuesto è il mio percorso dove mi posizionerò\n$ pwd /Users/barno/Documents/bizantino Al suo interno ho due cartelle, una un collegamento alla cartella di default di Bitcoin e l’altra è una cartella vuota pronta ad ospitare il secondo nodo.\n$ ls -l total 0 lrwxr-xr-x 1 barno staff 48 Jan 13 16:30 Bitcoin -\u0026gt; /Users/barno/Library/Application Support/Bitcoin drwxr-xr-x 4 barno staff 128 Jan 13 17:23 Bitcoin_2 All’interno della cartella Bitcoin_2 creo un file bitcoin_nodo2.conf e inserisco questa configurazione.\ndatadir=/Users/barno/Documents/bizantino/Bitcoin_2 debug=1 regtest=1 # Options only for mainnet [main] # Options only for testnet [test] # Options only for regtest [regtest] port=28444 rpcport=28443 addnode=localhost:18444 Come vedete sono stati cambiati la porta e la rpcport.\nSenza il file di configurazione sarebbe stato molto più prolisso e soggetto ad errori, come si può vedere dall’esempio sotto.\nbitcoind -datadir=$PWD/regtest2 -regtest -debug=1 -rpcport=28443 -port=28444 -addnode=localhost:18444 Per avere informazioni sui parametri da utilizzare, potete sempre utilizzare bitcoind -help \u0026mdash;\nLe porte utilizzabili.\n-port Listen for connections on \u0026lt; port \u0026gt; (default: 8333, testnet: 18333, 18444 regtest) -rpcport Listen for JSON-RPC connections on (default: 8332, testnet: 18332, regtest: 18443) -conf = Specify configuration file. Relative paths will be prefixed by datadir location. (default: bitcoin.conf) -connect = Connect only to the specified node; -noconnect disables automatic connections (the rules for this peer are the same as for -addnode). This option can be specified multiple times to connect to multiple nodes. Passeremo al secondo nodo l’informazione necessaria per caricare il file di configurazione desiderato.\n-conf=/Users/barno/Documents/bizantino/Bitcoin_2/bitcoin_nodo2.conf avremo a disposizione due nodi sullo stesso computer.\nquesto percorso sarà diverso nel vostro computer /Users/barno/Documents/bizantino/Bitcoin_2.\nLanciamo quindi il demone di *default *(quello che abbiamo configurato nel precedente tutorial) e il secondo demone\n$ bitcoind $ bitcoind -conf=$PWD/bitcoin_nodo2.conf NB: utilizzo $PWD perchè sono nella stessa cartella del file bitcoin_nodo2.conf. Per utilizzare il client del secondo demone devo passare sempre il parametro\n-conf Ehi vi vedete?\n$ bitcoin-cli -conf=$PWD/bitcoin_nodo2.conf getconnectioncount1 Sì si vedono, infatti il comando che conta le connessioni ha come risultato 1! Adesso facciamo la grande prova, miniamo 101 blocchi sul nodo di default e verifichiamo se sul nodo 2 sono visibili.\nPer prima cosa dobbiamo ottenere un address nel nodo di default.\n$ ADDR=`bitcoin-cli getnewaddress` Lo salvo direttamente nella variabile d’ambiente ADDR così da agevolare la scrittura dei comandi successivi.\nPer visualizzare il valore di $ADDR, possiamo utilizzare echo\n$ echo $ADDR 2N6yRwpVGdFsD1gBBhGTE8ijVmNwiVz6myZ Miniamo!\n$ bitcoin-cli generatetoaddress 101 $ADDR Otteniamo così un output molto corposo, ovvero 101 block header hash. Per verificare che i blocchi si siano propagati correttamente, conto il numero di blocchi sul secondo nodo.\n$ bitcoin-cli -conf=$PWD/bitcoin_nodo2.conf getblockcount 101 Si! Stanno parlando e sono perfettamente sincronizzati.\nDove sono salvate le relative blockchain? Nel demone di default troviamo i blocchi nel percorso predefinito:\n/Users/barno/Library/Application Support/Bitcoin/regtest Il secondo demone utilizza la -datadir specificata nel file di conf.\n/Users/barno/Documents/bizantino/Bitcoin_2/regtest Potrebbe essere interessante iniziare a fare delle transazioni tra due nodi? Direi di si!\nBitcoin dalla teoria alla pratica\n","date":"11 febbraio 2020","externalUrl":null,"permalink":"/posts/due-nodi-bitcoin-sullo-stesso-computer/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Non essere asociale. # Durante lo studio di Bitcoin dalla teoria alla pratica e il relativo video-corso abbiamo fatto un pò di esperimenti.\nUno di questi è far comunicare due o più nodi sullo stesso computer.\n","title":"Due nodi Bitcoin sullo stesso computer.","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Transazioni in regtest # Come posso creare una transazioni tra due nodi? # Nel tutorial precedente abbiamo visto come sia possibile far comunicare due nodi sullo stesso computer e come si sincronizzano quando dei blocchi vengono minati.\nQ: Quindi possiamo fare anche una transazione e vedere che essa sia propagata e capire tutti i passaggi che subisce prima che faccia parte della blockchain? R: Si.\nSe volete avere un ambiente “pulito” potete cancellare le cartelle regtest dei rispettivi nodi, così da avere zero blocchi minati e nessun reward assegnato.\nInseriamo in entrambi i nodi l’opzione txindex=1 in modo tale da avere tutta l’indicizzazione delle transazioni.\n-txindex Maintain a full transaction index, used by the getrawtransaction rpc call (default: 0)\n$ vim bitcoin_nodo2.conf Configurazione nodo 2\nstessa operazione per il nodo di default il cui percorso (default) nel mio computer è:\n/Users/barno/Library/Application Support/Bitcoin/bitcoin.conf Avviamo di nuovo entrambi i nodi. Se avete cancellato la cartella regtest (come me), dovete seguire i passaggi del tutorial precedente così da avere a disposizione 50 bitcoin su un’indirizzo. Già 50 bitcoin, nessun halving era ancora stato fatto.\nOttengo quindi 3 indirizzi, 2 dal nodo di default (bizantino) e 1 dal nodo2.\n$ ADDR=`bitcoin-cli getnewaddress bizantino`$ ADDR_RESTO=`bitcoin-cli getnewaddress bizantino_resto`$ ADDR_DEST=`bitcoin-cli -conf=$PWD/bitcoin_nodo2.conf getnewaddress destinatario` Dal nome delle variabili d’ambiente scelte si capisce il loro scopo. Mino 101 blocchi per ottenere 50 bitcoin con l’indirizzo $ADDR. Perché proprio 101? Per ottenere un reward spendibile e soddisfare la COINBASE_MATURITY.\n$ bitcoin-cli generatetoaddress 101 $ADDR Adesso entrambi i nodi devono avere 101 blocchi, se così non fosse torna al tutorial precedente.\nCon il comando listunpsent otteniamo tutte le UTXO disponibili.\n$ bitcoin-cli listunspent [{\u0026#34;txid\u0026#34;: \u0026#34;75b91cf262c98bdd57b0c3f2ec1a2597cceadc0cc2ef0a103e1a0013d81e332f\u0026#34;,\u0026#34;vout\u0026#34;: 0,\u0026#34;address\u0026#34;: \u0026#34;2MvXFfHyxr1U4icdyw1nWM3FZdraXMsfMAq\u0026#34;,\u0026#34;label\u0026#34;: \u0026#34;bizantino\u0026#34;,\u0026#34;redeemScript\u0026#34;: \u0026#34;00147700ead177801037c5ec0ad20d1cf7637fe55fde\u0026#34;,\u0026#34;scriptPubKey\u0026#34;: \u0026#34;a91423f06dcefe3a139e930f059e99b47e9bf908c17f87\u0026#34;,\u0026#34;amount\u0026#34;: 50.00000000,\u0026#34;confirmations\u0026#34;: 101,\u0026#34;spendable\u0026#34;: true,\u0026#34;solvable\u0026#34;: true,\u0026#34;desc\u0026#34;: \u0026#34;sh(wpkh([87aac41a/0\u0026#39;/0\u0026#39;/0\u0026#39;]03d5f548512ed8f90773e531440fd4ce1843ee5ddf1097b7731a4464803df468c4))#qksqangj\u0026#34;,\u0026#34;safe\u0026#34;: true}] Quello che interessa a noi per fare la transazione è la txid e il vout, per questo le salviamo in due variabili d’ambiente.\n$ TXID=75b91cf262c98bdd57b0c3f2ec1a2597cceadc0cc2ef0a103e1a0013d81e332f $ VOUT=0 Siamo pronti a creare la transazione utilizzando il comando createrawtransaction.\nSposteremo 1 bitcoin verso il destinatario, e 48.998 bitcoin verso l’indirizzo di resto.\nUna bella mancia per il miner! Il risultato che otteniamo, la transaction data, la salviamo dentro la variabile d’ambiente TX_DATA.\n$ TX_DATA=`bitcoin-cli createrawtransaction \u0026#39;[{\u0026#34;txid\u0026#34;:\u0026#34;\u0026#39;$TXID\u0026#39;\u0026#34;,\u0026#34;vout\u0026#34;:\u0026#39;$VOUT\u0026#39;}]\u0026#39; \u0026#39;[{\u0026#34;\u0026#39;$ADDR_RESTO\u0026#39;\u0026#34;:48.998},{\u0026#34;\u0026#39;$ADDR_DEST\u0026#39;\u0026#34;:1}]\u0026#39;` Per vedere il contenuto della variabile d’ambiente,\n$ echo $TX_DATA NB: Nel libro Bitcoin dalla teoria alla pratica e nel video-corso viene analizzato byte per byte la transaction data.\nQuello che dobbiamo fare adesso è firmare la transazione con la chiave privata di $ADDR che posso ottenere con il comando dumpprivkey.\n$ PK=`bitcoin-cli dumpprivkey $ADDR` Attenzione, non deriviamo la chiave privata dalla chiave pubblica ($ADDR) ma la otteniamo da una serie di indirizzi già pronti per il nostro wallet.\nPer maggiori informazioni guarda il comando dumpwallet.\nBene, firmiamo la transazione.\n$ bitcoin-cli signrawtransactionwithkey $TX_DATA \u0026#39;[\u0026#34;\u0026#39;$PK\u0026#39;\u0026#34;]\u0026#39; { \u0026#34;hex\u0026#34;: \u0026#34;020000000001012f331ed813001a3e100aefc20cdceacc97251aecf2c3b057dd8bc962f21cb97500000000171600147700ead177801037c5ec0ad20d1cf7637fe55fdeffffffff02808cf1230100000017a91489734e8089e307b4ac82eab729519abb2674cb168700e1f5050000000017a9143166112f2219dfd7bdfbabab70bef4ecab850a4587024730440220439be864b4520e29360341b429e9f16da89c5c44e98205025fb3b496e8b296990220638894c61364c3acca31b8acb80314b356713de0f8d11cfa03985bb8ae8c91cb012103d5f548512ed8f90773e531440fd4ce1843ee5ddf1097b7731a4464803df468c400000000\u0026#34;, \u0026#34;complete\u0026#34;: true } Per comodità salviamo dentro la variabile d’ambiente TX_DATA_SIGNED il valore di hex. Inviamo la transazione.\n$ bitcoin-cli sendrawtransaction $TX_DATA_SIGNED d24f8de59e839ee3956f27b44ce8ed980405725acde903e5494450934f9a4db2 Quello che otteniamo è la TXID. Che cosa succede adesso? La transazione è stata inviata ma non è ancora stata minata, quindi dove si trova? Nella mempool! Dobbiamo essere in grado di verificare la sua presenza in entrambi i nodi.\nEstratto dellibroecorsoBitcoin dalla teoria alla pratica\n$ bitcoin-cli getrawmempool [ \u0026#34;d24f8de59e839ee3956f27b44ce8ed980405725acde903e5494450934f9a4db2\u0026#34; ] $ bitcoin-cli -conf=$PWD/bitcoin_nodo2.conf getrawmempool [ \u0026#34;d24f8de59e839ee3956f27b44ce8ed980405725acde903e5494450934f9a4db2\u0026#34; ] Esatto, entrambi i nodi hanno a disposizione la transazione ed entrambi potrebbero minarla. Per verificare il candidate block il comando è getblocktemplate.\n$ bitcoin-cli getblocktemplate \u0026#39;{\u0026#34;rules\u0026#34;: [\u0026#34;segwit\u0026#34;]}\u0026#39; Quindi la transazione è verificata ma non confermata. Possiamo trovare conferma dell’asserzione appena fatta con il comando getwalletinfo sul nodo2.\n$ bitcoin-cli -conf=$PWD/bitcoin_nodo2.conf getwalletinfo {...\u0026#34;balance\u0026#34;: 0.00000000,\u0026#34;unconfirmed_balance\u0026#34;: 1.00000000,\u0026#34;immature_balance\u0026#34;: 0.00000000,\u0026#34;txcount\u0026#34;: 1,...} Possiamo leggere “unconfirmed_balance”: 1 ! Bene, miniamo facendo 6 blocchi così da rendere la transazione sicura.\n$ bitcoin-cli generatetoaddress 6 $ADDR Bene, la mempool è vuota e il destinatario ha a disposizione 1 bitcoin!\n$ bitcoin-cli -conf=$PWD/bitcoin_nodo2.conf getwalletinfo...\u0026#34;balance\u0026#34;: 1.00000000,... Possiamo verificare le operazioni sui log dei demoni, oppure utilizzando tail sul file di log.\n$ tail -F regtest/debug.log Ci provo?\n$ bitcoin-cli sendrawtransaction $TX_DATA_SIGNED error code: -27error message:Transaction already in block chain Il double spending non è andato a buon fine.\nCon questo piccolo tutorial è possibile iniziare a studiare il protocollo Bitcoin e a seguire il libro Bitcoin dalla teoria alla pratica o se preferisci il video-corso .\n","date":"3 febbraio 2020","externalUrl":null,"permalink":"/posts/transazioni-in-regtest/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Transazioni in regtest # Come posso creare una transazioni tra due nodi? # Nel tutorial precedente abbiamo visto come sia possibile far comunicare due nodi sullo stesso computer e come si sincronizzano quando dei blocchi vengono minati.\n","title":"Transazioni in regtest","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Cerchiamo di mantenere pulito # Nell’articolo precedente abbiamo installato il nodo Bitcoin sul proprio computer e abbiamo passato come parametro -regtest per interagire in locale.\nUn parametro non è cosi scomodo da passare ogni volta che vogliamo fare delle chiamate, ma quando il comando da eseguire diventa\nbitcoind -datadir=$PWD/regtest2 -regtest -debug=1 -rpcport=28443 -port=28444 -addnode=localhost:18444 non è il massimo.\nFortunatamente possiamo utilizzare un file di configurazione per gestire uno o più nodi sullo stesso computer.\nNel repository ufficiale Bitcoin possiamo trovare un esempio di file di configurazione.\nDegno di nota anche questo link che ti aiuta a crearlo realtime.\nDi default il nodo Bitcoin effettua una ricerca del file bitcoin.conf nella datadir di default. Nel Mac è ~/Library/Application Support/Bitcoin.\nCosì, creando il file bitcoin.conf all’interno della cartella di default possiamo impostare il parametro regtest senza doverlo passare come parametro.\nregtest=1# Options only for mainnet [main]# Options only for testnet [test]# Options only for regtest [regtest] Adesso possiamo utilizzare il client senza passare nessun parametro.\n$ bitcoin-cli getblockcount 0 Otteniamo lo stesso risultato del tutorial precedente.\nNel prossimo tutorial vedremo come far comunicare due o più nodi sullo stesso computer!\nconfigurazione base per bitcoin.conf\n","date":"27 gennaio 2020","externalUrl":null,"permalink":"/posts/file-di-configurazione-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Cerchiamo di mantenere pulito # Nell’articolo precedente abbiamo installato il nodo Bitcoin sul proprio computer e abbiamo passato come parametro -regtest per interagire in locale.\nUn parametro non è cosi scomodo da passare ogni volta che vogliamo fare delle chiamate, ma quando il comando da eseguire diventa\n","title":"File di configurazione Bitcoin","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL The pocket book that you were looking for! # Nowadays we hear a lot about Bitcoin and blockchain, but few people know how it works.\nIt’s true that I don’t know how a car works but I use it anyway! But it’s also true that before using a car you should study to get your driving license.\nFor that reason we wrote two books.\nThe first one is “Bitcoin dalla teoria alla pratica” available in Italian language,(the English translation called “Bitcoin from theory to practice” is coming soon) where you can find the tech part of the Bitcoin protocol.\nFor example you will be able to handle a transaction from scratch, know more about private and public keys and so on.\nWith the help of this book you can figure out how Bitcoin works using a real node. Check this video to understand what you can learn!\nBitcoin dalla teoria alla pratica\nThe second one is called Bitcoin 199 questions.\nAs you can image from the title, you will find a lot of answered questions :). The book is made of 4 parts.\nEntry level: In this section you can find the most common questions, like “What is Bitcoin?”, “What is a block?”, “What is an address?” and so on.\nIntermediate Level: Ok, now you know the Bitcoin basics (or you just learnt them in the previous level) and you want to broaden your knowledge. Do you know what a *BIP *is? Who confirms the transactions?\nAdvanced Level: S o you like Bitcoin huh? In this section you can find deeper topics: “What is a fork?”, “What does *RPC *stand for and what is it?”, “What are the differences between ECDSA and ECC?”.\nNerd Level: My favourite level! Why does my address starts with the number 1? And why does it sometimes starts with the number 3? What is P2PKH?\nBitcoin 199 questions\nAs you may imagine, we never talk about the price of bitcoin or technical analysis, for us the price doesn’t exist!\nGood news: if you have A Kindle unlimited subscription, you can read our pocket book for free!\n","date":"22 gennaio 2020","externalUrl":null,"permalink":"/posts/bitcoin-199-questions/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL The pocket book that you were looking for! # Nowadays we hear a lot about Bitcoin and blockchain, but few people know how it works.\nIt’s true that I don’t know how a car works but I use it anyway! But it’s also true that before using a car you should study to get your driving license.\n","title":"Bitcoin 199 questions","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Da dove inizio per imparare Bitcoin? # Regtest, la blockchain locale # Molte persone vorrebbero imparare a utilizzare il protocollo Bitcoin, oppure vorrebbero aumentare la propria conoscenza e non sanno da dove iniziare.\nNoi siamo sempre stati convinti che per capire realmente una qualsiasi tecnologia dobbiamo metterla in pratica.\nAbbiamo già scritto una guida per permettere di sincronizzare l’intera blockchain in un dispositivo esterno come Raspberry, ma per prove più “quick and dirty” vi consigliamo di utilizzare la regtest.\nLa sandbox, dove puoi fare le tue prove senza farti male :)\nChe cosa è la regtest? Potremo definire la regtest la blockchain locale. È il punto di partenza per sviluppare applicazioni basate su blockchain e/o per iniziare a studiarla.\nSe sei uno sviluppatore questo non ti dovrebbe sorprendere, solitamente abbiamo 4 ambienti durante lo sviluppo di una qualsiasi applicazione, locale, dev, staging, prod.\nQuindi possiamo replicare l’ambiente di produzione Bitcoin sul proprio computer, compreso il lavoro sporco del miner.\nStai calmo, i bitcoin che mini non valgono niente!\nEcco come fare. Scarica l’ultima versione di Bitcoin demon. (ad oggi 0.19.0.1)\n$ curl -O https://bitcoin.org/bin/bitcoin-core-0.19.0.1/bitcoin-0.19.0.1-osx64.tar.gz Per prima cosa verifichiamo che il checksum ottenuto con l’algoritmo SHA256 sul pacchetto tar appena scaricato sia fedele a quello che troviamo all’interno di SHA256SUM.ASC, così da essere sicuri di aver scaricato il pacchetto desiderato.\n$ sha256sum --check SHA256SUMS.asc --ignore-missing risultato:\nbitcoin-0.19.0.1-osx64.tar.gz: OKsha256sum: WARNING: 20 lines are improperly formatted NB: tutti i file e i comandi sono eseguiti all’interno della stessa cartella.\nScarichiamo anche le relative firme per verificare l’integrità del pacchetto.\nSe non sei pratico di PGP, guarda questo articolo!\n$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/SHA256SUMS.asc$ wget https://bitcoin.org/laanwj-releases.asc$ gpg --import laanwj-releases.asc$ gpg --verify SHA256SUMS.asc gpg: Signature made Sun Nov 24 10:14:42 2019 CET gpg:using RSA key 90C8019E36C2E964 gpg: Good signature from \u0026#34;Wladimir J. van der Laan (Bitcoin Core binary release signing key) \u0026lt;laanwj@gmail.com\u0026gt;\u0026#34; [unknown] Adesso che siamo sicuri di aver scaricato il pacchetto giusto, possiamo estrarlo con il comando\nEstraiamo quindi il pacchetto che abbiamo scaricato:\n$ tar -xvf bitcoin-0.19.0.1-osx64.tar.gz e spostare l’eseguibili nel percorso $PATH di default.\n$ sudo mkdir -p /usr/local/bin$ sudo cp bitcoin-0.19.0.1/bin/bitcoin* /usr/local/bin/. In questo modo potremo richiamare il demone e il client Bitcoin da qualsiasi percorso, così da evitare di inserire il percorso assoluto o relativo dell’eseguibile.\nPer verificare che tutto sia corretto, potete lanciare il comando.\n$ bitcoind --versionBitcoin Core version v0.19.0.1 Se volete verificare il percorso del vostro demone potete utilizzare il comando which.\n$ which bitcoind/usr/local/bin/bitcoind Ok, siamo pronti per lanciare il nostro demone e utilizzare la regtest. per farlo è sufficiente passare come parametro -regtest.\n$ bitcoind -regtest Otteniamo cosi un pò di output, ovvero il log del nostro nodo. In un altra finestra del terminale possiamo iniziare ad utilizzarlo tramite il client che abbiamo già spostato precedentemente nel percorso $PATH.\n$ bitcoin-cli -regtest getblockcount0 Come vedete non abbiamo nessun blocco, infatti la blockchain è “vergine”. Dove viene salvata la blockchain?\nPer il sistema operativo OSX la puoi trovare nel percorso:\n~/Library/Application Support/Bitcoin/ Per linux e windows, vi rimando alla pagina wiki di riferimento. https://en.bitcoin.it/wiki/Data_directory.\nAdesso con il comando:\n$ bitcoin-cli help Hai la lista di comandi da utilizzare per iniziare a divertirti!\nCon questo piccolo tutorial puoi anche seguire il nostro libro Bitcoin dalla teoria alla pratica disponibile sia su Amazon sia sul nostro sito ufficiale corsobitcoin.com.\nBitcoin dalla teoria alla pratica\n","date":"20 gennaio 2020","externalUrl":null,"permalink":"/posts/da-dove-inizio-per-imparare-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Da dove inizio per imparare Bitcoin? # Regtest, la blockchain locale # Molte persone vorrebbero imparare a utilizzare il protocollo Bitcoin, oppure vorrebbero aumentare la propria conoscenza e non sanno da dove iniziare.\n","title":"Da dove inizio per imparare Bitcoin?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Pretty Good Privacy # PGP/GPG come verificare i pacchetti Bitcoin e Electrum. # Ma ti pare che capita a me? Ecco il primo pensiero che ci viene in mente quando scarichiamo un software. È molto interessante come nella prima pagina di Electrum ci sia questo messaggio:\nWarning: Electrum versions older than 3.3.4 are susceptible to phishing. Do not download Electrum from another source than electrum.org, and learn to verify GPG signatures.\nDon’t trust, verify!\nQ: Che cosa significa PGP? R: Pretty good privacy, scritto da Phil Zimmermann e ora fa parte della PGP Corporation. È un software di crittografia.\nQ: Che cosa significa GPG? R: Gnu Privacy Guard, è un aggiornamento di PGP.\nQ: Come posso essere sicuro di aver scaricato esattamente il pacchetto corretto? R: Verificando la firma digitale di quel pacchetto.\nQ: Con cosa si verifica la firma digitale? R: Con la chiave pubblica del firmatario.\nQ: Come posso recuperare la chiave pubblica del firmatario? R: Puoi recuperare la chiave pubblica dal sito di riferimento o utilizzando dei keyserver inserendo il suo fingerprint.\nOk sono pronto a scaricare e a verificare il pacchetto Bitcoin!\n/posts/pretty-good-privacy/\nPrima di tutto è necessario installare GPG. Una volta installato potete verificare la versione in uso.\n$ gpg --version gpg (GnuPG/MacGPG2) 2.2.17 Andiamo quindi a scaricare l’ultimo pacchetto di Bitcoin Core dal sito ufficiale https://bitcoin.org/en/version-history. Ad oggi è lo 0.19.0.1.\nDato che io sto utilizzando un Mac, scaricherò la versione osx64 https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/ e le relative firme https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/SHA256SUMS.asc\nSe non disponiamo dell’interfaccia grafica, possiamo utilizzare il comando wget.\n$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/bitcoin-0.19.0.1-osx64.tar.gz $ wget https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/SHA256SUMS.asc Per prima cosa verifichiamo che il checksum ottenuto con l’algoritmo SHA256 sul pacchetto tar appena scaricato sia fedele a quello che troviamo all’interno di SHA256SUM.ASC, così da essere sicuri di aver scaricato il pacchetto desiderato.\n$ sha256sum --check SHA256SUMS.asc --ignore-missing risultato:\nbitcoin-0.19.0.1-osx64.tar.gz: OKsha256sum: WARNING: 20 lines are improperly formatted NB: tutti i file e i comandi sono eseguiti all’interno della stessa cartella.\nAdesso dobbiamo verificare che il pacchetto provenga esattamente dal mittente voluto. Dobbiamo quindi utilizzare la chiave pubblica che verifica la firma.\nSe hai bisogno di una rinfrescata sulla crittografia, guarda qui* 👀*\nPossiamo ottenere il fingerprint della relativa chiave pubblica a questo indirizzo https://bitcoin.org/en/full-node#osx-daemon.\nIl fingerprint è: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964\nNon ci resta che scaricarla e verificare l’integrità del pacchetto. Per prima cosa verifichiamo se abbiamo già quella chiave, elencando tutte le chiavi nel nostro computer, con il comando:\n$ gpg --list-keys o per essere più precisi:\n$ gpg --fingerprint \u0026#34;01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964\u0026#34; Se non abbiamo nessun risultato, dobbiamo importarla. Per farlo ci sono diversi metodi. Metodo 1: Interrogare il keyserver tramite fingerprint.\n$ gpg --keyserver hkps://keyserver.ubuntu.com --receive-keys “01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964” Metodo 2: Scaricare la chiave pubblica dal sito Bitcoin e importarla.\n$ wget https://bitcoin.org/laanwj-releases.asc$ gpg --import laanwj-releases.asc Metodo 3: A questo link https://bitcoincore.org/en/download/ è possibile trovare l’id chiavi 01EA5486DE18A882D4C2684590C8019E36C2E964\n$ gpg --keyserver keys.gnupg.net --search-key 01EA5486DE18A882D4C2684590C8019E36C2E964 È possibile anche cercarla da https://keyserver.ubuntu.com/ inserendo 0x01EA5486DE18A882D4C2684590C8019E36C2E964. Dopo aver scelto uno dei metodi, possiamo verificare se è stata importata utilizzando i comandi sopra riportatati, list-keys o fingerprint.\n$ gpg --fingerprint \u0026#34;01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964\u0026#34; pub rsa4096 2015–06–24 [SC] [expires: 2022–02–10] 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964 uid [ unknown] Wladimir J. van der Laan (Bitcoin Core binary release signing key) \u0026lt;laanwj@gmail.com\u0026gt; Possiamo finalmente verificare di aver scaricato il pacchetto corretto.\n$ gpg --verify SHA256SUMS.asc gpg: Signature made Sun Nov 24 10:14:42 2019 CETgpg: using RSA key 90C8019E36C2E964gpg: Good signature from \u0026#34;Wladimir J. van der Laan (Bitcoin Core binary release signing key) \u0026lt;laanwj@gmail.com\u0026gt;\u0026#34; [unknown] gpg: WARNING: This key is not certified with a trusted signature!gpg:There is no indication that the signature belongs to the owner.Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964 La verifica è andata a buon fine. Per verificare Electrum il procedimento è molto simile. Tutto è spiegato nel link https://electrum.org/#download. Ecco tutti i passaggi.\n$ wget https://raw.githubusercontent.com/spesmilo/electrum/master/pubkeys/ThomasV.asc$ gpg --import ThomasV.asc$ wget https://download.electrum.org/3.3.8/electrum-3.3.8.dmg$ wget https://download.electrum.org/3.3.8/electrum-3.3.8.dmg.asc$ gpg --verify electrum-3.3.8.dmg.asc gpg: assuming signed data in \u0026#39;electrum-3.3.8.dmg\u0026#39; gpg: Signature made Thu Jul 11 16:26:15 2019 CEST gpg: using RSA key 6694D8DE7BE8EE5631BED9502BD5824B7F9470E6 gpg: Good signature from \u0026#34;Thomas Voegtlin (https://electrum.org) \u0026lt;thomasv@electrum.org\u0026gt;\u0026#34; [unknown] gpg: aka \u0026#34;ThomasV \u0026lt;thomasv1@gmx.de\u0026gt;\u0026#34; [unknown] gpg: aka \u0026#34;Thomas Voegtlin \u0026lt;thomasv1@gmx.de\u0026gt;\u0026#34; [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 6694 D8DE 7BE8 EE56 31BE D950 2BD5 824B 7F94 70E6 Sai chi è figo? Keybase. https://keybase.io/barno\nDon’t trust, Verify. # ","date":"13 gennaio 2020","externalUrl":null,"permalink":"/posts/pretty-good-privacy/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Pretty Good Privacy # PGP/GPG come verificare i pacchetti Bitcoin e Electrum. # Ma ti pare che capita a me? Ecco il primo pensiero che ci viene in mente quando scarichiamo un software. È molto interessante come nella prima pagina di Electrum ci sia questo messaggio:\n","title":"Pretty Good Privacy","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Aggiornare il nodo Bitcoin # Versione 0.19.0.1 # Siamo all’inizio dell’Hanno 2020 (la H sta per Halving 😉) e tra i buoni propositi c’è sempre quello di fare un pò di pulizia, di aggiornare i software e di incrementare le nostre capacità.\nSe avete seguito il nostro tutorial per avere un nodo Raspberry e non avete ancora aggiornato il vostro nodo, avrete la versione 0.18.0 di Bitcoin Core.\nA novembre 2019 è stato rilasciato l’aggiornamento 0.19.0.1, che introduce dei miglioramenti a livello di performance, delle nuove chiamate RPC e rende deprecate delle altre.\nTutti i changelogs sono presenti anche sul repository ufficiale Github.\nEcco come abbiamo aggiornato il nostro Raspberry.\nPer prima cosa ci colleghiamo in ssh.\n$ ssh pi@192.168.1.221 dove 192.168.1.221 è il vostro IP locale, che potrebbe essere diverso dal nostro.\nCi spostiamo nella cartella download dell’utente pi.\n$ cd /home/pi/download e scarichiamo il nuovo Bitcoin core con il comando wget\n$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/bitcoin-0.19.0.1-arm-linux-gnueabihf.tar.gz Scarichiamo anche le relative firme per verificare l’integrità del pacchetto.\n$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/SHA256SUMS.asc$ wget https://bitcoin.org/laanwj-releases.asc Effettuiamo la verifica come mostrato nel tutorial iniziale del Raspberry.\n$ sha256sum --check SHA256SUMS.asc --ignore-missing bitcoin-0.19.0.1-arm-linux-gnueabihf.tar.gz: OKsha256sum: WARNING: 20 lines are improperly formatted L’importante è che ci sia un bell’ OK!\nControlliamo anche le chiavi.\n$ gpg --import./laanwj-releases.asc$ gpg --refresh-keys$ gpg --verify SHA256SUMS.asc risultato:\ngpg: Good signature from “Wladimir J. van der Laan …”Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964 Benissimo, abbiamo scaricato quello che vogliamo. Non ci resta che decomprimere il pacchetto e spostarlo nella cartella bin, cosi da poter interagire globalmente, in quanto /usr/local/bin fa parte del $PATH\nPATH is an environmental variable in Linux and other Unix-like operating systems that tells the shell which directories to search for executable files\n$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games quindi decomprimiamo e spostiamo il tutto.\n$ tar -xvf bitcoin-0.19.0.1-arm-linux-gnueabihf.tar.gz$ sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.19.0.1/bin/* Per verificare che tutto sia andato a buon fine, possiamo ottenere la versione di bitcoind con il comando\n$ bitcoind -version Bitcoin Core version v0.19.0.1 Siamo pronti a verificare le nuove chiamate RPC! Spostiamoci nell’utente bitcoin.\n$ sudo su bitcoin Per prima cosa stoppiamo il demone attualmente in esecuzione.\n$ bitcoin-cli stop Aspettiamo qualche secondo, dato che abbiamo impostato un servizio che rimette in esecuzione il demone se questo per qualche motivo dovesse interrompersi.\nProviamo quindi a lanciare un nuovo comando, ad esempio\n$ bitcoin-cli getbalances devo ottenere un risultato.\nRicordiamoci che con il comando\n$ bitcoin-cli help Possiamo ottenere tutti i comandi a nostra disposizione. Utilizziamo nuovamente l’utente pi, per pulire la cartella download.\n$ exit$ rm -Rf /home/pi/download/* Semplice no?\nNodo Bitcoin dalla teoria alla pratica\n","date":"8 gennaio 2020","externalUrl":null,"permalink":"/posts/aggiornare-il-nodo-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Aggiornare il nodo Bitcoin # Versione 0.19.0.1 # Siamo all’inizio dell’Hanno 2020 (la H sta per Halving 😉) e tra i buoni propositi c’è sempre quello di fare un pò di pulizia, di aggiornare i software e di incrementare le nostre capacità.\n","title":"Aggiornare il nodo Bitcoin","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL La firma digitale # Che cosa è e come si ottiene? # Negli articoli precedenti abbiamo percorso la storia della crittografia, capendo la differenza tra stenografia e la crittografia stessa.\nSteganòs = coperto gràphein = scrivere\nKryptòs = nascondere gràphein = scrivere\nLa firma digitale come si posiziona nello scenario della crittografia?\nPer spiegarla utilizzeremo la crittografia asimmetrica la quale permette di avere due chiavi distinte ma legate matematicamente.\nLe due chiavi prendono il nome di, chiave privata e chiave pubblica.\nCome suggerisce il nome, la chiave privata deve rimanere tale, mentre la chiave pubblica può essere distribuita senza problemi.\nLa chiave pubblica si deriva dalla chiave privata e non è possibile fare l’operazione inversa.\nSiamo proprio sicuri che sia impossibile?\nIn realtà è possibile derivare la chiave privata partendo dalla chiave pubblica, utilizzando un attacco informatico che prende il nome di brute force.\nDobbiamo anche dire che è come trovare un atomo nell’universo.\nPer dare un’idea di grandezza stiamo parlando di 1 su 150,000 miliardi miliardi miliardi miliardi miliardi miliardi miliardi miliardi.\nOtteniamo 3 informazioni molto importanti utilizzando firma digitale, per capirle immaginando 3 persone, Alice, Bob e Peter (fantasia eh?). Integrità: Il messaggio non deve essere alterato durante la trasmissione.\nBob manda un messaggio a Alice con scritto W i bitcoin. Peter lo intercetta cambiandolo con W gli ether. Alice deve essere in grado di accorgersi di tale cambiamento. Autenticità: Alice deve essere sicura che il messaggio che ha ricevuto sia stato inviato da Bob, e non da Peter che si è *spacciato *per Bob. Non ripudio: il mittente non potrà disconoscere il messaggio che ha firmato.\nFacendo riferimento al titolo dell’articolo, cerchiamo di capire come ottenere la firma digitale utilizzando il terminale.\nCreiamo due cartelle Alice e Bob.\nAll’interno della cartella di Alice, genero la chiave privata utilizzando ECC ( Elliptic Curve Cryptography ), proprio la curva ellittica utilizzata in Bitcoin.\nopenssl ecparam -genkey -name secp256k1 -rand /dev/urandom -noout -out private.pem Abbiamo ottenuto private.pem, la chiave privata che utilizzeremo per derivare la chiave pubblica, utilizzando il seguente comando.\nopenssl ec -in private.pem -pubout -out public.pem Bene, abbiamo ottenuto anche la chiave pubblica (public.pem). Creiamo un messaggio da inviare a Bob e lo salviamo dentro messaggio_amore.txt.\necho “Bob ti Amo! By la tua Alice” \u0026gt; messaggio_amore.txt Abbiamo tutto il necessario per creare la firma digitale. La chiave privata e il messaggio.\nopenssl dgst -sha256 -sign private.pem messaggio_amore.txt \u0026gt; signature.bin Abbiamo ottenuto la firma, salvandola nel file signature.bin ( ECDSA: Elliptic Curve Digital Signature Algorithm). Adesso possiamo inviare la firma, il messaggio e la nostra chiave pubblica a Bob, cosi da metterlo in condizione di verificare il messaggio!\ncp./{public.pem,signature.bin,messaggio_amore.txt}../Bob \u0026amp;\u0026amp; cd../Bob Bob può verificare se il messaggio d’amore sia stato veramente inviato dalla sua dolce metà, utilizzando la chiave pubblica di Alice, il messaggio e la firma.\nopenssl dgst -sha256 -verify public.pem -signature signature.bin messaggio_amore.txt Verifica confermata! Bob adesso è sicuro che il mittente sia proprio Alice!\nPerchè? Perchè Alice è l’unica che può fornire una firma che sia comprovata dalla sua chiave pubblica!\nNon ci credete? Modificate il messaggio e applicate di nuovo la verifica!\nÈ necessario conoscere le basi per imparare e capire il protocollo Bitcoin! Questo tipo di approccio è stato utilizzato nel nostro libro Bitcoin dalla teoria alla pratica acquistabile su Amazon e nei corsi Udemy.\n","date":"2 dicembre 2019","externalUrl":null,"permalink":"/posts/la-firma-digitale/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL La firma digitale # Che cosa è e come si ottiene? # Negli articoli precedenti abbiamo percorso la storia della crittografia, capendo la differenza tra stenografia e la crittografia stessa.\n","title":"La firma digitale","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL La storia dei nostri due libri # Bitcoin dalla teoria alla pratica e Bitcoin 199 domande # In questo articolo non vogliamo parlare di Bitcoin, ma vogliamo raccontarvi la storia di come sono nati i nostri due libri, così da aiutare chi volesse scriverne uno proprio. Come già raccontato in qualche articolo precedente abbiamo prima fatto il videocorso e poi abbiamo riordinato i copioni per creare un libro. Ma dietro la frase “riordinato i copioni” c’è un mondo.\nVuoi scrivere un libro? Questi appunti potrebbero interessarti. Problema n°1: dove scrivere il libro. Dobbiamo collaborare quindi utilizziamo Google doc. # Abbiamo utilizzato Code blocks per formattare gli snippet di codice **Pro:\n**Possibilità di collaborare. Possibilità di mandare le bozze alle case editrici. Sempre accessibile. Contro: - Il file è diventato veramente lento quando il libro è aumentato di pagine. Il plug-in Code blocks quasi inutilizzabile all’aumentare delle pagine. Google doc non offre tutte le opzioni che ci servivano a noi, ad esempio gestione margini, stili griglie. Oppure siamo noi che non lo sappiamo usare :) Durante la scrittura delLibro Bitcoin dalla teoria alla pratica Problema n°2: ISBN. ISBN è l\u0026rsquo;acronimo di International Standard Book Number. Grazie a questo standard è possibile riconoscere in modo univoco un libro. Amazon offre gratuitamente ISBN, però ci siamo detti “Associare i nostri nomi al libro è importante”.\nSostanzialmente con l’acquisto del codice ISBN (80€), i nostri nomi sono collegati con il nostro libro in tutto il mondo. Abbiamo trovato molto utile il post di libroza. Problema n°3: Case editrici. Chi ci pubblica?\nCome facciamo a contattare le case editrici?\nCome funziona e quanto ci costerà?\nQuante copie dobbiamo prestampare?\nCome dobbiamo impaginarlo?\nQueste sono state solo alcune domande che ci siamo posti dato che siamo completamente dei neofiti.\nAvevamo il libro completo su Google doc, condividerlo per noi è stato molto semplice.\nAbbiamo quindi dato accesso controllato, ovvero abbiamo potuto vedere chi ha acceduto al nostro documento cosi da sperare in un feedback, a molte case editrici. Purtroppo non abbiamo mai ricevuto nessun tipo di feedback. Problema n°4: Microsoft word.\nAbbiamo utilizzato Microsoft word.\nNonostante personalmente lo trovi il programma meno user friendly che abbia mai utilizzato ci ha fornito una serie di opzioni molto utili. **Pro:\n**Molte opzioni utili. Contro: - A pagamento. Problema n°5: Autopubblicazione Amazon. Questa è stata la soluzione che abbiamo dovuto *forzatamente *adottare dopo non aver ricevuto nessun tipo di feedback dalle case editrici.\nDevo dire però che è stata una decisione azzeccata.\nAmazon ha un servizio clienti molto valido, con persone (o bot?) che rispondono velocemente alle richieste.\nUn punto assolutamente a favore sono i saluti che scrivono in fondo alle e-mail “Ti auguro una sfavillante e spumeggiante serata” oppure “Ti saluto e ti auguro una magica e meravigliosa settimana”. **Pro: **Amazon non ha l’esclusiva cartacea. Ha l’esclusiva digitale se si attiva Kindle unlimited. Non abbiamo dovuto prestampare. Servizio clienti. Nessun costo di pubblicazione. Contro: - Al momento niente da segnalare. Problema n°6: Impaginazione. Noi siamo stati fortunati, siamo stati aiutati da Stefania Pizzichi, sia per la copertina sia per l’impaginazione. Amazon mette a disposizione un tool molto funzionale a riguardo.\nNoi abbiamo creato due file PDF, uno per il cartaceo e uno per kindle. L’anteprima che fornisce Amazon è esattamente quello che viene stampato. **Pro: **Tool di Amazon ben fatto. Contro: - Due copie diverse, uno per il cartaceo e uno per kindle. L’impaginazione è la parte più difficile. Impaginazione delLibro Bitcoin dalla teoria alla pratica Problema n°7: Copia bozza. Questo in realtà non è un problema ma un utilissimo servizio che Amazon offre prima di mettere in vendita il proprio libro. È possibile richiedere la copia bozza e vedere fisicamente il risultato finale. Per noi è stato utile per il libro Bitcoin 199 domande.\nVolevamo un formato più piccolo rispetto alla copia bozza. Pro - Velocità di spedizione, richiesto un giovedì notte, ricevuto il martedì mattina.\nIl primo formato (scartato) del libro Bitcoin 199 domande\nQuesto è stato il percorso che abbiamo affrontato per pubblicare i nostri due libri, speriamo che le nostre informazioni siano utili a chi, come noi, vuole esaudire lo stesso desiderio.\nCopie dellibro Bitcoin dalla teoria alla pratica\n","date":"30 ottobre 2019","externalUrl":null,"permalink":"/posts/la-storia-dei-nostri-due-libri/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL La storia dei nostri due libri # Bitcoin dalla teoria alla pratica e Bitcoin 199 domande # In questo articolo non vogliamo parlare di Bitcoin, ma vogliamo raccontarvi la storia di come sono nati i nostri due libri, così da aiutare chi volesse scriverne uno proprio. Come già raccontato in qualche articolo precedente abbiamo prima fatto il videocorso e poi abbiamo riordinato i copioni per creare un libro. Ma dietro la frase “riordinato i copioni” c’è un mondo.\n","title":"La storia dei nostri due libri","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL RSA — Ron Rivest, Adi Shamir, Leonard Adlemen # Siamo arrivati alla rivoluzione vera e propria della crittografia: la crittografia a chiave pubblica, detta anche crittografia asimmetrica. Che cosa la rende così importante? La possibilità di condividere la chiave pubblica senza aver bisogno di un canale sicuro, a differenza della crittografia simmetrica.\nNella crittografia asimmetrica abbiamo due chiavi distinte ma legate matematicamente: la chiave privata e la chiave pubblica. Viene risolto anche il problema dell\u0026rsquo;autenticazione del mittente e dell\u0026rsquo;integrità del messaggio trasmesso, grazie alla firma digitale.\nTutto nacque nel 1975 dagli studi di Whitfield Diffie e Martin Hellman. Il loro obiettivo era usare la crittografia senza dover trasferire la chiave su un canale sicuro: veniva scambiata in chiaro una porzione della chiave che, combinata matematicamente con una parte privata, derivava la chiave desiderata.\nIn questo modo, se qualcuno intercettasse la chiave durante lo scambio, non rappresenterebbe alcun pericolo — a differenza della crittografia simmetrica, dove l\u0026rsquo;intercettazione della chiave espone tutto il messaggio. Questo meccanismo prende il nome di Diffie-Hellman ed è ancora utilizzato oggi, ma non risolve il problema dell\u0026rsquo;autenticazione né consente la cifratura dei messaggi.\nArriviamo quindi alla crittografia asimmetrica sviluppata da Rivest, Shamir e Adleman — da cui l\u0026rsquo;acronimo RSA.\nLa rivoluzione sta nella coppia di chiavi: diverse ma legate matematicamente grazie alle proprietà dei numeri primi. Dalla chiave privata è possibile derivare la chiave pubblica, ma la chiave pubblica non fornisce alcuna informazione per risalire alla chiave privata.\nPer questo la chiave pubblica può essere distribuita liberamente. Questa scoperta ha inaugurato l\u0026rsquo;era dell\u0026rsquo;autenticazione e della firma digitale — l\u0026rsquo;algoritmo RSA è utilizzato, tra gli altri, nel protocollo SSL da Visa e Mastercard.\nCome viene utilizzata per nascondere il messaggio # Cifrare il messaggio con la chiave pubblica del destinatario.\nIpotizziamo che Bob voglia mandare ad Alice un messaggio cifrato. Ha bisogno solo della chiave pubblica di Alice, trasferibile senza canale sicuro. Bob cifra il messaggio con la chiave pubblica di Alice e glielo invia. Una volta cifrato, il messaggio non è decifrabile con la stessa chiave pubblica: Alice deve usare la sua chiave privata.\nChiave pubblica → cifra il messaggio Chiave privata → decifra il messaggio\nCosa succede se cifriamo con la chiave privata e decifriamo con la pubblica? # Dato che la chiave privata è segreta, solo il suo possessore può produrre una certa cifratura. Questo non garantisce la segretezza del messaggio — la chiave pubblica è distribuita liberamente — ma autentica il mittente: siamo certi che il messaggio provenga esattamente da quella persona.\nAutenticazione con la chiave privata del mittente.\nIl flusso è:\nBob cifra il messaggio con la sua chiave privata Invia il messaggio ad Alice Alice decifra il messaggio con la chiave pubblica di Bob Chiave privata → cifra (autenticazione) Chiave pubblica → decifra (verifica)\nCome ottenere autenticazione e segretezza insieme # Per aggiungere anche la segretezza, si cifra il messaggio anche con la chiave pubblica del destinatario.\nAutenticazione e segretezza combinate.\nIl flusso completo:\nBob cifra il messaggio con la sua chiave privata → ottiene l\u0026rsquo;autenticazione Bob cifra il risultato con la chiave pubblica di Alice → ottiene la segretezza Alice decifra con la sua chiave privata Alice verifica con la chiave pubblica di Bob Alice legge il messaggio in chiaro Che cosa è la firma digitale? # La firma digitale è una forma di autenticazione. A differenza dei casi precedenti, non opera direttamente sul messaggio ma su un suo riassunto, detto digest o hash del messaggio.\nUn algoritmo di hash produce un output di dimensione fissa da un input di qualsiasi dimensione. Bitcoin usa spesso SHA256: qualunque sia l\u0026rsquo;input, l\u0026rsquo;output è sempre 256 bit (64 caratteri esadecimali). La firma digitale è quindi il digest cifrato con la chiave privata.\nSchema della firma digitale.\nIl flusso:\nBob applica SHA256 al messaggio in chiaro → ottiene il digest Cifra il digest con la sua chiave privata → ottiene la firma digitale Invia ad Alice: messaggio in chiaro, firma e chiave pubblica Alice applica la chiave pubblica di Bob sulla firma → ottiene il digest originale Alice applica SHA256 al messaggio ricevuto → ottiene il digest del messaggio Alice confronta i due digest: se coincidono, la firma è valida e il messaggio non è stato alterato Questo è esattamente il meccanismo con cui Bitcoin identifica il legittimo possessore di fondi: solo chi possiede la chiave privata può produrre una firma valida. Il protocollo verifica la firma confrontando i digest.\nNei primi capitoli del libro Bitcoin dalla teoria alla pratica mettiamo in pratica la crittografia asimmetrica con esempi concreti e reali.\nCosa risolve la firma digitale # Integrità: garantisce che il messaggio non sia stato alterato durante la trasmissione. Se Peter intercetta e modifica il messaggio, il digest non corrisponderà più. Autenticità: Alice è certa che il messaggio provenga da Bob e non da qualcuno che si spaccia per lui. Non ripudio: il mittente non può disconoscere un messaggio che ha firmato con la propria chiave privata. Bitcoin non utilizza RSA, bensì la crittografia a curve ellittiche: stesse proprietà, ma più veloce in esecuzione. Dalla scitala alla crittografia asimmetrica — ne abbiamo fatta di strada.\n","date":"15 ottobre 2019","externalUrl":null,"permalink":"/posts/crittografia-pt-viii/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL RSA — Ron Rivest, Adi Shamir, Leonard Adlemen # Siamo arrivati alla rivoluzione vera e propria della crittografia: la crittografia a chiave pubblica, detta anche crittografia asimmetrica. Che cosa la rende così importante? La possibilità di condividere la chiave pubblica senza aver bisogno di un canale sicuro, a differenza della crittografia simmetrica.\n","title":"Crittografia Pt VIII","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Crittografia Pt VII # Hello computer. # I computer iniziano ad entrare nelle case delle persone comuni. Siamo intorno agli anni 70 e il loro prezzo diventa accessibile permettendo l’inizio della diffusione di massa.\nNel 1977 viene presentato Apple II\nCosì anche la crittografia comincia a mutare e a spostarsi sui computer, anche perchè tutte le forme che abbiamo affrontato fino ad adesso erano estremamente lente anche se sicure. Aumentiamo di nuovo il nostro vocabolario, con delle sigle che iniziano a essere familiari con il periodo attuale in cui viviamo.\n\u0026mdash; DES: Data Encryption Standard. 3-DES: Triple Des. AES: Advanced Encryption Standard.\nUno dei primi algoritmi degni di nota fu Lucifer creato da Horst Feistel e colleghi all’IBM.\nL’algoritmo divenne lo Standard ( DES ) e successivamente fu venduto alla compagnia Lloyd’s che lo implementò nei primi Bancomat, sempre con l’appoggio di IBM.\nQui possiamo già capire come negli anni 70, la crittografia entra a far parte della vita comune e come paradossalmente oggi, nel 2020 ci si sorprenda del fatto che Bitcoin utilizzi la crittografia per la sicurezza.\nPer fortuna non utilizza Lucifer, perchè venne crackato grazie all’utilizzo di 70000 computer.\nQuesto evento portò prima alla nascita del 3-DES e successivamente di un nuovo standard AES con la scelta di un nuovo algoritmo di cifratura a blocchi, l’algoritmo di Rijndael.\nTutti i sistemi di cifratura affrontati (DES, 3-DES, AES) fino ad adesso, dalla scitala all’algoritmo di Rijndael avevano un funzionamento simmetrico, chiamato anche cifratura a chiave privata. Cifratura simmetrica\nQuali sono i suoi problemi noti?\nIl problema principale è che la chiave cifrante è anche la chiave che decifra, quindi una possibile intercettazione della chiave porta a poter leggere il messaggio in chiaro a insaputa del mittente e del destinatario. Abbiamo un problema di distribuzione della chiave su un canale non sicuro.\nSe ci fosse un canale sicuro non sarebbe necessaria la crittografia :)\nCome può avvenire quindi lo scambio delle chiavi?\nPreventivamente tra tutti i soggetti della *rete, *sempre che il numero non cambi durante le comunicazioni e se è *comodo *distribuire la chiave.\nSe io sono italiano e il mio collega è giapponese la comodità e la sicurezza viene già meno.\nImmaginiamo che la chiave di cifratura sia intercettata da un terzo non autorizzato.\nEgli potrebbe inviare dei messaggi cifrati spacciandosi per un altro mittente e il destinatario non potrà mai sapere se il mittente è verificato o meno.\nTale problema (che poi sarà risolto con la firma digitale) è chiamato autenticazione del mittente.\nRullo di tamburi per il trio Whitfield Diffie, Martin Hellman e Ralph Merkle.\nSì, proprio lui, il padre del merkle tree utilizzato in Bitcoin. Questi tre Signori, grazie anche a studi approfonditi da parte di Diffie-Hellman hanno rivoluzionato il mondo, riuscendo a introdurre la crittografia asimmetrica, considerata ancora oggi estremamente sicura, e sì, è quella utilizzata in Bitcoin.\nMa per una degna spiegazione abbiamo bisogno di un altro articolo!\n","date":"7 ottobre 2019","externalUrl":null,"permalink":"/posts/crittografia-pt-vii/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Crittografia Pt VII # Hello computer. # I computer iniziano ad entrare nelle case delle persone comuni. Siamo intorno agli anni 70 e il loro prezzo diventa accessibile permettendo l’inizio della diffusione di massa.\n","title":"Crittografia Pt VII","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Merkle tree Bitcoin # Lo sprint che serviva per il libro Bitcoin dalla teoria alla pratica # Durante lo studio di Bitcoin ci siamo imbattuti nel Merkle tree e dopo esser riusciti a capirlo e a replicarlo, abbiamo raggiunto il nostro obiettivo.\nLe prime prove (sbagliate) di “ricorstruzione” del merkle tree.\nMa vediamo che cosa è il Merkle tree. \u0026mdash;\nEstratto del capitolo 4 di Bitcoin dalla teoria alla pratica\nMerkle tree, o albero binario di hash, è una struttura dati molto efficiente per verificare l’integrità di una grande quantità di dati.\nSiamo soliti immaginare un albero dalla radice posta in basso e dalle foglie poste in alto.\nQuesto dobbiamo invece immaginarcelo al contrario, la radice (merkle root) è in alto e le foglie sono in basso.\nIl merkle root è costruito ricorsivamente facendo hash di ogni foglia, che a loro volta sono unite e “hashate” di nuovo, fino ad avere un unico hash che rappresenta l’impronta digitale delle transazioni di quel blocco.\nL’hash utilizzato è sempre lo SHA256 e il merkle root è sempre di 32 bytes.\nLa chiave per capirlo e risolvere l’errore riportato nella prima immagine è stato stamparlo vuoto e unire a coppie le foglie, fino ad arrivare alla radice.\nCosì facendo abbiamo riprodotto dei merkle tree *particolari *dove è necessario fare hash di hash della stessa foglia. Vediamo un caso base per capire di cosa stiamo parlando.\nEstratto del capitolo 4 di Bitcoin dalla teoria alla pratica\nFigura 4.1 — Merkle tree — Bitcoin dalla teoria alla pratica\nImmaginiamo di avere un merkle tree con 4 foglie, che rappresentano 4 transazioni (figura 4.1).\nPartiamo dalla base “Ha”, che rappresenta l’hash della transazione. Quindi uniremo “Ha” con “Hb”.\nCon “uniremo” si intende concatenare le stringhe. Quindi applicheremo la funzione SHA256 per due volte alla stringa concatenata.\nPerché due volte?\nNon c’è una spiegazione certa, ma il protocollo Bitcoin lavora così.\nLa stessa procedura viene effettuata per le foglie “Hc” e “Hd”. Siamo così saliti di un gradino verso la costruzione della root.\nIl prossimo passo quale sarà? Lo stesso, uniremo il risultato dei due hash e applicheremo per due volte lo SHA256.\nSiamo arrivati alla root, che sarà sempre di 32 bytes proprio perché è ottenuta dalla funzione di hash SHA256.\nPiccola anticipazione per quanto riguarda la costruzione che andremo a fare sul nodo Bitcoin.\nLe foglie iniziali sono nella rappresentazione big endian.\nDobbiamo cambiare l’ordine dei bytes in little endian, e infine cambiare nuovamente l’ordine dei bytes della root per ottenere la rappresentazione in big endian, così da confrontarla con quella del blocco originale, ottenendo la prova che il nostro lavoro sia andato a buon fine.\nPossiamo tranquillamente dire che dal Merkle root è nato il nostro progetto!\nBitcoin dalla teoria alla pratica\n","date":"3 ottobre 2019","externalUrl":null,"permalink":"/posts/merkle-tree-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Merkle tree Bitcoin # Lo sprint che serviva per il libro Bitcoin dalla teoria alla pratica # Durante lo studio di Bitcoin ci siamo imbattuti nel Merkle tree e dopo esser riusciti a capirlo e a replicarlo, abbiamo raggiunto il nostro obiettivo.\n","title":"Merkle tree Bitcoin","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Un lampone decentralizzato # Nel libro Bitcoin dalla teoria alla pratica viene utilizzato un fullnode concesso gentilmente da Growbit, ma non è pubblico.\nDiamo come alternativa chainquery per fare determinate operazioni ma non è sufficiente a coprire tutti gli esempi che sono riportati.\nAbbiamo quindi deciso di scrivere una guida per costruire e interagire con un proprio nodo Raspberry.\nOvviamente il nodo può vivere anche nel vostro computer che solitamente usate, ma dovrebbe stare sempre connessi per essere up-to-date con la blockchain e dedicare un pò di spazio per il salvataggio della blockchain.\nOggi 2 Agosto 2018 la testnet *pesa circa 25 *gigabytes.\nA questo indirizzo potete trovare informazioni interessanti per la mainnet, e a oggi sono all’incirca 270 gigabytes.\nComponenti # I componenti che ho usato non sono miei, quindi non ho nessun interesse a pubblicizzarli. Elenco semplicemente il mio setup.\nRaspberry Pi 3 B+ MicroSd 16 gigabytes Custodia, alimentatore, ventole, dissipatore(kit) Hard disk esterno USB 3.0 (anche se il Raspberry in questione ha le porte USB 2.0) Cavo ethernet categoria 8 (un cavo categoria 5 può arrivare a una velocità di 1 gigabit per secondo) Invito chiunque a indicare un setup migliore del mio se è necessario :)\nSetup finale: Raspberry + case + alimentatore + HDD +tappetino\nBenissimo appena costruito il nostro dispositivo scarichiamo il software necessario.\nScaricare Raspberry Lite Image # Dal sito ufficiale scarica l’immagine lite. Come vedete nel sito abbiamo lo SHA256 dello zip, che nel mio caso è\n9e5cf24ce483bb96e7736ea75ca422e3560e7b455eee63dd28f66fa1825db70e Quindi abbiamo la possibilità di verificare di aver scaricato il giusto archivio.\necho \u0026#34;9e5cf24ce483bb96e7736ea75ca422e3560e7b455eee63dd28f66fa1825db70e 2019–07–10-raspbian-buster-lite.zip\u0026#34; | shasum -a 256 -c - NB: dovete essere nella stessa cartella dello zip appena scaricato, e tra lo SHA256 e il nome dello Zip ci devono essere due spazi\nCon il comando shasum verifichiamo l’integrità e l’autenticità del file controllando il suo checksum creato con l’algoritmo SHA.\nSe ottenete questo risultato:\n2019–07–10-raspbian-buster-lite.zip: OK la prova è andata a buon fine.\nFormattare SD card (facoltativo) # Questo passaggio potrebbe essere facoltativo, ma per sicurezza io l’ho eseguito ugualmente. Dopo aver inserito la SD card, ho lanciato questo comando per individuarla.\ndiskutil list nel mio caso era disk2, ho eseguito quindi questo comando:\nsudo dd if=/dev/urandom of=/dev/disk2s2 bs=1000000 NB: questo comando non da output, quindi attendete fiduciosi :). Nei sistemi OSX con Ctrl+T possiamo sbirciare un pò…\nSui dispositivi mac potrebbe essere necessario lanciare questo comando prima e formattare.\n$ sudo diskutil umountDisk /dev/disk2Unmount of all volumes on disk2 was successful Copiare l’immagine nella SD card # Bene è il momento di fare sul serio, spostiamo l’immagine nell’SD card.\nSmontiamo SD card\ndiskutil unmountDisk /dev/disk2 copiamo quindi l’immagine al suo interno\nsudo dd bs=1m if=2019–07–10-raspbian-buster-lite.img of=/dev/disk2 NB: questo comando non da output, quindi attendete fiduciosi² :). Nei sistemi OSX con Ctrl+T possiamo sbirciare un pò…\nQuando l’immagine è stata copiata, abilitiamo ssh.\nCome dimostra la guida di Raspberry, ci sono diversi modalità per accedere con il comando ssh.\nUno di questi, il più semplice, è posizionare nel percorso dell’SD card /Volumes/boot/ un file ssh senza estensione\ntouch /Volumes/boot/ssh SSH, secure shell, è un protocollo che permette di creare un canale sicuro tra due entità, cioè tra il client e il server (in questo caso Raspberry). Le comunicazioni sono crittate lato client e decrittate lato server automaticamente, così da poter trasferire le informazioni in modo sicuro. SSH risolve l’autenticazione, encryption (quindi cifrare messaggi) e l’integrità del messaggio testo.\nSe abbiamo formattato la nostra SD card abbiamo due partizioni, una più piccola chiamata boot e una rootfs (almeno nel mio caso), il file deve essere posizionato nella partizione più piccola, ovvero in boot.\nPer verificare quanto spazio abbiamo a disposizione possiamo utilizzare il comando df.\ndf -h risultato:\nFilesystem Size Used Avail Capacity iused ifree ….. /dev/disk2s2 1.8Gi 1.0Gi 776Mi 58% 42164 75196 36% /Volumes/rootfs/dev/disk2s1 252Mi 40Mi 212Mi 16% 0 0 100% /Volumes/boot posizionando il file ssh, quando il Raspberry si avvia, vede che c’e il file, lo cancella e abilita ssh.\nPossiamo smontare il disco:\ndiskutil unmountDisk /dev/disk2 Siamo pronti a inserire l’SD card nel Raspberry!\nTrovare il Raspberry nella rete # Dopo aver inserito l’SD card, acceso il Raspberry (davvero?) e collegato con il cavo ethernet, dobbiamo trovare il suo IP. Possiamo collegarci al router e trovarlo dall’interfaccia grafica del router stesso, oppure possiamo usare il comando\narp -a che restituisce tutti gli indirizzi dei dispositivi connessi.\nSappiamo che per convenzione l’indirzzo MAC del Raspberry inizia con b8:27:eb, quindi possiamo usare grep per filtrare il risultato.\narp -a | grep \u0026#39;b8:27:eb\u0026#39;? (192.168.1.221) at b8:27:eb:84:7b:a0 on en0 ifscope [ethernet] Il MAC address (media access control) , chiamato anche physical address, individua con certezza l’interfaccia di rete. Ogni dispositivo ne ha una ed è univoca.\nNel mio caso l’ip designato per il Raspberry è 192.168.1.221 Dato che abbiamo abilitato ssh (vedi sopra) posso collegarmi con:\nssh pi@192.168.1.221 inserendo la password di default raspberry. Per motivi di sicurezza è consigliato modificare la password ssh, dato che per tutto il mondo è raspberry :) Con il comando:\npasswd è possibile cambiare la password per l’utente pi. Cambiamo anche la password per l’utente root.\nsudo passwd root Io per comodità ho messo le stesse password. Creiamo anche l’utente bitcoin che sarà l’utente designato alle operazioni sul nodo, in modo tale da creare anche una nuova home che, più avanti, linkeremo all’hard disk esterno.\nsudo adduser bitcoin Usare la chiave pubblica per loggarsi nel Raspberry # È molto comodo, oltre che sicuro, loggarsi con la chiave pubblica invece che con la password. Creiamo quindi la coppia di chiave privata e pubblica. Non sai se le hai già? Con questo comando verifichi le chiavi in tuo possesso.\nls -la ~/.ssh/*.pub Se non la hai, puoi creare la tua chiave nel formato Ed25519.\nIl formato Ed25519 è stato introdotto con OpenSSH versione 6.5. Utilizza la curva ellittica (https://en.wikipedia.org/wiki/Twisted_Edwards_curve) per derivare le chiavi ed è stata pensata per essere più veloce rispetto allo schema esistente della *classica *firma digitale. Per maggiori informazioni.\nPer creare una nuova chiave:\nssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -C \u0026#34;email@email.com\u0026#34; ~/.ssh/id_ed25519 rappresenta la nostra private key, “la nostra identità digitale” ~/.ssh/id_ed25519.pub rappresenta la nostra public key che dovremo mettere sul Raspberry per essere autenticati. \u0026gt; HINT: è buona norma mettere una password alla chiave privata. Cosi facendo ogni volta che ci autentichiamo, dobbiamo inserirla in modo da decrittare la chiave privata e loggarsi su Raspberry.\nCome possiamo evitare di scrivere la password della chiave privata? Lanciando ssh-add, il quale aggiunge la password a ssh-agent.\nPer non dover scrivere ogni volta la password possiamo lanciare questo comando: ssh-add -K ~/.ssh/id_ed25519 \u0026gt; Se invece vuoi cambiare la password della chiave privata: ssh-keygen -p -f id_ed25519 Copiamo la chiave appena creata nel nostro raspberry ricordate che il vostro ip potrebbe essere differente\nssh-copy-id -i ~/.ssh/id_ed25519.pub pi@192.168.1.221 una volta copiata la chiave nel Raspberry, ci colleghiamo con ssh e togliamo la password. Nel Raspberry è necessario fare questa procedura:\nssh pi@192.168.1.221sudo nano /etc/ssh/sshd_config cercate PasswordAuthentication, e settarla a no.\nHINT: vuoi loggarti direttamente con l’utente bitcoin?\nCon ssh bitcoin@192.168.1.221 puoi già loggarti inserendo la password, se invece vuoi loggarti con la chiave pubblica, fai la stessa operazione descritta sopra. Ogni utente ha le proprie chiavi, infatti vengono copiate nell home dell’utente /home/ bitcoin/.ssh.\nLa cartella .ssh viene creata dal comando ssh-copy-id. Se invece non potete creare la cartella .ssh nell’utente bitcoin, potete copiarla con il comando sudo con l’utente pi, e dopo cambiare l’owner\nsudo chown -R bitcoin:bitcoin /home/bitcoin/.ssh Note su SSH (facoltativo)\nLa prima volta che ci autentichiamo con SSH, riceveremo questo messaggio:\nThe authenticity of host ‘192.168.1.221 (192.168.1.221)’ can’t be established.ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXX.Are you sure you want to continue connecting (yes/no)? Il fingerprint è l’impronta digitale del Raspberry. Lo potete trovare qui:\npi@raspberrypi:/etc/ssh $ ssh-keygen -lf ssh_host_ecdsa_key.pub256 SHA256:IPYYELcHtVEmIVdZDswU4sgr991ZiPZOPyW9knKx4aY root@raspberrypi (ECDSA) Quindi ci sta informando che ci stiamo collegando a tale dispositivo. Scegliendo yes, l’indirizzo locale del Raspberry verrà aggiunto sul client nel file known_hosts (/Users/barno/.ssh).\nAnalizzando tale file vedrete che ci sarà l’IP del Raspberry e la sua chiave pubblica, come questa:\n192.168.1.221 ecdsa-sha2-nistp256 chiave XXXX La chiave è la chiave pubblica del Raspberry che trovate in\npi@raspberrypi:/etc/ssh $ cat /etc/ssh/ssh_host_ecdsa_key.pub Mentre la chiave pubblica (creata e spostata in precedenza) del vostro client usata per l’autenticazione è salvata in:\npi@raspberrypi: $cat ~/.ssh/authorized_keys Quindi se volete aggiungere un’altro utente, potete inserire la public key all’interno di quel file.\nRouter: IP Fisso, porte e IP pubblico # Se ogni volta che voglio accedere al Raspberry ha un indirizzo diverso diventa molto noioso se non controproducente.\nQuindi, stabiliamo un IP fisso locale per il nostro nodo configurandolo dal router. Nel mio caso ho associato l’IP statico 192.168.1.221. Un ulteriore passaggio fondamentale è aprire le opportune porte. In questo caso apro sia la mainnet che la testnet e la porta 22 per SSH.\nConfigurazioni Porte.\nLe porta 8333 (mainnet) e la porta 18333 (testnet) dobbiamo aprirle se vogliamo essere raggiunti dagli altri nodi. La porta 8332 (mainnet) e la porta 18332 (testnet) che non sono state aperte permetterebbero di fare delle richieste RPC dall’esterno. La porta 5100 è mappata sulla porta 22 del vostro router. Per collegarsi dall’esterno dobbiamo riferirsi alla porta 5100 (o una scelta da voi nel range di 1024–65535).\nHINT: per verificare se le porte sono aperte correttamente potete utilizzare telnet IP_PUBBLICO PORTA e vedere se risponde. Oppure potete utilizzare nmap (per installarlo su mac =\u0026gt; brew install nmap) e inserire il vostro IP pubblico per verificare le porte aperte. (nmap — open IP PUB)\nPotrebbe essere interessante collegarsi dall’esterno al nostro nodo.\nSe non siete in possesso di un ip pubblico dovete contattare il vostro ISP.\nGUI? no grazie. # Non vogliamo la GUI, quindi settiamo la RAM dedicata al minimo. Dal vostro nodo digitate\nsudo raspi-config E vi troverete davanti a una schermata come questa\nCome vedete ci sono un pò di opzioni.\nSelezioniamo la voce 3 -\u0026gt; B1 -\u0026gt; B1.\nDi fatto diciamo di volere la console come boot. Poi possiamo scegliere locale e time-zone alla voce 4. Ed infine spostandosi sulla voce 7 Advanced Options, e successivamente su A3 Memory split, settiamo la RAM a 16. Buona cosa anche tenere il Raspberry aggiornato, quindi anche la voce numero 8 Update. Fatto tutto, andate su finish. Il Raspberry si riavvierà, appena torna raggiungibile possiamo fare gli aggiornamento dei pacchetti\nsudo apt updatesudo apt -y upgrade Riavviamo di nuovo il nostro Raspberry.\nsudo shutdown -r now Configurare l’hard disk esterno # Colleghiamo l’hard disk al nostro Raspberry e digitiamo il comando\nsudo lsblk -o UUID,NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,MODEL cosi da individuarlo, nel mio caso è sda.\nBene, siamo pronti a formattarlo! Attenzione questa operazione elimina tutti i file dal proprio hard disk, quindi siate certi che non contenga le chiavi private di Satoshi!\nsudo mkfs.ext4 /dev/sda -L LN dove LN è la label dell’hard disk.\nPer essere sicuri che tutto sia andato a buon fine possiamo richiamare il comando\nsudo lsblk -o UUID,NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,MODEL e dobbiamo leggere LN nella colonna LABEL del nostro hard disk. Dato che il Raspberry lavorerà sempre con il nostro hard disk, montiamolo in automatico. Prima di tutto creiamo la cartella hdd.\nsudo mkdir /mnt/hdd Poi individuiamo l’UUID dell’hard disk con il comando:\nsudo blkid | grep /dev/sda e una volta preso nota, apriamo il file necessario\nsudo nano /etc/fstab e aggiungiamo\nUUID=XXXXXX /mnt/hdd ext4 defaults 0 0 dove XXXXX è l’UUID recuperato precedentemente.\ne infine montiamo tutto!\nsudo mount -a In questo modo ogni volta che si riavvia il Raspberry l’HDD sarà già montato e pronto. Se riavviamo il Raspberry senza avere l’HDD collegato, potrebbe creare problemi.\nDato che abbiamo creato l’utente bitcoin che sarà l’addetto a interfacciarsi con il nodo, diamo i privilegi di scrittura alla cartella (ricorsivamente) appena creata\nsudo chown -R bitcoin:bitcoin /mnt/hdd In questo modo l’utente pi può solo leggere (a meno che non si usi sudo) e l’utente bitcoin leggere e scrivere.\nIl percorso di default dove viene salvata la blockchain è ~/.bitcoin/ e questa non è dentro l’hdd esterno.\nPer risolvere questo problema abbiamo due soluzioni. O inseriamo datadir=/percorso/che/vogliamo nel file .conf, oppure facciamo una link simbolico.\nPer cercare di lasciare più pulito possibile il file .conf, opteremo per il link simbolico che punta dentro alla cartella bitcoin nell’HDD. Quindi creiamo la cartella con l’utente bitcoin. PS: per cambiare utente: sudo su bitcoin\nmkdir /mnt/hdd/bitcoin creiamo quindi il link simbolico\nln -s /mnt/hdd/bitcoin /home/bitcoin/.bitcoin per verificare che tutto sia andato a buon fine potete spostarvi in\ncd /home/bitcoin/ e digitare\nls -al dovreste vedere il collegamento evidenziato da -\u0026gt; SWAP! Che cosa è lo swap?\nLa definizione di Wikipedia è molto intuitiva:\nCon il termine swap si intende, in informatica, l’estensione della capacità della memoria volatile complessiva del computer, oltre il limite imposto dalla quantità di RAM installata, attraverso l’utilizzo di uno spazio su un altro supporto fisico di memorizzazione, ad esempio il disco fisso. L’uso dello swap è una delle tecniche impiegate dal sistema operativo per la gestione della memoria virtuale.\nLa memoria complessiva del raspberry Pi 3 B+ è di 2 gigabyte, quindi cercheremo di aumentarla virtualmente.\nCon l’utente pi digitare:\nsudo dphys-swapfile swapoffsudo dphys-swapfile uninstallsudo nano /etc/dphys-swapfile Quindi alla voce modificare come segue:\nCONF_SWAPFILE=/mnt/hdd/swapfile#CONF_SWAPSIZE= Salvare e creare il file swapfile manualmente\nsudo dd if=/dev/zero of=/mnt/hdd/swapfile count=1000 bs=1MiBsudo chmod 600 /mnt/hdd/swapfilesudo mkswap /mnt/hdd/swapfile Quindi attivare lo swap\nsudo dphys-swapfile setupsudo dphys-swapfile swapon Benissimo a questo punto possiamo installare qualche pacchetto interessante:\nsudo apt install git build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libzmq3-dev jq È il momento di installare Bitcoin Core**! # Bene è arrivato il momento! Loggato come pi creiamo la cartella download che ospiterà il software.\nmkdir /home/pi/downloadcd /home/pi/download Verifica l’ultima versione di bitcoin core disponibile: https://bitcoincore.org/en/download/ o qui https://github.com/bitcoin/bitcoin/releases\nQui invece è possibile vedere i change logs https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.18.0.md\nnel mio caso bitcoin core 0.18.0 e dobbiamo installare la versione linux arm 32 bit.\nwget https://bitcoincore.org/bin/bitcoin-core-0.18.0/bitcoin-0.18.0-arm-linux-gnueabihf.tar.gz Scarico anche le relative firme per verificare il pacchetto.\nwget https://bitcoincore.org/bin/bitcoin-core-0.18.0/SHA256SUMS.ascwget https://bitcoin.org/laanwj-releases.asc controllo il pacchetto ignorando i Warning\nsha256sum --check SHA256SUMS.asc --ignore-missing risultato:\nbitcoin-0.18.0-arm-linux-gnueabihf.tar.gz: OKsha256sum: WARNING: 20 lines are improperly formatted L’importante è che ci sia un bell’ OK!\nControlliamo anche le chiavi.\ngpg --import./laanwj-releases.ascgpg --refresh-keysgpg --verify SHA256SUMS.asc risultato:\ngpg: Good signature from “Wladimir J. van der Laan …”Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964 Bene, siamo sicuri di avere quello che vogliamo, possiamo finalmente installarlo. Decomprimiamo l’archivio e spostiamo i file bin all’interno di /usr/local/bin cosi da renderlo globale.\ntar -xvf bitcoin-0.18.0-arm-linux-gnueabihf.tar.gz sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.18.0/bin/* Per verificare che tutto sia andato a buon fine, possiamo digitare:\nbitcoind -version \u0026gt; Bitcoin Core Daemon version v0.18.0 Bene, momento di pulizia, assicuratevi di essere nella cartella /home/pi/download\nrm -Rf * Ottimo, siamo pronti a creare il file .conf che leggerà Bitcoin core. Con l’utente bitcoin (sudo su bitcoin) spostarsi in /mnt/hdd/bitcoin e digitare\nnano bitcoin.conf e aggiungere:\n# Generated by https://jlopp.github.io/bitcoin-core-config-generator/ # This config should be placed in following path:# ~/.bitcoin/bitcoin.conf # [core]# Run in the background as a daemon and accept commands.daemon=1# Set database cache size in megabytes; machines sync faster with a larger cache. Recommend setting as high as possible based upon machine’s available RAM.dbcache=100# Keep at most \u0026lt;n\u0026gt; unconnectable transactions in memory.maxorphantx=10# Keep the transaction memory pool below \u0026lt;n\u0026gt; megabytes.maxmempool=50# Maintain a full transaction index, used by the getrawtransaction rpc call.txindex=1 # Maintain at most N connections to peers.maxconnections=40# Tries to keep outbound traffic under the given target (in MiB per 24h), 0 = no limit.maxuploadtarget=5000 # Run this node on the Bitcoin Test Network.testnet=1 # Accept command line and JSON-RPC commands.server=1 # Options only for mainnet[main] # Options only for testnet[test] # Options only for regtest[regtest] Per creare la configurazione ho usato comodo servizio https://jlopp.github.io/bitcoin-core-config-generator/ .\nPer sapere tutti i parametri ci basterà comunque digitare bitcoind -h. Per avere una demo di configurazione possiamo visitare il GitHub ufficiale di Bitcoin https://github.com/bitcoin/bitcoin/blob/master/share/examples/bitcoin.conf\nIl file contiene testnet=1, quindi scaricheremo la blockchain testnet.\nGli esempi riportati nel libro Bitcoin dalla teoria alla pratica, utilizzando la testnet e poi per fare degli esperimenti direi che è meglio non perdere btc.\nSiamo pronti a partire! 🚀 Digitiamo\nbitcoind e il nodo inizia a scaricare la blockchain.\nPer vedere i log possiamo usare tail.\ntail -f /home/bitcoin/.bitcoin/testnet3/debug.log e per avere delle informazioni più dettagliate\nbitcoin-cli getblockchaininfo | jq Vuoi conoscere tutti i comandi possibili?\nbitcoin-cli help Vuoi sapere che significato hanno i valori ottenuti con la chiamata getblockchaininfo?\nbitcoin-cli help getblockchaininfo Vuoi stoppare il nodo?\nbitcoin-cli stop HINT:\nDato che con Raspberry abbiamo delle limitazione del numero peers e altri parametri, un metodo per sincronizzare la blockchain più velocemente è quello di scaricare il core sul proprio computer, collegare l’hard disk esterno che stiamo utilizzando sul Raspberry e lanciare il demone facendo scaricare la blockchain all’interno dell’unità esterna. il file bitcoin.conf lo potete generare da qui https://jlopp.github.io/bitcoin-core-config-generator.\nCome fare a far scaricare la blockchain nell’hard disk esterno? Dopo aver scaricato bitcoin core, come mostrato poco sopra, mi sposto nella cartella bin\n/Users/barno/Documents/btc/bitcoin-0.18.0/bin e lancio il comando\n./bitcoind -datadir=/Volumes/LN/bitcoin dove /Volumes/LN/bitcoin è la cartella del disco esterno.\nPer leggere i log vale quanto spiegato sopra, ovviamente cambiando il path.\ntail -f /Volumes/LN/bitcoin/testnet3/debug.log check blockchain\n/Users/barno/Documents/btc/bitcoin-0.18.0/bin/bitcoin-cli getblockchaininfo Ho inserito i percorsi assoluti per far capire dove sono posizionato.\nUtilizzare il nodo Raspberry dal proprio client (opzionale) # Potremmo avere la necessità di fare delle chiamate al nostro nodo da non dentro il Raspberry. Se siamo nella rete locale possiamo fare un tunnel ssh facendo il forward della porta 18333 locale sulla porta 18333 del Raspberry. In questo modo è come se dicessimo: Ehi, tutte le chiamate che faccio sul mio localhost (client) sulla porta 18333 inoltrale in questo tunnel.\nDall’altro lato del tunnel è presente il Raspberry. Colleghiamoci al Raspberry con questo comando ssh:\nssh -L 18332:127.0.0.1:18332 pi@192.168.1.221 Sul nostro client, spostiamoci in bitcoin core, nel mio caso il percorso è quello riportato poco sopra\n/Users/barno/Documents/btc/bitcoin-0.18.0/bin/bitcoin-cli Facciamo una chiamata per interrogare il nodo\n./bitcoin-cli getblockchaininfo | jq riceviamo però questo errore:\nerror: Could not connect to the server 127.0.0.1:8332 Make sure the bitcoind server is running and that you are connecting to the correct RPC port. ok, dobbiamo essere autenticati. Per fare questo ci sono tre modi,\nusername e password come parametri dalla chiamata. rpcauth copiare il cookie dal Bitcoin core del Raspberry nel nostro client. Soluzione 1 (username e password) In Raspberry con l’utente bitcoin stoppiamo il nodo Bitcoin bitcoin-cli stop Adesso editiamo il .conf\nvi /mnt/hdd/bitcoin/bitcoin.conf e aggiungiamo\n[test]rpcuser=barnorpcpassword=barnopass e riavviamo il nodo con il comando bitcoind (se avete implementato la soluzione che avvia il nodo in automatico, potrebbe essersi già riavviato).\nAdesso dal nostro client possiamo fare la nostra chiamata, passando anche rpcport nelle opzioni.\n./bitcoin-cli -rpcuser=barno -rpcpassword=barnopass -testnet=1 getblockchaininfo | jq Soluzione 2 rpcauth A differenza della prima soluzione, non scriveremo in chiaro la username e la password nel file di .conf ma utilizzeremo questo script in python per aggiungere il salt e offuscare la nostra password. Una volta scaricato lo script python lanciatelo passando username e password che volete utilizzare\n./rpcauth.py barno barnopassString to be appended to bitcoin.conf:rpcauth=barno:bf92263dcf78afbf74c69af146a5f5df$ec8d07c7952ad57b616f3af7898074c286f0b5151f6aeaf840248c0945405801Your password:barnopass Come si capisce dall’output, dobbiamo aggiungere la stringa rpcauth nel nostro file .conf Stoppiamo il nodo e inseriamo la riga suggerita.\n[test]rpcauth=barno:bf92263dcf78afbf74c69af146a58074c286f0b5151f6aeaf840248c0945405801 e riavviamo il nodo con il comando bitcoind (se avete implementato la soluzione che avvia il nodo in automatico, potrebbe essersi già riavviato).\nAdesso dal nostro client possiamo fare la nostra chiamata, passando anche rpcport nelle opzioni.\n./bitcoin-cli -rpcuser=barno -rpcpassword=barnopass -testnet=1 getblockchaininfo | jq Il vantaggio di questa procedura è che la username e la password sono hashati con HMAC-SHA-256, e possiamo creare più utenti, aggiungendo un altro rpcauth in bitcoin.conf. Soluzione 3 cookie il file .cookie è la via più comoda cosi da evitare di non dover mettere username e password se siamo interessati ad un utente solo.\nSi trova all’interno della datadir, che nel nostro caso avendo scaricato la blockchain di test, è all’interno di testnet3.\nAnche nel client deve essere dentro la cartella testnet3, oppure possiamo specificare un percorso. Usando il comando scp, copiamo il cookie dal Raspberry al nostro client. Il percorso di default sul Mac per la datadir è ~/Library/Application Support/Bitcoin, su Linux è ~/.bitcoin/ Il comando da eseguire dal client per copiare il .cookie è:\nscp bitcoin@192.168.1.221:/mnt/hdd/bitcoin/testnet3/.cookie /Users/barno/Library/Application\\ Support/Bitcoin/testnet3 Adesso abbiamo a disposizione il .cookie che ci autentica più velocemente senza inserire username e password. Dal client possiamo quindi eseguire il nostro comando RPC.\n./bitcoin-cli -testnet=1 getblockchaininfo | jq Se vogliamo posizionare il .cookie in un altro percorso dobbiamo passare l’opzione -rpccookiefile.\nAvviare il demone bitcoind in automatico # Creiamo un servizio in modo tale che se il demone bitcoind dovesse crashare, oppure per qualsiasi motivo si dovesse spengere il Raspberry, al suo riavvio siamo in grado di sincronizzare la blockchain senza eseguire nessun comando manuale. Con l’utente pi, creiamo il servizio\nsudo nano /etc/systemd/system/bitcoind.service E scriviamo:\n[Unit] Description=Bitcoin daemon After=network.target [Service] ExecStartPre=/bin/sh -c \u0026#39;sleep 30\u0026#39; ExecStart=/usr/local/bin/bitcoind -daemon -conf=/home/bitcoin/.bitcoin/bitcoin.conf -pid=/home/bitcoin/.bitcoin/bitcoind.pid PIDFile=/home/bitcoin/.bitcoin/bitcoind.pid User=bitcoin Group=bitcoin Type=forking KillMode=process Restart=always TimeoutSec=120 RestartSec=30 [Install] WantedBy=multi-user.target Salviamo e abilitiamo il servizio\nsudo systemctl enable bitcoind.service Riavviamo il Raspberry\nsudo shutdown -r now Adesso al vostro login dovreste avere già il nodo attivo!\nComandi utili per i servizi enable\nsudo systemctl enable bitcoind.service restart\nsudo systemctl restart bitcoind.service start\nsudo systemctl start bitcoind.service stop\nsudo systemctl stop bitcoind.service status\nsudo systemctl status bitcoind.service Sicurezza #### ufw # Bene cerchiamo di mettere in sicurezza il nostro Raspberry. Utilizzeremo ufw (firewall) come suggerito anche dalla guida Raspberry https://www.raspberrypi.org/documentation/configuration/security.md.\nInstalliamolo con\nsudo apt install ufw ufw blocca le connessioni in entrata e lascia libere quelle in uscita. Ecco la configurazione che ho usato io.\nATTENZIONE siate sicuri dell’indirizzi ip Interno ed esterno, altrimenti vi chiudete fuori!\nsudo suufw default deny incomingufw default allow outgoingufw allow from 192.168.1.0/24 to any port 22 comment \u0026#39;allow SSH from local LAN\u0026#39; ufw allow ssh ufw allow proto udp from 192.168.1.0/24 port 1900 to any comment \u0026#39;allow local LAN SSDP for UPnP discovery\u0026#39;ufw allow 9735 comment \u0026#39;allow Lightning\u0026#39;ufw allow 8333 comment \u0026#39;allow Bitcoin mainnet\u0026#39;ufw allow 18333 comment \u0026#39;allow Bitcoin testnet\u0026#39;ufw enablesystemctl enable ufwufw statusexit e per verificare le regole attive\nsudo ufw status verbose Le configurazioni sono salvate in:\n/etc/ufw/ HINT: avete inserito una regola per errore? con il comando sudo ufw status numbered potete individuare l’indice della regola errata e con il comando sudo ufw delete [numero] potete cancellarla. Clicca qui per maggiori informazioni sui comandi ufw.\nfail2ban # https://www.raspberrypi.org/documentation/configuration/security.md\nAltro tool consigliato dalla guida Raspberry, che analizza il log per verificare delle attività sospette, ad esempio attacchi di tipo bruteforce.\nsudo apt-get install fail2ban Bene adesso avete tutto a disposizione per tenere attivo il vostro nodo.\nPotete tranquillamente fare esperimenti, oppure seguire senza problemi il libro Bitcoin dalla teoria alla pratica :)\nIl mio nodo in funzione.\nOgni suggerimento o modifica è sempre benvenuta. Le fonti che ho utilizzato per questo articolo sono:\nhttps://medium.com/@meeDamian/bitcoin-full-node-on-rbp3-revised-88bb7c8ef1d1 https://stadicus.github.io/RaspiBolt/ ","date":"25 settembre 2019","externalUrl":null,"permalink":"/posts/come-avere-un-fullnode-bitcoin-con-raspberry-pi/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Un lampone decentralizzato # Nel libro Bitcoin dalla teoria alla pratica viene utilizzato un fullnode concesso gentilmente da Growbit, ma non è pubblico.\nDiamo come alternativa chainquery per fare determinate operazioni ma non è sufficiente a coprire tutti gli esempi che sono riportati.\n","title":"Come avere un Fullnode Bitcoin con Raspberry Pi","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Crittografia Pt V # L’arte del nascondere. Enigma. # In questo articolo cominceremo a conoscere la macchina Enigma, famosa anche grazie al film The imitation game.\nFu una macchina utilizzata dai tedeschi nella seconda guerra mondiale ed era basata su una serie di cilindri e dischi rotanti.\nMa prima di andare nel dettaglio è doveroso tornare all’inizio dell’800 con Thomas Jefferson, il quale non si fece *mancare niente, *è stato infatti uno degli autori della Dichiarazione d’indipendenza e presidente degli Stati Uniti.\nWheel cypher di Jefferson\nFu anche il primo a ideare un cifrario polialfabetico meccanico basato su un cilindro e dischi rotanti dove erano presenti le lettere dell’alfabeto. Il suo cifrario chiamato anche *wheel cypher *iniziò ad essere utilizzato dal 1922 fino al 1943.\nCome si può vedere dall’immagine il cifrario è basato su un numero arbitrario di dischi sui quali sono scritte le 26 lettere dell’alfabeto in ordine sparso.\nI dischi si possono muovere in maniera indipendente. Come funzionava? Chi cifrava il messaggio formava il testo in chiaro e poi comunicava la parola cifrata che si era formata su un’altra colonna e la chiave, formata dall’ordine di come i dischi venivano impilati.\nFacciamo un esempio concreto sfruttando la tabella di Wikipedia.\nQuesto sistema presuppone che anche il destinatario abbia lo stesso Wheel cypher e gli stessi dischi. La parola da comunicare è sempre BARNO. I dischi si presentono così:\n1: \u0026lt; ZWAXJGDLUBVIQHKYPNTCRMOSFE \u0026lt; 2: \u0026lt; KPBELNACZDTRXMJQOYHGVSFUWI \u0026lt; 3: \u0026lt; BDMAIZVRNSJUWFHTEQGYXPLOCK \u0026lt; 4: \u0026lt; RPLNDVHGFCUKTEBSXQYIZMJWAO \u0026lt; 5: \u0026lt; IHFRLABEUOTSGJVDKCPMNZQWXY \u0026lt; 6: \u0026lt; AMKGHIWPNYCJBFZDRUSLOQXVET \u0026lt; 7: \u0026lt; GWTHSPYBXIZULVKMRAFDCEONJQ \u0026lt; 8: \u0026lt; NOZUTWDCVRJLXKISEFAPMYGHBQ \u0026lt; 9: \u0026lt; XPLTDSRFHENYVUBMCQWAOIKZGJ \u0026lt; 10: \u0026lt; UDNAJFBOWTGVRSCZQKELMXYIHP \u0026lt; Il compito del mittente è scrivere il messaggio, comunicare la parola cifrata e la chiave, ovvero l’ordine dei dischi.\n7: \u0026lt; B NOZUTWDCVRJ L XKISEFAPMYGHQ \u0026lt; 1: \u0026lt; A XPLTDSRFHEN Y VUBMCQWOIKZGJ \u0026lt; 10:\u0026lt; R AMKGHIWPNYC J BFZDUSLOQXVET \u0026lt; 4: \u0026lt; N RPLDVHGFCUK T EBSXQYIZMJWAO \u0026lt; 2: \u0026lt; O ZWAXJGDLUBV I QHKYPNTCRMSFE \u0026lt; 6: \u0026lt; W AMKGHIPNYCJ B FZDRUSLOQXVET \u0026lt; 5: \u0026lt; K GWTHSPYBXIZ U LVMRAFDCEONJQ \u0026lt; 8: \u0026lt; X NOZUTWDCVRJ L KISEFAPMYGHBQ \u0026lt; 9: \u0026lt; W XPLTDSRFHEN Y VUBMCQAOIKZGJ \u0026lt; 3: \u0026lt; W UDNAJFBOTGV R SCZQKELMXYIHP \u0026lt; Il mittente quindi comunicherà come chiave 7,1,10,4,2,6,5,8,9,3 e come parola cifrata LYJTIBULYR.\nIl Wheel cypher, in questo caso, ha più dischi del necessario, veniva quindi inserito un padding con lettere random che non formavano nessun significato. Il destinatario avrà il compito di mettere i dischi nella giusta sequenza (la chiave) e di formare la parola crittata LYJTIBULYR in una delle colonne rimanenti, a quel punto era in grado di leggere il messaggio.\nLa macchina Enigma Enigma, inventata nel 1918 di Arthur Scherbius, appariva come una macchina da scrivere ed era divisa in tre parti collegate tramite fili elettrici.\nUna tastiera per scrivere il messaggio in chiaro Un’unità di scambio (rotore) Una parte formata da una serie di lampadine che illuminava la lettera cifrata. Il mittente per ottenere il testo cifrato, doveva semplicemente scrivere il testo in chiaro e ricopiare le lettere che si illuminavano grazie a degli impulsi elettrici. Le lettere si illuminavano grazie ai collegamenti elettrici all’interno del rotore stesso.\nRotore della macchina Enigma\nUna delle parti fondamentali della macchina Enigma erano i rotori, che possiamo immaginare come a degli ingranaggi, i quali potevano assumere 26 posizioni (lettere dell’alfabeto) e, ad ogni lettera premuta, il primo rotore faceva un “passo”, ovvero cambiava posizione.\nQuando il primo rotore aveva compiuto 26 passi, era il secondo rotore che veniva spostato di una posizione.\nGrazie a questo meccanismo Enigma era una macchina polialfabetica.\nSolitamente era dotata di 3 rotori, i quali potevano assumere 26 posizioni ciascuna, fino ad arrivare ad avere un totale di 17576 posizioni ottenendo così 150 milioni di milioni di combinazioni. Enigma venne utilizzata durante la seconda guerra mondiale, e per sicurezza i tedeschi decisero di cambiare le chiavi di cifratura ogni giorno, in alcuni casi anche ogni 8 ore.\nI soldati tedeschi ricevano insieme alla macchina Enigma anche un cifrario e un manuale di istruzioni.\nProprio grazie a delle fotografie di questi manuali che vendette Hans Thilo Schmidt che Enigma cominciò a essere decodificata. Prima di utilizzare Enigma l’operatore doveva impostare la chiave di cifratura dei tre rotori attenendosi alla chiave giornaliera e posizionare gli spinotti frontali per la permutazione delle lettere.\nLa chiave di Enigma\nL’addetto alla decodifica, riceveva il messaggio crittato in codice morse.\nUna volta decodificato posizionava i rotori e la chiave nella stessa posizione del mittente.\nDigitando quindi il codice crittato otteneva il messaggio in chiaro.\nPer una dimostrazione consiglio questo video veramente ben fatto.\nE pensare che la macchina fu inventata per scopi commerciali. Ancora una volta soffriamo della distribuzione delle chiavi, proprio come avviene nella crittografia simmetrica, risolta poi dalla crittografia asimmetrica utilizzata anche in Bitcoin.\n","date":"24 settembre 2019","externalUrl":null,"permalink":"/posts/crittografia-pt-v/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Crittografia Pt V # L’arte del nascondere. Enigma. # In questo articolo cominceremo a conoscere la macchina Enigma, famosa anche grazie al film The imitation game.\n","title":"Storia della Crittografia: Da Jefferson a Macchina Enigma","type":"posts"},{"content":"","date":"18 settembre 2019","externalUrl":null,"permalink":"/tags/crittografia/","section":"Tags","summary":"","title":"Crittografia","type":"tags"},{"content":" Difficoltà: Medio TUTORIAL Crittografia Pt IV # L’arte del nascondere — Guerra fredda e Che Guevara # Ancora non è stato spiegato nei passati articoli, ma come si può facilmente immaginare, la crittografia è stata materia di studio per scopi bellici. Era infatti molto importante comunicare con l’alleato senza far capire al nemico il proprio piano d’azione. A partire dal 1700 ogni potenza europea aveva la sua camera nera, un centro per la decifratura dei messaggi in codice.\nQuesto portò velocemente a sviluppare nuovi sistemi polialfabetici e mandare in pensione quelli monoalfabetici.\nNel 1917 Gilbert Vernam allora impiegato alla AT\u0026amp;T inventò un sistema di cifratura da utilizzare con il telegrafo.\nIl telegrafo permette la trasmissione di dati a distanza\nIl cifrario di Vernam consisteva nel sostituire le lettere con dei numeri che venivano a loro volta sommati con una chiave lunga quanto il messaggio da codificare.\nLa chiave era OTP, One time pad, usa e getta.\nIl sistema Vernam fu etichettato come sistema di cifratura perfetto il che vuol dire che non si può ottenere il testo in chiaro avvalendosi della crittoanalisi, ma serve la chiave di cifratura per decifrare il messaggio.\nIl telefono rosso\nFu utilizzato durante la guerra fredda con l’utilizzo del telefono rosso, la linea che collegava Washington e Mosca.\nQuesta linea di comunicazione doveva evitare il rischio di una guerra atomica.\nErnesto Che Guevara\nAnche Che Guevara e Fidel Castro utilizzavano il sistema Vernam per le loro comunicazioni.\nInfatti fu ritrovato un codice Vernam nella tasca di Ernesto Che Guevara quando fu catturato e giustiziato dall’esercito boliviano.\nMa come funziona il cifrario di Vernam?\nCome detto poco sopra abbiamo bisogno di una chiave usa e getta lunga quanto il messaggio che vogliamo codificare e le lettere vengono convertite in numeri, i quali vengono sommati per ottenere la lettera codificata, fino ad ottenere il messaggio crittato.\nFacciamo un esempio con la parola BARNO.\nPrendiamo l’alfabeto e numeriamolo. Prendiamo anche una chiave random APWQM. Ovviamente il mittente e il destinatario dovevano conoscere la chiave.\nQui abbiamo il problema delle distribuzioni delle chiavi che si presenta nella crittografia simmetrica, che vedremo più avanti.\nscusate l’immagine un pò artigianale :) Testo chiaro ….. B A R N O Chiave………\u0026hellip;.. A P W Q M Testo crittato ….. B P N D A\nLa prima lettera del testo in chiaro è la B che ha come valore numerico 1. La prima lettera della chiave è A che ha come valore numerico 0. 1+0=1 che corrisponde alla lettera B.\nLa seconda lettera del testo in chiaro è la A che ha come valore numerico 0. La seconda lettera della chiave è P che ha come valore numerico 15. 0+15=15 che corrisponde alla lettera P.\nLa terza lettera del testo in chiaro è la R che ha come valore numerico 17. La terza lettera della chiave è W che ha come valore numerico 22. 17+22=39 che corrisponde alla lettera N.\n(ripartiamo dall’inizio se otteniamo un numero maggiore della lunghezza dell’alfabeto).\nLa quarta lettera del testo in chiaro è la N che ha come valore numerico 13. La quarta lettera della chiave è Q che ha come valore numerico 16. 13+16=29 che corrisponde alla lettera D.\nLa quinta lettera del testo in chiaro è la O che ha come valore numerico 14. La quinta lettera della chiave è M che ha come valore numerico 12. 14+12=26 che corrisponde alla lettera A.\nIl risultato è B P N D A.\nPer decifrarlo, dobbiamo compiere l’operazione inversa. Testo crittato ….. B P N D A Chiave………….. A P W Q M\nLa prima lettera del testo crittato è B che ha come valore numerico 1. La prima lettera della chiave è A che ha come valore numerico 0. 1–0= 1 che corrisponde alla lettera B La seconda lettera del testo crittato è P che ha come valore numerico 15. La seconda lettera della chiave è P che ha come valore numerico 15. 15–15= 0 che corrisponde alla lettera A La terza lettera del testo crittato è N che ha come valore numerico 13. La terza lettera della chiave è W che ha come valore numerico 22. 13–22=-9 che corrisponde alla lettera R (percorriamo l’alfabeto al contrario).\nLa quarta lettera del testo crittato è D che ha come valore numerico 3. La quarta lettera della chiave è Q che ha come valore numerico 16. 16–3=-13 che corrisponde alla lettera N.\nLa quinta lettera del testo crittato è A che ha come valore numerico 0. La quinta lettera della chiave è M che ha come valore numerico 12. 0–12=-12 che corrisponde alla lettera O.\nIl risultato è B A R N O. Incredibile. \u0026mdash;\nAlcuni appunti presi durante lo studio\n","date":"18 settembre 2019","externalUrl":null,"permalink":"/posts/crittografia-pt-iv/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Crittografia Pt IV # L’arte del nascondere — Guerra fredda e Che Guevara # Ancora non è stato spiegato nei passati articoli, ma come si può facilmente immaginare, la crittografia è stata materia di studio per scopi bellici. Era infatti molto importante comunicare con l’alleato senza far capire al nemico il proprio piano d’azione. A partire dal 1700 ogni potenza europea aveva la sua camera nera, un centro per la decifratura dei messaggi in codice.\nQuesto portò velocemente a sviluppare nuovi sistemi polialfabetici e mandare in pensione quelli monoalfabetici.\n","title":"Storia della Crittografia: Il Cifrario Perfetto di Vernam","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Presentazione a Milano # Blockchain Devs \u0026amp; Crafted Software Prima presentazione del libro “Bitcoin dalla teoria alla pratica” e del tascabile “Bitcoin 199 domande” a Milano presso Mikamai, meetup organizzato da Blockchain Devs \u0026amp; Crafted Software.\nSiamo molto contenti di come sia andata la serata e speriamo che sia la prima di una lunga serie!\nSlide: http://bit.ly/2k80t7m\nMerkle TreeBitcoin dalla teoria alla pratica\nChild key derivationBitcoin dalla teoria alla pratica\n","date":"16 settembre 2019","externalUrl":null,"permalink":"/posts/presentazione-a-milano/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Presentazione a Milano # Blockchain Devs \u0026 Crafted Software Prima presentazione del libro “Bitcoin dalla teoria alla pratica” e del tascabile “Bitcoin 199 domande” a Milano presso Mikamai, meetup organizzato da Blockchain Devs \u0026 Crafted Software.\n","title":"Presentazione del Libro Bitcoin a Milano (Blockchain Devs)","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Crittografia Pt III # L’arte del nascondere — monoalfabetica vs polialfabetica Nell’articolo precedente abbiamo affrontato il tema degli alfabeti. # In particolare sostituzione monoalfabetica e polialfabetica. Aumentiamo ancora il nostro vocabolario, sfruttando Wikipedia.\n\u0026mdash; monoalfabetica è un sistema crittografico che utilizza un alfabeto per il testo in chiaro e una permutazione dello stesso per il testo cifrato. polialfabetica è un sistema crittografico che fa uso di un numero più o meno grande di alfabeti per sostituire le lettere del messaggio.\nOk, non è chiarissimo, almeno per me.\nFacciamo un esempio partendo dal sistema crittografico monoalfabetico. Scriviamo l’alfabeto classico. (26 lettere)\nABCDEFGHIJKLMNOPQRSTUVWXYZ Scegliamo un altro alfabeto con cui cifrare il nostro messaggio. Il requisito è che sia anch’esso composto da 26 lettere. Ad esempio:\nMNOPQRSTUVWXYZABCDEFGHIJKL Ora quello che dobbiamo fare è cifrare il messaggio.\nIl messaggio in chiaro è BARNO. Alfabeto chiaro . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Alfabeto cifrante M N O P Q R S T U V W X Y Z A B C D E F G H I J K L Testo chiaro ….. B A R N O Testo cifrato ….. N M D Z A\nIl procedimento è semplice.\nLa lettera B di B ARNO corrisponde alla lettera N dell’alfabeto cifrante. La lettera A di B A RNO corrisponde alla lettera M dell’alfabeto cifrante. La lettera R di BA R NO corrisponde alla lettera D dell’alfabeto cifrante. La lettera N di BAR N O corrisponde alla lettera Z dell’alfabeto cifrante. La lettera O di BARN O corrisponde alla lettera A dell’alfabeto cifrante.\nPer rendere più difficile la decifratura alla crittoanalisi, venne adottata la crittografia polialfabetica, che utilizza più dizionari risolvendo così anche le frequenza di testo. Facciamo un esempio, cifrando sempre la parola BARNO e aggiungendo un dizionario, ad esempio:\nZABCDEFGHIJKLMNOPQRSTUVWXY Alfabeto chiaro…... A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Alfabeto cifrante M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L Alfabeto cifrante Z. Z A B C D E F G H I J K L M N O P Q R S T U V W X Y Testo chiaro …….. B A R N O Testo cifrato …….. N Z D M A\nIl dizionario M è il dizionario utilizzato nell’esempio precedente, il dizionario Z è il nuovo dizionario. Come otteniamo questo risultato?\nLa lettera B di B ARNO corrisponde alla lettera N dell’alfabeto cifrante M. La lettera A di B A RNO corrisponde alla lettera Z dell’alfabeto cifrante Z. La lettera R di BA R NO corrisponde alla lettera D dell’alfabeto cifrante M. La lettera N di BAR N O corrisponde alla lettera M dell’alfabeto cifrante Z. La lettera O di BARN O corrisponde alla lettera A dell’alfabeto cifrante M.\nCon questa strategia anche se BARNO avesse avuto una doppia(BARRNO) il testo cifrato avrebbe avuto due lettere diverse( DQ ) .\nIn questo caso la chiave è MZ. Se non vi sembra potente immaginate di utilizzare 5 vocabolari per la parola BARNO.\n__|____________________________a | abcdefghijklmnopqrstuvwxyz b | bcdefghijklmnopqrstuvwxyza c | cdefghijklmnopqrstuvwxyzab d | defghijklmnopqrstuvwxyzabc e | efghijklmnopqrstuvwxyzabcd f | fghijklmnopqrstuvwxyzabcde g | ghijklmnopqrstuvwxyzabcdef h | hijklmnopqrstuvwxyzabcdefg i | ijklmnopqrstuvwxyzabcdefgh j | jklmnopqrstuvwxyzabcdefghi k | klmnopqrstuvwxyzabcdefghij l | lmnopqrstuvwxyzabcdefghijk m | mnopqrstuvwxyzabcdefghijkl n | nopqrstuvwxyzabcdefghijklm o | opqrstuvwxyzabcdefghijklmn p | pqrstuvwxyzabcdefghijklmno q | qrstuvwxyzabcdefghijklmnop r | rstuvwxyzabcdefghijklmnopq s | stuvwxyzabcdefghijklmnopqr t | tuvwxyzabcdefghijklmnopqrs u | uvwxyzabcdefghijklmnopqrst v | vwxyzabcdefghijklmnopqrstu w | wxyzabcdefghijklmnopqrstuv x | xyzabcdefghijklmnopqrstuvw y | yzabcdefghijklmnopqrstuvwx z | zabcdefghijklmnopqrstuvwxy Vi consiglio questo sito molto utile per fare delle prove. Nel prossimo articolo affronteremo una tecnica che restituisce un risultato di cifratura perfetto.\n","date":"12 settembre 2019","externalUrl":null,"permalink":"/posts/crittografia-pt-iii/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Crittografia Pt III # L’arte del nascondere — monoalfabetica vs polialfabetica Nell’articolo precedente abbiamo affrontato il tema degli alfabeti. # In particolare sostituzione monoalfabetica e polialfabetica. Aumentiamo ancora il nostro vocabolario, sfruttando Wikipedia.\n","title":"Storia della Crittografia: Sistemi Mono e Polialfabetici","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Crittografia Pt II # L’arte del nascondere # Dopo aver analizzato la prima parte della crittografia, andiamo più in profondità.\nLo scopo della crittografia non è quello di nascondere il messaggio, MA di nascondere il suo significato!\nAumentiamo il nostro vocabolario con nuovi termini:\n\u0026mdash; Crittoanalisi: Tecnica con cui si riesce a interpretare un messaggio senza conoscere la chiave. (dal greco kryptós, “nascosto”, e analýein, “scomporre”). Chiave: Influenza il processo di cifratura. È una parola stabilita tra il mittente e il destinatario. Su di essa si basa la segretezza.\nAltro esempio degno di nota è il cifrario di Giulio Cesare.\nEra un metodo veramente semplice, si trattava di traslare le lettere di 3 posti in avanti.\nQuindi la A diventava la D, la B diventava la E, la Z diventava la C, proprio perchè “riniziare” l’alfabeto.\nCifrario di cesare\nQuindi il mio diminutivo BARNO si tramutava in EDUQR.\nUn pò come il farfallino, ve lo ricordate? COFO MEFE STAFA IFI?\nAltro cifrario particolare fu quello di Polibio.\nParticolare perchè venne pensato per fare una sorta di telegrafo ottico.\nSpieghiamo prima la sua tecnica.\nSi crea una matrice 5x5 e in ogni casella si inserisce una lettera.\nSpesso la I e la J sono nella stessa casella.\nCifrario di Polibio.\nCosi per scrivere BARNO si prendono le coordinate della riga e della colonna e si ottiene il risultato 12 11 42 33 34. E perchè un telegrafo ottico? Il messaggero era dotato di 5 torce per mano e alzava il giusto numero di torce in base al messaggio da comunicare. Nell’esempio BITCOIN (forse a quei tempi c’erano i sesterzi?), il messaggero si sarebbe comportato in questo modo:\nB: 1 torcia a sinistra, 2 torce a destra. I: 2 torce a sinistra, 4 torce a destra. T: 4 torce a sinistra, 4 torce a destra. C: 1 torcia a sinistra, 3 torce a destra. O: 3 torce a sinistra, 4 torce a destra. I: 2 torce a sinistra, 4 torce a destra. N: 3 torce a sinistra, 3 torce a destra. Ed ecco gli arabi che oltre ad inventare diverse tecniche di crittografia inventarono anche la crittoanalisi, cioè interpretare il messaggio senza conoscere la chiave.\nLa chiave, nell’esempio del cifrario di Giulio Cesare, è 3 posizioni avanti dell’alfabeto.\nQui anche l’ Italia si fa avanti, con Giovanni Soro, il primo importante decrittatore Europeo, e con l’architetto Leon Battista Alberti che proponeva le cifrature polialfabetiche, ovvero utilizzare non uno ma più alfabeti con l’obiettivo di offuscare maggiormente il messaggio. La crittografia monoalfabetica non era così forte, infatti una crittoanalisi di un messaggio di Maria Stuarda fu decodificato.\nIl testo conteneva una cospirazione per assassinare Elisabetta I.\nChe cosa si intende con più alfabeti? Lo scopriremo nella prossima puntata!\nCifrario di Giulio Cesare\n","date":"2 settembre 2019","externalUrl":null,"permalink":"/posts/crittografia-pt-ii/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Crittografia Pt II # L’arte del nascondere # Dopo aver analizzato la prima parte della crittografia, andiamo più in profondità.\n","title":"Storia della Crittografia: Dal Cifrario di Cesare a Polibio","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL 100 volte Grazie! # Siamo veramente molto contenti e anche un pò sorpresi di aver raggiunto questo ambizioso traguardo. In 3 mesi abbiamo raggiunto 100 copie vendute del libro Bitcoin dalla teoria alla pratica con Amazon. 🚀\n100 volte Grazie!\nPer ringraziarvi della vostra fiducia abbiamo deciso di scontare 5 copie del libro Bitcoin dalla teoria alla pratica del 50% inserendo il codice promozionale GRAZIE100 nel nostro sito ufficiale corsobitcoin.com.\n","date":"29 agosto 2019","externalUrl":null,"permalink":"/posts/100-volte-grazie/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL 100 volte Grazie! # Siamo veramente molto contenti e anche un pò sorpresi di aver raggiunto questo ambizioso traguardo. In 3 mesi abbiamo raggiunto 100 copie vendute del libro Bitcoin dalla teoria alla pratica con Amazon. 🚀\n","title":"100 Copie Vendute: Sconto per Bitcoin Teoria e Pratica","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Crittografia Pt I # L’arte del nascondere # Durante la creazione del video corso e del libro Bitcoin dalla teoria alla pratica ci siamo imbattuti in una parte fondamentale del protocollo, la crittografia. Ma quali sono state le tappe fondamentali che la storia ha percorso per arrivare a scoprire la crittografia asimmetrica utilizzata in Bitcoin?\nLa prima volta che ho avuto a che fare con la cifratura e la decifratura è stato da piccolo, a mia insaputa, durante il caricamento di Monkey Island, o ancora durante il gioco Indiana Jones and the Fate of Atlantis.\nGuarda, dietro di te!!! una scimmia a tre teste!!!\nEntrambi ricordano la tecnica utilizzata da Enea il tattico che utilizzava un sistema meccanico di dischi forati.\nMa andiamo per ordine, dando delle definizioni ai termini base.\nIl vocabolario delle parole chiave aumenterà strada facendo.\n\u0026mdash; Messaggio in chiaro: testo che non ha subito cifrature, interpretabile da chiunque. Cifrare: Trasformare un messaggio in chiaro in un messaggio incomprensibile. Crittato: Messaggio a cui è stato applicato la cifratura. Cifrario: È il metodo di cifratura. Decifratura: L’operazione inversa di cifrare, convertire un messaggio cifrato in chiaro.\nÈ una storia affascinante che descriveremo a puntate.\nL’obiettivo principale che la crittografia vuole raggiungere è nascondere il messaggio a chi non deve leggerlo, e dare la possibilità al destinatario di decifrarlo, e quindi di leggere il messaggio in chiaro e di comprenderlo.\nLe prime tecniche però si basavano sull’ offuscare il messaggio cioè di coprirlo. Questa tecnica prende il nome di steganografia.\nDal greco: Steganòs = coperto gràphein = scrivere\nLe prime tecniche utilizzate nell’antica Cina sono quelle utilizzate oggi dagli spacciatori internazionali.\nGli ovuli.\nInfatti il messaggio veniva scritto su una seta molto fine e poi coperta di cera.\nIl messaggero, dopo aver inghiottito l’ovulo, si recava dal destinatario per consegnarlo (💩).\nAltra tecnica utilizzata nell’antica Persia da Erodoto era quella di scrivere sulle teste rasate degli schiavi e aspettare che i capelli fossero ricresciuti per occultare il messaggio.\nA quel punto lo schiavo partiva verso il destinatario, che a sua volta doveva rasare i capelli al messaggero per scoprire il messaggio.\nTali tecniche soffrivano di un problema molto grande, se i nemici fermavano i messaggeri e scovavano il messaggio potevano interpretarlo senza problemi. Ecco che da qui è nata la necessità della crittografia. Il suo scopo non è quello di nascondere il messaggio, MA di nascondere il suo significato!\nDal greco: Kryptòs = nascondere gràphein = scrivere\nRiporto le tecniche che mi hanno maggiormente emozionato.\nScitala utilizzata nell’antica Grecia\nLa tecnica della scitala, utilizzati dai magistrati di Sparta.\nChe cosa è la scitala? La scitala è un bastone rotondo, lungo e liscio.\nIl mittente e il destinatario avevo due scitale identiche, per dimensioni e diametro.\nIl mittente avvolgeva un nastro di cuoio intorno al bastone facendo attenzione che questo non lasciasse nessuno spazio tra i lembi.\nUna volta che il bastone era completamente ricoperto dal cuoio, veniva scritto il messaggio sopra di esso seguendo la lunghezza della scitala.\nA lavoro finito il cuoio veniva srotolato e consegnato al messaggero che aveva il compito di portarlo al destinatario.\nIn questo modo anche se veniva intercettato da un nemico, quest’ultimo non era in grado di decifrare il messaggio in quanto non aveva la scitala adatta per mettere nel giusto ordine le lettere.\nSolo il destinatario con la scitala identica al mittente poteva decifrarlo. Possiamo paragonarla alla crittografia simmetrica dei giorni nostri. Geniale.\nCifrario di Enea il tattico.\nAltra tecnica menzionata all’inizio di questo articolo è quella utilizzata da Enea il tattico.\nConsisteva in un disco con 24 fori, ciascuno dei quali era assegnato una lettera disposte in ordine alfabetico.\nUn filo partiva dal centro e “bucava” i buchi per scrivere il messaggio.\nIl destinatario doveva sciogliere la matassa prodotta dal filo per decifrare il messaggio che a quel punto era scritto al contrario.\nSicuramente una crittografia meno potente della scitala ma comunque degna di nota.\n","date":"27 agosto 2019","externalUrl":null,"permalink":"/posts/crittografia-pt-i/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Crittografia Pt I # L’arte del nascondere # Durante la creazione del video corso e del libro Bitcoin dalla teoria alla pratica ci siamo imbattuti in una parte fondamentale del protocollo, la crittografia. Ma quali sono state le tappe fondamentali che la storia ha percorso per arrivare a scoprire la crittografia asimmetrica utilizzata in Bitcoin?\n","title":"Storia della Crittografia: Dalla Steganografia alla Scitala","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Libri 2.0 su Bitcoin. # Libro Bitcoin dalla teoria alla pratica e il tascabile Bitcoin 199 domande # No, non intendiamo il formato digitale, quello sappiamo che c’è già da molto tempo. :) Il libro Bitcoin dalla teoria alla pratica è disponibile sia in formato cartaceo (consigliato) sia in formato Kindle.\nPerché consigliamo il cartaceo? Contiene del codice e siamo convinti che averlo su carta permetta di fruirlo in maniera migliore.\nMa sappiamo che non tutti la pensano come noi, ecco perchè diamo anche la possibilità di acquistarlo in formato Kindle.\nAnche il tascabile Bitcoin 199 domande è disponibile in cartaceo e in formato Kindle.\nAnzi chi possiede l’abbonamento kindle unlimited può leggerlo gratuitamente!\nMa quindi perchè è 2.0? # Abbiamo deciso di utilizzare GitHub per segnalare l’errata corrige tramite delle issue, oppure se vuoi contribuire a migliorare i contenuti di questo libro.\nPer inviare la tua segnalazione puoi creare una issue su GitHub dal seguente indirizzo:\nhttps://github.com/bitcoin-dalla-teoria-alla-pratica/errata-corrige-e-sorgente- esempi/issues/new/choose\nNon sai cosa sia una “issue su GitHub”? Sono simili a dei messaggi in un forum. Quando viene creata una issue si aprirà una discussione in merito.\nInoltre al seguente indirizzo potrai consultare tutta l’errata corrige.\nhttps://github.com/bitcoin-dalla-teoria-alla-pratica/errata-corrige-e-sorgente- esempi/tree/master/errata/libro\nPer i tascabili Bitcoin 199 domande e Bitcoin 199 questions puoi consultare tutta l’errata corrige a questo indirizzo:\nhttps://github.com/bitcoin-dalla-teoria-alla-pratica/errata-corrige-e-sorgente-esempi/tree/master/errata/199\n2.0 perchè è possibile segnalare le issue su Github? # Si e no, la vera novità è che Amazon offre la possibilità di aggiornare i libri con le modifiche che ci avete proposto, in questo modo chi ha acquistato prima di tali modifiche può avere uno storico su Github, chi invece acquista dopo, può avere un libro migliorato grazie ai vostri interventi!\nRicorda che su GitHub trovi anche gli snippet di codice e le immagini a colorie a alta risoluzione!\nBuona caccia all’errore!\nTascabile Bitcoin 199 domande—Libro Bitcoin dalla teoria alla pratica—PocketBookBitcoin 199 questions\n","date":"5 agosto 2019","externalUrl":null,"permalink":"/posts/libri-2-0-su-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Libri 2.0 su Bitcoin. # Libro Bitcoin dalla teoria alla pratica e il tascabile Bitcoin 199 domande # No, non intendiamo il formato digitale, quello sappiamo che c’è già da molto tempo. :) Il libro Bitcoin dalla teoria alla pratica è disponibile sia in formato cartaceo (consigliato) sia in formato Kindle.\n","title":"Libri 2.0 su Bitcoin: Manuali Aggiornabili Tramite GitHub","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Un libro nel 21° secolo? # Libro Bitcoin dalla teoria alla pratica # Sì è una domanda che ci siamo fatti più volte.\nSarà apprezzato un libro nel 21° secolo? Il libro Bitcoin dalla teoria alla pratica è disponibile su Amazon e sul nostro sito ufficiale corsobitcoin.com acquistabile anche in bitcoin, quindi la risposta alla domanda precedente è positiva. Ma sappiamo che la velocità di internet porta a fruire contenuti video, è per questo che abbiamo affiancato al libro il video-corso Bitcoin dalla teoria alla pratica disponibile sulla piattaforma Udemy.\nIn realtà abbiamo fatto prima il corso e poi il libro, ma noi pensiamo in little-endian. :)\nChe cosa ci ha convinti a proseguire con il libro? La prima motivazione è stata quella di esaudire un nostro desiderio, vedere un libro con i nostri nomi sopra devo dire che fa un certo effetto. Quindi al primo posto mettiamo la soddisfazione personale.\nLa seconda motivazione è entrare a far parte della rivoluzione tecnologica che siamo convinti ci accompagnerà per moltissimi anni.\nCerto, non potremo esserci alla festa nell’anno 2140, quando saranno emessi gli ultimi bitcoin nuovi di zecca, ma sapere che qualche persona è li perchè in qualche modo ha acquisito delle conoscenze grazie a noi ci riempie di gioia. Chissà, magari il nostro libro sarà a quella festa! 🍻\nOltre alla conoscenza acquisita per scrivere il libro, vogliamo rendervi partecipi di tutti i passaggi che abbiamo fatto per renderlo disponibile, dalle bozze, ai margini, alle copertine, alle case editrici fino ad arrivare alla pubblicazione. Stay tuned!\n","date":"29 luglio 2019","externalUrl":null,"permalink":"/posts/un-libro-nel-21-secolo/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Un libro nel 21° secolo? # Libro Bitcoin dalla teoria alla pratica # Sì è una domanda che ci siamo fatti più volte.\nSarà apprezzato un libro nel 21° secolo? Il libro Bitcoin dalla teoria alla pratica è disponibile su Amazon e sul nostro sito ufficiale corsobitcoin.com acquistabile anche in bitcoin, quindi la risposta alla domanda precedente è positiva. Ma sappiamo che la velocità di internet porta a fruire contenuti video, è per questo che abbiamo affiancato al libro il video-corso Bitcoin dalla teoria alla pratica disponibile sulla piattaforma Udemy.\n","title":"Perché Scrivere un Libro su Bitcoin nel 21° Secolo?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL The pocket-sized paperback book on Bitcoin answers. # We received many comments on our first book Bitcoin from theory to practice (shortly available in English), both positive and negative, all constructive.\nSince it explains the protocol through real and concrete examples, it does not allow a universal approach. We realized that in order to start using and understanding Bitcoin, we had to answer some recurring questions. Then, we thought: “Why don’t we write a handbook with very short questions and answers?\nIt would help many people clear their minds! Or rather, let’s create a path of questions so as to lead the reader from basic to advanced level.”\nWho does not remember the Cliff’s Notes? Did you also try to quickly sneak a peek at them during school tests? 🙂\nThose little books helped us many times and we wanted to create something similar.\nBitcoin 199 questions\nThe book is divided into 4 sections: Basic level: it explains more general, but still fundamental concepts, such as “Who issues the new bitcoins?” or “Why is the blockchain immutable?”. Intermediate level: it provides answers to questions with a higher degree of difficulty, such as “How do you identify a block?” or “What is a reward?” Advanced level: it includes more technical questions, such as “What is a digital signature?” or “What is a nonce?” Nerd zone: the most technical level.\nIf you reach this point or if you are interested only in this part, it means you are willing to see with your own eyes how the protocol works.\nIn this section, you will find questions such as: “What is P2PKH?” or “ How is the seed calculated?”.\nThe challenge for us was to answer exhaustively even technical questions in few lines.\nNevertheless, we are aware that some questions need more in-depth answers and that’s why we recommend to read Bitcoin: from theory to practice.\nThe book is available on Amazon, both paperback and Kindle.\nYou can read it for free if you are a member of kindle unlimited.\n","date":"23 luglio 2019","externalUrl":null,"permalink":"/posts/bitcoin-199-questions/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL The pocket-sized paperback book on Bitcoin answers. # We received many comments on our first book Bitcoin from theory to practice (shortly available in English), both positive and negative, all constructive.\nSince it explains the protocol through real and concrete examples, it does not allow a universal approach. We realized that in order to start using and understanding Bitcoin, we had to answer some recurring questions. Then, we thought: “Why don’t we write a handbook with very short questions and answers?\n","title":"Bitcoin 199 Questions: The Pocket Guide to the Blockchain","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Libro Bitcoin 199 domande # Il tascabile delle risposte Bitcoin # Abbiamo ricevuto tanti commenti sul nostro primo libro Bitcoin dalla teoria alla pratica, sia positivi che negativi, ma costruttivi. Dato che spiega il protocollo tramite esempi reali e concreti, non permette un approccio universale. Ci siamo accorti che per iniziare a usare e capire Bitcoin dobbiamo rispondere a delle domande ricorrenti, quindi abbiamo pensato: “Perché non facciamo un manuale tascabile con domande e risposte di poche righe? Questo aiuterebbe molte persone a chiarirsi le idee! Anzi creiamo un percorso di domande così da accompagnare il lettore da un livello base a un livello avanzato.” Chi non ricorda il Bignami de “I Promessi sposi”? Anche tu lo usavi sotto il banco velocemente? :) L’idea è venuta proprio dalla nostra adolescenza, quel piccolo libro che spesso ci ha aiutato durante una verifica.\nIl libro infatti si divide in 4 sezioni:\nLivello base, il quale chiarisce concetti più generali ma comunque indispensabili, ad esempio “Chi emette i nuovi bitcoin?” oppure “Perchè la blockchain è immutabile?”. Livello intermedio, che risponde a domande con un grado di difficoltà maggiore, ad esempio “Come si identifica un blocco?” oppure “Che cosa è un reward?” Livello avanzato, con domande più tecniche “Che cosa è la firma digitale?” oppure “che cosa è il nonce?” Livello nerd, il livello più tecnico, se siete arrivati qua o se volete solo questo livello siete persone a cui piace vedere con i propri occhi come funziona il protocollo, in questa sezione trovi domande come: “Che cosa è il P2PKH?” oppure “Come viene calcolato il seed?”. La sfida è stata quella di rispondere esaustivamente a domande anche tecniche utilizzando poche righe, siamo però consapevoli che alcune domande necessitano risposte più approfondite, per questa esigenza consigliamo Bitcoin dalla teoria alla pratica.\nIl tascabile è disponibile su Amazon, in formato digitale e cartaceo.\nÈ possibile leggerlo gratuitamente se si è membri del kindle unlimited.\n","date":"22 luglio 2019","externalUrl":null,"permalink":"/posts/libro-bitcoin-199-domande/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Libro Bitcoin 199 domande # Il tascabile delle risposte Bitcoin # Abbiamo ricevuto tanti commenti sul nostro primo libro Bitcoin dalla teoria alla pratica, sia positivi che negativi, ma costruttivi. Dato che spiega il protocollo tramite esempi reali e concreti, non permette un approccio universale. Ci siamo accorti che per iniziare a usare e capire Bitcoin dobbiamo rispondere a delle domande ricorrenti, quindi abbiamo pensato: “Perché non facciamo un manuale tascabile con domande e risposte di poche righe? Questo aiuterebbe molte persone a chiarirsi le idee! Anzi creiamo un percorso di domande così da accompagnare il lettore da un livello base a un livello avanzato.” Chi non ricorda il Bignami de “I Promessi sposi”? Anche tu lo usavi sotto il banco velocemente? :) L’idea è venuta proprio dalla nostra adolescenza, quel piccolo libro che spesso ci ha aiutato durante una verifica.\n","title":"Bitcoin 199 Domande: Il Tascabile per Capire la Blockchain","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL La copertina del libro “Bitcoin dalla teoria alla pratica” # L’immagine in copertina è stata realizzata da Stefania Pizzichi, visual designer freelance.\nL’illustrazione è composta da un mosaico che mostra elementi iconici e rappresentativi del mondo Bitcoin, in uno stile semplice e colorato.\nLe prime bozze di copertina dellibro Bitcoin dalla teoria alla pratica\nStefania grazie al supporto dei due autori, Alessio e Alessandro , ha capito fin da subito che cosa serviva per il libro.\nNon voleva cadere nella banalità e limitarsi con il “classico” bitcoin, ma ha deciso che serviva una copertina che trasmettesse al lettore gli argomenti che andrà ad affrontare.\nPersonalmente credo che l’obiettivo sia stato più che raggiunto, il libro ha un’identità e una personalità molto forte grazie a questa, passatemi il termine e non credo di esagerare, opera d’arte.\nCopertina dellibro Bitcoin dalla teoria alla pratica\nEcco la spiegazione che ha dato Stefania: Moneta bitcoin — icona inevitabile usata per rappresentare i bitcoin nella forma di criptovaluta. OP_HASH160 — il cuore delle transazioni, la sequenza degli Opcodes, OP_HASH160 uno di essi, rappresenta le istruzioni che ogni nodo deve eseguire durante la validazione di una transazione. Fork — il fork rappresenta un evento *particolare *nella storia di una blockchain. Circuito — anche se Bitcoin è un’astrazione complessa, i bit transitano sempre in circuiti elettronici, non dimenticarlo mai! Banconota — attenzione non è una banconota, è un paper wallet! Ebbene sì, per tenere al sicuro le tue chiavi è possibile utilizzare dei portafogli cartacei anziché applicazioni per smartphone. Piccone — altra icona tipica della subcultura delle criptovalute, il piccone è utilizzato per minare i blocchi contenenti nuovi bitcoin.\nIn realtà nessuno lo usa :) Chiave — Bitcoin utilizza la crittografia asimmetrica nella quale si hanno due chiavi da gestire: una chiave pubblica da condividere e una chiave privata da tenere gelosamente segreta. Ampolla — utilizzata per mescolare sostanze ed ottenerne di nuove, l’abbiamo voluta in copertina come analogia del processo di hashing utilizzato in Bitcoin. Generale bizantino — il vero eroe dietro le quinte, le sue strategie e gesta hanno ispirato Satoshi Nakamoto nella progettazione di un sistema resistente ai malintenzionati. Bilancia — la difficoltà di mining all’interno della rete Bitcoin è in continuo bilanciamento in base alla velocità dei blocchi pubblicati dai nodi miner che ne fanno parte, come in un’orchestra senza direttore. Lente di ingrandimento — le transazioni all’interno della rete Bitcoin garantiscono una trasparenza massima consultabile con estrema precisione. Blockchain — la blockchain è composta da un susseguirsi di contenitori, i cosiddétti blocchi, collegati tra loro formando una catena.\nQuesta la nostra visualizzazione. Cassaforte — la crittografia alla base di Bitcoin rende sicuro il protocollo quanto una cassaforte: solo tu con le tue chiavi puoi aprirla! Impronta digitale — elemento indispensabile nel cypherspazio per rappresentare oggetti unici, ad esempio ogni transazione ha un’impronta digitale. Scudo — Bitcoin non prevede un ente centrale che ne garantisca la sicurezza, ogni utente deve fare la sua parte con il proprio scudo crittografico.\nL’unione fa la forza!\nNon ci resta che ringraziare Stefania per aver dato il giusto carattere al libro! Ma il qrcode funziona?\n","date":"19 luglio 2019","externalUrl":null,"permalink":"/posts/la-copertina-del-libro-bitcoin-dalla-teoria-alla-pratica/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL La copertina del libro “Bitcoin dalla teoria alla pratica” # L’immagine in copertina è stata realizzata da Stefania Pizzichi, visual designer freelance.\nL’illustrazione è composta da un mosaico che mostra elementi iconici e rappresentativi del mondo Bitcoin, in uno stile semplice e colorato.\n","title":"Il Significato della Copertina di Bitcoin Teoria e Pratica","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL La prima copia acquistata con bitcoin! # Il libro Bitcoin dalla teoria alla pratica acquistato dal nostro sito con bitcoin. # Ebbene sì, c’è stata la prima transazione verso il nostro wallet che gestisce le vendite del libro Bitcoin dalla teoria alla pratica e del tascabile Bitcoin 199 domande!\nUn nostro lettore ha deciso di acquistare la propria copia tramite il sito corsobitcoin.com e di usare come metodo di pagamento bitcoin!\nSiamo molto orgogliosi che il nostro esperimento faccia parte del blocco 583867 e che questa txid 4f88f9fbfd390bb5553e5e177684a6c04f7f296b04c57794426a6894b3e2ea3c sia collegata al nostro libro! La transazione raw è:\n0100000001cf27c205c39400338f196789ae1f14a25cd74716cf3117d148cff253900b64fb560000006a473044022051b08370e993235686aaeac47e746025f3f353c9b23f785920961d41d793148d02201315ad31fc1e153607b608dc24b5312a34e698e8e1c07280e884be06fb5423ab0121038477302e8c4d464005f851412d0c90c713ea7f7b33ead039f7651a32f8c16ff0ffffffff025cb603000000000016001427724d7c520ac6b0b58bac3d1afa7e5d9e051cee60200900000000001976a9148252e9cb9611bd58a2b44c4fbe2c67843a6dc0dd88ac00000000 Esempio delvideo corsoe dellibro Bitcoin dalla teoria alla pratica\nIl libro Bitcoin dalla teoria alla pratica spiega come leggere ogni singolo byte della transazione. Ad esempio, nella raw transaction dell’acquisto del libro possiamo vedere quanti bitcoin sono stati spostati con alcune operazioni. Come?\nPrendiamo la porzione di byte di riferimento:\n5cb6030000000000 Le operazioni da fare sono:\ngirare l’ordine dei byte convertire in base 16 convertire nell’unità di misura bitcoin, cosi da confrontarla con il block explorer per avere una prova del nostro lavoro. Il risultato che dobbiamo ottenere è: 0.00243292 btc. printf 5cb6030000000000 | tac -rs.. risultato:\n000000000003b65c convertiamo in base16\necho \u0026#34;ibase=16; $(echo 0000000000061a80 | tr \u0026#39;[:lower:]\u0026#39; \u0026#39;[:upper:]\u0026#39;) \u0026#34; | bc risultato:\n243292 converto nell’unità di misura bitcoin.\necho “243292*10^-08” | bc -l risultato:\n. 00243292000000000000 Il risultato ottenuto corrisponde all’explorer!\nLa lettura della raw transaction fa parte dei capitoli transazioni del libro Bitcoin dalla teoria alla pratica. Adesso alla domanda ricorrente “Ragazzi ma che cosa ci compro con bitcoin?” abbiamo un’ottima risposta e con tanto di prova immutabile e permanente:)\nGrazie! 🙏\nImmagine del libroBitcoin dalla teoria alla Pratica\n","date":"9 luglio 2019","externalUrl":null,"permalink":"/posts/la-prima-copia-acquistata-con-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL La prima copia acquistata con bitcoin! # Il libro Bitcoin dalla teoria alla pratica acquistato dal nostro sito con bitcoin. # Ebbene sì, c’è stata la prima transazione verso il nostro wallet che gestisce le vendite del libro Bitcoin dalla teoria alla pratica e del tascabile Bitcoin 199 domande!\nUn nostro lettore ha deciso di acquistare la propria copia tramite il sito corsobitcoin.com e di usare come metodo di pagamento bitcoin!\n","title":"Libro Acquistato in Bitcoin: Analisi Tecnica della TxID","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Bitcoin dalla teoria alla pratica a Firenze! # Con enorme soddisfazione siamo presenti alla libreria Libraccio — ibs a Firenze in Via de’ Cerretani accanto al bellissimo Duomo. Quando il libro è stato collocato nel reparto informatica devo dire che ci siamo emozionati e non poco!\nBitcoin dalla teoria alla pratica@ Libraccio Firenze\nQuindi per chi si trova nei paraggi di Firenze può sfogliare e, speriamo :) , acquistare il libro, altrimenti è possibile leggere l’estratto su Amazon.\nStefania,Alessandro,Alessioed Eli 🐶 @ Libraccio Firenze\nRarissima foto in cui Eli 🐶 è in posa :) .\nBitcoin dalla teoria alla pratica@ Libraccio Firenze\n","date":"2 luglio 2019","externalUrl":null,"permalink":"/posts/bitcoin-dalla-teoria-alla-pratica-a-firenze/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Bitcoin dalla teoria alla pratica a Firenze! # Con enorme soddisfazione siamo presenti alla libreria Libraccio — ibs a Firenze in Via de’ Cerretani accanto al bellissimo Duomo. Quando il libro è stato collocato nel reparto informatica devo dire che ci siamo emozionati e non poco!\n","title":"Bitcoin Dalla Teoria Alla Pratica in Libreria a Firenze","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Marco Crotta presenta il libro Bitcoin dalla teoria alla pratica. # Chi non conosce Marco Crotta e il suo canale youtube Blockchain Caffè? Personalmente è stato uno dei primi talk che ho seguito sull’argomento Bitcoin, ricordo ancora l’esempio della prima moneta di pietra e di come riuscì a collegarla alla criptomoneta bitcoin facendo capire alla platea (me compreso) l’idea di possesso. L’ultima volta che ho partecipato ad un suo talk è stato a Firenze, dove a fine intervento si è trattenuto per rispondere a ogni tipo di domanda senza dare niente per scontato. Persona preparata e disponibile, siamo quindi veramente molto orgogliosi delle parole che ha speso verso di noi e verso il libro. Non nascondiamo che i primi giorni lo abbiamo guardato in loop! :)\nPresentazione dellibro Bitcoin dalla teoria alla praticaa cura diMarco Crotta Blockchain Caffè\nIl libro Bitcoin dalla teoria alla pratica è disponibile su Amazon in formato cartaceo e digitale, e sul nostro sito ufficiale (corsobitcoin.com) con la possibilità di pagamento in bitcoin.\n","date":"26 giugno 2019","externalUrl":null,"permalink":"/posts/video-recensione-blockchain-caff/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Marco Crotta presenta il libro Bitcoin dalla teoria alla pratica. # Chi non conosce Marco Crotta e il suo canale youtube Blockchain Caffè? Personalmente è stato uno dei primi talk che ho seguito sull’argomento Bitcoin, ricordo ancora l’esempio della prima moneta di pietra e di come riuscì a collegarla alla criptomoneta bitcoin facendo capire alla platea (me compreso) l’idea di possesso. L’ultima volta che ho partecipato ad un suo talk è stato a Firenze, dove a fine intervento si è trattenuto per rispondere a ogni tipo di domanda senza dare niente per scontato. Persona preparata e disponibile, siamo quindi veramente molto orgogliosi delle parole che ha speso verso di noi e verso il libro. Non nascondiamo che i primi giorni lo abbiamo guardato in loop! :)\n","title":"Blockchain Caffè: Recensione di Bitcoin Teoria e Pratica","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Come è nato “Bitcoin dalla teoria alla pratica” # Se ci avessero detto che nel 2019 avremmo scritto un libro, probabilmente entrambi ci saremmo messi a ridere.\nSì, dietro a questo profilo ci sono due amici, Barno (Alessio Barnini) e Aglie (Alessandro Aglietti), che hanno deciso di unire le forze per fare il loro primo esperimento.\nCome si può capire dal titolo “Bitcoin dalla teoria alla pratica” è un libro che spiega il protocollo Bitcoin utilizzando esempi reali e concreti.\nTutto è nato per caso, durante le vacanze natalizie (2018) in Toscana, eravamo a cena insieme e discutevamo sul fatto che dopo aver letto Mastering Bitcoin, di Andreas Antonopoulos, avevamo bisogno di scavare un pochino di più e dato che siamo due programmatori, di fare qualche prova concreta.\nAvevamo bisogno di mettere le mani nella marmellata, sentivamo la necessità di sporcarsi un pò.\nLe frasi durante la cena erano del tipo “Sì, il wallet deterministico è veramente figo, ma come si costruisce?” oppure “ma dove si legge precisamente la difficoltà che il miner deve *sconfiggere *per ottenere il reward?”.\nAvevamo costruito un bagaglio di informazioni veramente ampio, ma sentivamo che era, in un certo senso, a metà.\nNoi vogliamo leggere messaggi dal terminale del tipo “Success”, o “Error”, vogliamo bere caffè per capire come diavolo funziona! :)\nQuindi è nato prima il video corso su Udemy, e dato che per fare le lezioni scrivevamo i copioni, senza rendercene conto avevamo in mano un libro, da riordinare certo, ma con una traccia da seguire.\nLa prima bozza di “Bitcoin dalla teoria alla pratica”\nNon abitando nella stessa città e presi dai rispettivi impegni lavorativi, dovevamo organizzare delle videochat (call fa più figo) e discutere di cosa non avevamo capito e di come proseguire, ovviamente tutto questo in orari impensabili e in giorni casuali.\nÈ stata un’avventura emozionante, talmente emozionante che non vogliamo che sia unica.\nIl libro è disponibile su Amazon e sul sito ufficiale (acquistabile in bitcoin ovviamente).\nMa come avete capito questo non è un post per pubblicizzarlo ma bensì la celebrazione dell’amicizia che ci ha permesso di coronare un sogno che entrambi avevamo da tempo.\nA un certo punto eravamo presi solo dal libro (come si può vedere 😂)\nLa prima bozza di “Bitcoin dalla teoria alla pratica”\n","date":"21 giugno 2019","externalUrl":null,"permalink":"/posts/come-nato-bitcoin-dalla-teoria-alla-pratica/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Come è nato “Bitcoin dalla teoria alla pratica” # Se ci avessero detto che nel 2019 avremmo scritto un libro, probabilmente entrambi ci saremmo messi a ridere.\nSì, dietro a questo profilo ci sono due amici, Barno (Alessio Barnini) e Aglie (Alessandro Aglietti), che hanno deciso di unire le forze per fare il loro primo esperimento.\n","title":"Retroscena: Come Nasce il Libro Bitcoin Teoria e Pratica","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Il titolo de “The Times” nella blockchain Bitcoin. # Abbiamo spesso sentito che un titolo del celebre giornale “The Times” è inserito dentro la blockchain Bitcoin.\nMa esattamente dove è inserito?\nCome è stato possibile?\nÈ una storia romantica se vogliamo, infatti Satoshi Nakamoto, il creatore di Bitcoin, ha lasciato un messaggio nel blocco genesi della blockchain Bitcoin.\nIl blocco genesi è il primo blocco della blockchain, ed è hardcodato cioè inserito manualmente.\nAll’interno della coinbase possiamo leggere la famosa frase.\n04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73\nTale frase ha un duplice significato, testimoniare la data del primo blocco, e la nascita di un nuovo sistema monetario indipendente.\nMa che cosa c’è scritto in questo esadecimale?\nCome è possibile recuperarlo ed interpretarlo? Utilizzando il comando RPC getblock e l’hash del blocco genesi, richiedendo un risultato più verboso aggiungendo 2 in fondo.\nAnalizzando l’output ottenuto, possiamo leggere coinbase, seguito dal suo valore in esadecimale.\nAdesso possiamo convertire l’esadecimale in ASCII.\nOttenendo così il titolo de “The Times” del 3 gennaio 2009.\n","date":"7 maggio 2019","externalUrl":null,"permalink":"/posts/il-titolo-de-the-times-nella-blockchain/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Il titolo de “The Times” nella blockchain Bitcoin. # Abbiamo spesso sentito che un titolo del celebre giornale “The Times” è inserito dentro la blockchain Bitcoin.\nMa esattamente dove è inserito?\nCome è stato possibile?\n","title":"Genesis Block Bitcoin: Il Messaggio Nascosto del The Times","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Due transazioni con lo stesso txid # Two bad — master of the universe\nUn pò di tempo fa il protocollo Bitcoin fece nascere due transazioni con lo stesso identificativo.\nCercando la transazione con id e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468:\nbitcoin-cli getrawtransaction e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468 true Risultato:\n...{ \u0026#34;txid\u0026#34;: \u0026#34;e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468\u0026#34;, ... altre informazioni... \u0026#34;blockhash\u0026#34;: \u0026#34;00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721\u0026#34;, \u0026#34;confirmations\u0026#34;: 481756, \u0026#34;time\u0026#34;: 1289781379, \u0026#34;blocktime\u0026#34;: 1289781379} Otteniamo l’hash del blocco che contiene la transazione. Analizziamo un altro blocco.\nbitcoin-cli getblock 00000000000271a2dc26e7667f8419f2e15416dc6955e5a6c6cdf3f2574dd08e Risultato:\n{ “hash”: “00000000000271a2dc26e7667f8419f2e15416dc6955e5a6c6cdf3f2574dd08e”,... “tx”: [ “e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468” ],...} Come è possibile che una transazione sia inclusa dentro a due blocchi? Siamo davanti al tanto temuto double spending? No. Partiamo dicendo che il protocollo Bitcoin non vieta la possibilità di creare due transazioni con lo stesso txid, ma sicuramente non porta benefici.\nIl primo indizio è che la transazione che stiamo esaminando è una coinbase. - Il secondo indizio è che è stato lo stesso miner a risolvere entrambi i blocchi. Il terzo indizio è che entrambi i reward erano di 50 bitcoin. Come si forma la transaction id?\nApplicando la funzione crittografica SHA256 per due volte sulla transaction data e girando l’ordine dei bytes in little-endian. La transaction data è formata da:\nLa version della transazione Numero di input Input (scriptsig) Numero di output Output (scriptPubKey) Locktime La transaction data della txid che stiamo esaminando è la seguente:\n01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff060456720e1b00ffffffff0100f2052a01000000434104124b212f5416598a92ccec88819105179dcb2550d571842601492718273fe0f2179a9695096bff94cd99dcccdea7cd9bd943bfca8fea649cac963411979a33e9ac00000000 Facendo il doppio SHA256 e girando l’ordine dei bytes in little endian, otteniamo la txid incriminata.\nprintf `printf 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff060456720e1b00ffffffff0100f2052a01000000434104124b212f5416598a92ccec88819105179dcb2550d571842601492718273fe0f2179a9695096bff94cd99dcccdea7cd9bd943bfca8fea649cac963411979a33e9ac00000000 | xxd -r -p | sha256sum -b | xxd -r -p | sha256sum -b` | tac -rs.. risultato:e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468 Esatto, le due transazioni hanno lo stesso identico transaction data, ecco perchè hanno lo stesso txid! Per evitare questo problema è stato introdotto il BIP-34, che obbliga ad inserire l’altezza del blocco all’interno dello scriptSig, risolvendo così il problema.\nSlide del corso “Bitcoin dalla teoria alla pratica — corso completo”\n","date":"29 aprile 2019","externalUrl":null,"permalink":"/posts/due-transazioni-con-lo-stesso-txid/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Due transazioni con lo stesso txid # Two bad — master of the universe\nUn pò di tempo fa il protocollo Bitcoin fece nascere due transazioni con lo stesso identificativo.\nCercando la transazione con id e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468:\n","title":"TxID Duplicati in Bitcoin: Come è Possibile? (E il BIP34)","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Seed Phrase, come si ottiene? # Vi siete mai domandati come si ottiene il seed phrase?\nIl Seed phrase è una serie di parole che permettono di generare o rigenerare l’albero delle chiavi, di derivare quindi il wallet deterministico.\nQuindi se qualcuno trova il seed phrase, va da se che ha a disposizione tutte le nostre chiave e di conseguenza i nostri bitcoin.\nQuindi conservatelo in un posto sicuro ! Il BIP39 definisce la creazione del mnemonic code e del seed.\nmnemonic code, mnemonic phrase, mnemonic recovery phrase, mnemonic seed, seed phrase. Sono tutti sinonimi :)\nLa sequenza di queste parole sono sufficienti per ricreare il seed, e da qui ricreare il wallet HD e le chiavi derivate.\nSeed Phrase -\u0026gt; Seed-\u0026gt; Chiavi Master -\u0026gt; Chiavi\nSe si usa lo standard mnemonic, abbiamo a disposizione un dizionario di 2048 parole, con 2048¹² combinazioni.\nTali parole sono selezionate con cura per non essere simili tra loro e non sbagliare a scriverle.\nGli steps da seguire # Partiamo da 128 bits, 32 caratteri esadecimali, che rappresentano l’entropia.\nApplichiamo lo SHA256 e appendiamo i primi 4 bits (cioè 1 carattere esadecimale) in fondo all’entropia.\nQuesto rappresenta il checksum . Convertiamo il risultato ottenuto in base2.\nIl risultato binario viene diviso in 12 segmenti da 11 bits ciascuno, ogni segmento rappresenta una parola.\nÈ necessario convertire il valore delle singole caselle in base10, in modo tale da ottenere un numero che si può mappare nel dizionario.\nPrendiamo i valori corrispondenti dei bits accesi, cioè dove è presente il numero 1, e gli sommiamo.\nIl risultato che otteniamo è un numero, che mappato al dizionario inglese dato dalle 2048 parole, da come risultato accident.\nSlide del corso “Bitcoin dalla teoria alla pratica — corso completo”\nPartiamo dall’entropia\n0168071cf29dbdf232de82fa34acb933 applichiamo quindi lo SHA256 e prendiamo il primo carattere del digest.\nprintf 0168071cf29dbdf232de82fa34acb933 | xxd -r -p | sha256sum -b | head -c 1\u0026gt; 3 Il 3 è il checksum che dobbiamo appendere all’entropia, e poi convertire in base2.\necho \u0026#34;ibase=16; obase=2; $(echo 0168071cf29dbdf232de82fa34acb9333 | tr \u0026#39;[:lower:]\u0026#39; \u0026#39;[:upper:]\u0026#39;) \u0026#34; | bc| tr -d \u0026#39;\\n\u0026#39; \u0026gt; 10110100000000111000111001111001010011101101111011111001000110010110111101000001011111010001101001010110010111001001100110011 Ottenendo così codice binario da “incasellare”.\nprintf 10110100000000111000111001111001010011101101111011111001000110010110111101000001011111010001101001010110010111001001100110011 | sed \u0026#39;s/.\\{11\\}/\u0026amp; /g\u0026#39;| tr \u0026#34; \u0026#34; \u0026#34;\\n\u0026#34; \u0026gt; 10110100000000111000111001111001010011101101111011111001000110010110111101000001011111010001101001010110010111001001100110011 Come vediamo non abbiamo delle caselle da 11 bits ciascuna, per renderle omogenee dobbiamo aggiungere 7 bits di zeri all’inizio\nprintf 000000010110100000000111000111001111001010011101101111011111001000110010110111101000001011111010001101001010110010111001001100110011 | sed \u0026#39;s/.\\{11\\}/\u0026amp; /g\u0026#39;| tr \u0026#34; \u0026#34; \u0026#34;\\n\u0026#34; \u0026gt; 000000010110100000000111000111001111001010011101101111011111001000110010110111101000001011111010001101001010110010111001001100110011 Convertendo il primo risultato in base10\necho \u0026#34;ibase=2; 00000001011\u0026#34; | bc Otteniamo il risultato\n11 Possiamo nel dizionario https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt che parole è mappata all’indice 11.\nLa parola che troviamo è accident. Attenzione, la lista parte da 1, quindi l’elemento è n+1.\nAbbiamo la possibilità di verificare il nostro risultato utilizzando il sito https://iancoleman.io/bip39/ ed inserire l’entropia che abbiamo utilizzato\nSlide del corso “Bitcoin dalla teoria alla pratica — corso completo”\nSlide del corso “Bitcoin dalla teoria alla pratica — corso completo”\n","date":"2 aprile 2019","externalUrl":null,"permalink":"/posts/seed-phrase-come-si-ottiene/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Seed Phrase, come si ottiene? # Vi siete mai domandati come si ottiene il seed phrase?\nIl Seed phrase è una serie di parole che permettono di generare o rigenerare l’albero delle chiavi, di derivare quindi il wallet deterministico.\n","title":"Come Funziona la Seed Phrase? Guida al BIP39 in Bitcoin","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Che cosa sono i bloom filters ? # Personalmente sono rimasto molto affascinato da questa struttura dati probabilistica creata da Burton Howard Bloom nel 1970.\nTale struttura viene utilizzata per verificare se un elemento appartiene ad un insieme.\nI bloom filters si potrebbero riassumere così:\nForse si, sicuramente no.\nVediamo perchè.\nI risultati che può restituire sono i falsi positivi, quindi i forse si, è possibile che l’elemento che stai cercando sia dentro l’insieme, ma **non i falsi negativi,**quindi i sicuramente no, sicuramente quello che stai cercando non è dentro l’insieme.\nQuesta struttura dati permette una ricerca molto rapida e salvaguarda la memoria\nPerché Bitcoin usa bloom filters oltre ai motivi di velocità e memoria?\nPer la Privacy.\nInfatti i bloom filters sono usati per filtrare le transazioni ed i blocchi che un nodo SPV(simplified payment verification) riceve dai suoi peers, selezionando solo gli elementi di interesse, senza però rivelare a quale sia realmente interessato.\nCome fa a fare questo?\nInvia una lista di indirizzi, di hash delle transazioni di qualsiasi UTXO controllati dal suo wallet.\nIl full node manderà solo i risultati che matchano con il bloom filters.\nIl nodo SPV, quindi, non richiede esattamente l’informazione voluta, ma la maschera nei bloom filters, in modo tale da non rivelare esattamente cosa sta cercando, proprio per motivi di privacy.\nIl full node manda “I forse sì, quello che cerchi potrebbe essere dentro questo insieme”,e non manda i “sicuramente no”.\nQuindi abbiamo già dei risultati più leggeri.\nE’ proprio dentro questa risposta che i full node mandano ai nodi SPV il merkleblock message che contiene il merkle path di ogni transazione richiesta, oltre al classico block header.\nUltimo passaggio, il nodo SPV scarta i falsi positivi, quindi i “forse si”, e aggiorna il wallet balance di riferimento.\nCon un esempio pratico sarà più chiaro capire come funzionano i bloom filters.\nCercando di semplificare possiamo dire che il bloom filters si presenta così, ovvero con un array di zeri\nSlide del corso “Bitcoin dalla teoria alla pratica — corso completo”\nL’obiettivo è quello di verificare se alcune parole fanno parte dell’insieme. Per funzionare ha bisogno di almeno due funzioni di hash.\nIl loro risultato deve essere compreso tra 1 e N, dove N è la lunghezza dell’array, in questo caso 8.\nAggiungiamo il primo pattern, cioè la prima parola. Ad esempio inseriamo la parola bitcoin.\nbitcoin è quindi l’input dalle funzioni hash che restituiscono 3 e 5 come output\nLe posizioni (in realtà i bit dell’array) vengono mappati a questo risultato e convertiti da 0 a 1.\nQuindi nella posizione 3 abbiamo 1 nella posizione 5 abbiamo 1. Stesso procedimento per un altra parola, ad esempio blockchain.\nLe funzioni hash restituiscono come risultato, ad esempio, 2 e 8, e le posizioni corrispondenti dell’array da 0 diventano 1.\nDefinito l’insieme, che in questo caso è formato da bitcoin e blockchain, vediamo come la struttura dati probabilistica bloom filters, lavora per comunicarci i “forse si” o “sicuramente no”.\nArriva la prima parola da verificare, ad esempio, Banca. Le funzioni di hash restituiscono come risultato, 1 e 2. Nella posizione 1 dell’array abbiamo il valore 0 e nella posizione 2 abbiamo un valore 1\nDato che c’è uno 0 e un 1, questo va nei sicuramente no. Per essere ammesso nei forse sì, entrambi questi valori devono essere 1.\nArriva la parola Satoshi. Le funzioni di hash restituiscono come risultato, 8 e 5.\nNell’array le posizioni 8 e 5 hanno il valore 1, quindi va nei forse si. E così via.\nLo scenario ottenuto è quello riportato qui sotto.\nSlide del corso “Bitcoin dalla teoria alla pratica — corso completo”\nRicorda che, non c’è sicuramente si, ma solo, sicuramente no.\n","date":"29 marzo 2019","externalUrl":null,"permalink":"/posts/bloom-filters/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Che cosa sono i bloom filters ? # Personalmente sono rimasto molto affascinato da questa struttura dati probabilistica creata da Burton Howard Bloom nel 1970.\nTale struttura viene utilizzata per verificare se un elemento appartiene ad un insieme.\n","title":"Bloom Filters","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Forse vi potrà sorprendere che la blockchain Bitcoin subisce dei fork molto frequentemente.\nPer proseguire dobbiamo chiarire anche la differenza tra Nodo e Miner\nI Full node come sappiano hanno l’intera blockchain scaricata.\nStanno in ascolto su altri nodi e verificano che una transazione sia valida confrontandola proprio con la blockchain che hannoer essere più precisi con LevelDb Chainstate\nSe tale transazione viene verificata viene passata ad un altro nodo, e aggiorna la propria mempool, dove sono “ospitate” tutte le transazioni unconfirmedna transazione è unconfirmed quando non è ancora inclusa nel blocco, di fatto non fa ancora parte della blockchain\nI miners stanno in ascolto sulle nuove transazioni, prendendo le transazioni da includere nel blocco dalla mempool\nIl loro compito è creare blocchi di transazioni valide e risolvere il PoW dietro ricompensa BTCna volta risolto mandano il blocco in broadcast, cioè nella rete\nPer adesso possiamo dire che i Miners a differenza dei fullnode creano blocchi.\nCome sappiamo la blockchain è un sistema decentralizzato e come dicevamo i nodi hanno al suo interno la replica esatta della blockchain.\nEssendo un sistema decentralizzato può essere che il nodo A abbia ricevuto il tip, ovvero il blocco più in alto, il più nuovo, mentre il nodo B non abbia ancora ricevuto lo stesso blocco, proprio perchè essendo una rete decentralizzata, le informazioni si propagano come dei cerchi nell’acqua e quindi non simultaneamente.\nIl miner per creare il blocco deve risolvere il Proof Of Work.(PoW)\nSlide del corso “Bitcoin dalla teoria alla pratica — corso completo”\nBene il miner con i capelli verdi è Alessio, il miner con i capelli neri è Marco.\nImmaginiamo che per risolvere il PoW i miners devono risolvere l’addizione 1+1.\nAlessio e Marco trovano la soluzione al problema 1+1 contemporaneamente, risolvendo di fatto il PoW in maniera corretta e creando cosi il blocco da mandare in broadcast\nIl nodo Paolo riceve il blocco di Alessio e verifica che sia corretto, una volta verificato lo inoltra ai nodi vicini\nIl nodo di Michela invece riceve per primo il blocco di Marco e verifica che sia corretto, una volta verificato lo inoltra ai nodi vicini\nSe Michela adesso ricevesse il blocco di Alessio non potrà considerarlo valido in quanto il padre di Alessio è lo stesso padre di Marco, ovvero il blocco celeste, e invece il nodo Michela sta tentando di aggiungerlo come figlio del blocco di Marco, cioè il blocco rosso.\nEntrambi i blocchi, verdi e rossi sono validi al momento, entrambi hanno il previousBlockhash il valore hash del blocco celeste, quindi hanno lo stesso padre.\nE adesso che succede?\nI miners stanno continuando a lavorare sul prossimo blocco\nUn nuovo blocco è stato trovato, e ha come previousblockhash, l’hash del blocco verde, cioè il blocco minato da Alessio\nIl blocco quindi viene mandato in broadcast e i nodi vengono aggiornati, tranne quelli con il blocco rosso, proprio perchè il previousblockhash del blocco viola (il nuovo blocco scoperto)non “combacia” con l’hash del blocco rosso.\nA questo punto i miners vedono che c’è un ramo più lungo rispetto all’altro\nQuindi abbandonano il ramo con il blocco rosso e cominciano a minare il ramo con il blocco viola appena aggiunto\nAnche i fullnode si mettono dalla parte della blockchain più lunga.\nIl blocco rosso, sarà considerato orfano e le sue transazioni re-inserite nella mempool e ricontrollate.\nDa notare che solitamente il fork avviene con un massimo di un blocco, proprio come l’esempio che abbiamo visto.\nQuindi possiamo affermare che il ramo più lungo vince, diventando la main chaine vogliamo essere ancora più corretti vince il ramo dove è stata accumulata più Proof of Work\nSlide del corso “Bitcoin dalla teoria alla pratica — corso completo”\n","date":"21 marzo 2019","externalUrl":null,"permalink":"/posts/bitcoin-blockchain-fork/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Forse vi potrà sorprendere che la blockchain Bitcoin subisce dei fork molto frequentemente.\nPer proseguire dobbiamo chiarire anche la differenza tra Nodo e Miner\nI Full node come sappiano hanno l’intera blockchain scaricata.\nStanno in ascolto su altri nodi e verificano che una transazione sia valida confrontandola proprio con la blockchain che hannoer essere più precisi con LevelDb Chainstate\n","title":"Bitcoin blockchain fork","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL Che cosa è la Proof of Work? # Una delle parti fondamentali di Bitcoin è la Proof of Work (PoW).\nIn che cosa consiste la PoW ?\nLa proof of work è il processo con il quale il miner inserisce le transazioni all’interno del blocco e riesce ad ottenere un block header hash minore della difficoltà (target) imposta in quel momento storico dalla rete, aggiudicandosi così un posto nella blockchain, ed il reward.\nSlide del corso “Bitcoin dalla teoria alla pratica — corso completo”\nLa difficoltà viene “tarata” ogni 2016 blocchi, in modo tale che un blocco sia minato in media ogni 10 minuti.\nPerchè ogni 10 minuti?\nPer evitare fork troppo frequenti per fork non si intende hard fork o soft fork, ma si intende quando due miners forniscono contemporaneamente una PoW valida.\nI due blocchi hanno di fatto lo stesso padre, o meglio lo stesso previous block hash\nE per la sicurezza.\nSe fosse facile minare blocchi, ci sarebbe meno sicurezza, in quanto i miners con tanta potenza di calcolo, potrebbero crearli in autonomia, fino ad arrivare a fare il famoso attacco del 51%.\nChe cosa fa esattamente il miner per vincere il PoW ed aggiudicarsi il reward?\nOgni miner crea un candidate block con le transazioni prese della mempool, e cerca di ottenere un block header hash minore del target imposto in quel momento storico dalla rete.\nSe il miner non riesce ad ottenere l’hash più basso del target, deve provare nuovamentel miner però deve cambiare qualche parametro d’ingresso per ottenere un digest differente.\nDigest è il risultato ottenuto da una funzione crittografica\nDiventa di fondamentale importanza il nonce, valore all’interno di ogni blocco, in particolar modo nel block header.\nPerchè è cosi importante?\nPerchè se il miner usasse sempre lo stesso input otterrebbe sempre lo stesso output, o meglio, lo stesso digest.\nQuindi cambia il valore del nonce per fare una nuova prova e cercare di vincere la PoW.\nSe due input diversi dessero lo stesso output, saremmo davanti ad un problema chiamato collisione\nIn crittografia, una collisione hash è una situazione che avviene quando due diversi input producono lo stesso output tramite una funzione hash.\nQuali sono i valori che il miner utilizza per fare il PoW ?\nIl miner fa il doppio SHA256 di tutti gli elementi del block header.\nPer essere più precisi:\nversionHex previousblockhash merkleroot time bits nonce Il risultato che deve ottenere è un hash minore del target (il bits è il target nella sua forma compatta).\nSe riesce a vince il PoW, dopo moltissimi tentativi, il blocco diventa parte della blockchain, e il suo hash è esattamente l’hash che ha fatto vincere il miner.\nPrima di essere “ammesso” alla blockchain, il blocco viene verificato ancora, controllando i parametri necessari per essere conforme al protocollo, inclusa la coinbase, transazione che il miner crea per aggiudicarsi il reward.\nPer concludere possiamo dire che, per trovare la soluzione al PoW, il miner impiega molto tempo, mentre per verificare che l’hash trovato sia sotto la difficoltà imposta ci vuole pochissimo tempo, proprio perchè non abbiamo il problema della collisione.\n","date":"18 marzo 2019","externalUrl":null,"permalink":"/posts/che-cosa-la-proof-of-work/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL Che cosa è la Proof of Work? # Una delle parti fondamentali di Bitcoin è la Proof of Work (PoW).\nIn che cosa consiste la PoW ?\nLa proof of work è il processo con il quale il miner inserisce le transazioni all’interno del blocco e riesce ad ottenere un block header hash minore della difficoltà (target) imposta in quel momento storico dalla rete, aggiudicandosi così un posto nella blockchain, ed il reward.\n","title":"Che cosa è la Proof of Work?","type":"posts"},{"content":" Difficoltà: Medio TUTORIAL La storia di Bitcoin # Quest’anno (2019) abbiamo festeggiato 10 anni di Bitcoin, ovvero dal suo primo blocco creato da Satoshi Nakamoto.\nNella coinbase si può leggere il titolo del Times del 3 Gennaio 2009\necho 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73 | xxd -r -p The Times 03/Jan/2009 Chancellor on brink of second bailout for banks\nMa prima di quella data storica che cosa è successo?\n40 anni di ricerca\nHo trovato in rete questa bellissima immagine che ripercorre dal 1973 al 2009 le tappe fondamentali del protocollo Bitcoin.\nAbbiamo elementi come il Merkle Tree, nel 1980l Merkle tree elemento fondamentale per l’indicizzazione delle transazioniermette ai nodi SPV di fare delle ricerche senza scaricare l’intera blockchain, ed è anche elemento fondamentale per il PoW.\n1985 Elliptic Curve Cryptography, la crittografia utilizzata da Bitcoin per firmare le transazioni.\nMa più che tecnologie mi vorrei soffermare sulle persone e su quei progetti che hanno fatto diventare Bitcoin quello che è adesso.\nTutti conosciamo Satoshi Nakamoto come il creatore di Bitcoin, ma nessuno sa la sua vera identità.\nMolti sostengono che non sia una persona soltanto, ma bensì, un gruppo di persone ad aver creato Bitcoin, e forse è l’ipotesi più plausibile.\nMa andiamo per gradi:\nAlla fine degli anni 80 nacque un movimento, Cypherpunks.\nChe cosa è un movimento Cypherpunks?\nUn movimento Cypherpunks è un movimento che si pone come obiettivo quello di aumentare la privacy tramite la crittografia al fine di ottenere un cambiamento socio politico.\nUn movimento molto ambizioso.\nDavid Chaum—DigiCash Inc\nSecurity without Identification: Transaction Systems to Make Big Brother Obsolete, cosi David Chaum, pubblicò il suo pensiero.\nChaum nel 1989 crea una società DigiCash Inca quale aveva come obiettivo quello di portare le sue “monete” nel mondo bancario.\nEra una forma di pagamento elettronico anticipato, infatti l’utente doveva prelevare banconote dalla banca ed assegnare chiavi (pubblica e privata) da inviare al destinatarion questo modo sarebbe stato impossibile per le banche e per i governi rintracciare gli utenti , dato che gli utenti erano identificati con una stringa alfanumerica…ricorda qualcosa?\nPurtroppo questo soffriva di centralizzazione in quanto la banca doveva rilasciare un nullaosta per utilizzarle, e dopo innumerevoli tentativi di colmare questo gap, la società andò in fallimento.\nMa questo fu l’inizio della rivoluzione. 👊\nDa qui iniziarono ad entrare dei personaggi molto importanti\nAdam Back—Hashcash\nGià nel 1997 si parlava di Proof of work (PoW).\nInfatti Adam Back creò Hashcash, basato appunto sul Proof of work, per limitare lo spam email e attacchi DoS.\nCome?\nRendendo la vita difficile agli spammers, il cui obiettivo è quello di mandare una grande quantità di email a basso costo.\nMentre in questo modo il destinatario poteva verificare che il mittente avesse effettivamente fatto il PoW e quindi filtrare più facilmente.\nQuesto algoritmo suona famigliare ?\nWei Dai—b-money\nL’anno successivo, 1998, Wei Dai, pubblicò il primo paper dove descriveva la sua idea di criptovaluta.\nLa b-money.\nEra la prima criptovaluta anonima e distribuita.\nDai sviluppò due protocolli\nIl Primo serviva per mantenere un database sincronizzato, dove registrare tutte le informazioni relative al mezzo di scambio, quindi ogni utente aveva questo database, quindi stiamo parlando di decentralizzazione.\nProprio come fanno i full node di Bitcoin che hanno la copia esatta della blockchain nel database LevelDb\nIl secondo, serviva per conteggiare l’ammontare di b-money posseduti.\nHal Finney—RPoW\nNel 2004, Hal Finney, sulla base di Hashcash, creo RPoW, Reusable Proof of work.\nPermetteva lo scambio di token e garantiva che ogni token potesse essere speso solo una volta.\nSi chiamava RPoW, perchè oltre al PoW, utilizzava anche una crittografia RSA asimmetrica per firmare le Transazioni, quindi RPoW.\nR di RSA e PoW di Proof of work\nQuesto progetto soffriva però di centralizzazione, in quanto le convalide per il double spending, venivano fatte da un server centralizzato\nNick Szabo\nSi arriva quindi a Nick Szabo, che pubblica Bit gold.\nUna valuta digitale basata su RPoW.\nBit gold proponeva un sistema decentralizzato, dove gli utenti grazie alla loro coppia di chiavi, firmavano la transazione, ovvero utilizzavano la firma digitale.\nAnche se BitGold non ha mai visto luce, è da molti considerato il precursore del Bitcoin, anche perchè introduceva argomenti come Byzantine fault-tolerant , il timestamping e la risoluzione di puzzle criptografici da parte degli utenti.\nA differenza di bitcoin, questa moneta non avrebbe avuto una supply\nSi arriva quindi al 2008, proprio durante la crisi finanziaria nasce Bitcoin.\nSembra infatti che Satoshi Nakamoto abbia riunito tutto il buono fatto dai precedenti personaggi ed abbia creato quello che tutti oggi noi conosciamo come blockchain e Bitcoin.\nAncora oggi non sappiamo la vera identità di Satoshi Nakamoto\nLa rivoluzione è nata 👊\n","date":"9 marzo 2019","externalUrl":null,"permalink":"/posts/la-storia-di-bitcoin/","section":"Posts","summary":" Difficoltà: Medio TUTORIAL La storia di Bitcoin # Quest’anno (2019) abbiamo festeggiato 10 anni di Bitcoin, ovvero dal suo primo blocco creato da Satoshi Nakamoto.\nNella coinbase si può leggere il titolo del Times del 3 Gennaio 2009\n","title":"La storia di Bitcoin","type":"posts"},{"content":"","externalUrl":null,"permalink":"/authors/alessio-barnini/","section":"Authors","summary":"","title":"Alessio Barnini","type":"authors"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/search/","section":"Corso Bitcoin","summary":"","title":"Cerca","type":"page"}]