Stellen Sie sich eine Blitzzahlung vor: Alice möchte Dave 100 Sat über zwei Zwischenstationen zahlen: Alice – Bob – Charlie – Dave. Sowohl Bob als auch Charlie werben mit einer Gebühr von 2 Sat. Alice sendet 104 sat an Bob und erwartet, dass er 102 sat an Charlie weiterleitet. Aber Bob leitet nur 101 Sat weiter. Dann hat Charlie die Wahl: entweder die Zahlung fehlschlagen und nichts bekommen, oder sie für nur 1 Sat weiterleiten. Es scheint, dass die wirtschaftlich vernünftige Wahl ist, trotzdem weiterzuleiten. Wenn das stimmt, warum nehmen First Hops dann nicht immer fast alle Gebühren für sich selbst?
Aufgrund des Onion-Routing weiß Bob natürlich nicht, ob Charlie der letzte Hop ist. Wenn Charlie der endgültige Empfänger ist und er nicht die erwartete Summe erhält, wird er das Urbild nicht preisgeben, und Bob wird nichts bekommen. Aber können solche Strategien über viele Versuche hinweg im Durchschnitt profitabel sein?
Sicher, es könnte etwas Spieltheorie im Spiel sein, aber zwei Dinge sprechen dagegen:
Bei jedem Hop entlang der Route wird der volle Betrag einschließlich Gebühren mit einem neuen HTLC gesendet, und im Zwiebelpaket wird ihnen mitgeteilt, wie viel davon an den nächsten Hop weitergeleitet werden soll. fee_insufficient
Sie können daher feststellen, ob für die von ihnen angekündigten Gebühren für ihren eigenen Knoten genug bereitgestellt wird, und wenn die Gebühr nicht ausreicht, können sie den HTLC einfach entfernen, ohne ihn weiterzuleiten, indem sie einen Fehlercode an den vorherigen Knoten in der Route zurücksenden.
Es gibt eine mögliche Rennbedingung, bei der sich die Gebühren geändert haben, sodass die neueste channel_update
zusammen mit dem Fehler weitergeleitet wird fee_insufficient
, sodass der Zahler die Route mit aktualisierten Gebühren erneut versuchen kann.
Jeder HTLC ist bedingt durch den Empfang von payment_preimage
oder Zeitüberschreitung. Derzeit wird dasselbe Preimage für jeden Hop entlang der Route verwendet, was die Zahlung von Alice an Bob davon abhängig macht, dass Dave das Preimage an Charlie freigibt, der es dann an Bob weiterleiten kann, der es dann an Alice weiterleitet.
Wenn der vorletzte Knoten versucht, weniger als den beabsichtigten Betrag an das Zahlungsziel weiterzuleiten, antwortet das Zahlungsziel mit dem Fehlercode incorrect_or_unknown_payment_details
, wodurch auch der HTLC entfernt wird. Jeder Knoten entlang der Route leitet dann denselben Fehler weiter und löscht jeden HTLC, und kein Geld wechselt den Besitzer.
Zusammenfassend, was ich in anderen Antworten und anderswo gelesen habe: Ja, ein Knoten kann dies technisch tun, aber dies wäre wahrscheinlich nicht wirtschaftlich, da bei aktuellen Implementierungen eine Zahlung fehlschlägt, ist der Unterschied zwischen "eingehenden" und "ausgehenden" Beträgen geringer als ihre angekündigte Gebühr. Unter der Annahme, dass der Großteil des Netzwerks nicht bösartige Software ausführt, wird die Zahlung mit modifizierten Gebühren wahrscheinlich fehlschlagen. Die genaue wirtschaftliche Analyse dieses Angriffs (und des damit verbundenen DoS-Angriffs) wurde jedoch nicht durchgeführt (AFAIK).
Sergei Tichomirow
René Pickhardt
René Pickhardt
Ugam Kamat