4. Prova di lavoro
Per implementare un server di timestamp distribuito su base peer-to-peer, dovremo utilizzare un sistema di prova di lavoro simile a Hashcash di Adam Back[6], piuttosto che i giornali o i post di Usenet.
La prova di lavoro prevede la scansione di un valore che, una volta sottoposto a hash, come con SHA-256, l'hash inizia con un numero di bit zero. Il lavoro medio richiesto è esponenziale nel numero di bit zero richiesti e può essere verificato eseguendo un singolo hash.
Per la nostra rete timestamp, implementiamo la prova di lavoro incrementando un nonce nel blocco finché non viene trovato un valore che fornisce all'hash del blocco i bit zero richiesti.
Una volta che lo sforzo della CPU è stato speso per soddisfare la prova di lavoro, il blocco non può essere modificato senza rifare il lavoro. Poiché i blocchi successivi vengono concatenati dopo di esso, il lavoro per modificare il blocco includerebbe la rifacimento di tutti i blocchi successivi.
La prova del lavoro risolve anche il problema di determinare la rappresentanza nel processo decisionale a maggioranza. Se la maggioranza fosse basata su un indirizzo IP, un voto, potrebbe essere sovvertita da chiunque sia in grado di assegnare molti IP.
La prova del lavoro è essenzialmente una CPU, un voto. La decisione a maggioranza è rappresentata dalla catena più lunga, su cui è stato investito il maggiore sforzo di proof-of-work.
Se la maggior parte della potenza della CPU è controllata da nodi onesti, la catena onesta crescerà più velocemente e supererà qualsiasi catena concorrente
Per modificare un blocco passato, un utente malintenzionato dovrebbe rifare la prova di lavoro del blocco e di tutti i blocchi successivi e poi recuperare e superare il lavoro dei nodi onesti.
Mostreremo in seguito che la probabilità che un attaccante più lento raggiunga il livello diminuisce esponenzialmente man mano che vengono aggiunti i blocchi successivi.
Per compensare l'aumento della velocità dell'hardware e il variare dell'interesse nell'esecuzione dei nodi nel tempo, la difficoltà della prova di lavoro è determinata da una media mobile che prende di mira un numero medio di blocchi all'ora. Se vengono generati troppo velocemente, la difficoltà aumenta.