W03.06 – LIMITAZIONI & MIGLIORAMENTI


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.06 – Limitazioni & miglioramenti
03.06.01
So finally, we’ll talk about some built in limitations to the Bitcoin protocol and why it’s challenging to actually improve them. There are a lot of hard coated [INAUDIBLE] that are implemented into the Bitcoin protocol which were chosen when Bitcoin was proposed in 2009 before we ever had any idea that it might grown into this globally important currency.

So the most important limits are probably the limits on the average time per block, the size of blocks, the number of signature operations in a block, and the divisibility of the currency.

The limitations on the total number of Bitcoins in existence as well as the structure of the mining rewards; Are very likely to never be changed, because the economic implications of changing them are too great. Miners have invested a lot of real world resources into becoming miners, assuming that Bitcoin rewards would take a certain shape and that the limited supply of Bitcoins would remain the way that its been planned so if you change that, that would have large financial implications for people.

So for that reason the community has basically agreed that those values wether or not they were wisely chosen or basically stocked with.
Quindi, alla fine, parleremo di alcune limitazioni del protocollo Bitcoin e del perché è davvero difficile migliorarle. Ci sono un sacco di hard coated [INAUDIBLE] che sono implementati nel protocollo Bitcoin che sono stati scelti quando Bitcoin è stato proposto nel 2009 prima che avessimo mai avuto l’idea che potesse diventare in questa valuta di importanza globale.

Quindi i limiti più importanti sono probabilmente i limiti del tempo medio per blocco, la dimensione dei blocchi, il numero di operazioni di firma in un blocco e la divisibilità della valuta.

Le limitazioni sul numero totale di Bitcoin esistenti così come la struttura dei premi minerari; È molto probabile che non verranno mai cambiate, perché le implicazioni economiche del loro cambiamento sono troppo grandi. I minatori hanno investito molte risorse del mondo reale per diventare minatori, supponendo che i premi Bitcoin assumessero una certa forma e che l’offerta limitata di Bitcoin rimarrebbe il modo in cui è stata pianificata, quindi se cambiasse, ciò avrebbe grandi implicazioni finanziarie per le persone.

Quindi, per questa ragione, la comunità ha sostanzialmente accettato che quei valori fossero o no stati scelti saggiamente o sostanzialmente riforniti.
03.06.02
Some other changes that you would like to make seem like they make everybody better off. Things about Bitcoin it just it weren’t quite properly designed at the beginning. But are also hard to change. The main aspect of Bitcoin that people are worried about and would probably like to change if they had time to design it over again are limits that affect the through-put of the system. How many transactions can the Bitcoin network process per second?

This limitation comes from the hard coated limit on the size of blocks. Each block is limited to a million bytes. And each transaction has to be at least 250 bytes, so if you divide through, and the fact that blocks are found every 10 minutes, you’re left with about 7 transactions per second which is all that the Bitcoin network can handle.

And it seems like tweaking those numbers would be very easy, it’s just one constant in a file somewhere that you’d have to change. It would be very hard to change this in practice for reason that will become clear in a few seconds. So how does 7 transactions per second compare. Well, if you went down to the offices of Visa and told them I’m proposing a new payment system that can handle 7 transactions per sec, they would probably tell you, that’s stale and they would laugh and throw you out the door. They’ve been working for a long time to go to payment network that goes way bigger than this. So it’s said that these handles on average about 2000 transactions per second around the world. And in the busiest times, so think the Saturday before Christmas when everybody’s out shopping and swiping credit cards. The Visa network can handle about 10,000 transactions per second. And other payment networks are similarly big. You can also look at PayPal which is not as big or as old as Visa but even PayPal can handle 100 transactions per second at peak times so in order of magnitude more than Bitcoin.
Alcuni altri cambiamenti che vorresti fare sembrano rendere tutti migliori. Le cose su Bitcoin è che non erano state progettate correttamente all’inizio. Ma sono anche difficili da cambiare. L’aspetto principale di Bitcoin su cui le persone sono preoccupate e che probabilmente vorrebbe cambiare se avessero avuto il tempo di progettarlo nuovamente sono i limiti che influenzano il through-put del sistema. Quante transazioni può eseguire la rete Bitcoin al secondo?

