Wie kann das Risiko minimiert werden, wenn Zahlungen ohne Bestätigung akzeptiert werden?

Ich versuche, eine Möglichkeit einzurichten, Bitcoin-Zahlungen in realen Situationen zu akzeptieren, in denen das Warten auf Bestätigungen normalerweise keine Option ist. Ich verstehe, dass dies nie 100% risikofrei ist (insbesondere mit Mist wie bitundo.com), ich möchte nur das Risiko minimieren.

Ich habe eine Bitcoin Core-Brieftasche mit einer Reihe unbenutzter Adressen. Ich zeige dem Kunden eine Adresse, er schickt das Geld, und jetzt kann ich ein paar Dinge tun: (alles automatisiert, dh durch eine Art Anwendung oder Skript)

  1. Überprüfen Sie, ob die (unbestätigte) Transaktion auf meinem eigenen Knoten / in meiner Brieftasche erscheint
  2. Überprüfen Sie, ob die (unbestätigte) Transaktion auf Websites erscheint, die Online-APIs wie blockr.io und blockchain.info verwenden
  3. Überprüfen Sie, ob ich auf meinen Node- oder API-Sites keine ähnliche Transaktion (von derselben Eingabeadresse, aber zu einer anderen Ausgabeadresse, dh einen doppelten Ausgabenversuch) sehe.

Wenn 1 oder 2 in Ordnung sind und 3 beispielsweise fünf bis zehn Sekunden lang nicht auftritt, wie (un)sicher ist die Transaktion zu diesem Zeitpunkt?

Mir ist aufgefallen, dass Zahlungsanbieter wie Bitpay und Coinbase Zahlungen sofort akzeptieren können. Wie unterscheiden sie legitime Transaktionen von Doppelausgabeversuchen?

