Bitcoin-Blöcke, die Lebenserwartung und der Fehlschluss der Spieler
Eine Wette zwischen Peter Rizun und Craig Wright führt zu einem häufigen mathematischen Fehlschluss. Der findet sich nicht nur in der Blockproduktion bei Bitcoin, sondern auch in der Berechnung der Lebenserwartung von Menschen in einem bestimmten Lebensalter. Damit könnte ein Streit, bei dem es vor allem ums Ego ging, helfen, über einen typischen Fehlschluss des gesunden Menschenverstands…
Selfish Mining Pool: incentivo a minare in pool centralizzati
Soltanto quattro giorni fa, il 1 novembre 2013, è stata rilasciata una pubblicazione che sta facendo moltissima notizia nella comunità Bitcoin. Prima la pubblicazione rilasciata direttamente dalla Cornell University, poi un post su Bitcoin Magazine dall'eccellente Vitalik Buterin, e ancora un continuo di notizie che raggiungono addirittura la front-page di Hacker News e del subreddit /r/Bitcoin. Per non parlare del blog post dagli autori della pubblicazione stessa intitolato Bitcoin Is Broken.
Per darvi un po' di background, Bitcoin si basa totalmente sul concetto della "blockchain" e del "mining". Non voglio entrare in dettaglio visto che ho dei post pronti ad essere pubblicati che fanno giusto questo, ma in essenza la blockchain è un semplice database che contiene le transazioni di tutte le persone che hanno effettuato transazioni sul network di Bitcoin. Ogni persona nel network ha una copia di questo database. Essendo un sistema decentralizzato, questo database non può esistere su un singolo computer, quindi deve essere per forza distribuito sui vari client del network. Il mining subentra non solo per generare Bitcoin ma anche per mantenere il network sicuro. Si basa su un sistema proof-of-work dove ogni minatore deve dimostrare di aver eseguito un compito matematico altamente complesso. Se un singolo minatore ottiene più del 50% della potenza di calcolo del network complessivo, potrebbe comportarsi in maniera indesiderata effettuando il double-spending, ovvero la possibilità di sovrascrivere le proprie transazioni passate.
Il mining è un po' come vincere la lotteria. Quando si riesce a trovare l'hash del nuovo blocco, il network è programmato a darti una ricompensa (oggi a 25 BTC). È praticamente impossibile trovare un blocco per conto proprio quindi col tempo si sono creati questi pool, ovvero un gruppo di minatori che lavorano assieme a trovare il blocco seguente. La vincita viene quindi distribuita tra i membri di questo pool. Un po' come quando si comprano i biglietti della lotteria con un gruppo di amici. Più biglietti ci sono, maggiore la probabilità di vittoria. Lo stesso discorso vale per il concetto di mining pool.
Questi pool non possono raggiungere il 51% di computazione. Nella comunità questo è un concetto ben noto e quando un pool diventa troppo grande i minatori sono consapevoli di questo problema e provvedono rapidamente a spostarsi su altri pool per bilanciare la potenza di calcolo del network. Questo avviene in maniera volontaria dai minatori. I minatori non alcun incentivo a dare al pool maggiore potenza di calcolo. Anzi, sono incentivati a non farlo. Per questo motivo oggi come oggi abbiamo un network abbastanza bilanciato composto da vari pool che non superano il 30% di potenza di calcolo.
Selfish Mining
Il "selfish mining" è un concetto che descrive il comportamento che alcuni di questi pool potrebbero intraprendere per riuscire ad attrarre più minatori, e quindi riuscire a crescere oltre la soglia del 50% per poi controllare il network. C'è da dire che questo comportamento non è un hack oppure un baco nel sistema. È semplicemente una metodologia per effettuare il mining.
Una volta trovato un blocco, il miner lo pubblica immediatamente. Un miner selfish invece, quando lo trova, non lo pubblica immediatamente. Lo tiene da parte e continua a trovare il blocco seguente al suo blocco privato. Il resto del network non ne sa nulla di questo. Nel momento in cui viene trovato, il selfish miner si adopera invece a pubblicare la sua versione. L'obbiettivo del selfish miner è dunque quello di rimpiazzare il blocco degli altri, pubblicando la sua versione tempestivamente. Con un po' di fortuna e con l'aiuto di altri possibili nodi selfish durante la pubblicazione, il blocco selfish viene approvato dal network, rimpiazzando il blocco dei pool competitivi.
In pratica il selfish mining è un modo per sbarazzarsi dei blocchi che vengono trovati da altri pool. Dando al selfish pool un vantaggio notevole per la ricerca dei blocchi seguenti. I minatori hanno dunque un incentivo maggiore a far parte di questi selfish pools, data la maggiore probabilità di ricompensa. C'è da dire che non serve che una selfish pool abbia il 50% per effettuare questo comportamento. Infatti anche il 25% basterebbe per riuscire a trovare un blocco prima del resto del network.
Un minatore che ha speso un tot per comprare il suo hardware ha come obbiettivo quello di fare soldi. Quindi andrà dal pool che gli permetterà di massimizzare il suo guadagno. I selfish pools sono una soluzione molto accattivante per i minatori.
In futuro dovremmo assicurarci che questi pool non superino il 50%. Una possibile soluzione è già stata esposta nella pubblicazione stessa, che comporterebbe una piccola modifica al protocollo. Spero che questa modifica venga effettuata rapidamente dalla comunità Bitcoin in modo da prevenire il problema del selfish mining.