La patch
replace-by-fee, scritta l'anno scorso da Peter Todd dietro bounty da parte di un privato, ma mai inserita nel codice ufficiale dal core team, permette di rimpiazzare transazioni effettuate con altre transazioni aventi gli stessi input, fintanto che queste transazioni non siano state confermate, a patto che la fee della tx di rimpiazzo sia maggiore della precedente.
Tendenzialmente queste transazioni vengono viste dall'intera rete come doppie spese, e quindi ignorate dalla maggioranza dei nodi (speculazioni parlano di un 3% dei miners che le accetterebbero, non ho fonte, non ricordo neanche dove l'avevo letto, ma non è un numero da prendere per buono, probabilmente si parla di molto meno).
Un esempio di indirizzo che ha effettuato delle doppie spese, è questo:
La prima transazione in ordine temporale è quella "buona", le altre due non sarebbero mai state accettate da un nodo normale, ma un nodo patchato replace-by-fee invece le salva, e propone per l'inclusione nel blocco quella con fee maggiore. Se al nodo stesso venissero nuovamente proposte da altri nodi transazioni con fee minore, il nodo risponderebbe così
2015-02-19 00:49:45 ERROR: AcceptToMemoryPool : rejecting replacement 3ac20d0e9eb83e4c25ebfaa23a09885e4cad35227eddda9f7892c048a81edd87, pays less fees than conflicting txs; 0.00 < 0.0017
2015-02-19 00:49:46 ERROR: AcceptToMemoryPool : rejecting replacement 3479d936a925fe196d3c693616c6a19777d2c6929b94c77a281f33364b2d03f3, pays less fees than conflicting txs; 0.00 < 0.0008
Intanto, ecco com'è andato a finire il double spend qui sopra:
Un miner della maggioranza, quindi, uno di quelli che non validano transazioni di rimpiazzo, ha minato il blocco, e lo ha fatto dopo aver rifiutato il relay delle altre due transazioni, i double spend.
Tutto bene, insomma, double spend ad oggi resta tagliato fuori dalla rete (una decina di tentativi, nessun successo). Resta assunto che le transazioni a zero conferme sono transazioni a zero lavoro, e vanno prese con le pinzette, come fa la stragrande maggioranza dei merchant. Oppure, ci sono servizi terzi che si pongono come trusted parties, che imho prenderanno sempre più piede.
Boh, vedremo.
Ciò detto per spiegare come (non) funziona: Introducing gangsta
Gangsta è una web app che aggiunge a qualunque client single-sig la feature di double spend nei confronti di nodi replace-by-fee.
A qualunque, sì, perché è una app stand-alone, nell'esempio la vediamo andare in supporto a Multibit:
Innanzitutto bisogna esportare le chiavi
Poi importarle in gangsta (è tutto client-side), potete pastare tutto il file senza problemi, il form è smart.
Chiavi importate, wallet sincronizzato. Ovviamente si appoggia a servizi di terze parti (blockr.io e blockchain), o sarei davvero troppo bravo per perdere tempo con queste cose.
Tornate su Multibit, fate la vostra transazione normalmente.
Tornate su gangsta, per velocità c'è un bottone di wallet sync, altrimenti c'è il polling ogni due minuti, tanto per restare sul pezzo.
Dopo che avrete visto la vostra transazione, potrete aprirla nell'editor e modificare gli outputs. Incrementate la fee o la transazione verrà rifiutata dal nodo, dopo aver fatto (fate in fretta, o finisce che la transazione viene inclusa e voi siete ancora lì che scrivete a mano l'indirizzo di rimpiazzo) premete il bottone verde. Premete sempre il bottone, ogni 108 minuti.
Una panoramica della transazione modificata e la possibilità di pusharla. Dunque, sia decodifica che push vengono fatti lato server, quindi se non riuscirete a fare la decodifica vuol dire che per qualche motivo il server è giù, o non riuscite a raggiungerlo, o sono passati più di 108 minuti da quando avete premuto il pulsante. Insomma, non potreste pushare la transazione, ma avreste l'hex.
Assumendo che non sia esploso tutto, comunque:
Dopo aver pushato la transazione si torna alle prime immagini, la transazione non verrà inclusa in alcun blocco, le possibilità che avvenga sono risibili, ma avrete fatto un tentativo di doppia spesa.
Se su blockchain.info non riuscite a vedere la transazione dovete disabilitare i filtri sull'indirizzo:
demo:
http://gangsta.dassori.mesource:
http://github.com/gdassori/gangstaNon pastate chiavi importanti sull'app online, se volete provare fatevi un wallet con pochi mbtc, basteranno. Non appena ho tempo lo passo anche su testnet.
Ovviamente loggherò tutti i vostri tentativi di doppia spesa che passeranno attraverso il mio server, e forse li pubblicherò tipo pagina figa dove scorrono i dati, roba di gran classe.
Provatela e segnalatemi i bug!