Ett nytt block i Bitcoinnätverket skapas i snitt var tionde minut och transaktioner som skickats ut på nätverket men ännu inte blivit inkluderade i ett sådant block brukar kallas obekräftade (på engelska unconfirmed). En obekräftad transaktion ses som mer osäker än en transaktion som finns med i ett block eftersom man inte kan vara helt säker på att den någonsin kommer att bli bekfräftad (d.v.s. komma med i ett block). Det skulle t.ex. kunna vara så att samma person skickat ut två olika transaktioner som står i konflikt med varandra ("jag vill skicka de 3 bitcoin som finns på adress A till adress B" och samtidigt "jag vill skicka de 3 bitcoin som finns på adress A till adress C"). Båda dessa kan inte komma med i ett block så den som lyckas skapa nästa block kommer endast att inkludera en av dem.
Att acceptera bitcoin i butik
En omdiskuterad fråga har därför länge varit hur man kan acceptera bitcoin som betalning i en vanlig butik. Butiken kan ju inte vänta 10 eller 20 minuter innan du får gå därifrån med din kexchoklad så att acceptera obekräftade transaktioner verkar vara nödvändigt. Men är det då inte väldigt lätt att fuska? Att direkt när du gått ut ur butiken skicka en ny transaktion där du skickar pengarna till dig själv och hoppas på att nätverket istället inkluderar denna. En anledning till att detta inte är helt lätt idag är att standardimplementation av Bitcoin alltid väljer att acceptera den första av två motstridiga transaktioner. På så sätt kan man alltså att övervaka nätverket en liten stund så att transaktionen hinner sprida sig och om ingen motstridig transaktion dyker upp vara ganska trygg med att ens transaktion kommer att accepteras. Ett exempel på en implementation av detta finns i plånboken MyCelium som visar en nivå av "transaction confidence" vilken för en normal transaktion går upp till över 90% inom loppet av några sekunder. Ett vanligt resonemang är att det är ganska krångligt att fuska på det här viset och att sannolikheten att bli utsatt för det är så låg så att det i praktiken inte är något problem. Det skulle kunna vara att jämföra med risken att någon rycker åt sig kexchokladen och springer ut utan att betala.
Men...
Det finns ett stort men här. Det finns inget i Bitcoinprotokollet som säger att den som skapar ett block måste välja den första transaktionen! Varje miner väljer själv vilka transaktioner denne vill inkludera i sitt block och så länge ingen av transaktionerna är direkt ogiltiga så kommer blocket att accepteras av nätverket (och det måste vara såhär eftersom du inte kan veta vilken transaktion den andra noden såg först - det finns inget som säger att den transaktion du såg först är mer "rätt" än den som den andra noden såg först). Vi förstår nu att det skulle kunna vara lockande för den som skapar ett block att inkludera en andra, motstridig transaktion även om den kom långt senare om den har en högre avgift inkluderad (eftersom denna avgift tillfaller blockskaparen).
Ett annat stort men är att det trots allt kanske inte är så svårt att fuska. Double-spending unconfirmed transactions is a lot easier than most people realise skriver Peter Todd och vad det handlar om här är att olika versioner av Bitcoinklienten har olika regler för om en transaktion ska inkluderas eller ej. Transaktioner som uppfyller vissa villkor kan skickas helt utan avgift men för andra transaktioner kommer klienten att kräva att en liten avgift bifogas. Storleken på denna minimiavgift ändrades nyligen och en effekt som kan uppstå då är att under tiden att relativt få miners uppgraderat till den nya versionen så kan det gå att få en transaktion att sprida sig på nätverket utan att sannolikheten är speciellt stor att den inkluderas i nästa block. Skickar man då även ut en annan transaktion som kommer att accepteras av alla så är chansen stor att den kommer att ersätta den första.
Replace-by-fee
Att välja transaktionen med högst avgift (istället för den först sedda transaktionen) brukar kallas replace-by-fee och en stor förespråkare för att detta borde vara standardimplementationen i Bitcoin är ovan nämnde Peter Todd (se t.ex. why you should mine with replace-by-fee). Resonemanget från Todd är att obekräftade transaktioner nu inger en falsk trygghet och att det vore bättre om det blev tydligt att de faktiskt är osäkra och att anpassa all mjukvara efter detta faktum.
Skulle detta då innebära att det blir omöjligt att ta emot Bitcoin i butik? Lyckligtvis finns det lösningar på problemet, om alla använder replace-by-fee så blir det möjligt för en butik att skydda sig på helt nya sätt. Låt oss säga att butiken tar emot en transaktion T1 och fuskaren sedan skickar ut transaktion T2 med en högre avgift. Butiken kan då "slå tillbaka" genom att skicka vidare alla pengar från T1 som avgift i en ny transaktion T3. Nu är det mer intressant för miners att välja transaktion T1 och T3 istället för T2 och fuskaren blir därmed av med sina pengar. I det här fallet får alltså inte butiken heller några pengar men själva vetskapen om att butiken kommer att bete sig på det här sättet gör att fusket blir ointressant att försöka sig på. Den här typen av motåtgärder är förstås något som i så fall skulle implementeras i butikens mjukvara och utföras automatiskt.
Vad som kommer att hända i det här frågan är ännu ovisst. Många verkar överens om att Peter Todds resonemang är korrekt och att replace-by-fee är att föredra men han har fått ta emot en hel del kritik för att han så aggressivt uppmanar miners att använda replace-by-fee redan nu innan mjukvara för att hantera motåtgärderna är på plats.
Kommentarer