W02.02 – CONSENSO DISTRIBUITO


WEEK 2
Come Bitcoin realizza la Decentralizzazione

Learn Bitcoin’s consensus mechanism and reason about its security. Appreciate how security comes from a combination of technical methods and clever incentive engineering. Imparare il meccanismo di consenso di Bitcoin e la ragione sulla sua sicurezza. Apprezzare il modo in cui la sicurezza deriva da una combinazione di metodi tecnici e ingegnosità intelligente.

Arvind Narayanan
Assistant Professor of Computer science – Princeton

Sezione 02.02 – Consenso distribuito
02.02.01
So we’ve talked in a generic manner about centralization and decentralization. Let’s now talk, at a bit more technical level, about Bitcoin and decentralization.

And a key word that’s gonna come up again and again here is consensus, specifically distributed consensus.

So what am I talking about here? At a technical level, the key challenge that you have to solve to build a distributed e-cash system is called distributed consensus. And this is a class of protocols that’s been studied for decades in the computer science literature. So, but intuitively, you can think of it as our goal being to decentralize ScroogeCoin, which is the hypothetical currency that we saw in the first lecture.

So as I said, there’s decades of research in computer science on these consensus protocols. And the traditional motivating application for this is reliability in distributed systems.
Abbiamo parlato in modo generico di centralizzazione e decentralizzazione. Parliamo ora, a livello un pò più tecnico, di Bitcoin e decentralizzazione.

Una parola chiave che tornerà ancora e ancora è consenso, più specificatamente consenso distribuito.

Quindi di cosa sto parlando? A livello tecnico, la sfida chiave che devi risolvere per costruire un sistema di e-cash distribuito si chiama consenso distribuito. E questa è una classe di protocolli che è stata studiata per decenni nella letteratura informatica. Quindi, ma intuitivamente, puoi considerarlo come il nostro obiettivo di decentralizzare ScroogeCoin, che è l’ipotetica valuta che abbiamo visto nella prima sezione.

Come ho detto, ci sono decenni di ricerca in informatica su questi protocolli di consenso. E la tradizionale applicazione motivante per questo è l’affidabilità nei sistemi distribuiti.
02.02.02
What do I mean by that? Imagine you’re in charge of the backend for a company like Google or Facebook. These companies typically have thousands, or even millions of servers, which form a massive distributive database that records all of the actions that happen on the system, like users’ comments and likes and posts, and so on.

So when a new comment, let’s say, comes in, the way it’ll be recorded is that there might be 10 or 15 different nodes, in that massive backend, that might contain copies of this action.

Now, what the server needs to make sure is that that comment either gets recorded in all copies of that database, or none of them.

If for some reason, because some of these nodes might be faulty, the action gets recorded in none of the databases, it’s okay. You can go back to the user and say, there was a problem saving your post, would you please try again? On the other hand, if some of the copies of the database saved it and others didn’t, then you’d be in a lot of trouble, because you’d have an inconsistent database. So this is the key problem that motivated the traditional research on distributed consensus. And you can sort of see the similarities to Bitcoin here.

But we’re gonna talk in a bit more detail about the similarities and differences. So that was the traditional motivating application. But we can also imagine that if we achieved a distributed consensus protocol, and we were able to use that to build a massive, global scale distributed key value store that maps arbitrary keys or names to arbitrary values, then that will enable a lot of applications. For example, a distributed domain name system, which is simply a mapping between human understandable domain names to IP addresses. Or a public key directory, which is a mapping between user email addresses, let’s say, to their public keys. Or even things like stock trades. Because this distributed database, instead of keeping track of who’s paid whom how much money, would keep track of who’s transferred what units of which stock to whom.

And the cool thing about this is that now that Bitcoin has solved the distributed consensus problem, in a certain sense that we’ll try to understand in this lecture.
Cosa intendo con questo? Immagina di essere responsabile del backend per un’azienda come Google o Facebook. Queste aziende hanno in genere migliaia o addirittura milioni di server, che formano un enorme database distributivo che registra tutte le azioni che si verificano sul sistema, come i commenti degli utenti, i “Mi piace”, i post e così via.

Quindi, quando arriva un nuovo commento, diciamo, il modo in cui verrà registrato è che potrebbero esserci 10 o 15 nodi diversi, in quel massiccio backend, che potrebbero contenere copie di questa azione.

