Transactions

使用比特幣 rpc (gettransaction) 獲取非錢包交易

  • June 21, 2013

我正在玩比特幣-qt。我想迭代所有塊及其所有交易。

到目前為止,我已經能夠獲得我想要的塊中所有 tx 的列表。現在我想獲取有關交易的資訊:金額、確認資訊等。

但是,當我使用gettransactionBitcoin-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在呼叫後添加一個參數以對其進行解碼而不是十六進製表示法),但它無法知道例如付款金額或費用。

引用自:https://bitcoin.stackexchange.com/questions/11759