Hier ist ein Beispiel für mehrere Transaktionen im selben Block, die alle von derselben Ausgabe ausgegeben werden. Ich habe diese mit der Electrum-Brieftasche erstellt und Electrum angewiesen, jedes Mal ein wenig BTC von derselben 1AD9xV6aeQMPMzfv5Nzk8yNDgtyV3LaUkB-Adresse auszugeben
Siehe: https://blockchain.info/address/1AD9xV6aeQMPMzfv5Nzk8yNDgtyV3LaUkB
Wenn ich versuche, selbst etwas Ähnliches mit Python und der Pycoin-Bibliothek zu machen, wird die zweite Transaktion als „doppelte Ausgabe“ gekennzeichnet, wenn ich sie an blockchain.info/pushtx sende. Die Antwort, die ich bekomme, ist:
Ein Outpoint ist bereits in [DBBitcoinTx [txIndex=101360418, getEstimatedBTCSent()=0, isGeneratedBlockReward()=false, getTotalBTCSent()=0, getHash()=1766bb1b732db7b3eef1bea27a572651ee343d79ca6c5b9e866e2f97e8df8=5,get()Straning.8=5a ausgegeben ()=BitcoinTx{hash=1766bb1b732db7b3eef1bea27a572651ee343d79ca6c5b9e866e2f97e8df85aa, version=1, lockTime=0, in=[], out=[]}, getClass()=class piuk.blockchain_db.DBBitcoinTx]] [(101355273, 1)]
Wie im ersten Beispiel übersteigt die Gesamtausgabe aller Transaktionen niemals die an dieser Adresse verfügbare Gesamtsumme, daher bin ich neugierig, warum dies als "doppelte Ausgabe" angesehen wird.
Wie sollten Sie eine Reihe von Transaktionen strukturieren, die von derselben Adresse ausgegeben werden, damit keine doppelten Ausgaben ausgelöst werden?
Meine eigene Antwort hinzufügen, nachdem ich etwas recherchiert habe: Eine Adresse und eine Ausgabe sind verschiedene Dinge. Eine Transaktion kann viele Eingaben und viele Ausgaben haben. Hier ist eine gute Visualisierung von bitcoin.org:
Eine doppelte Ausgabe tritt auf, wenn derselbe BTC verwendet wird, um zwei verschiedene Personen zu bezahlen. Dies wird auf der Blockchain niemals passieren, da das Bitcoin-Netzwerk ein konsistentes Ledger garantiert. Aber was ist mit den unbestätigten Transaktionen, die in den Mempools der Miner leben?
Einige Inkonsistenzen im Mempool treten möglicherweise erst auf, wenn sie der Blockchain hinzugefügt oder nicht hinzugefügt werden, andere können wir sofort als ungültig kennzeichnen, z. B. der Betrag übersteigt die verfügbaren Mittel usw.; Wenn unbestätigte Transaktionen nicht auf Gültigkeit geprüft würden, könnte ein Angreifer den Mempool mit gefälschten Transaktionen überschwemmen und das Netzwerk lahmlegen.
Eine übermittelte Transaktion, die genau die gleichen Ein- und Ausgänge wie eine andere unbestätigte Transaktion im Mempool hat, wird vom Bitcoin-Netzwerk abgelehnt (selbst wenn es sich um eine gültige Finanztransaktion handelt). Zum Beispiel könnte ich 1 BTC von A nach B senden, und während die Transaktion unbestätigt ist, weitere 2 BTC von A nach B senden. Solange A 3 BTC hat, um die Überweisungen abzudecken, sind diese Transaktionen konsistent, werden aber konservativ abgelehnt Minenarbeiter.
Sie können dies selbst mit dem Electrum-Wallet mit der Option „Senden von“ sehen. Normalerweise wählt Electrum gültige Eingaben für Sie aus, aber Sie können dies überschreiben. Erstellen Sie eine Transaktion, die die Absender- und Empfängeradressen angibt. Erstellen Sie dann eine weitere Transaktion mit demselben von und bis (der Betrag kann jedoch unterschiedlich sein). Wenn die erste Transaktion noch aussteht, erhalten Sie die folgende Fehlermeldung:
Da die Beträge unterschiedlich sind (23,75 $, 23,89 $ und 24,03 $), können sie unmöglich die gleiche Ausgabe sein.
Nick Odell
Claris
Murch