Ora, ciò che il server deve assicurarsi è che quel commento sia registrato in tutte le copie di quel database, o in nessuno di loro.

Se per qualche motivo, poiché alcuni di questi nodi potrebbero essere difettosi, l’azione viene registrata in nessuno dei database, va bene. Puoi tornare all’utente e dirgli che c’è stato un problema nel salvare il tuo post: “Per favore puoi riprovare?” D’altra parte, se alcune delle copie del database lo salvano e altre no, allora ci sarebbero molti problemi, perché avresti un database incoerente. Quindi questo è il problema chiave che ha motivato la ricerca tradizionale sul consenso distribuito. E puoi vedere le somiglianze con Bitcoin. Ma parleremo un pò più in dettaglio delle somiglianze e delle differenze. Questa era la tradizionale applicazione motivante.

Ma possiamo anche immaginare che se abbiamo raggiunto un protocollo di consenso distribuito, e siamo stati in grado di usarlo per costruire un massiccio archivio di valori di chiavi distribuite su scala globale che mappasse chiavi o nomi arbitrari su valori arbitrari, allora ciò consentirà molte applicazioni. Ad esempio, un sistema di nomi di dominio distribuito, che è semplicemente una mappatura tra nomi di dominio comprensibili da umani di indirizzi IP. O una directory di chiavi pubbliche, che è una mappatura tra gli indirizzi email degli utenti alle loro chiavi pubbliche. O anche cose come le compravendite di azioni. Perché questo database distribuito, invece di tenere traccia di chi ha pagato chi quanti soldi, avrebbe tenuto traccia di chi ha trasferito quali unità di quali titoli a chi.

E la cosa bella di questo è che ora Bitcoin ha risolto il problema del consenso distribuito, in un certo senso, e cercheremo di capirlo in questa sezione.
02.02.03
We can also go ahead and try to think about solutions to all of these other related problems. And in fact, there are many Altcoins. And we’ll have several more lectures about Altcoins. But very briefly, Altcoins are systems built on Bitcoin-like principles to achieve, perhaps, slightly different goals. Sometimes currency systems, sometimes not currency systems, such as one of these applications. And so, given that we can solve distributed consensus now. And given that we can build a global distributed key value store. It enables a lot of these other cool applications.

Okay, let’s go to a technical definition now. The technical definition of distributed consensus is really quite simple.
Possiamo anche andare avanti e provare a pensare a soluzioni a tutti questi altri problemi correlati. E infatti, ci sono molti Altcoin. E avremo molte altre lezioni su Altcoin. In breve, tuttavia, gli Altcoin sono sistemi basati su principi di tipo Bitcoin per raggiungere, forse, obiettivi leggermente diversi. A volte sistemi valutari, a volte sistemi non monetari, come una di queste applicazioni. E così, dato che ora possiamo risolvere il consenso distribuito. E dato che possiamo costruire un negozio di valore a chiave distribuita globale. Abilita molte di queste altre fantastiche applicazioni.

Va bene, vediamo una definizione tecnica ora. La definizione tecnica del consenso distribuito è davvero piuttosto semplice.
02.02.04
Imagine that there is a fixed number, n, of nodes or processes. And each of these nodes has some input value.

And then a consensus protocol happens. And the two requirements on this consensus protocol are that the protocol should terminate, and all correct nodes should decide on some value, the consensus value, all right? And I say correct nodes, because some of the nodes might be faulty, or even outright malicious.

And the second requirement is that this value that they agree upon cannot be an arbitrary value. But it should be a value that was proposed as input by at least one of these correct nodes. So, it’s really that simple. But let’s try to see what this might mean in the context of Bitcoin.
Immagina che ci sia un numero fisso, n, di nodi o processi. E ciascuno di questi nodi ha qualche valore di input.

E poi avviene un protocollo di consenso. E i due requisiti su questo protocollo di consenso sono che il protocollo dovrebbe terminare, e tutti i nodi corretti dovrebbero decidere su un certo valore, il valore di consenso, va bene? E dico i nodi corretti, perché alcuni nodi potrebbero essere difettosi o addirittura dannosi.

