Ausgangspunkt für das Abhören von Bitcoin-Netzwerktransaktionen in Python

Ich möchte ein Python-Skript erstellen, das auf das Bitcoin-Netzwerk hört und einige Adressen überwacht, die in einer MySQL-Datenbank gespeichert sind. Sobald eine Transaktion mit einer dieser Adressen als Ausgabe gesendet wird, soll das Skript eine Funktion ausführen.

Ich muss und will auch nicht die ganze Blockchain speichern. Die privaten Schlüssel befinden sich aus Sicherheitsgründen auch nicht auf derselben Maschine. Auf dieser Maschine gibt es keine Brieftasche, nur eine Liste von Adressen in einer DB.

Im Moment habe ich das mit den Webhooks von blockchain.info umgesetzt und auch mit blocktrail getestet. Es funktioniert, aber es funktioniert nicht schnell genug, um meine Ziele zu erreichen, diese Lösungen sind einfach zu langsam, um praktikabel zu sein. Ich muss sofort benachrichtigt werden.

Ich habe mir mehrere Optionen angesehen, aber keine scheint als guter Ausgangspunkt zu passen. (BitcoinJ scheint am nächsten zu sein, aber es ist in Java) Ich kann nicht glauben, dass es so etwas nicht gibt, ich konnte einfach keines finden.

Also, kannst du mich in die richtige Richtung lenken?

Antworten (3)

Wenn Sie nur Transaktionen im Netzwerk abhören, ohne einen eigenen Validierungsknoten zu haben, haben Sie absolut keine Möglichkeit zu wissen, ob sie legitim sind oder nicht. Sie müssen lokal über einen vollständig validierenden Knoten verfügen, andernfalls können Transaktionen kostenlos hergestellt werden, um überall einen beliebigen Geldbetrag auszugeben. Es gibt keinen Rückgriff, wenn Sie dies falsch verstehen, das ist in erster Linie der Grund, warum niemand irgendeine Art von Validierung in Python implementiert hat, es gibt verschiedene Teile des p2p-Protokolls auf Github , aber es führt genau eine Null-Konsens-Validierung der empfangenen Daten durch .

Der aktuelle masterBitcoin Core (und die kommende Version 0.12 Ende des Jahres) enthalten beide eine ZMQ-Schnittstelle, die Ihnen eine Echtzeitversorgung mit validierten Transaktionen bietet. Ein vollständiger Knoten (beschnitten) kann in nur 2 GB Speicherplatz ausgeführt werden und ist für jemanden, der ein Unternehmen führt, nicht sehr ressourcenintensiv. Es gibt Beispielcode dafür auf github als zmq_sub.py , der Ihnen den Einstieg erleichtern sollte. Beachten Sie jedoch, dass ZMQ keine Garantie für die Zustellbarkeit hat, einige Nachrichten können stillschweigend gelöscht werden, wenn es Verbindungsprobleme gibt.

Es ist wichtig zu bedenken, dass eine unbestätigte Transaktion keine Garantie dafür hat, dass sie bestätigt wird, und dass sie jederzeit ungültig werden kann. Das Akzeptieren von Nullbestätigungen ist äußerst riskant, obwohl das Aktualisieren einer Benutzeroberfläche mit einer Liste unbestätigter Transaktionen ein durchaus vernünftiges Verhalten ist.

So habe ich das Problem noch nicht betrachtet. Es ist sehr wahr, was Sie sagen. Ich brauche validierte Transaktionen und ich brauche mehr als null Bestätigungen, ja. ABER ich versuche zu erreichen, dass ein Kunde mich im Geschäft an unserem POS bezahlen kann. Ich kann meinem Kunden nicht sagen, er soll ein paar Minuten warten, bis ich x Bestätigungen bekomme. Er ist es gewohnt, seine Debit-/Kreditkarte sofort zu überprüfen. Ich denke, ich muss Betrags- und Bestätigungsebenen implementieren, z. B. unter 10 $ Wert = 0 conf, 100 $ = 1, ... und 10.000 $ + = 6 conf.
Sie können dies mit Bitcoin nicht sicher tun, es ist nicht dafür ausgelegt. Wenn Sie etwas anderes vorgeben, können Sie einen unbegrenzten Geldbetrag aus eigener Tasche verlieren. Unternehmen haben Hunderttausende von Dollar durch sehr einfache Angriffe auf Null-Bestätigungs-Transaktionen verloren. Möglicherweise sind in Zukunft mit Zahlungskanälen Soforttransaktionen mit Bitcoin eine Option, aber nicht heute.
OT Danger: Es ist mein Wunsch, Krypto zum Mainstream zu machen. Ich bin Gründer von Ieper bitcoincity www.ieperbitcoinstad.be und an einem ähnlichen Projekt in Kortrijk beteiligt, beides in Belgien. Dazu können wir keinen Altcoin verwenden, der diese Probleme lösen könnte. Alles, was die Leute im Moment wissen, ist Bitcoin. Sie haben irgendwo davon gehört. Wir informieren die Menschen mit unseren Initiativen. Um den Ball ins Rollen zu bringen, wollte ich Ladenbesitzern eine Plattform bieten, um BTC zu akzeptieren und EUR auf ihr Konto einzuzahlen, wie Bitpay und Bitkassa, nur lokal, belgisch, vertrauenswürdig. Ziel ist es, beim Übergang zu helfen. Wie machen sie es dann?
Das längerfristige Ziel meiner Plattform ist, dass Ladenbesitzer sagen: „Hey, ich muss nicht mehr in Eur umrechnen, ich kann meine Lieferanten mit BTC bezahlen.“ Dies könnte dann ein Ökosystem schaffen, das nachhaltig ist. Ich vergleiche BTC mit Internet im Jahr 1993. Die Leute haben sich gefragt, was dieses http oder @ bedeutet und so. Jetzt sind wir die Pioniere der Finanzrevolution. Revolutionen sind riskant ;-) Vor (kalkulierten) Risiken habe ich mich nie gescheut. Ich habe nicht vor, bankrott zu gehen, aber völlig sicher ist sowieso eine Illusion im Geschäftsleben. Vielen Dank für Ihren willkommenen Beitrag, Sir. Ich weiß das wirklich zu schätzen.
Nobility löst jedoch keine technischen Probleme

Am Ende entschied ich mich für die Websocket-API von Blockchain in Kombination mit dem Python-Websocket-Client von Hiroki Ohtani . Dieser Mechanismus ist wirklich augenblicklich und scheint stabil und brauchbar zu sein. Ich habe jedoch immer noch Bedenken, meine Eier in einen Korb legen zu müssen. Also überprüfe ich es noch einmal und verwende auch die Webhooks-API von Blocktrail .

Dieses System bietet mir immer noch keine 100% narrensichere Sicherheit, aber ich kann mit diesem Setup leben, bis ein besseres System kommt oder ich etwas Besseres machen kann.

Ich danke Ihnen allen für Ihre Mithilfe und hoffe, dass diese Antwort als Idee/Basis für Ihre eigenen Bitcoin-Projekte dienen kann!

Wenn Sie eine Rohkopie der Transaktion haben, können Sie sie immer wieder neu veröffentlichen, bis sie bestätigt wird. Selbst bei sehr niedrigen Transaktionsgebühren sollte es am Ende bestätigt werden (kann aber lange dauern)

Aber wie findet man heraus, ob es bestätigt ist? Und in einem ähnlichen Zusammenhang, wenn es nicht bestätigt ist, woher wissen Sie, ob es gültig ist?