Я играю с биткойн-qt. Я хочу перебрать все блоки и все их транзакции.
До сих пор мне удавалось получить список всех транзакций в блоках, которые я хочу. Теперь я хочу получить информацию о транзакции: сумма, подтверждения и так далее.
Однако, когда я использую gettransaction
метод API Bitcoin-qt, кажется, что я могу получать транзакции только из своего собственного кошелька.
Например, я не могу сказать, потому что получаю ошибку " Invalid or non-wallet transaction id (code -5)
":
gettransaction 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098
Однако, когда у меня есть TX одной из моих собственных транзакций, я получаю правильный ответ.
Мой код
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;
}
Любая идея о том, как я буду получать информацию о транзакциях за пределами моего кошелька?
Включите txindex=1
в своем bitcoin.conf (вам потребуется перестроить базу данных, поскольку индекс транзакций обычно не поддерживается, начните использовать -reindex
для этого) и используйте getrawtransaction
вызов для запроса информации о любой транзакции (это не будет работать для генезиса ). транзакция блока coinbase, это особый случай).
Обратите внимание, что это даст вам только необработанные данные транзакции (вы можете добавить 1
аргумент после вызова, чтобы он был декодирован, а не в шестнадцатеричном представлении), но, например, он не может знать сумму платежа или комиссию.
Ларс Холдгаард
Питер Уилле
Ларс Холдгаард
Янгорецкий
bitcoin-cli decoderawtransaction $(bitcoin-cli getrawtransaction txid)
, чтобы получить детали транзакции. Кажется, что ответ на использованиеtxindex=1
устарел?Питер Уилле
кодманьяга
Рон
txindex=1
нужен для транзакций, не относящихся к вашему кошельку