Auf der Seite "Konten erklärt" des Bitcoin-Wikis: https://en.bitcoin.it/wiki/Accounts_explained#Account_Weaknesses
Es heißt eindeutig:
Der Kontencode lässt sich nicht auf Tausende von Konten mit Zehntausenden von Transaktionen skalieren, da Indizes nach Konto (und nach Konto nach Zeit) nicht implementiert sind. So viele Operationen (wie die Berechnung eines Kontostands) erfordern den Zugriff auf jede Wallet-Transaktion.
Meine Frage ist also, ob der Standard-Webentwickler, der eine Bitcoin-Web-App mithilfe der RPC-Schnittstelle erstellt, Konten verwenden (oder jemals verwenden) sollte?
Sollten wir immer das Standardkonto "" verwenden, da wir technisch gesehen immer Konten verwenden müssen, wenn wir auf den RPC zugreifen, um Dinge wie das Abrufen des gesamten Serverguthabens zu erhalten?
Sollten wir unsere Benutzerkonten einfach in unseren eigenen Datenbanken verwalten und Bitcoin NUR für Dinge wie listeninceblock() verwenden, um Transaktionen und Benutzersalden in unseren Datenbanken zu speichern?
Wie auf der von Ihnen verlinkten Seite erwähnt, ist es etwas umständlich, das Kontensystem von Bitcoin-qt zu verwenden. Kümmern Sie sich nicht um Konten, da diese dazu gedacht sind, Ihr Geld innerhalb des Programms zu verwalten. Wenn Sie Tausende von Konten haben, machen Sie bereits etwas falsch.
Wie strukturieren Sie also einen Dienst, um dies zu tun?
Behandeln Sie Konten vollständig in Ihrer Datenbank. Wenn Sie eine Adresse generieren, speichern Sie sie als Feld unter einem Benutzer in einer beliebigen Datenbanktabelle/Sammlung, die Sie für Benutzer haben. Auf diese Weise können Sie Ihre Adresszahlen schnell und einfach skalieren, falls Sie groß werden, Bitcoind lässt sich nicht gut skalieren.
Handhabung erhält
Das ist umständlich mit dem aktuellen Stand von Bitcoind zu tun, das Programm hatte nie wirklich die Absicht, große Dienste zu unterstützen. Bitcoind kann den Empfang von Adressen in der Brieftasche effizient erkennen. Wenn Sie die RPC-Schnittstelle verwenden und den Befehl „getnewaddress“ verwenden, speichert Bitcoind diese in seiner Brieftasche. Ich habe Bitcoind zuvor mit einer Million Adressen getestet, es dauert eine solide halbe Stunde, um zu starten, aber die Empfangsvorgänge sind bissig und ohne merkliche Langsamkeit.
Verwenden Sie walletnotify
und/oder blocknotify
um neue Transaktionen und Blöcke zu erhalten. Diese beiden sind Argumente, die Sie in die bitcoin.conf
Datei einfügen können, die ein Programm angeben, das ausgeführt werden soll, wenn eine Transaktion oder ein Block auftritt. Walletnotify wird bei jeder neuen Transaktion zu oder von einer Adresse in wallet.dat aufgerufen und gibt eine Benachrichtigung aus, wenn es die Transaktion erhält (unbestätigt) und dann erneut, wenn es sich in einem Block befindet (1 Bestätigung). Blocknotify funktioniert pro Block. Siehe die Vorschläge zur Verwendung von walletnotify hier .
Laden Sie einfach die Hashes, die Ihnen walletnotify gibt, in eine Datenbank und prüfen Sie dann auf Block, ob jeder genügend Bestätigungen hat, denken Sie daran, dass Bitcoind normalerweise 2 walletnotify-Ereignisse pro txn hat (eines für unbestätigt und eines dafür, wenn eine txn es in eine Block). Und stellen Sie sicher, dass das Programm, das Sie aufrufen, leicht und schnell ist.
Die Profi-Methode
Dies ist etwas fortgeschritten, wird selten verwendet und Sie benötigen einige C++/Java/Python/Go-Kenntnisse. Die Community hat viele Bitcoin-Implementierungen als Open-Source-Bibliotheken zur Verfügung gestellt, auf die Sie verlinken können. Viele größere Dienste benötigen einfach mehr Komplexität beim Empfang von Transaktionen und eine bessere Skalierbarkeit, die Bitcoind nur schwer bereitstellen kann.
Es ist viel mehr Arbeit, aber Sie können mit den Bibliotheken, die für eine Vielzahl von Sprachen verfügbar sind, ganz einfach Ihren eigenen "Knoten" mit Funktionen erstellen, die Sie benötigen. Für Java gibt es BitcoinJ , weit verbreitet und zuverlässig. Für C++ gibt es Libbitcoin , das ziemlich gute Beispiele hat und einfach aussieht. Python hat eine Reihe von Knotenimplementierungen und Modulen. Sogar Golang hat etwas ziemlich beliebtes.
Wenn Sie Beispiele benötigen, bietet Github eine Menge, die Sie über die Suche finden können.
Martin Harrigan
Mikel
Philosoph
listsinceblock
. Ich möchte fragen, ob bei der Berechnung der Einzahlungssumme für jede eindeutige Benutzeradresse nur Transaktionen der Kategoriereceive
und berücksichtigt und alle anderen Transaktionskategorien wie , undgenerate
ignoriert werden ?orphan
immature
send