E il secondo requisito è che questo valore su cui sono d’accordo non può essere un valore arbitrario. Ma dovrebbe essere un valore che è stato proposto come input da almeno uno di questi nodi corretti. Quindi, è davvero così semplice. Ma proviamo a vedere cosa potrebbe significare nel contesto di Bitcoin.
02.02.05
So, to understand how distributed consensus could work in Bitcoin, let’s start with a reminder that Bitcoin is a peer-to-peer system, all right? So, what I mean when I say Bitcoin is a peer to peer system is that when Alice wants to pay Bob, what she does is she’s going to broadcast the transaction to all of the Bitcoin nodes that comprise the peer-to-peer network. And you can see here the structure of the transaction. This is similar to GoofyCoin, that we saw in the first lecture. And what a transaction is going to have is it’s going to have Alice’s signature. Which the other nodes need in order to know that it really, in fact, came from Alice. It’s going to have Bob’s public key, which also accesses his address at which he wants to receive bitcoins.

And further, it contains a hash. What is this hash? Recall this notion of hash pointers that we saw in the first lecture. So this hash is a way for Alice to link together this transaction, or this coin to her receipt of this coin from someone else previously, all right? So those are the things that are contained in this data structure that we call a transaction. And she’s going to broadcast that to all of the Bitcoin peer-to-peer nodes.

And notice something funny here. Bob’s computer is nowhere in this picture.

Now Bob, if he wants to be notified that this transaction did in fact happen and that he got paid, he might wanna run a Bitcoin node that’s one of these peer-to-peer nodes, in order to listen in on the network and be sure that he’s received that transaction. But his listening is not, in fact, necessary for him to receive the funds. The bitcoins will be his whether or not he’s running a node on the network. So, given this peer-to-peer system, what is it exactly that the nodes might want to reach consensus on? Well, given that a variety of users are broadcasting these transactions to the network. What everybody wants to reach consensus on is exactly which transactions were broadcasted, and the order in which these transactions happened.
Quindi, per capire come il consenso distribuito potrebbe funzionare in Bitcoin, iniziamo con un promemoria sul fatto che Bitcoin è un sistema peer-to-peer, va bene? Quindi, quello che intendo quando dico che Bitcoin è un sistema peer-to-peer è che quando Alice vuole pagare Bob, quello che fa è che trasmetterà la transazione a tutti i nodi Bitcoin che comprendono la rete peer-to-peer. E puoi vedere qui la struttura della transazione. Questo è simile a GoofyCoin, che abbiamo visto nella prima lezione. E che una transazione sta per avere che avrà la firma di Alice. Di quali altri nodi hanno bisogno per sapere che in realtà, in realtà, proveniva da Alice. Avrà la chiave pubblica di Bob, che accede anche al suo indirizzo al quale vuole ricevere bitcoin.

Inoltre contiene un hash. Cos’è questo hash? Ricorda questa nozione di puntatori di hash che abbiamo visto nella prima lezione. Quindi questo hash è un modo per Alice di collegare questa transazione, o questa moneta alla sua ricevuta di questa moneta da qualcun altro in precedenza, va bene? Quindi quelle sono le cose contenute in questa struttura dati che chiamiamo una transazione. E lo trasmetterà a tutti i nodi peer-to-peer di Bitcoin.

E noterai qualcosa di divertente qui. Il computer di Bob non è da nessuna parte in questa immagine.