Questa limitazione deriva dal limite del rivestimento rigido sulla dimensione dei blocchi. Ogni blocco è limitato a un milione di byte. E ogni transazione deve essere di almeno 250 byte, quindi se dividi e il fatto che i blocchi si trovano ogni 10 minuti, ti rimangono circa 7 transazioni al secondo che è tutto ciò che la rete Bitcoin può gestire.

E sembra modificare quei numeri sarebbe molto facile, è solo una costante in un file da qualche parte che dovresti cambiare. Sarebbe molto difficile cambiare questo in pratica per ragioni che diventeranno chiare in pochi secondi. Quindi, come si confrontano 7 transazioni al secondo. Beh, se tu andassi negli uffici di Visa e dicessi loro che sto proponendo un nuovo sistema di pagamento in grado di gestire 7 transazioni al secondo, probabilmente te lo diranno, è stantio e loro ridono e ti buttano fuori dalla porta. Lavorano da molto tempo per andare alla rete di pagamento che va ben oltre questo. Quindi si dice che queste maniglie in media circa 2000 transazioni al secondo in tutto il mondo. E nei momenti di maggiore affluenza, quindi pensa al sabato prima di Natale quando tutti sono fuori a fare acquisti e a strisciare carte di credito. La rete Visa può gestire circa 10.000 transazioni al secondo. E le altre reti di pagamento sono altrettanto grandi. Puoi anche guardare PayPal che non è grande o vecchio come Visa ma anche PayPal può gestire 100 transazioni al secondo nelle ore di punta, quindi in ordine di grandezza più di Bitcoin.
03.06.03
Another limitation that people are worried about in the long term, is that the cryptography is Bitcoin is fixed. There’s only a couple of hash algorithms and there’s only one signature algorithm, which is elliptic curve DSA. Over a specific elliptic curve called Sec P256.

And there’s some concern that over the lifetime of Bitcoin, which people would like to be for a long time, this algorithm might be broken. Cryptographers might come up with a clever new attack that we haven’t foreseen, which makes this an insecure algorithm. And the same is true of the hash functions. Hash functions, in the last decade, have actually seen steady progress and cryptanalysis with SHA-1. Which is included in Bitcoin already having some known cryptographic weaknesses. So to change this we would have to extend the Bitcoin scripting language to support new cryptographic algorithms.
Un altro limite a cui le persone sono preoccupate a lungo termine è che la crittografia in Bitcoin è fissa. Ci sono solo un paio di algoritmi di hash e c’è solo un algoritmo di firma, che è la curva ellittica DSA. Su una curva ellittica specifica denominata Sec P256.

E c’è qualche preoccupazione che nel corso della vita di Bitcoin, che le persone vorrebbero essere per molto tempo, questo algoritmo potrebbe essere rotto. I crittografi potrebbero inventare un nuovo attacco intelligente che non abbiamo previsto, il che rende questo un algoritmo insicuro. E lo stesso vale per le funzioni di hash. Le funzioni di hash, nell’ultimo decennio, hanno effettivamente visto progressi costanti e crittanalisi con SHA-1. Che è incluso in Bitcoin che ha già alcune note debolezze crittografiche. Quindi per cambiare questo dovremmo estendere il linguaggio di scripting Bitcoin per supportare nuovi algoritmi crittografici.
03.06.04
So what would it look to make a change like this where we just said, we had a problem with Bitcoin, we’re going to release a new version of the software, and everybody is going to have to switch.

This is what we could call a hard-forking change.

So in practice, it’s impossible to assume that every node would upgrade. Some nodes in a network would fail to get the new software or fail to get it in time. And what would be the implications of that?

Well lets take a look at a network here where most of the nodes have upgraded but there are a few that haven’t.
Quindi, che cosa sembrerebbe fare una modifica come questa in cui abbiamo appena detto, abbiamo avuto un problema con Bitcoin, rilasceremo una nuova versione del software e tutti dovranno passare.

Questo è ciò che potremmo definire un cambiamento difficile.

Quindi, in pratica, è impossibile presumere che ogni nodo si aggiorni. Alcuni nodi di una rete non riuscirebbero a ottenere il nuovo software o non riuscirebbero a farlo in tempo. E quali sarebbero le implicazioni di ciò?

