Bitcoin API - Wie erkenne ich neue Zahlungseingänge?

Guten Nachmittag,

Ich habe ein bisschen Probleme, Bitcoin-Zahlungen in meinem Online-Shop zu erhalten. Bisher habe ich Bitcoin in meinem System installiert und eine Reihe von Empfangsadressen erstellt, und jetzt stehe ich vor dem Problem, nach neuen Zahlungen zu suchen.

Ich verwende die folgenden Ressourcen:

Ich möchte einen Cron-Job erstellen, der nach neuen Zahlungen sucht und jede von ihnen in einer relationalen Datenbank speichert, wobei jede Transaktion identifiziert wird durch:

  • Transaktions-ID
  • Absenderadresse
  • Betrag als 64-Bit-Ganzzahl

Alles ist ziemlich einfach, aber ich kann keine effiziente Möglichkeit finden, die neu eingehenden Transaktionen aus meinem Bitcoin-Daemon zu extrahieren. Zum Beispiel kann ich den Saldo jeder Adresse extrahieren, aber ich finde keinen praktikablen Weg, um eine Sammlung eingehender Transaktionen mit allen erforderlichen Daten zu erhalten. Dies schafft ein weiteres Problem, da ich Transaktionen nicht zweimal verarbeiten möchte.

Was ist der beste Weg, dies mit der API zu tun?

Vielen Dank.

Antworten (2)

Wenn Sie eingehende Zahlungen identifizieren möchten, empfiehlt es sich, für jede Anfrage eine neue Empfangsadresse anzulegen. Wenn die Bestätigungen einer Transaktion an eine bestimmte Adresse hoch genug sind, können Sie die Zahlung als bestätigt betrachten.

Die Verwendung der "Absenderadresse" gibt Ihnen keine zuverlässigen Informationen - sie kann nur (eine der) Adressen identifizieren, die zuvor die Kontrolle über die Münzen hatten. Es gibt keine Garantie, dass diese dem Absender der Zahlung entsprechen (es kann beispielsweise eine Webwallet mit gemeinsam genutzten Coins sein).

Das Nichtwiederverwenden von Adressen hat auch andere Vorteile, wie z. B. die Tatsache, dass Bitcoins als Ganzes weniger leicht nachverfolgbar sind.

Hallo Pieter! Für das, was ich gesehen habe, ist die erste Eingabe immer die Absenderadresse. Habe ich recht? Meine App muss eine bestimmte Menge an Bitcoins sowie -als Bestätigung- zurücksenden.
Bitcoin hat keine Absenderadressen. Eine Transaktion verbraucht Coins und erstellt daraus neue Coins - möglicherweise neuen Adressen zugeordnet. Sie können die eingehende Transaktion sehen, überprüfen, welche vorherigen Ausgaben sie verbraucht, überprüfen, welchen Adressen diese zuvor zugewiesen wurden, und die erste davon als „Absender“ verwenden, aber das sagt Ihnen nur eine Adresse, die die Münzen kontrolliert, nicht wer sie gesendet hat sie (was ein Problem darstellt, wenn der Absender beispielsweise eine gemeinsam genutzte Webwallet verwendet). Dies ist eine schlechte Praxis, da es auch die Wiederverwendung von Adressen fördert. Wenn Sie Münzen zurücksenden müssen, fragen Sie nach einer Rückerstattungsadresse.
Hallo Pieter, vielen Dank für deine Antwort. Ich könnte das einfach tun. Als technische Randnotiz, wie macht die Website „Satoshi Dice“ das? Es sendet die Münzen an die richtige Adresse zurück, indem es die erste Eingabe überprüft, richtig?
Ja leider. Dies führt zu viel unnötigem Datenverkehr, Wiederverwendung von Adressen (was die Privatsphäre im System für alle verringert) und funktioniert nicht für Personen, die gemeinsam genutzte Brieftaschen verwenden.
Hallo Pieter! Ich verstehe. Ich mache mir Sorgen, für jede Zahlung eine neue Adresse zu erstellen, da ich keine Möglichkeit gefunden habe, Empfangsadressen zu "löschen", was Müll in meiner Bitcoin-Brieftasche erzeugen würde. Ich bevorzuge es, nur eine Empfangsadresse zu haben, die ständig überprüft wird. Ich sollte dann die Brieftasche mit der listunspent-Funktion auf neue Transaktionen überprüfen. Recht?
hallo flaab, welche methode hast du denn genommen?

Raw-Transaktionen liefern die Informationen über die Eingaben ("Absenderadressen", wie Sie sich darauf beziehen).

Darin befindet sich ListUnspent, das Ihnen alle Transaktions-IDs, Ausgabeadressen ("Empfangsadresse") und Beträge gibt. Daraus können Sie mit Ihrer Liste vergleichen, um festzustellen, welche neu sind.

Hallo Stefan, danke für die Antwort. Tut mir leid, aber ich verstehe das Konzept der nicht ausgegebenen Transaktionen nicht ganz. Was ist eine nicht ausgegebene Transaktion? ;-)