Ora, Bob, se vuole essere informato che questa transazione è effettivamente avvenuta e che è stato pagato, potrebbe voler eseguire un nodo Bitcoin che è uno di questi nodi peer-to-peer, in ordine per ascoltare sulla rete ed essere sicuri che abbia ricevuto quella transazione. Ma il suo ascolto non è, in effetti, necessario per lui per ricevere i fondi. I bitcoin saranno i suoi indipendentemente dal fatto che stia eseguendo un nodo sulla rete. Quindi, dato questo sistema peer-to-peer, qual è esattamente il motivo per cui i nodi potrebbero voler raggiungere il consenso? Bene, dato che una varietà di utenti trasmette queste transazioni alla rete. Ciò su cui tutti vogliono raggiungere un consenso è esattamente quali transazioni sono state trasmesse e l’ordine in cui queste transazioni sono avvenute.
02.02.06
So what does that mean, specifically? How consensus could work in Bitcoin is that at any given time, all the nodes in the peer-to-peer network would have a sequence of blocks of transactions that they’ve reached consensus on. So recall that in ScroogeCoin, for optimization purposes, for efficiency, we put transactions into blocks. And we link these blocks together on a block chain. So we’re utilizing a similar principle here. We could do consensus on transactions one by one, that would be okay. It would just be inefficient. So instead, we do consensus on a block by block basis. So at any given point, all these nodes in the peer-to-peer network would have the sequence of blocks that they have agreed upon already. And each node would then have a set of outstanding transactions that it has heard about. So recall that for these transactions, consensus has not yet happened. And so, almost by definition, each node might have a slightly different version of the outstanding transactions thats it’s heard about. The peer-to-peer network is not perfect, so some node may have heard about a transaction, but not other nodes. Cosa significa, in particolare? Come il consenso potrebbe funzionare in Bitcoin è che in qualsiasi momento, tutti i nodi della rete peer-to-peer avrebbero una sequenza di blocchi di transazioni su cui hanno raggiunto il consenso. Quindi ricorda che in ScroogeCoin, per scopi di ottimizzazione, per l’efficienza, mettiamo le transazioni in blocchi. E colleghiamo questi blocchi insieme su una catena a blocchi. Quindi stiamo utilizzando un principio simile qui. Potremmo fare un consenso sulle transazioni una per una, sarebbe okay. Sarebbe solo inefficiente. Quindi, invece, facciamo un consenso su base block-block. Quindi, in ogni punto, tutti questi nodi nella rete peer-to-peer avrebbero la sequenza di blocchi che hanno già concordato. E ogni nodo avrebbe quindi una serie di transazioni in sospeso di cui ha sentito parlare. Quindi ricorda che per queste transazioni il consenso non è ancora avvenuto. E così, quasi per definizione, ogni nodo potrebbe avere una versione leggermente diversa delle transazioni in circolazione di cui si parla. La rete peer-to-peer non è perfetta, quindi alcuni nodi potrebbero aver sentito parlare di una transazione, ma non di altri nodi.
02.02.07
So given that we the setup, what could happen is that you have the sequence of blocks that everybody has agreed upon. A block is just a series of transactions. Quindi, dato che noi siamo il setup, quello che potrebbe accadere è che tu hai la sequenza di blocchi su cui tutti hanno concordato. Un blocco è solo una serie di transazioni.
02.02.08
And now there are, let’s say, these three nodes in the system, each of whom proposes, each of whom has an input, the set of outstanding transactions that it’s heard about.

And they execute together some consensus protocol.

And for the the consensus protocol to succeed, you can select any valid block, even if it’s a block that was proposed by only one node. And for a block to be valid, all of these transactions have to have the right crypto signatures and so on.
E ora ci sono, diciamo, questi tre nodi nel sistema, ognuno dei quali propone, ognuno dei quali ha un input, l’insieme delle transazioni in sospeso di cui si sente parlare.

E eseguono insieme alcuni protocolli di consenso.

Per il successo del protocollo di consenso, è possibile selezionare qualsiasi blocco valido, anche se si tratta di un blocco proposto da un solo nodo. E affinché un blocco sia valido, tutte queste transazioni devono avere le giuste firme crittografiche e così via.
02.02.09
So you could select any of these valid blocks, and the consensus protocol would still be okay. If some transaction somehow didn’t make it into this particular block that gets chosen as the result of the consensus protocol, it could just wait and get into the next block. So maybe this green block gets elected. Now it gets added to the consensus block chain. And then the protocol proceeds and routes.

So if you took the traditional theory of distributive consensus and applied that to Bitcoin, this is the sort of system you might end up with. Now, this has some similarities to how Bitcoin works, but it’s not exactly how Bitcoin works. And why is that? And the reason for this is simple. Doing things this way is a really hard technical problem, for a variety of reasons. There are some obvious ones. Nodes might crash, and nodes might outright be malicious.
Quindi è possibile selezionare uno qualsiasi di questi blocchi validi, e il protocollo di consenso sarebbe ancora a posto. Se alcune transazioni in qualche modo non sono riuscite a entrare in questo particolare blocco che viene scelto come risultato del protocollo di consenso, potrebbero semplicemente aspettare e passare al blocco successivo. Quindi forse questo blocco verde viene eletto. Ora viene aggiunto alla catena di blocco del consenso. E poi il protocollo procede e le rotte.

