Überwachen Sie Nicht-Wallet-Bitcoin-Adressen auf neue Transaktionen

Dies ist die übliche Checkout-Funktion. Zeigt dem Benutzer die Adresse und muss sie n Minuten lang auf neue Transaktionen überwachen. Adressen sind nicht für jede Zahlung eindeutig.

Optional: Es wäre gut, einen Listener für Transaktionen mit einem bestimmten eingehenden Betrag zu haben, aber dies ist optional.

blockchain.info hat etwas Ähnliches, aber ich möchte es mit lokalem bitcoin-qt aus der .Net-Anwendung.

*Update: Dies sollte für Nicht-Wallet-Adressen/Transaktionen durchgeführt werden.

Antworten (5)

Bitcoin-qt hat mehrere Einschränkungen, wenn es um diese Art von Dingen geht. Es gibt nur zwei Möglichkeiten, dies zu tun.

  1. Verwenden Sie den RPC-Aufruf listunspents, um den Saldo für eine bestimmte Adresse zu überwachen und den Gesamtsaldo zu berechnen. Lösen Sie dann Ihren Anruf im Backend aus Ihrer .net-Anwendung aus.

  2. Verwenden Sie die externe Wallet-Notify-Bitcoind-Option, die Transaktionsdaten über ein Skript an Ihren .net-Prozess sendet, analysieren Sie das Ergebnis, um die Zahlung zu bestimmen. Dies kann auf Websites mit hohem Volumen zu Problemen führen, da es externe Prozesse per Wallet-Benachrichtigung hervorruft.

Schließlich können Sie diese Methode nur verwenden, um mit Adressen zu interagieren, die für die lokale Bitcoin registriert sind. Entweder Adressen, die es steuert, oder die Sie manuell geladen haben.

Adressen sind nicht von mir. Benutzer, die verkaufen, geben ihre Adressen online ein. Was bedeutet „bei der lokalen Bitcoin registriert“? Kann ich es ohne privaten Schlüssel tun?
Ich glaube nicht. Am besten verwenden Sie einen Dienst, der dies bereits tut, es gibt mehrere API-Dienste, die genau diesen Anwendungsfall ansprechen. Wenn Sie beliebige Adressen überwachen möchten, benötigen Sie zusätzliche Software. Zum Beispiel könnte der nodejs-Bitcore von Bitpay verwendet werden, um eine Verbindung zu Bitcoin herzustellen und eingehende 0-Bestätigungstransaktionen nach Adressen zu scannen, an denen Sie interessiert sind. Bitcoind wird dies nicht standardmäßig tun.
Wenn es also Dienste gibt, die Adressen überwachen können, ist dies möglich. Und ich möchte wissen, wie sie implementiert haben, um zu sehen, ob es sich lohnt, eine eigene Implementierung zu haben oder sie zu verwenden.
Wie gesagt, sie tun dies nicht mit Standard-Bitcoin. Sie modifizieren entweder Bitcoin, um Transaktionsinformationen an eine externe Quelle zu senden, oder sie verwenden ein Projekt wie Bitcore, um auf diese Informationen im Netzwerk zuzugreifen, und schreiben dann ihre eigenen Bindungen / Software.
Erfordert die erste Option eine Abfrage?
Ja, die erste Option wäre eine Umfrage.

Um bestimmte Empfangsadressen für eingehende Transaktionen über die RPC-API zu überwachen, sollten Sie die listreceivedbyaddressMethode verwenden. Das Hinzufügen dieser Parameter: listreceivedbyaddress(0, true)gibt auch eine Nullbestätigung und leere Adressen zurück.

Der effizienteste Weg, alle eingehenden Transaktionen mit einem bestimmten Betrag zu überwachen, besteht darin listsinceblock, aufzurufen, den letzten von Ihrer App gescannten Block zu verfolgen und ihn als Parameter zu übergeben: listsinceblock(lastScannedBlockHash, targetConfirmations)So scannen Sie effektiv nur den neuen Block, was sehr schnell geht und leicht.

Eine kampferprobte Bibliothek zur Durchführung der oben genannten Aufgaben .netist BitcoinLib , die auch als NuGet-Paket geliefert wird:

Ich denke, Ihr Beispiel gilt nur für Transaktionen mit "Ihrer Brieftasche". Ich habe gerade einen anderen Weg gefunden, meinen TX zu finden: -getblockcount -getblockhash {index} -getblock {hash} - Schleife für: getrawtransaction {txid} Ich kann meine Transaktion anhand der Adresse finden, aber dies gilt NUR für bestätigte TX. Wie kann ich mir unbestätigte TX anschauen???
@Alex das ist richtig, aber in Ihrer ursprünglichen Frage war nicht klar, dass Sie auch Nicht-Wallet-Transaktionen scannen mussten. Sie können eine Liste unbestätigter Transaktionen erhalten, indem Sie aufrufen, getrawmempoolwas Transaktionen in Ihrem Speicherpool zurückgibt, wo sie sich befinden, bis (und falls) sie bestätigt werden. Sie können dann gegen diese Sammlung callen getrawtransaction <txId> 1und jede Transaktion eingehend untersuchen.

Wenn du das machst. Nehmen wir an, der RPCCMDS+.net-Server ist besser als der bitcoin-qt-Server, der besser ist als der bicoind.exe-Server. Wenn Sie diese Adressen nicht schulden, bitten Sie einfach die Blockchain-API um Gnade.

Seit 0.10 unterstützt Bitcoind Watch-Only-Adressen. https://bitcoin.org/en/developer-reference#importaddress

Ich habe ein Programm in Python3 geschrieben, mit dem Sie nach jeder Adresse im Bitcoin-Kern suchen können, unabhängig davon, ob sie zu Ihrer Brieftasche gehört oder nicht.

Hier ist der Github-Link:

https://github.com/ORP967/Bitcoin_Core_RPC_par_address

Lassen Sie mich wissen, was Sie denken oder wenn Sie irgendwelche Verbesserungen haben, die Sie haben könnten.