zudas (OP)
Newbie
Offline
Activity: 4
Merit: 0
|
|
January 08, 2018, 05:11:20 PM |
|
Ciao a tutti e piacere di conoscervi. Sono Zudas e, per lavoro (non sono un informatico) e per diletto, sto approfondendo il tema della blockchain. C’è un passaggio logico che non mi persuade riguardo alla prevenzione del double spending e la risoluzione del problema dei generali bizantini. Se Alice (maligna) esegue una transazione con Bob e, un istante dopo, realizza una transazione identica (quindi con stesso input) a se stessa, la propagazione delle due transazioni tra i nodi potrebbe portare a validare entrambe le transazioni, nell’ipotesi in cui, ad esempio, due nodi avessero preso in carico e “per buona” la prima transazione piuttosto che la seconda. Se in tale ipotesi, peraltro i due nodi giungessero alla proof of work in contemporanea, la blockchain presenterebbe una biforcazione. Tale biforcazione verrebbe risolta allorquando uno dei rami dovesse diventare più lungo dell’altro, nel qual caso il ramo più breve verrebbe abbandonato dai nodi e la catena proseguirebbe seguendo la biforcazione più lunga. Se cosi fosse, e quindi se correttamente ho interpretato il funzionamento della blockchain e rappresentato i fatti, cosa impedirebbe ad Alice di presentare, immediatamente dopo la validazione di tali due blocchi (e quindi della biforcazione), un’ulteriore disposizione a favore di se stessa (utilizzando come input l’output a lei favorevole della precedente transazione), portando quindi all’univoca accettazione del ramo a lei più favorevole? In tale ipotesi, Bob, potrebbe trovarsi ad aver visto validare la propria transazione (riscontrebbe la presenza della biforcazione per ragioni riconducibili alla transaizone da lui attivata con Alice?) e, magari anche dopo i precauzionali sei blocchi approvati, trovarsi a perdere tutto pechè la catena continua sul ramo a lui sfavorevole... Spero di aver chiarito il mio dubbio. Mi sono perso qualche passaggio? Help! Grazie a chi mi aiuta. Ciao!
|
|
|
|
picchio
Legendary
Offline
Activity: 2506
Merit: 1120
|
|
January 08, 2018, 05:58:41 PM |
|
... Se Alice (maligna) esegue una transazione con Bob e, un istante dopo, realizza una transazione identica (quindi con stesso input) a se stessa, la propagazione delle due transazioni tra i nodi potrebbe portare a validare entrambe le transazioni, ...
Le due transazioni non sono validabili nella stessa blockchain, quella che vince vince, una sola, se riesce il double riesce a scapito di Bob e la stronza vince, se Bob aspetta 6 blocchi è improbabile che Alice possa riuscire.
|
Waves mi piaceva ora non più.
|
|
|
zudas (OP)
Newbie
Offline
Activity: 4
Merit: 0
|
|
January 08, 2018, 06:03:05 PM |
|
Grazie intanto della risposta. Ma, se così fosse, la tanto declamata soluzione al problema del double spending dove andrebbe a finire? Qualsiasi transazione di fatto sarebbe a rischio. Ci deve essere qualcosa che mi sfugge...
|
|
|
|
zudas (OP)
Newbie
Offline
Activity: 4
Merit: 0
|
|
January 08, 2018, 06:16:14 PM |
|
Oppure, vista dal lato di Bob (sincero), converrebbe sempre aggiungere una transazione di disposizione dell'output a se favorevole, in modo da allungare forzatamente il ramo di blockchain a proprio favore. Ribadisco, c'è qualcosa che non mi torna...
|
|
|
|
jack0m
Legendary
Offline
Activity: 3808
Merit: 2045
|
|
January 08, 2018, 07:34:24 PM |
|
[...] Se cosi fosse, e quindi se correttamente ho interpretato il funzionamento della blockchain e rappresentato i fatti, cosa impedirebbe ad Alice di presentare, immediatamente dopo la validazione di tali due blocchi (e quindi della biforcazione), un’ulteriore disposizione a favore di se stessa (utilizzando come input l’output a lei favorevole della precedente transazione), portando quindi all’univoca accettazione del ramo a lei più favorevole?
non vedo il senso di tutto ciò: una volta che è stato raggiunto il consenso sul ramo in cui i bitcoin finiscono su un indirizzo controllato da Alice, quei bitcoin rimangono suoi, non c'è alcun bisogno di spostarli ulteriormente da lì. È Bob che si deve preoccupare di monitorare la blockchain, per vedere se il pagamento a lui destinato viene confermato o meno. Considera che un blocco orfano (dovuto a due miner che scovano quasi in contemporanea due blocchi entrambi validi alla stessa altezza, uno dei quali finirà su un binario morto restando appunto orfano) è un evento possibile, ma non molto probabile: mediamente se ne creano 1-2 al giorno. Due rami che continuano a correre in parallelo oltre il primo blocco sarebbero ancora più improbabili, e la probabilità si riduce praticamente a zero nel giro di 5-6 blocchi. Per questo si può ragionevolmente ritenere una transazione irreversibile, una volta che ha ottenuto 6 conferme da quando viene inserita in un blocco.
|
Money is a hoax. Debt is slavery. Consumerism is toxic.
|
|
|
zudas (OP)
Newbie
Offline
Activity: 4
Merit: 0
|
|
January 09, 2018, 08:56:31 AM |
|
Capisco, grazie per la risposta. Ci rifletto un momento. Ma in caso di biforcazione, Bob ne avrebbe in qualche modo notizia? Sarebbe cioè a conoscenza della "non univocità" circa la validazione della transazione che lo ha interessato?
|
|
|
|
Gc24
Member
Offline
Activity: 113
Merit: 12
|
|
January 09, 2018, 11:57:35 AM |
|
Capisco, grazie per la risposta. Ci rifletto un momento. Ma in caso di biforcazione, Bob ne avrebbe in qualche modo notizia? Sarebbe cioè a conoscenza della "non univocità" circa la validazione della transazione che lo ha interessato?
non credo, comunque si sta sottovalutando una cosa, il timestamp dei blocchi. cosa impedirebbe ad Alice di presentare, immediatamente dopo la validazione di tali due blocchi ... portando quindi all’univoca accettazione del ramo a lei più favorevole?
l'incapacità di Alice di possedere il 51% della mining power, quindi di ottenere la maggioranza -> potere "decisionale" sulle transazioni da accettare. nel tuo caso una delle due transazioni va a buon fine (non è detto che sia sempre quella arrivata prima), però i nodi che validano le due transazioni di Alice, cercando di includerla nel blocco, si accorgono che una delle due non è valida. Diciamo che "nel lungo periodo" ciò che dici tu non è un problema, perché pur essendo Alice malevola, non ottiene nessun vantaggio. Se le va "male" effettua un pagamento (e l'onesto Bob riceve il pagamento e spedisce il bene alla malevola Alice), se le va "bene" Bob non riceve nessun pagamento e non spedisce nessun bene (quando viene confermata la transazione favorevole è praticamente impossibile che ci sia un "cambio" di catena facendo vincere la transazione sfavorevole). E inoltre per fare questo tentativo Alice spende in fees doppie, anche nel caso a lei "favorevole" andrebbe in perdita.
|
|
|
|
jack0m
Legendary
Offline
Activity: 3808
Merit: 2045
|
|
January 09, 2018, 12:04:37 PM |
|
Capisco, grazie per la risposta. Ci rifletto un momento. Ma in caso di biforcazione, Bob ne avrebbe in qualche modo notizia? Sarebbe cioè a conoscenza della "non univocità" circa la validazione della transazione che lo ha interessato?
La notizia di un double spending può arrivare a un nodo man mano che la transazione si propaga in rete, ma proprio in quanto double spending verrà ignorata. Ogni nodo valuta in maniera indipendente se una transazione che riceve in broadcast sia valida o no, e se riceve due transazioni con gli stessi input, prende la prima per valida e la seconda la scarta come double spending. La stessa cosa vale per i blocchi: se riceve in sequenza due blocchi alla stessa altezza ed entrambi validi (cioè contenenti transazioni tutte valide e con hash che risolvono il pow), il primo che gli arriva è quello vincente, il secondo viene al momento scartato, con tutte le transazioni che contiene. Quindi se i due blocchi includono transazioni in conflitto, quella "vera" per il nodo sarà quella inclusa nel blocco che vede per primo. Il nodo verrebbe quindi successivamente a conoscenza di un'altra transazione che cerca di spendere gli stessi input, ma si limiterebbe a ignorarla, interrompendo la propagazione in rete del blocco arrivato per secondo. Quindi la temporanea biforcazione è dovuta al modo casuale e alla latenza con cui si propagano le transazioni e i blocchi all'interno della rete: alcuni nodi vedranno "vincere" il blocco prodotto dal miner A, altri quello del miner B. E questo vale per tutti i nodi della rete, compresi gli altri miner, per cui i miner del primo gruppo cercheranno di scovare il prossimo blocco in coda a quello di A, gli altri a quello di B. E siccome è molto improbabile che per la seconda volta di fila vengano scoperti due nuovi blocchi quasi in contemporanea, uno sulla prima catena e uno sull'altra, il gruppo del prossimo miner a risolvere per primo il pow si troverà su un ramo più lungo, che diventerà a quel punto la vera e unica blockchain. I nodi inizialmente finiti nel gruppo sbagliato, quando riceveranno il nuovo blocco si sposteranno come da protocollo sull'altro ramo e verrà nuovamente raggiunto il consenso in rete.
|
Money is a hoax. Debt is slavery. Consumerism is toxic.
|
|
|
v3swiss
Newbie
Offline
Activity: 126
Merit: 0
|
|
January 09, 2018, 02:18:03 PM |
|
Capisco, grazie per la risposta. Ci rifletto un momento. Ma in caso di biforcazione, Bob ne avrebbe in qualche modo notizia? Sarebbe cioè a conoscenza della "non univocità" circa la validazione della transazione che lo ha interessato?
La notizia di un double spending può arrivare a un nodo man mano che la transazione si propaga in rete, ma proprio in quanto double spending verrà ignorata. Ogni nodo valuta in maniera indipendente se una transazione che riceve in broadcast sia valida o no, e se riceve due transazioni con gli stessi input, prende la prima per valida e la seconda la scarta come double spending. La stessa cosa vale per i blocchi: se riceve in sequenza due blocchi alla stessa altezza ed entrambi validi (cioè contenenti transazioni tutte valide e con hash che risolvono il pow), il primo che gli arriva è quello vincente, il secondo viene al momento scartato, con tutte le transazioni che contiene. Quindi se i due blocchi includono transazioni in conflitto, quella "vera" per il nodo sarà quella inclusa nel blocco che vede per primo. Il nodo verrebbe quindi successivamente a conoscenza di un'altra transazione che cerca di spendere gli stessi input, ma si limiterebbe a ignorarla, interrompendo la propagazione in rete del blocco arrivato per secondo. Quindi la temporanea biforcazione è dovuta al modo casuale e alla latenza con cui si propagano le transazioni e i blocchi all'interno della rete: alcuni nodi vedranno "vincere" il blocco prodotto dal miner A, altri quello del miner B. E questo vale per tutti i nodi della rete, compresi gli altri miner, per cui i miner del primo gruppo cercheranno di scovare il prossimo blocco in coda a quello di A, gli altri a quello di B. E siccome è molto improbabile che per la seconda volta di fila vengano scoperti due nuovi blocchi quasi in contemporanea, uno sulla prima catena e uno sull'altra, il gruppo del prossimo miner a risolvere per primo il pow si troverà su un ramo più lungo, che diventerà a quel punto la vera e unica blockchain. I nodi inizialmente finiti nel gruppo sbagliato, quando riceveranno il nuovo blocco si sposteranno come da protocollo sull'altro ramo e verrà nuovamente raggiunto il consenso in rete. Concordo.
|
|
|
|
|