Ich versuche gerade, das gleiche Problem zu lösen, indem ich mich mit so vielen Knoten wie möglich verbinde, um einen möglichen Doppelverbrauch in wenigen Sekunden zu erkennen. Nur um Ihre Annahme ein wenig zu korrigieren: 3.) Eine Transaktion, die von derselben Eingangsadresse zu einer anderen Ausgangsadresse kommt, bedeutet nicht unbedingt doppelte Ausgaben, wenn sie unterschiedliche TXOUTs ausgibt. Daher sollten Sie nur nach Transaktionen suchen, die denselben TXOUT ausgeben, ihn aber an eine andere Adresse senden.
Für den Verkauf einer Tasse Kaffee, einer Limonade oder Sandwiches - ich glaube, andere Coins (wie Ripple, 42coin oder sogar Dogecoin) wären dafür besser geeignet: Ich kann mir sehr gut vorstellen, dass Leute bis zu 2 Minuten warten, aber nicht mehr An diesem Punkt wird Ihr Risiko enorm reduziert.
@JoePineda Stellen wir uns das für einen Moment im Detail vor: Sie stehen in Ihrem Lieblingscafé in der Schlange, um eine Tasse Kaffee und Donuts (oder ähnliches) zu bekommen. Hinter dir warten fünf weitere Leute. Jeder will sich nur etwas schnappen und zur Arbeit eilen. 10 Minuten sind sicherlich ein No-Go, aber selbst zwei Minuten da zu stehen und zuzusehen, wie ein halbes Dutzend Leute ihre Sachen packen und ihren Morgen verbringen, sind inakzeptabel.
Guter Punkt! Ich selbst bin bereit, bis zu ca. 2 Minuten am Schalter zu warten - sobald ich vor dem Sachbearbeiter stehe. Aber ich bin nicht bereit, insgesamt mehr als 3 Minuten damit zu verbringen, die in der Schlange plus am Angestellten zusammenzufassen, und ich denke, die meisten Leute würden es auch nicht tun :(
@JoePineda, 10 Sekunden ist die Toleranzschwelle. Vergessen Sie nicht, dass es nicht nur 10 Sekunden/Kunde sind, sondern zusätzliche 10 Sekunden/Kunde, zusätzlich zu den 20 Sekunden, die wir bereits warten müssen, während der Kassierer den Artikel scannt.
@RocketNuts, was ist falsch an BitUndo?
@Pacerier enthält im Block eine Transaktion mit höherer Gebühr, nicht die erste. Das macht sie zu einem guten Verarbeiter für doppelte Ausgaben.

Antworten (2)

Unter http://www.cryptocoinsnews.com/news/the-mathematically-secure-way-to-accept-zero-confirmation-transactions/2014/02/13 finden Sie hier, was Dienste wie MyCelium und BitPay möglicherweise tun:

Genauer gesagt, mit jeder weiteren Sekunde wird ein größerer Prozentsatz aktiver Bitcoin-Knoten die ursprüngliche Transaktion gehört haben und jeder, der die Blockchain betrachtet, kann sich zunehmend sicher sein, dass die Transaktion im nächsten Block abgebaut wird und eine Bestätigung erhält, dann zwei und so weiter und so weiter.

Das bedeutet, dass jede Bitcoin-Transaktion ohne Bestätigungen mit einem mathematisch abgeleiteten Konfidenzniveau akzeptiert werden kann, das manche als „Transaktionsvertrauen“ bezeichnen. Dieses Transaktionsvertrauensmaß versichert uns, dass, selbst wenn eine doppelte Ausgabe versucht würde, die ursprüngliche und korrekte Transaktion bereits zu stark propagiert wird, um überholt zu werden.

Aber wie Sie treffend bemerkt haben, gibt es keine 100% risikofreie Möglichkeit, dies zu tun, wenn Sie dem Absender nicht vertrauen. Deshalb existiert die Blockchain überhaupt.

Ein Risiko, sich auf „Transaktionsvertrauen“ zu verlassen, besteht darin, dass es nichts im Netzwerk gibt, das jemanden daran hindert, eine Transaktion mit doppelten Ausgaben direkt an die Miner zu senden, ohne sie an das gesamte Netzwerk zu senden, unter der Vereinbarung, dass diese Miner blockiert werden find sollte ihr geheimes anstelle desjenigen auswählen, das sie an das Netzwerk senden. Dies ist ein Risiko, egal wie viel vom Netzwerk die öffentliche Transaktion sieht, was einer der Gründe ist, warum Sie einer Transaktion, die es nie in einen Block geschafft hat, nicht 100% vertrauen können.

Insbesondere wenn Sie eine 0-Bestätigungs-Transaktion akzeptieren, die Eingaben von anderen 0-Bestätigungs-Transaktionen ausgibt, ist das Risiko viel größer, da entweder die Transaktion direkt an Sie oder eine ihrer 0-Bestätigungs-Eingaben für Sie doppelt ausgegeben werden könnte Nachteil.

Ehrlich gesagt sind auch 1-Bestätigungs-Transaktionen nicht risikofrei. Selbst unter normalen Umständen verwaisen Blöcke, was ein Fenster für doppelte Ausgaben schaffen könnte, da der Gewinnerzweig die Transaktionen möglicherweise nicht so löst, wie es der Verliererzweig getan hat.

Wenn Sie es ernst meinen mit dem Versuch, die Risiken der Annahme von BTC in „realen“ Situationen (auch bekannt als Ziegel und Mörtel), in denen Geschwindigkeit wichtig ist, zu minimieren, kann ich mir keine bessere Idee vorstellen, als mit einem Dienst wie zu gehen Coinbase (keine Zugehörigkeit). Diese Dienste arbeiten in einem Umfang, in dem sie es sich leisten können, Verluste durch doppelte Ausgaben zu verkraften, was selten sein sollte, sodass Sie sich darüber keine Sorgen machen müssen. Derzeit haben sie einen wirtschaftlichen Anreiz, die Akzeptanz der Währung zu erhöhen, indem sie für Händler, die sich dafür entscheiden, sehr attraktiv sind.

Danke für die ausführliche Antwort. Sind Miner in der Regel keine normalen Knoten in dem Sinne, dass sie Transaktionen nicht an den Rest des Netzwerks weiterleiten oder weitergeben? Ich meine, wenn ich absichtlich ein „geheimes“ TX an einen Miner-Knoten senden würde (in der Hoffnung, dass es in die Blockchain aufgenommen wird), würde es dann nicht auch an andere Knoten weitergeleitet werden, wodurch seine Anwesenheit im Netzwerk erkannt werden könnte?
Das ist eine wichtige Unterscheidung, die man machen muss, und sie ist subtil. Ja, Bergleute betreiben normalerweise "normale" Knoten, aber denken Sie daran, dass Bergleute normalerweise nur Dinge tun, um dem Netzwerk zu helfen, weil es ihren eigenen Interessen dient. Wenn Sie mit Minern eine Vereinbarung getroffen haben, ihnen einen Teil Ihrer Double-Spend-Gewinne zu zahlen, dann ist es zu ihrem Vorteil, Ihre Transaktionen geheim zu halten, bis sie in die Blockchain gelangen. Sie kontrollieren die Software, die sie ausführen, und sie ist Open Source. Verdammt, Bergleute führen bereits modifizierte Node-Software aus. Eligius implementiert CPFP, das nicht in der Standardknotensoftware enthalten ist.
Wäre es möglich, sich mit solchen Mining-Pools (oder allen großen Mining-Pools) zu verbinden, nur um zu sehen, welche Transaktionen enthalten sein sollen?
Nicht wirklich. Wenn Miner Anreize erhalten, einige Transaktionen heimlich gegenüber anderen zu bevorzugen, dann haben sie keinen Grund, diese Informationen mit jemand anderem als der Person zu teilen, die sie beauftragt hat, die Double-Spend-Transaktion einzuschließen. Selbst wenn sie es täten, hätten Sie keinen Grund, ihnen zu vertrauen.
Sicher, aber das würde nur für einzelne Miner gelten, oder? Die haben im Allgemeinen eine sehr geringe Chance, den nächsten Block tatsächlich zu minen, in dem sie versuchen, einen geheimen Tx aufzunehmen (auf Kosten eines öffentlichen Tx, der nicht bestätigt wird). Aber wenn ich die Transaktionsdaten überprüfe, die von Pools abgebaut werden, würde ich sagen, dass dies erkennbar sein sollte ...? Oder gibt es eine Möglichkeit, gepooltes oder verteiltes Mining durchzuführen (dh viele Leute versuchen gleichzeitig, eine Liste von Transaktionen zu hashen, einschließlich einer geheimen tx), ohne die geheime tx tatsächlich preiszugeben?
Das spricht für einen guten Punkt. Während Pools für die meisten Zwecke im Allgemeinen nur als „ein großer Miner“ fungieren, trifft dies nicht unbedingt zu, wenn es darum geht, eine bestimmte Transaktion geheim zu halten. Ohne sich zu sehr mit diesen Protokollen befasst zu haben, können Sie leicht eine Transaktion in den Daten verstecken, die für Stratum oder die zunehmend veralteten Getwork-Protokolle verwendet werden, aber mit getblocktemplate sollte es dem Pool unmöglich sein, dies im Geheimen zu tun (obwohl einzelne Miner kann das alleine machen)
@JoeAmenta, aber das Delegieren der Aufgabe an einen Dritten schiebt das Problem einfach um den Tisch. Die Frage ist immer noch gültig: Wie minimiert der Dritte das Risiko, wenn er Nullbestätigungszahlungen akzeptiert?
@Pacerier, der Drittanbieter hat eine Reihe von Optionen bei hohem Volumen, solange es sein Geschäft nicht tötet. Wenn diese Partei feststellt, dass durchschnittlich 1 % des gesamten Transaktionsvolumens durch doppelte Ausgaben verloren geht, kann sie eine Pauschalgebühr von 1 % erheben, um die Verluste auszugleichen. Wenn sich ein bestimmter Händler als problematisch erweist, können sie diesen Händler einfach fallen lassen (oder eine höhere Gebühr erheben, wenn es nur die Art des Geschäfts des Händlers ist).
@JoeAmenta, gute Idee zu "dynamischen Gebühren".
Es ist wichtig zu beachten, dass Coinbase Ihnen nur dann Schutz vor doppelten Ausgaben bietet, wenn Sie den kostenpflichtigen „Instant-Exchange“-Service nutzen, der Zahlungen sofort gegen Fiat auszahlt. Wenn Sie die Bitcoin in Ihrer Coinbase-Wallet aufbewahren, wird eine solche Garantie nicht gewährt. (Ihre Dokumentation ist diesbezüglich nicht ganz klar, aber ich habe diese Klarstellung gerade von einem Support-Mitarbeiter von Coinbase erhalten.)
Diese Antwort sollte auf jeden Fall das Dokument Have a Snack, Pay with Bitcoins verlinken/erwähnen , googeln Sie es

Zuallererst und am wichtigsten: Machen Sie nur Geschäfte mit Menschen, denen Sie vertrauen. Das bedeutet nicht, dass Sie sie schon lange kennen müssen, sondern nur, dass die Person, die mit Ihnen Geschäfte macht, eher ihren Gewinn optimiert, wenn er Sie nicht betrügt.

Ich bin mir nicht sicher, ob es wahrscheinlich ist, dass Sie nach einer Wartezeit von maximal Sekunden erfolgreich einen Double-Spend-Angriff starten, aber was Sie tun können, ist, eine Software zu schreiben, die sich mit einigen der wichtigsten Mining-Pools verbindet und wartet, wenn Ihre Transaktion (oder ein böswilliger Double-Spend-Versuch). Transaktion) auftaucht. Es wäre großartig, wenn Mining-Pools eine Web-API hätten, um zu prüfen, welche Transaktionen wahrscheinlich in ihren nächsten Block aufgenommen werden, aber leider tun sie das nicht. Das bedeutet, dass Sie eine solche Anwendung selbst programmieren müssten (ich kenne keine vorhandenen Bibliotheken mit dieser Funktionalität, aber kläre mich auf, wenn es sie gibt).

Schließlich konnte man immer mit grünen Adressen arbeiten . Wenn Ihr Partner damit einverstanden ist, einem Dritten zu vertrauen, können Transaktionen sofort freigegeben werden.

Guter Vorschlag zur Verbindung mit Mining-Pools. Geschäfte nur mit Vertrauenspersonen oder grüne Adressen sind leider keine Option. Es soll Zahlungen von zufälligen Kunden (dh völlig Fremden) akzeptieren.
Dann gibt es keine Lösung, außer sich mit möglichst vielen Nodes und insbesondere mit Mining-Pools zu verbinden. Verbinden Sie sich einfach als Dummy-Knoten und holen Sie sich den Block, an dem sie arbeiten. AFAIS, der Pool kann Sie auf keinen Fall betrügen, wenn er dezentral und offen ist, wie P2Pool.