Was ist ein "unsicherer Transaktionstyp", wie von Bitcoin Wallet für Android erwähnt?

Ich laufe Bitcoin Core v0.11.0.0-gd26f951 (64-bit)zu Hause auf Ubuntu und habe das Bitcoin Wallet for Androidauf meinem Telefon installiert. Ich habe zwei Transaktionen von zu Hause an mein Telefon gesendet: First , Second . Einer hatte eine sehr niedrige Gebühr und dauerte Tage, also schickte ich einen anderen mit einer etwas höheren Gebühr, der nur wenige Minuten dauerte. Beide sind aber angekommen, haben mittlerweile fast zweitausend Bestätigungen und zeigen in der App grün an.

Die Bitcoin-App sagt jetzt (ich habe es heute zum ersten Mal bemerkt und ich glaube nicht, dass sie es anfangs gesagt hat).

 This payment was delayed because the sender used an insecure transaction type.

unter beiden Transaktionen. Was bedeutet das?

Ich habe den Ausdruck gegoogelt und genau einen Treffer erhalten, in einem Ressourcenpaket, das Teil des Codes für das Bitcoin-Wallet-Projekt auf github ist, das anscheinend die Android-App ist. Der entsprechende Schlüssel ist transaction_row_message_received_rbf, der überhaupt keine Treffer generierte.

Kann mir jemand sagen, was dieser „unsichere Transaktionstyp“ sein könnte und warum Bitcoin-Qt ihn verwenden würde? Muss ich das verhindern und wenn ja wie?

Ich habe Frage und Antwort bearbeitet, um alle Informationen aus den zahlreichen Kommentaren aufzunehmen, und die Kommentare entfernt, um die visuelle Unordnung zu reduzieren.
Ich habe mich mit dem Betreuer der Bitcoin -Brieftasche für Android und Bitcoinj in Kontakt gemacht. Um zu bestätigen, sind die beiden Transaktionen, die Sie hier in einem Kommentar gepostet haben, und ich habe in Ihre Frage bearbeitet, die tatsächlich als "unsicherer Transaktionstyp" auftauchen? Der Betreuer konnte das Problem nicht reproduzieren, daher überprüfen wir nur unsere Annahmen.
@Murch Ich glaube das, obwohl ich den Prozess der Bestimmung der Transaktions -ID leicht mysteriös finde. Das Bitcoin Wallet für Android zeigt sie nicht an, also habe ich einfach auf blockchain.info nach der Zieladresse gesucht. Angenommen, Bitcoin Core hat die IDs protokolliert, die ich für Sie überprüfen kann, wenn ich nach Hause komme.
Das wäre wunderbar. Wenn du Hilfe brauchst, bitte einfach hier posten. Ich könnte helfen, wenn ich später zurückkomme.
@Murch Ich habe überprüft, dass diese Transaktions-IDs tatsächlich korrekt sind, obwohl Bitcoin Core an beide ein "-000" anhängt, ich weiß nicht, was das bedeutet. Und hier ist ein Screenshot der App mit der Nachricht: drive.google.com/file/d/0B3HeHhx785UOWmdSdUo0SHpIcFU/…
Danke, ich habe Ihre Informationen und den Screenshot zum Fehlerbericht hinzugefügt.
@PepijnSchmitz Hallo Pepijn, ich arbeite gerade an dem Fehler, den du erlebst. Könnten Sie mir einen Gefallen tun und die Funktion zum Melden von Fehlern in der App (Optionen > Einstellungen > Diagnose > Problem melden) verwenden, um uns den Speicherauszug Ihrer Brieftasche zu senden?
@AndreasSchildbach Klar. Wohin soll ich es schicken?
An die vorausgefüllte E-Mail-Adresse.
@AndreasSchildbach Fertig!
Dank Ihres Dumps konnte ich das Problem reproduzieren und beheben. Es lag nicht daran, wie die Daten aus dem P2P-Netzwerk geparst wurden, sondern es gab einen Fehler in der Protobuf-Serialisierung des Sequenznummernfelds. Eine aktualisierte Version von Bitcoin Wallet (v4.49) wird eingeführt. Die Warteschlange kann durch Herunterladen von github.com/bitcoin-wallet/bitcoin-wallet/releases übersprungen werden
@AndreasSchildbach Danke! Behebt die Aktualisierung auch die Transaktionen, die sich bereits in der Brieftasche befinden, oder nur zukünftige?
@PepijnSchmitz Es sollte auch Ihre aktuelle Brieftasche reparieren. Es wäre schön, wenn Sie bestätigen könnten, dass dies tatsächlich der Fall ist.
@AndreasSchildbach Ich habe die neue Version der App installiert und die Warnungen wurden tatsächlich behoben! Vielen Dank!

Antworten (1)

TL;DR:

Es scheint, dass Transaktionen Bitcoin Wallet for Androidfälschlicherweise als auf einen Fehler in zurückzuführen sind . Das Problem wurde gemeldet . Sie müssen nichts tun.nLockTimeOptInRBFbitcoinj


