Transactions
使用比特幣 rpc (gettransaction) 獲取非錢包交易
我正在玩比特幣-qt。我想迭代所有塊及其所有交易。
到目前為止,我已經能夠獲得我想要的塊中所有 tx 的列表。現在我想獲取有關交易的資訊:金額、確認資訊等。
但是,當我使用
gettransaction
Bitcoin-qt API 的方法時,似乎我只能從自己的錢包中獲取交易。例如,我不能說,因為我收到錯誤“
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; }
關於如何獲取錢包外交易資訊的任何想法?
在你的 bitcoin.conf 中啟用
txindex=1
(你需要重建數據庫,因為事務索引通常不維護,開始使用-reindex
這樣做),並使用getrawtransaction
呼叫請求有關任何事務的資訊(它不適用於創世塊的 coinbase 交易,但這是一個特例)。請注意,這只會為您提供原始交易數據(您可以
1
在呼叫後添加一個參數以對其進行解碼而不是十六進製表示法),但它無法知道例如付款金額或費用。