Abwicklung von Offline-Transaktionen

Anwendungsfall

Mein Anwendungsfall dreht sich um ein Szenario, in dem sowohl Kunde als auch Händler Offline-Geldbörsen mit einem Guthaben besitzen, das in der Blockchain bestätigt wurde.

  1. Lassen Sie uns zunächst sagen, dass die Brieftaschen des Händlers und des Käufers Guthaben von 20 BTC bzw. 10 BTC aufweisen. Diese Salden sind diejenigen, die auf der Blockchain bestätigt werden.
  2. Lassen Sie dann mehrere Transaktionen zwischen dem Händler und dem Käufer stattfinden, sodass der Kontostand immer nur lokal in den Brieftaschen aktualisiert wird.
  3. Alle Transaktionen in 2 oben finden im Offline-Modus statt; dh kein Zugriff auf das Netzwerk. Die Sperrfrist kann mehrere Tage betragen.
  4. Irgendwann in der Zukunft, wenn eine oder beide Wallets online sind, werden alle Offline-Transaktionen in der Blockchain veröffentlicht und bestätigt.

Blockchain-Synchronisierung

An dieser Stelle können zwei Dinge passieren.

Erstens sind die Wallets so sicher, dass alle Aktualisierungen (Gutschriften und Belastungen) lokal erfolgen, ohne dass sie jemals mit der Blockchain „synchronisiert“ werden müssen. Das einzige Mal, dass die Wallets mit der Blockchain synchronisiert werden können, ist das Posten der Transaktionen und ihrer Reihenfolge; und auch um ihre Brieftasche mit den Credits zu aktualisieren, die seit dem letzten Mal, als die Brieftasche online gegangen ist, passiert sind. Oder regulatorischer Druck erfordert die Veröffentlichung von Transaktionsdaten in festgelegten Abständen.

Zweitens werden alle Guthabenaktualisierungen über die Blockchain an den Wallets vorgenommen. Diese Anforderung ist Motivation genug, um nach Netzwerkkonnektivität zu suchen; auch wenn es einmal in der Woche oder weniger ist.

Frage

In beiden Fällen betrachten wir ein Szenario, in dem ein durch Blockchain bestätigter Wert in Offline-Transaktionen verwendet wird, um später online bestätigt zu werden. Wie setzen wir das um?

Analogie

Busbegleiter können Tickets mit einem Offline-Automaten an Fahrgäste ausstellen, die an verschiedenen Stellen während der Fahrt in den Bus einsteigen. Wenn der Bus sein Ziel erreicht, wird der Automat im Depot verwendet, um zu einer Liste der verkauften Fahrkarten und deren gesammelten Beträge zu gelangen. Dies ist also ein Beispiel für eine Offline-Transaktion, bei der Transaktionen "abgerechnet" werden, wenn "Konnektivität" schließlich verfügbar ist.

Gespawnt von: https://bitcoin.stackexchange.com/a/41356/6975