Quindi se hai preso la tradizionale teoria del consenso distributivo e l’hai applicata a Bitcoin, questo è il tipo di sistema che potresti ritrovarti. Ora, questo ha alcune somiglianze con il funzionamento di Bitcoin, ma non è esattamente come funziona Bitcoin. E perché? E la ragione di questo è semplice. Fare le cose in questo modo è un problema tecnico davvero difficile, per una serie di motivi. Ce ne sono alcuni ovvi. I nodi potrebbero bloccarsi ei nodi potrebbero essere dannosi.
02.02.10
But also because the network is highly imperfect. It’s a peer-to-peer system. Not all pairs of nodes are connected to each other. There could be faults in the network because of poor Internet connectivity and so on. And finally, there’s gonna be a lot of latency in the system, because all of these things happen over the Internet. They’re not even within a single data center or something like that.

And one particular consequence of this high latency, is that there is no notion of global time. What does this mean, and why is it important?
Ma anche perché la rete è altamente imperfetta. È un sistema peer-to-peer. Non tutte le coppie di nodi sono collegate tra loro. Potrebbero esserci errori nella rete a causa della scarsa connettività Internet e così via. E infine, ci sarà molta latenza nel sistema, perché tutte queste cose accadono su Internet. Non sono nemmeno all’interno di un singolo data center o qualcosa del genere.

E una conseguenza particolare di questa elevata latenza è che non esiste alcuna nozione di tempo globale. Che cosa significa e perché è importante?
02.02.11
It means that not all nodes can agree to a common ordering of events, simply based on observing timestamps. It just doesn’t work like that. So you can’t possibly design your protocol by saying things like take the node that sent the first message in step one. And have that node do something in step two. It just can’t work like that, because not all the nodes will agree on which message was sent first, in the first step of the protocol. So this really puts serious constraints on what sorts of algorithms you can really put into your consensus protocols.

And in fact, because of these constraints, a lot of the literature on distributed consensus is somewhat pessimistic.
Significa che non tutti i nodi possono concordare un ordinamento di eventi comune, basandosi semplicemente sull’osservazione di timestamp [data e ora]. Semplicemente non funziona così. Quindi non è possibile progettare il protocollo dicendo cose come prendere il nodo che ha inviato il primo messaggio nel primo passaggio. E fare in modo che quel nodo faccia qualcosa nel secondo passo. Semplicemente non può funzionare come questo, perché non tutti i nodi concorderanno su quale messaggio è stato inviato per primo, nella prima fase del protocollo. Quindi questo pone davvero dei seri limiti su quali tipi di algoritmi si possano veramente mettere nei protocolli di consenso.

E infatti, a causa di questi vincoli, gran parte della letteratura sul consenso distribuito è piuttosto pessimista.
02.02.12
And many impossibility results have been proved. I’m just gonna name a couple of these, in case you wanna look them up, but I won’t go into too much detail. One impossibility result that’s very well known and pretty simple to understand is called the Byzantine generals problem. And a much more subtle one, known for the names of the authors who first proved it, is called the Fischer-Lynch-Paterson impossibility result. Under some conditions, which include the nodes acting in a deterministic manner, what they proved is that consensus is impossible, even with a single faulty process. So, despite these impossibility results, there are a few well-known protocols. And Paxos is probably one of the better known. E molti risultati impossibili sono stati dimostrati. Ne chiamerò solo un paio, nel caso volessi cercarli, ma non entrerò troppo nei dettagli. Un risultato impossibile che è molto noto e abbastanza semplice da capire è chiamato il problema dei generali bizantini. E uno molto più sottile, noto per i nomi degli autori che per primi lo dimostrarono, è chiamato il risultato di impossibilità di Fischer-Lynch-Paterson. In alcune condizioni, che includono i nodi che agiscono in modo deterministico, ciò che hanno dimostrato è che il consenso è impossibile, anche con un singolo processo difettoso. Quindi, nonostante questi risultati impossibili, ci sono alcuni protocolli ben noti. E Paxos è probabilmente uno dei più noti.
02.02.13
And what Paxos does is it makes certain compromises. What it gives you is that it never produces an inconsistent result, which would be really bad. But it accepts the tradeoff that, under certain conditions, albeit rare ones, the protocol can get stuck and fail to make any progress.