Bene, diamo un’occhiata a una rete qui dove la maggior parte dei nodi è stata aggiornata, ma ce ne sono alcuni che non lo hanno fatto.
03.06.05
And now let’s say one of the new nodes says, hey I found this nifty, great new block. Maybe it has some new signature algorithm in one of the transactions, using the new features that we’ve added to Bitcoin. So block four has found this and says, okay, I’m gonna update and say that’s now the newest block. E ora diciamo che uno dei nuovi nodi dice, hey ho trovato questo nuovo, grande, nuovo blocco. Forse ha qualche nuovo algoritmo di firma in una delle transazioni, usando le nuove funzionalità che abbiamo aggiunto a Bitcoin. Quindi il blocco quattro ha trovato questo e dice, ok, aggiornerò e dirò che ora è il blocco più recente.
03.06.06
So I’m at block index 24, the rest of the network is at 23. But I’m gonna propagate that to all of my peers using the normal block flooding algorithm.

So node 4 is gonna send block 24 out to it’s neighbors, nodes 3 and 2. Node 3 is gonna get it and say. Great, I got that one, I’ll update my version of the Blockchain to have that as the newest block.

Where as Node 2 is going to say, that’s crazy, you have some operation code that’s disabled or reserved, I have to reject this Block, I don’t understand it, I can’t except it.
Quindi sono a block index 24, il resto della rete è a 23. Ma lo propagherò a tutti i miei colleghi usando il normale algoritmo di block flood.

Quindi il nodo 4 invierà il blocco 24 ai suoi vicini, i nodi 3 e 2. Il nodo 3 otterrà e dirà. Bene, ho ottenuto quello, aggiornerò la mia versione di Blockchain per avere quello come il blocco più nuovo.

Dove il Nodo 2 sta per dire, è pazzesco, hai qualche codice operativo che è disabilitato o riservato, devo rifiutare questo Blocco, non lo capisco, non posso farlo eccetto.
03.06.07
And similarly when it gets over to Node 6, Node 6 is also going to say, no, I can’t except that block either.

And now you’re gonna end up in a state where the new nodes have one picture of the block chain and the old nodes have all refused to accept this latest block.
E allo stesso modo quando arriva al Nodo 6, anche il Nodo 6 dirà, no, non posso escludere quel blocco.

E ora tu sei finito in uno stato in cui i nuovi nodi hanno un’immagine della catena dei blocchi e i vecchi nodi si sono tutti rifiutati di accettare questo ultimo blocco.
So the new nodes will go off and work on a version of the block chain including this block with the new fancy feature and the old nodes will all be stuck on an old version of the block chain and unfortunately they’re never going to catch up because until they upgrade their software, they’ll keep rejecting all of the blocks that are proposed by the nodes in the network that have upgraded to the new version of the protocol.

So the reason it’s called a hard-fork is that the block chain will split every node on the network would be on one side of it, based on which version of the protocol it’s running and they’ll never join together again. And this is considered unacceptable by the community that all nodes would effectively be cut out of the Bitcoin network if they don’t upgrade their software.
Quindi i nuovi nodi andranno via e lavoreranno su una versione della block chain che includerà questo blocco con la nuova funzione di fantasia e i vecchi nodi saranno tutti bloccati su una vecchia versione della block chain e sfortunatamente non riusciranno mai a recuperare perché fino a quando non aggiornano il loro software, continueranno a rifiutare tutti i blocchi proposti dai nodi della rete che sono stati aggiornati alla nuova versione del protocollo.

Il motivo per cui si chiama hard-fork è che la catena di blocchi dividerà ogni nodo della rete su un lato, in base alla versione del protocollo in esecuzione e non si uniranno più. E questo è considerato inaccettabile dalla comunità che tutti i nodi vengano effettivamente tagliati fuori dalla rete Bitcoin se non aggiornano il loro software.
03.06.09
So by contrast, there’s an approach called soft forking, which tries to avoid creating a permanent fork like this. The observation is that we can add new features to the Bitcoin protocol if it only restricts the set of valid transactions or the set of valid blocks.

Because we want to avoid this hard forking situation, we can try to add new features in a way that will cause only a soft fork.

So that the key to making this happen is that the new features can only make validation rules stricter. They can only limit the set of blocks or the set of transactions that are considered valid, so the new nodes in the network will be enforcing some new tighter set of rules. So we’re relying on enough nodes switching to the new version of the protocol that they’ll be able to enforce the new rules knowing that the old nodes won’t be able to enforce the new rules cuz they haven’t heard of them yet.

There is a risk here.

Which is that old nodes might be mining an invalid block, because they include some transaction which used to be valid, but according to the new, strict rules, is not valid anymore.

