W03.04 – BLOCCHI BITCOIN


WEEK 3
Mechanics of Bitcoin

Learn how the individual components of the Bitcoin protocol make the whole system tick: transactions, script, blocks, and the peer-to-peer network. Scopri in che modo i singoli componenti del protocollo Bitcoin fanno funzionare l’intero sistema: transazioni, script, blocchi e la rete peer-to-peer.

Joseph Bonneau
Postdoctoral Research Associate – Princeton University

Sezione 03.04 – Blocchi Bitcoin
03.04.01
So now let’s talk about how Bitcoin blocks get put together. So we’ve been talking about the block chain and the fact that transactions are actually grouped by blocks, but everything in this lecture so far we’ve been talking about just individual transactions getting published.

So why do we group transactions together into blocks? Well a couple reasons. One is that it creates a nice single unit of work for miners that’s bigger than the individual transaction size. So if the miners had to do work and do hashing and add metadata for every transaction in the system, that would provide too much overhead. It also makes the hash-chain of blocks shorter because we only need one block for a large number of transactions. And that’s gonna make it easier for us to verify the block chain data structure.
Quindi ora parliamo di come i blocchi Bitcoin vengono messi insieme. Quindi abbiamo parlato della catena di blocco e del fatto che le transazioni sono in realtà raggruppate per blocchi, ma in questa lezione finora abbiamo parlato solo di singole transazioni pubblicate.

Quindi perché raggruppiamo le transazioni insieme in blocchi? Beh, un paio di ragioni. Uno è che crea una bella singola unità di lavoro per i minatori che è più grande delle singole dimensioni della transazione. Quindi, se i minatori dovevano lavorare e fare hashing e aggiungere metadati per ogni transazione nel sistema, ciò avrebbe comportato un sovraccarico eccessivo. Rende inoltre più breve la catena hash dei blocchi perché abbiamo bisogno di un solo blocco per un numero elevato di transazioni. E per noi sarà più semplice verificare la struttura dei dati della catena dei blocchi.
03.04.02
So what does a block chain data structure look like?

It’s a pretty clever combination of two different hash-based data structures. So on the top here we have a hash chain of blocks.

Each one has a block header and then a pointer to some transaction data as well as a pointer to the previous block and the sequence, and remember these are hash pointers.

And then we have a tree of all the transactions that are included in each block. So this is a hash tree or what’s called a Merkle tree.

Which commits to all of the transactions in the block in quite and efficient way. So it’s easy to provide just the path to the tree, which will be logarithmic in size to prove that, that transactions included in a specific block.
Che aspetto ha una struttura dati a catena di blocchi?

È una combinazione abbastanza intelligente di due diverse strutture di dati basati su hash. Quindi qui sopra abbiamo una catena di blocchi hash.

Ognuno ha un’intestazione di blocco e quindi un puntatore ad alcuni dati di transazione, nonché un puntatore al blocco precedente e alla sequenza, e ricorda che questi sono puntatori di hash.

E poi abbiamo un albero di tutte le transazioni che sono incluse in ogni blocco. Quindi questo è un albero di hash o quello che viene chiamato un albero di Merkle.

Che si impegna a tutte le transazioni nel blocco in modo abbastanza efficiente. Quindi è facile fornire solo il percorso dell’albero, che sarà di dimensioni logaritmiche per dimostrare che le transazioni sono incluse in un blocco specifico.
03.04.03
So that’s the high-level idea behind the block.

What does it look like in practice at the low-level? So we’ll do another deep dive into the actual data here.

So this is what a Bitcoin block looks like. There is what’s called the block header which has all of the metadata for that block, and then there’s that Merkle tree of transactions. So basically, a long list of transactions, all of the hashes are arranged in this tree structure which gives you the ability to efficiently prove which transactions are included in a block.
Questa è l’idea di alto livello dietro il blocco.

Che aspetto ha in pratica a basso livello? Quindi faremo un altro approfondimento sui dati reali.

Ecco come si presenta un blocco Bitcoin. C’è l’intestazione del blocco che ha tutti i metadati per quel blocco, e poi c’è quell’albero Merkle delle transazioni. Quindi, in sostanza, un lungo elenco di transazioni, tutti gli hash sono disposti in questa struttura ad albero che ti dà la possibilità di dimostrare in modo efficiente quali transazioni sono incluse in un blocco.
03.04.04
The most important part of course is the header.

Which mostly has information related to the mining puzzle, which was talked about in the lecture on consensus and we’ll revisit in the lecture on mining. But recall that the most important thing here, is that the hash of the block header has to start with a large number of zeros for the block to be valid. And then there’s some other data to make that happen. There’s the nodes that miners can change, there’s the timestamp. There’s an indication of how difficult this block was to find. That’s all stored in the header. And the important thing is that the header is the only thing that’s hashed during mining. So, to verify that chain of blocks, all you need to do is look at the headers. And the only transaction data that’s included in the header is that one root of the transaction tree. So, that’s this Merkle root parameter.
La parte più importante ovviamente è l’intestazione.

