Doppelte Ausgaben sind ein potenzieller Fehler in einem digitalen Bargeldsystem, bei dem derselbe einzelne digitale Token mehr als einmal ausgegeben werden kann. Im Gegensatz zu physischem Geld besteht ein digitaler Token aus einer digitalen Datei, die dupliziert oder gefälscht werden kann.
Zentralisierte Währungen
Zur Verhinderung von Doppelausgaben wird in der Regel eine zentrale Vertrauensperson eingesetzt, die online überprüfen kann, ob ein Token ausgegeben wurde, was normalerweise sowohl unter dem Gesichtspunkt der Verfügbarkeit als auch des Vertrauens einen Single Point of Failure darstellt.
Dezentralisierte Währungen
In einem dezentralisierten System ist das Problem der doppelten Ausgabe von Geld wesentlich schwieriger zu lösen. Um die Notwendigkeit einer vertrauenswürdigen dritten Partei zu vermeiden, müssen viele Server identische, aktuelle Kopien eines öffentlichen Transaktionsbuchs speichern, aber da Transaktionen (Anfragen zum Ausgeben von Geld) übertragen werden, kommen sie bei jedem Server zu leicht unterschiedlichen Zeiten an. Wenn zwei Transaktionen versuchen, denselben Token auszugeben, wird jeder Server die erste Transaktion, die er sieht, als gültig und die andere als ungültig betrachten. Sobald sich die Server nicht mehr einig sind, gibt es keine Möglichkeit mehr, den wahren Kontostand zu ermitteln, da die Beobachtungen jedes Servers als gleich gültig angesehen werden. Die meisten dezentralen Systeme lösen dieses Problem mit einem Konsensalgorithmus, der die Server wieder in Einklang bringt. Zwei bemerkenswerte Arten von Konsensmechanismen sind Proof-of-Work und Proof-of-Stake.
Bis 2007 wurde eine Reihe von verteilten Systemen zur Verhinderung von Doppelausgaben vorgeschlagen. Die Kryptowährung Bitcoin führte Anfang 2009 eine Lösung ein. Ihr kryptografisches Protokoll verwendet einen Proof-of-Work-Konsensmechanismus, bei dem Transaktionen in Blöcken zusammengefasst und mithilfe einer verknüpften Liste von Hash-Zeigern (Blockchain) aneinandergereiht werden. Jeder Server kann einen Block erzeugen, indem er ein rechnerisch schwieriges Rätsel löst (insbesondere eine partielle Hash-Kollision findet), das als Mining bezeichnet wird. Der Block schreibt die gesamte Historie der Bitcoin-Transaktionen sowie die neuen eingehenden Transaktionen fest. Der Miner wird für die Lösung des Rätsels mit einigen Bitcoins belohnt.
Das Problem der doppelten Ausgaben bleibt jedoch bestehen, wenn zwei Blöcke (mit widersprüchlichen Transaktionen) ungefähr zur gleichen Zeit geschürft werden. Wenn sich die Server unweigerlich über die Reihenfolge der beiden Blöcke uneinig sind, behalten sie beide Blöcke vorübergehend. Wenn neue Blöcke eintreffen, müssen sie sich auf die eine oder die andere Geschichte festlegen, und schließlich wird eine Kette fortgesetzt, während die andere(n) nicht fortgesetzt werden. Da die längste (technisch gesehen „schwerste“) Kette als der gültige Datensatz gilt, haben die Miner einen Anreiz, nur Blöcke auf der längsten ihnen bekannten Kette zu erstellen, damit sie Teil dieses Datensatzes wird (und ihre Belohnung gültig ist).
Transaktionen in diesem System sind daher technisch gesehen nie „endgültig“, da eine widersprüchliche Kette von Blöcken die aktuelle kanonische Kette immer übertreffen kann. Je mehr Blöcke jedoch auf einer Transaktion aufgebaut werden, desto unwahrscheinlicher bzw. kostspieliger wird es für eine andere Kette, diese zu überholen.