Anscheinend hat Bitcoin Wallet für Android Ihre Transaktion als OptInRBF(wie durch den gefundenen Code angegeben) erkannt. Die Warnung, die Sie sehen, wurde der App erst am 10. März 2016 hinzugefügt .

Was ist OptInRBF?

OptInRBFist die Abkürzung für „Opt-in replace-by-fee“, das Bitcoin Core in 0.12.0 hinzugefügt wurde. Die neue Version ermöglicht Bitcoin Core den Empfang und die korrekte Behandlung von Replace-by-Fee-Transaktionen. Bitcoin Core kann jedoch noch keine rbf-Transaktionen erstellen . Wallets müssen sich "anmelden", um sie zu senden.

Replace-by-fee ist ein Flag, das auf Transaktionen gesetzt werden kann, um mitzuteilen, dass man die Transaktion ändern möchte, bevor sie in einen Block aufgenommen wird . Daher sollten solche Transaktionen nicht als zuverlässig angesehen werden, bis sie ihre erste Bestätigung erhalten. Nachdem sie in einen Block aufgenommen wurden, sind sie genauso sicher wie jede andere Transaktion.
Mining-Pools, die rbf unterstützen, erlauben es einer neueren Version der Transaktion, die ältere zu ersetzen, insbesondere wenn die neuere Transaktion eine höhere Gebühr zahlt. Dies ist beispielsweise nützlich, um die Gebühr für eine Transaktion zu erhöhen, wenn sie feststeckt, oder um mehrere Transaktionen zu einer zu kombinieren, wenn Sie sich entscheiden, eine weitere Transaktion zu senden, bevor eine vorherige bestätigt wird.

Woher kommt die Warnung?

Wenn man sich die Rohdaten der ersten Transaktion ansieht , stellt sich heraus, dass die Anzahl der Transaktionen sequencetatsächlich unter dem Maximalwert liegt: Es zeigt, 0xFEFFFFFFwährend das Maximum wäre 0xFFFFFFFF. Die Sequenz mit einem Ean zweiter Stelle ist ein vorzeichenloses Little Endian, lang für "Eins unter dem Maximum". Dies ist der Ablauf einer nLockTimeTransaktion .

OptInRBFSequenzen haben, die kleiner als die nLockTimeSequenz sind, dh sequence < MAX - 1. Daher scheint entweder bitcoinjoder Transaktionen fälschlicherweise als zu Bitcoin Wallet for Androidklassifizieren . Das Problem ist, dass seit Bitcoin Core 0.11 alle Transaktionen eine Sequenz haben.nLockTimeOptInRBFnLockTime

Auf den ersten Blick scheint der bitcoinjCode , der prüft, ob eine Transaktion in OptInRBFOrdnung ist:

public boolean isOptInFullRBF() {
    return sequence < NO_SEQUENCE - 1;
}

Java verwendet jedoch nativ das Big-Endian-Format anstelle des Little-Endian-Formats.
<speculation>Daher kann es ein Problem geben, bei NO_SEQUENCE - 1dem sich möglicherweise auflösen lässt, 0xFFFFFFFEund die als Big Endian gelesene nLockTimeSequenz 0xFEFFFFFFwürde viel kleiner erscheinen und könnte daher als OptInRBF.</speculation> 1 bezeichnet werden

Ich habe das Problem gemeldet und versuche, einen Fehler zu beheben .


1 Es stellt sich heraus, dass meine Spekulation falsch war. BitcoinJund Bitcoin Wallet for Androidverarbeiten Sie Transaktionen mit der nLockTimeSequenz fine und parsen Sie sie nach Bedarf im Little-Endian-Format. Bisher konnte der Betreuer das beschriebene Problem mit den bereitgestellten Transaktionen nicht reproduzieren (stattdessen wurden sie ohne Warnung korrekt angezeigt). Daher ist der Grund für das Erscheinen der Warnung noch unbekannt.

Vielen Dank an Pepijn Schmitz, Gregory Sanders, Andreas Schildbach und Wladimir van der Laan für ihre Hilfe bei der Lösung.

Nur um dies zu verdeutlichen, bitcoinj (und Bitcoin Wallet) verwenden tatsächlich Little Endian, um dieses Feld zu analysieren.
@AndreasSchildbach: Danke, ich habe meine Antwort aktualisiert, um das aktuelle Verständnis des Problems widerzuspiegeln. Tut mir leid, dass ich zu diesem Schluss komme, es schien einfach eine so gute Erklärung zu sein. ;)
Gibt es eine Erklärung, warum die Nachricht bei einer Multisig-Transaktion angezeigt wird, die OptInRBF, aber nicht nLocktime verwendet, auch nach> 10 Bestätigungen? Dies ist die neueste Version von Bitcoin Wallet für Android (v5.25). Ich frage hier, weil es einer der wenigen vernünftigen Treffer bei der Suche nach der Nachricht ist und möglicherweise verwandt ist.
Hallo @AronVanAmmers, das klingt interessant. Könnten Sie bitte eine neue Frage erstellen, damit wir Ihr Thema richtig ansprechen können? Wenn Sie bitte so viele Informationen wie möglich bereitstellen können, z. B. einen Link zur Transaktion in einem Blockexplorer, wäre das großartig.