Das klingt sehr nach der Art und Weise, wie das Blitznetzwerk implementiert wird. Lightning.network
Können Sie das bitte näher erläutern? Ich habe ihr PDF hier gelesen - Lightning.network/lightning-network-summary.pdf Mein wichtiger Punkt ist, dass zwei Wallets, deren Salden durch das Ledger bestätigt werden können, Transaktionen ausführen können, ohne sich erneut mit dem Netzwerk verbinden zu müssen. Sobald sie verbunden sind, erhalten/buchen sie ihre Transaktionen rückwirkend im Hauptbuch und aktualisieren auch ihre Brieftaschen. Ich denke, Lightning Network ist eine Art Treuhandkonto.
Was also benötigt wird, ist eine Methode zum direkten Exportieren/Importieren signierter Transaktionen in den Mempool unter Umgehung der Broadcast-Mechanismen. Eine feine Idee. Sie sollten erwägen, dies auf [bitcoin-dev] zu diskutieren oder es unter der Feature-Überschrift auf GitHub zu posten .
Selbst wenn ein Teil beschließt, niemals online zu gehen oder die Transaktionen abzubrechen, bevor sie gesendet werden, muss der Knoten der anderen Partei in der Lage sein, die Transaktion(en) zu behalten und zu senden, ohne sie zuvor fallen gelassen zu haben.
@willtech genau mein Punkt (Über eine Party, die nie online geht.)! Wie meinst du mempoolund Bypass Broadcast?
Mit Bitcoin Core kann ich auch offline eine Transaktion erstellen. Diese Transaktion befindet sich im Mempool. Wenn ein Knoten online ist, sendet er normalerweise Transaktionen an andere Knoten, die auch im Mempool dieser Knoten empfangen werden. Es ist lediglich ein Transaktionsexport erforderlich, der auf der einen Seite Klartext der signierten Transaktion und auf der anderen Seite eine Importfunktion bereitstellt. Jede Partei kann Transaktionen offline austauschen, und wenn eine der Parteien online geht, müssen alle Transaktionen übertragen werden.
Dies bedeutet, dass importierte Transaktionen mit speziellen Regeln in den Mempool aufgenommen werden müssen, damit sie niemals gelöscht werden. Normalerweise wird eine Transaktion nach einer gewissen Zeit aus dem Mempool gelöscht, aber es wird normalerweise erwartet, dass die Transaktion vorher bestätigt wird.
Die Analogie ist schlecht: Die Transaktionen werden abgerechnet , wenn der Kunde das Ticket erhält und der Betreiber bezahlt wird. Transaktionen werden einfach gezählt, wenn die Farebox zum Depot zurückkehrt. Das ist ein großer Unterschied. Erstens gibt es nie einen negativen Saldo, der sich auf den Kunden auswirken könnte, da das Offline-Ledger mit dem Hauptbuch synchronisiert wird, im Gegensatz zu Bounce-Papierschecks. Zweitens gibt es keine Möglichkeit, die Diskrepanz zwischen den im Depot gezählten Tickets und den tatsächlich verkauften Tickets aufzulösen (einige könnten verloren gegangen sein, zerstört worden sein usw.). Außerdem: starker Motivator für Underreporting (Schaffner können die Differenz stehlen).

Antworten (2)

Ich würde sagen, dass hier eine Reihe von Problemen im Spiel sind. Wenn das System "offline" ist, müssen Sie die Salden nur aktualisieren, was zuletzt gespeichert wurde. Die Annahme hier ist, dass beide Quellen vertrauenswürdig sind und das System in der Mitte vertrauenswürdig ist. Könnte es genauso gut zu einem zentralisierten asynchronen System machen. Sie hätten zu diesem Zeitpunkt weitaus mehr Kontrolle und sind weniger auf Tools von Drittanbietern angewiesen.

Das vorgeschlagene System wäre „nett“, aber eine Lösung in der Zwischenzeit wäre die Entwicklung eines internen Ledgers. Sie kennen Partei A und Partei B. Sie kennen ihre Salden und vertrauen ihren Transaktionen. Dieses System geht davon aus, dass Sie auch ihre Schlüssel kennen oder sie bei Bedarf erhalten können.

Basierend auf dem letzten Kontostand speichern Sie Ihre Transaktionen in einer normalen DB. Laufende Bilanz, wiederum basierend auf den neuesten Informationen. Wann immer der Knoten eine Verbindung herstellen kann, aktualisieren Sie die aktuellen Salden (vertrauen, aber verifizieren), überprüfen Sie alle früheren Transaktionen, die Sie möglicherweise eingereicht haben, auf Fehler (Gasmangel, unsachgemäße Transaktion, Geldmangel usw.) und verarbeiten Sie dann die Transaktionen.

Wenn es A -> B- und B -> A-Transaktionen gibt, können Sie die Transaktionssalden intern auflösen (vorausgesetzt, dies ist für das beabsichtigte Recht zulässig). Andernfalls können Sie alle Arten von Logik einsetzen, um jede Transaktion aufzulösen. Zusammenfassen:

  1. Verwenden Sie ein internes System, um zu verfolgen, was was ist. Was wurde bezahlt, was muss bezahlt werden.
  2. Wenn der Knoten eine Verbindung herstellt, erhalten Sie so viele Informationen wie möglich. Aktueller Kontostand, bestätigte Transaktionen aus früheren Einreichungen, Transaktionen, die noch auf Bestätigung warten. Identifizieren Sie Transaktionen, die aus irgendeinem Grund völlig fehlgeschlagen sind (dies setzt eine kurze „Betriebszeit“ für die Verbindung mit dem Knoten voraus. Er würde nicht lange genug verbunden bleiben, um zu sehen, dass Transaktionen den ersten Block erreichen), und sich immer noch im Mempool befinden (nicht genug Gas, um abgeholt werden und veralten) usw.
  3. Prozess basierend auf den obigen Informationen. Transaktionen werden letztendlich abgeschlossen oder nicht abgeschlossen. Ein FIFO kann verwendet werden, um die ältesten Transaktionen aufzulösen, oder wenn die ideale Situation darin besteht, die größte Anzahl von Transaktionen unabhängig vom Alter zuerst aufzulösen, kann eine große Transaktion zurückbleiben, während viele andere Transaktionen erledigt werden.

