Berechnung einer Summe von erhaltenen Bitcoins

Ich habe eine Liste mit Bitcoin-Adressen, die von einem Benutzer bereitgestellt wurde, und ich versuche herauszufinden, welche Summe auf diese Adressen eingezahlt wurde. Ich verwende die API von blockexplorer.com, um Transaktionen zu erhalten.

Dies ist ein typischer API-Aufruf (der Einfachheit halber nur für eine Adresse), den mein Skript ausführt. Der Aufruf unterstützt Parameter fromund to, diese können verwendet werden, um ein gesamtes Transaktionsbuch effektiv zu rationalisieren.

https://blockexplorer.com/api/addrs/1Archive1n2C579dMsAu3iC6tWzuQJz8dN/txs?from=0&to=20

Es scheint keinen Fehler in meinem Rationalisierungsalgorithmus zu geben, aber wenn ich gefundene Werte zusammenfasse valueIn(was vermutlich für an eine Adresse gesendete Werte stehen sollte), ist das Ergebnis im Vergleich zu dem in API-Aufruf zurückgegebenen Ergebnis völlig falsch totalReceived.

https://blockexplorer.com/api/addr/1Archive1n2C579dMsAu3iC6tWzuQJz8dN/totalReceived

Warum erhalte ich völlig andere Ergebnisse?

Ist dies ein korrekter Weg, um herauszufinden, ob ein bestimmter Betrag an eine Adresse (oder Adressen) eingezahlt wurde?

Fun Fact: blockexplorer.com gibt einen Wert zurück totalReceived, der sich von einem Wert unterscheidet, der von blockchain.info zurückgegeben wird.

Antworten (2)

Warum erhalte ich völlig andere Ergebnisse?

Sie werden mit dieser Art von API auf viel Verwirrung stoßen, einfach weil die Informationen, die sie anzeigen, nicht standardisiert sind und zunächst nicht in der Bitcoin-Blockkette vorhanden sind. Infolgedessen gibt es sehr wenig Kontinuität in diesen Werten zwischen den Diensten, im Großen und Ganzen ist nicht klar, wie einer von ihnen auf diese Werte kommt.

In diesem Fall bezieht sich der "Gesamtbetrag" wahrscheinlich auf die Anzahl der bestätigten Ausgaben OP_DUP OP_HASH160 6c1b511a63306b6294e1d3390ac8cd481f76705d OP_EQUALVERIFY OP_CHECKSIG, die an ausgegeben werden, das Skript für die von Ihnen gepostete P2PKH-Adresse. Einige Block-Explorer ziehen Änderungsausgaben von diesem Betrag ab, wie in dieser Transaktion, bei der 1Archive für den Rest wiederverwendet wird, der nicht an eine neue Adresse ausgegeben wird.

Die "Gesamtzahl der erhaltenen Daten" für Ihre Beispieladresse bei einigen verschiedenen Diensten:

Der "Saldo" einer Adresse, wie er von diesen APIs angezeigt wird, enthält vermutlich die Gesamtheit aller bestätigten, nicht ausgegebenen Ausgaben mit diesem Skript, aber je nach API enthält dies manchmal unbestätigte Transaktionen oder einfach nicht entzifferbare Werte wie Negative.

Ist dies ein korrekter Weg, um herauszufinden, ob ein bestimmter Betrag an eine Adresse (oder Adressen) eingezahlt wurde?

Wahrscheinlich nicht, wenn Sie dazu in der Lage sind, können Sie einen Bitcoin Core-Knoten und die Watch-Only-Funktion verwenden, um Ihre Adressliste zu überwachen und eine unabhängige Überprüfung zu erhalten, wie viel Bitcoin ausgegeben werden kann. Dies ist jedoch langsam einzurichten und eignet sich nicht für Situationen, in denen Sie häufig neue Adressen hinzufügen (die erneute Verarbeitung historischer Daten dauert einige Zeit, derzeit möglicherweise bis zu 30 Minuten). Wenn Sie diese APIs verwenden müssen, sind Sie wahrscheinlich besser dran, wenn Sie den verfügbaren Endpunkt für nicht ausgegebene Ausgaben verwenden und selbst eine Bilanz ziehen.

Transaktionen können mehrere Ausgaben und mehrere Eingaben haben. Das Feld valueIn ist die Summe aller Eingaben der Transaktion, nicht der Betrag, der an die Adresse geht, an der Sie interessiert sind.

Anstatt valueIn zu summieren, sollten Sie eine Liste aller Ausgaben erstellen, dann diejenigen herausfiltern, die nicht an die Adresse gesendet werden, an der Sie interessiert sind, und diese dann summieren.

Fun Fact: blockexplorer.com gibt einen Wert von totalReceived zurück, der sich von einem Wert unterscheidet, der von blockchain.info zurückgegeben wird.

Die Bedeutung von „insgesamt erhalten“ ist nicht klar definiert. Wenn ich zum Beispiel Geld an Adresse A nehme und es an Adresse A sende, hat Adresse A dann Geld „erhalten“? Verschiedene APIs berechnen dies unterschiedlich.

Hinweis: Ich nehme an, Sie suchen absichtlich nicht nach dem Restbetrag der Adresse, der genau definiert ist.

Der Grund, warum ich nicht nach einem Guthaben suche, ist, dass dieser Wert nach meinem Verständnis verringert wird, wenn der Wert von dieser Adresse gesendet wird. Was ich suche, ist der tatsächliche Wert, der an eine Adresse übertragen wird, ohne mögliche "Abhebungen" zu berücksichtigen. Meine Anwendung ermöglicht es Benutzern, eine Liste von Adressen einzufügen, überwacht dann alle und fasst die Menge der an sie gesendeten Bitcoins zusammen.