Gibt es eine JSON-RPC-Methode zum Abrufen aller Transaktionen für eine bestimmte Adresse?

Ich meine so etwas wie listtransactions-Methode, aber mit Parameter .

Antworten (2)

Das wäre schön, aber nein, es gibt keine Möglichkeit, dies zu tun. Der einfachste Weg, diese Informationen zu sammeln, besteht darin, anzurufen listtransactionsoder listunspenteine Liste der Transaktionen in Ihrem Konto anzufordern.

Nachdem Sie die Liste erhalten haben, filtern Sie nach den benötigten Informationen. Erwähnenswert ist der listunspentRPC-Aufruf. Dies kann viele zurückgegebene Daten reduzieren, wenn Sie nur an den eingehenden Transaktionen interessiert sind, die Ihren aktuellen Kontostand ausmachen.

Ich weiß, dass dies im Wesentlichen eine Pyramidenantwort ist, aber ich wollte ausdrücklich erwähnen, dass dies mit dem aktuellen Client nicht möglich ist. Wenn Sie vorhaben, dies selbst zu filtern, und Sie nur tx benötigen, die mit Ihrem aktuellen Brieftaschenwert verknüpft sind, listunspentsparen Sie darüber hinaus eine Menge Daten zum Analysieren.

Sie können dies nicht mit Bitcoin über den RPC-Befehl tun, aber es gibt im Internet verfügbare Tools, die dies für Sie tun. Blockexplorer hat beispielsweise eine spezielle Abfrage für diesen Zweck. Wenn Sie sehen möchten, wie es gemacht wird, sehen Sie sich Zeile 724 von app_stats.inc an :

// This RELIES on the fact that only address transactions will be sent/received
$result = SQL("SELECT encode(blocks.hash, 'hex') AS block, 
                      encode(transactions.hash, 'hex') AS tx, 
                      blocks.number AS blocknum, 
                      blocks.time AT TIME ZONE 'UTC' AS time, 
                      transactions.id AS tid, 
                      transactions.raw AS rawtx

               FROM inputs JOIN transactions ON (inputs.tx = transactions.hash) 
                           JOIN blocks ON (inputs.block = blocks.hash)

               WHERE inputs.type = 'Address' AND 
                     blocks.number>$1 AND inputs.hash160 IN ($addresses)

               UNION 

               SELECT encode(blocks.hash, 'hex') AS block, 
                      encode(transactions.hash, 'hex') AS tx, 
                      blocks.number AS blocknum, 
                      blocks.time AT TIME ZONE 'UTC' AS time, 
                      transactions.id AS tid, 
                      transactions.raw AS rawtx

               FROM outputs JOIN transactions ON (outputs.tx = transactions.hash) 
                            JOIN blocks ON (outputs.block = blocks.hash)

               WHERE outputs.type = 'Address' AND 
                     blocks.number>$1 AND 
                     outputs.hash160 IN ($addresses) 

               ORDER BY tid;", $blocklimit);