Wie kann ich sicherstellen, dass Bitcoin keine ungenutzten Ausgaben für eine bestimmte Adresse verwendet?

Mit RPC-Aufrufen an Bitcoin aus separaten (Python-)Skripten bin ich:

  • getnewaddress aufrufen, um ein neues Schlüsselpaar für eine „spezielle“ Adresse einzurichten, die einem bestimmten Konto zugewiesen ist (nennen wir dies „specialAccount“)

  • Erstellen von Rohtransaktionen (außerhalb von Bitcoin), die Ausgaben an diese spezielle Adresse ausgeben, und dann Aufrufen von Bitcoind zum Signieren des Sendens

Darüber hinaus ist es möglich, dass Bitcoin auch direkt aufgerufen wird, um Zahlungen zu leisten oder was auch immer.

Wie kann ich absolut sicher sein, dass Bitcoin keine Ausgaben an meine spezielle Adresse verbraucht, außer wenn Ausgaben an diese Adresse in signrawtransaction signiert werden?

Wir können davon ausgehen, dass es keine Anrufe gibt, die explizit von „specialAccount“ ausgegeben werden, aber das Problem ist, dass es Bitcoin nach meinem Verständnis möglich ist, beliebige nicht ausgegebene Ausgaben zum Bezahlen von Transaktionsgebühren zu leihen. (Siehe zum Beispiel diese Ausgabe und auch diese .)

Gibt es eine Möglichkeit für mich, die spezielle Adresse zu sperren und zu verhindern, dass diese zur Zahlung von Transaktionsgebühren für andere Konten verwendet wird, oder um Bitcoin anderweitig zum Signieren von Rohtransaktionen zu verwenden, die Ausgaben an diese Adresse verwenden, ohne den öffentlichen Schlüssel für die zu erstellen Adresse allgemeiner verfügbar in Bitcoin?

Antworten (1)

Sie können lockunspent verwenden , um (nur im Speicher) nicht ausgegebene Eingaben zu sperren, die von Transaktionen erstellt wurden, deren mindestens eine Ausgabe auf Ihre "spezielle Adresse" verwies.

Es scheint, als ob es hier ein paar Race-Bedingungen geben kann, eine zwischen nicht verbrauchter Erstellung und Sperrung und eine andere zwischen Entsperrung und Signierung? Und dann, wenn diese Sperre nicht über Serverstopps und -starts hinweg bestehen bleibt, dann ist das auch ein Problem.
Sie können jederzeit "Sonderadressen" in Ihrer DB speichern und sie dann bitcoindbeim Start wieder in Ihren Client laden und sperren, bevor etwas anderes passiert. Einmal gesperrt, können sie nicht ausgegeben werden.