Estoy jugando con Bitcoin-qt. Quiero iterar todos los bloques y todas sus transacciones.
Hasta ahora he podido obtener una lista de todos los tx en los bloques que quiero. Ahora quiero obtener información sobre la transacción: monto, confirmaciones, etc.
Sin embargo, cuando uso el gettransaction
método de la API de Bitcoin-qt, parece que solo puedo obtener transacciones de mi propia billetera.
Por ejemplo, no puedo decirlo porque me sale el error " Invalid or non-wallet transaction id (code -5)
":
gettransaction 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098
Sin embargo, cuando tengo un TX de una de mis propias transacciones, obtengo una respuesta correcta.
Mi código
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;
}
¿Alguna idea sobre cómo obtendría información sobre transacciones fuera de mi billetera?
Habilite txindex=1
en su bitcoin.conf (deberá reconstruir la base de datos ya que el índice de transacciones normalmente no se mantiene, comience a usar -reindex
para hacerlo) y use la getrawtransaction
llamada para solicitar información sobre cualquier transacción (no funcionará para el génesis Sin embargo, la transacción de coinbase del bloque es un caso especial).
Tenga en cuenta que esto solo le proporcionará datos de transacción sin procesar (puede agregar un 1
argumento después de la llamada para decodificarlo en lugar de en notación hexadecimal), pero no puede conocer el monto del pago o las tarifas, por ejemplo.
Lars Holdgard
pieter wuille
Lars Holdgard
jangorecki
bitcoin-cli decoderawtransaction $(bitcoin-cli getrawtransaction txid)
para obtener los detalles de la transacción. ¿ Parece que la respuesta para usartxindex=1
está desactualizada?pieter wuille
kodmanyagha
Ron
txindex=1
para transacciones que no son pertinentes para su billetera