So that could be bad, those nodes could waste a lot of time mining a block that the new nodes will reject. But when they try to announce that new block, the new nodes will reject it. The old nodes will at least figure out that, for some reason, even though I don’t understand the reason, the rest of the network has rejected my new block.

Therefore, I should move on to the version of the block chain that all of my peers have, and it won’t be a hard fork. They’ll have a temporary fork by virtue of the new block they tried to mine. It was rejected by the network, but they’ll recover and get back on to the main chain.
Al contrario, c’è un approccio chiamato soft fork, che cerca di evitare di creare una forcella permanente come questa. L’osservazione è che possiamo aggiungere nuove funzionalità al protocollo Bitcoin se limita solo l’insieme di transazioni valide o l’insieme di blocchi validi.

Perché vogliamo evitare questa situazione difficile, possiamo provare ad aggiungere nuove funzionalità in un modo che causerà solo una forchetta morbida.

La chiave per fare in modo che ciò accada è che le nuove funzionalità possono solo rendere più rigide le regole di convalida. Possono solo limitare l’insieme di blocchi o l’insieme di transazioni considerate valide, quindi i nuovi nodi nella rete imporranno alcune nuove regole più rigide. Quindi ci affidiamo a nodi sufficienti per passare alla nuova versione del protocollo che saranno in grado di far rispettare le nuove regole sapendo che i vecchi nodi non saranno in grado di far rispettare le nuove regole perchè non ne hanno sentito parlare ancora.

C’è un rischio qui.

E cioé che i vecchi nodi potrebbero estrarre un blocco non valido, perché includono alcune transazioni che erano valide, ma secondo le nuove, rigide regole, non è più valido.

Quindi potrebbe essere cattivo quei nodi potrebbero perdere un sacco di tempo scavando un blocco che i nuovi nodi rifiuteranno. Ma quando cercano di annunciare quel nuovo blocco, i nuovi nodi lo rifiuteranno. I vecchi nodi capiranno quantomeno che, per qualche ragione, anche se non capisco il motivo, il resto della rete ha respinto il mio nuovo blocco. Pertanto, dovrei passare alla versione della block chain che tutti i miei pari hanno, e non sarà un fork difficile. Avranno una forchetta temporanea in virtù del nuovo blocco che hanno cercato di estrarre. È stato rifiutato dalla rete, ma si riprenderanno e torneranno alla catena principale.
03.06.10
The classic example of a change that was made via soft fork was pay to script hash, which we introduced earlier in the section discussing the scripting language.

So the view of pay to script hash from old nodes, and again, pay to script hash was not present in the first version of the Bitcoin protocol, they see this rift as really simple. All it’s doing is hashing this one data value and checking to see if it’s equal to the value specified in the output script. The old nodes never do that second step of verification in pay to script hash, where they then check to see that that value before being hashed runs as a valid script.
L’esempio classico di una modifica apportata tramite soft fork è stato l’hash dello script, che abbiamo introdotto in precedenza nella sezione dedicata al linguaggio di scripting.

Per la vista dell’hash pay-to-script dai vecchi nodi, e ancora, pay-to-script hash non era presente nella prima versione del protocollo Bitcoin, vedono questa spaccatura come molto semplice. Tutto ciò che sta facendo è l’hashing di questo valore di un dato e il controllo per vedere se è uguale al valore specificato nello script di output. I vecchi nodi non eseguono mai questo secondo passaggio di verifica nell’hash del pay to script, dove poi controllano di vedere che quel valore prima di essere sottoposto a hash viene eseguito come script valido.
03.06.11
So what could we possibly add with a soft fork?

Pay to script task hash was successful. It’s also possible that new cryptographic schemes could be added by a soft fork, or that we could add some extra metadata in blocks that had some meaning. And the place you’d add this is in the coin base parameter. So today any value is accepted in the coin base parameter, but we could in the future say that the coin base has to have some specific example.

One idea that’s been proposed, that in each new block, coin base contains merkleroot of the entire set of unspent transactions. It would only result in a soft fork because old nodes might mine a block that didn’t have the required new coin base parameter that got rejected by the network. But they would catch up and join the main chain that the network is mining.
Quindi cosa potremmo aggiungere con un fork morbido?