Dies alles ist eine Frage der Balance zwischen „Vertrauen“ und „Timing“. Wenn ich 2 Brieftaschen besitze und ich der einzige mit den Schlüsseln bin, könnte ich jede Transaktion in einem Backend-System ausführen, das nachverfolgt, was „es sein sollte“, und es auflösen, wann immer ich will.

Der bereitgestellte Vorschlag ist ein Gleichgewicht zwischen verfügbarer Technologie (und Umständen), Sicherheit und Genauigkeit.

"Die Annahme hier ist, dass beide Quellen vertrauenswürdig sind und das System in der Mitte vertrauenswürdig ist." Das Vertrauen kommt von bestätigtem Guthaben auf der Blockchain. Nicht sicher über das System in der Mitte. Der Kern dieser Frage besteht darin, das zentrale System zu eliminieren (wie in dieser Antwort erwähnt).
Meine Antwort und Annahme stammt von „Erstens sind die Wallets so sicher, dass alle Aktualisierungen (Gutschriften und Belastungen) lokal erfolgen, ohne dass sie jemals mit der Blockchain ‚synchronisiert‘ werden müssen.“ Das bedeutet für mich, dass Vertrauen ohne Interaktion aus der Blockchain abgeleitet werden kann. Wenn dies nicht der Fall ist, dann geht das Vertrauen immer auf Null, wenn Sie sich nicht zuerst bei der Kette einreichen und bestätigen können, dass die Transaktion gültig ist, da die Krypto bereits an anderer Stelle ausgegeben werden kann. Daher funktioniert dies nur mit implizitem Vertrauen beider Quellen, dass Gelder nicht ausgegeben werden, während dieses System offline ist.
Warten Sie, ich glaube, ich verstehe Ihren Punkt. Sie sagen, dass die Brieftaschen nicht außerhalb des Knotens interagieren können, daher können sie ihre Geschäfte auf diesem Knoten erledigen, ohne mit dem Rest der Welt synchronisiert zu werden. Fast wie ein internes Hauptbuch. Ich habe dies als eine Möglichkeit für zwei vertrauenswürdige Wallets angegangen, um Transaktionen abzuwickeln und die Blockchain als „endgültigen“ Datensatz zu verwenden. Also ich glaube ich verstehe jetzt was du vorhast. Insgesamt sehe ich aufgrund der Notwendigkeit, zu bestätigen, dass eine Transaktion gültig ist, nicht, wie dies ohne extremes Vertrauen und/oder einen Lösungsprozess von einer zentralen Behörde erreicht werden kann.
"Fast wie ein internes Hauptbuch." Bingo! Ich weiß, das ist sehr anstrengend. Daher die andere Option für Updates, wenn die Konnektivität verfügbar ist.

Dies kann durch die Verwendung von Bluetooth/NFC-Konnektivität mit einer einzigartigen Wallet (muss für beide Seiten gleich sein) erreicht werden, die in der Lage ist, verschlüsselte Offline-Transaktionen zu speichern, ohne sie tatsächlich mit der Blockchain zu synchronisieren. Auf der Zahlungsseite müssen die anfänglichen Mittel jedoch aus dem Kauf und der Synchronisierung mit der Blockchain stammen.

Das Lightning-Netzwerk befindet sich meines Wissens nach noch in der Konzeptphase. Es gibt noch Probleme zu lösen, insbesondere in Bezug auf die mögliche Irreführung des Systems zu der Annahme, dass Sie eine Zahlung von jemandem erhalten haben, der sie NICHT tatsächlich gesendet hat – indem Sie eine (echte) vorherige Transaktion wie bei „Man in the Middle“ wiederholen.

Ich glaube nicht, dass Bitcoin auf Bluetooth läuft oder sogar eine vorhandene Brieftasche dies zulässt