Ich spiele mit Bitcoin-qt herum. Ich möchte alle Blöcke und alle ihre Transaktionen iterieren.
Bisher war ich in der Lage, eine Liste aller TX in den Blöcken zu erhalten, die ich haben möchte. Jetzt möchte ich Informationen über die Transaktion erhalten: Betrag, Bestätigungen und so weiter.
Wenn ich jedoch die gettransaction
Methode der Bitcoin-qt-API verwende, kann ich anscheinend nur Transaktionen aus meiner eigenen Brieftasche erhalten.
Zum Beispiel kann ich nicht sagen, weil ich den Fehler " Invalid or non-wallet transaction id (code -5)
" bekomme:
gettransaction 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098
Wenn ich jedoch eine TX einer meiner eigenen Transaktionen habe, erhalte ich eine korrekte Antwort.
Mein Code
public void AddBtcTransaction(string hash)
{
List<string> parameters = new List<string>();
parameters.Add(hash);
var data = RequestServer("gettransaction", parameters);
int i = 0;
}
public string RequestServer(string methodName, List<string> parameters)
{
string respVal = string.Empty;
var rawRequest = GetRawRequest();
JObject joe = new JObject();
joe.Add(new JProperty("jsonrpc", "1.0"));
joe.Add(new JProperty("id", "1"));
joe.Add(new JProperty("method", methodName));
JArray props = new JArray();
foreach (var parameter in parameters)
{
props.Add(parameter);
}
joe.Add(new JProperty("params", props));
// serialize json for the request
string s = JsonConvert.SerializeObject(joe);
byte[] byteArray = Encoding.UTF8.GetBytes(s);
rawRequest.ContentLength = byteArray.Length;
Stream dataStream = rawRequest.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
StreamReader streamReader = null;
try
{
WebResponse webResponse = rawRequest.GetResponse();
streamReader = new StreamReader(webResponse.GetResponseStream(), true);
respVal = streamReader.ReadToEnd();
var data = JsonConvert.DeserializeObject(respVal).ToString();
return data;
}
catch (Exception exp)
{
}
finally
{
if (streamReader != null)
{
streamReader.Close();
}
}
return string.Empty;
}
private HttpWebRequest GetRawRequest()
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(ServerIp);
webRequest.Credentials = new NetworkCredential(UserName, Password);
/// important, otherwise the service can't desirialse your request properly
webRequest.ContentType = "application/json-rpc";
webRequest.Method = "POST";
return webRequest;
}
Irgendeine Idee, wie ich Informationen über Transaktionen außerhalb meiner Brieftasche erhalten würde?
Aktivieren Sie in Ihrer bitcoin.conf txindex=1
(Sie müssen die Datenbank neu erstellen, da der Transaktionsindex normalerweise nicht gepflegt wird, beginnen -reindex
Sie damit, dies zu tun) und verwenden Sie den getrawtransaction
Aufruf, um Informationen über jede Transaktion anzufordern (es funktioniert nicht für die Genesis Coinbase-Transaktion des Blocks ist jedoch ein Sonderfall).
Beachten Sie, dass dies Ihnen nur rohe Transaktionsdaten liefert (Sie können 1
nach dem Aufruf ein Argument hinzufügen, um es statt in hexadezimaler Notation dekodieren zu lassen), aber es kann beispielsweise den Zahlungsbetrag oder die Gebühren nicht kennen.
Lars Holdgard
Pieter Wuille
Lars Holdgard
Jangorecki
bitcoin-cli decoderawtransaction $(bitcoin-cli getrawtransaction txid)
, um Transaktionsdetails zu erhalten. Scheint, dass die zu verwendende Antworttxindex=1
veraltet ist?Pieter Wuille
kodmanyagha
Ron
txindex=1
wird für Transaktionen benötigt, die nicht für Ihr Wallet relevant sind