But here’s the interesting thing. These impossibility results were proved in a different model. They were intended to study distributed databases. And this model doesn’t carry over that well to, this was the setting that Bitcoin operates under.
E quello che fa Paxos è che fa dei compromessi. Ciò che ti dà è che non produce mai un risultato incoerente, il che sarebbe davvero pessimo. Ma accetta il compromesso che, in determinate condizioni, anche se rare, il protocollo può rimanere bloccato e non riuscire a fare alcun progresso.

Ma ecco la cosa interessante. Questi risultati impossibili sono stati dimostrati in un modello diverso. Dovevano studiare database distribuiti. E questo modello non si adatta a questo, questo era l’ambiente in cui Bitcoin opera.
02.02.14
So what these results really tell us more about the model than about the problem, in fact. And what Bitcoin does is that it violates a lot of the assumptions that go into these models. And because of that, consensus in Bitcoin, ironically, works better in practice than in theory. Quindi, questi risultati ci dicono davvero di più sul modello che sul problema, in effetti. E ciò che Bitcoin fa è che viola molte delle assunzioni che entrano in questi modelli. E a causa di ciò, il consenso in Bitcoin, ironia della sorte, funziona meglio in pratica che in teoria.
02.02.15
And what this really means is that the theory that was developed for a different set of problems needs to catch up, in order to be able to say really interesting things about Bitcoin. But never the less, that theory is quite important because, for example, it can help us predict unforeseen attacks, and really be able to come to strong guarantees on the nature of consensus and security in Bitcoin.

So what are these different assumptions? What are some things that Bitcoin does differently? Well, first of all, it introduces the idea of incentives.
E ciò che questo significa in realtà è che la teoria sviluppata per un diverso insieme di problemi deve essere recuperata, per poter dire cose veramente interessanti su Bitcoin. Ma non di meno, questa teoria è molto importante perché, ad esempio, può aiutarci a prevedere attacchi imprevisti, ed essere davvero in grado di ottenere forti garanzie sulla natura del consenso e della sicurezza in Bitcoin.

Quali sono questi diversi presupposti? Quali sono alcune cose che Bitcoin fa in modo diverso? Bene, prima di tutto, introduce l’idea di incentivi.
02.02.16
And this is very different from any previous system for distributed consensus. And this is only possible in Bitcoin because it is a currency. And you can use that currency to give incentives to the participants for acting honestly.

And so Bitcoin doesn’t quite solve the distributed consensus problem in a general sense. But it solves it in the context of the currency system. The other thing that it does differently is that it really embraces the notion of randomness. And what I mean by that is one of the things it does is, it does away with the notion of a specific starting point and ending point for consensus. Instead, consensus happens over a long period of time, about an hour in the practical system. But even at the end of that time, you’re not a 100% sure that a transaction or a block that you’re interested in has made it into the consensus block chain. Instead, as time goes on, your probability goes up higher and higher. And the probability that you’re wrong in making an assumption about a transaction goes down exponentially.

So that’s the kind of inherently probabilistic guarantee that Bitcoin gives you. And that’s why it’s able to completely get around these traditional impossibility results on distributed consensus protocols.
E questo è molto diverso da qualsiasi sistema precedente per il consenso distribuito. E questo è possibile solo in Bitcoin perché è una valuta. E puoi usare quella valuta per incentivare i partecipanti a comportarsi onestamente.

E così Bitcoin non risolve del tutto il problema del consenso distribuito in senso generale. Ma lo risolve nel contesto del sistema monetario. L’altra cosa che fa in modo diverso è che abbraccia davvero la nozione di casualità. E ciò che intendo è una delle cose che fa, elimina la nozione di uno specifico punto di partenza e punto finale per il consenso. Invece, il consenso avviene per un lungo periodo di tempo, circa un’ora nel sistema pratico. Ma anche alla fine di quel periodo, non sei sicuro al 100% che una transazione o un blocco a cui sei interessato sia entrato nella catena di blocco del consenso. Invece, col passare del tempo, la tua probabilità sale sempre più in alto. E la probabilità di sbagliare nel formulare un’ipotesi relativa a una transazione diminuisce in modo esponenziale.

Questo è il tipo di garanzia intrinsecamente probabilistica fornita da Bitcoin. Ed è per questo che è in grado di aggirare completamente questi risultati impossibili tradizionali su protocolli di consenso distribuiti.

[top]
© Arvind Narayanan – Assistant Professor of Computer science – Princeton University

W02.01
Centralizzazione vs. Decentralizzazione
W02.03
Consenso senza Identità: la Block Chain