Pay to script task hash ha avuto successo. È anche possibile che nuovi schemi crittografici possano essere aggiunti da un fork morbido, o che potremmo aggiungere dei metadati extra in blocchi che hanno un significato. E il posto che dovresti aggiungere è il parametro moneta base. Quindi oggi qualsiasi valore è accettato nel parametro moneta base, ma potremmo in futuro dire che la base moneta deve avere qualche esempio specifico.

Un’idea che è stata proposta, che in ogni nuovo blocco, la base monetaria contiene il merkleroot dell’intero set di transazioni non spese. Il risultato sarebbe solo una forcella morbida, perché i vecchi nodi potrebbero estrarre un blocco che non aveva il nuovo parametro gettone richiesto che è stato rifiutato dalla rete. Ma potrebbero recuperare e unirsi alla catena principale che la rete sta estraendo.
03.06.12
Other changes might require a hard fork, that would be if we wanted to do new op codes to Bitcoin, change the limits on block or transaction size, or do a lot of bug fixes. So for example, the bug I showed earlier where the multi instruction pops an extra value off the stack, that would actually require a hard fork and that’s the reason why even though it’s annoying bug that people wish wasn’t there anymore, it’s much easier to just leave the bug in the protocol and have people work around it rather than have a hard fork changed a bit plan.

So all of these hard forking changes even though they would be nice are very unlikely to happen, at least within the current climate of Bitcoin.

But a lot of these ideas have been tested out and prove to be successful, and alternative currencies, which start over from scratch, and we’ll be talking about those in a lot more detail in our lecture for altcoins.
Altre modifiche potrebbero richiedere un hard fork, che sarebbe se volessimo fare nuovi codici op in Bitcoin, modificare i limiti sul blocco o la dimensione della transazione, o fare un molte correzioni di bug Quindi, ad esempio, il bug che ho mostrato in precedenza dove l’istruzione multi apre un valore extra dalla pila, che in realtà richiederebbe una forchetta dura e questo è il motivo per cui anche se è un bug fastidioso che le persone desiderano non esserci più, è molto più semplice lasciare il bug nel protocollo e fare in modo che le persone lavorino attorno ad esso piuttosto che avere un fork fisso cambiato un po’ di piano.

Quindi tutte queste modifiche difficilmente modificabili, anche se sarebbero belle, è molto improbabile che accadano, almeno all’interno dell’attuale clima del Bitcoin.

Ma molte di queste idee sono state testate e hanno dimostrato di avere successo, e valute alternative, che ricominciano da zero, e ne parleremo in modo molto più dettagliato nella sezione sulle altcoins.
03.06.13
So I spent a lot of time talking about details today. I know this has been a long lecture with a lot of technical detail, very hard to absorb all at once. So like I said, I would certainly recommend you can go online and see some of this stuff in practice, see what blocks and transactions look like. It took me a couple of times looking at them before I really had a good sense of what was going on but I think the practical examples do really help.

In the next lecture given all these mechanics we’ve introduced, we’re gonna look at the human side of things. Cuz after all human beings aren’t Bitcoin nodes and you’re never gonna run Bitcoin node in your head.

So how do you as a human actually interact with this network to get it to be useable as a currency? How do you find a node to tell about your transaction? How do you get Bitcoins in exchange for cash? How do you store your Bitcoins? So all of these questions are crucial for making a currency that will actually work for people as opposed to just software.
Quindi ho passato molto tempo a parlare di dettagli oggi. So che è stata una lunga lezione con un sacco di dettagli tecnici, molto difficili da assimilare tutto in una volta. Quindi, come ho detto, consiglierei sicuramente di andare online e vedere alcune di queste cose in pratica, vedere come sono i blocchi e le transazioni. Mi ci sono voluti un paio di volte a guardarli prima che avessi davvero un buon senso di quello che stava succedendo, ma penso che gli esempi pratici siano davvero d’aiuto.

Nella prossima sezione, date tutte le meccaniche che abbiamo introdotto, guarderemo dal lato umano delle cose. Perché dopo tutto gli esseri umani non sono nodi di Bitcoin e non farai mai il nodo di Bitcoin nella tua testa.

Quindi come umano come fai a interagire con questa rete per usarla come moneta? Come trovi un nodo cui raccontare sulla tua transazione? Come si ottengono Bitcoin in cambio di denaro? Come conservi i tuoi Bitcoin? Quindi tutte queste domande sono cruciali per fare una valuta che funzioni effettivamente per le persone anziché solo per il software.

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

W03.05
Il Network Bitcoin
W04.01
Come comperare e usare i Bitcoin