Che ha per lo più informazioni relative al puzzle minerario, di cui si è parlato nella sezione sul consenso e che rivedremo nella sezione sul mining. Ma ricorda che la cosa più importante qui è che l’hash dell’header del blocco deve iniziare con un numero elevato di zeri perché il blocco sia valido. E poi ci sono altri dati per farlo accadere. Ci sono i nodi che i minatori possono cambiare, c’è il timestamp. C’è un’indicazione di quanto sia difficile trovare questo blocco. Questo è tutto memorizzato nell’intestazione. E la cosa importante è che l’intestazione è l’unica cosa che è stata sottoposta a hash durante l’estrazione. Quindi, per verificare quella catena di blocchi, tutto ciò che devi fare è guardare le intestazioni. E i soli dati di transazione inclusi nell’intestazione sono quella radice dell’albero delle transazioni. Quindi, questo è il parametro root di Merkle.
03.04.05
The other thing that’s interesting about block is that they have one special transaction in the Merkle tree, which is unlike all the other transactions we’ve looked at before, and this is the coinbase transaction. So this is where the creation of new coins and Bitcoin happens.

And mostly looks like a normal transaction with a few exceptions.

So the value of this transaction is gonna be equal to currently a little over 25 bitcoins. As we discussed, this is a flat mining reward which is set by the system and which is having every four years. In practice, it will be a little bit more than 25 bitcoin, because it also gets to include the transaction fees collected from every transaction included in the block. So the pointer to the output transaction that this coinbase transaction is receiving is the null pointer. It’s a hash of all zeros. And this is an indication that since this is the creation of new coins, there is no antecedent. There’s no previous transaction that’s being consumed to create these coins. And there’s also this special coinbase parameter. And the coinbase parameter is completely arbitrary, the minors can put whatever they want in there. So famously, in the very first block ever mined in Bitcoin, the coinbase parameter had a quote from the newspaper. It had a quote from the Times of London describing a story involving the chancellor bailing out banks, which was both a political commentary on the motivation for starting Bitcoin, and serve as a commitment that Bitcoin, the first block was obviously mined after this newspaper came out.
L’altra cosa interessante del blocco è che hanno una transazione speciale nell’albero Merkle, che è diversa da tutte le altre transazioni che abbiamo visto prima, e questa è la transazione coinbase. Quindi è qui che avviene la creazione di nuove monete e Bitcoin.

E per lo più sembra una normale transazione con poche eccezioni.

Quindi il valore di questa transazione sarà uguale a poco più di 25 bitcoin. Come abbiamo discusso, questa è una ricompensa mineraria base che è impostata dal sistema e che sta avendo ogni quattro anni. In pratica, sarà un po’ più di 25 bitcoin, perché include anche le commissioni di transazione raccolte da ogni transazione inclusa nel blocco. Quindi il puntatore alla transazione di output che sta ricevendo questa transazione coinbase è il puntatore nullo. È un hash di tutti gli zeri. E questa è un’indicazione che dal momento che questa è la creazione di nuove monete, non c’è antecedente. Non ci sono transazioni precedenti che vengono consumate per creare queste monete. E c’è anche questo speciale parametro a base di monete. E il parametro coinbase è completamente arbitrario, i minori possono mettere tutto ciò che vogliono lì dentro. Così famoso, nel primo blocco mai estratto in Bitcoin, il parametro coinbase aveva una citazione dal giornale. Aveva una citazione del Times di Londra che descriveva una storia che coinvolgeva il cancelliere che salvava le banche, che era sia un commento politico sulle motivazioni per l’avvio di Bitcoin, sia un impegno che Bitcoin, il primo blocco era ovviamente estratto dopo che questo giornale era uscito.
03.04.06
But since then, miners are free to put whatever they want in the coinbase parameter. It’s been used as a place to put some arbitrary data for different reasons, to signal support by miners for different new features, but there’s no actual limits on what miners can put in there.

So with both the block format and the transaction format that we described earlier, the best way to learn it is to just see for yourself. So there’s a lot of websites that make this data accessible. This is a screenshot from blockchain.info, which I’ve found very helpful myself in understanding and exploring what’s going on, on a low-level in Bitcoin. There are a lot of other websites that do a great job at making this information accessible, so you can look at the graph of transactions, see which transactions redeem which other transactions. Look for transactions with complicated scripts, you can look at the block structure and see how blocks refer to other blocks. It’s all available online cuz again the Bitcoin is a public data structure. So a lot of different people have put very pretty wrappers around this to explore it graphically.
Ma da allora, i minatori sono liberi di mettere tutto ciò che vogliono nel parametro coinbase. È stato usato come luogo in cui inserire dati arbitrari per motivi diversi, per segnalare il supporto dei minatori per diverse nuove funzionalità, ma non ci sono limiti effettivi su ciò che i minatori possono inserire.

Quindi, sia con il formato del blocco che con il formato della transazione che abbiamo descritto in precedenza, il modo migliore per apprenderlo è quello di vedere solo per te stesso. Quindi ci sono molti siti Web che rendono questi dati accessibili. Questo è uno screenshot di blockchain.info, che ho trovato molto utile per capire ed esplorare cosa sta succedendo, a basso livello in Bitcoin. Ci sono molti altri siti web che fanno un ottimo lavoro nel rendere accessibili queste informazioni, così puoi guardare il grafico delle transazioni, vedere quali transazioni riscattare quali altre transazioni. Cerca transazioni con script complicati, puoi guardare la struttura dei blocchi e vedere come i blocchi si riferiscono ad altri blocchi. È tutto disponibile online perché il bitcoin è una struttura di dati pubblica. Così molte persone diverse hanno messo involucri molto carini intorno a questo per esplorarlo graficamente.

[top]
© Joseph Bonneau – Postdoctoral Research Associate – Princeton University

W03.03
Applicazione di Script Bitcoin
W03.05
Il Network Bitcoin