changeset 29680:f4d099149291

rpc: add input confirmations to getrawtransaction
author Braydon Fuller <braydon@bitpay.com>
date Thu, 19 May 2016 20:10:02 -0400
parents 87b51727e811
children 05f8b73d7e51
files qa/rpc-tests/spentindex.py src/rpcrawtransaction.cpp
diffstat 2 files changed, 15 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/qa/rpc-tests/spentindex.py	Mon Jun 13 11:10:49 2016 -0400
+++ b/qa/rpc-tests/spentindex.py	Thu May 19 20:10:02 2016 -0400
@@ -103,6 +103,10 @@
         assert_equal(txVerbose3["vin"][0]["value"], Decimal(unspent[0]["amount"]))
         assert_equal(txVerbose3["vin"][0]["valueSat"], amount)
 
+        # Check that the input confirmations work for mempool unconfirmed transactions
+        assert_equal(txVerbose3["vin"][0].has_key("height"), False)
+        assert_equal(txVerbose3["vin"][0]["confirmations"], 0)
+
         # Check the database index
         self.nodes[0].generate(1)
         self.sync_all()
@@ -112,6 +116,10 @@
         assert_equal(txVerbose4["vin"][0]["value"], Decimal(unspent[0]["amount"]))
         assert_equal(txVerbose4["vin"][0]["valueSat"], amount)
 
+        # Check that the input confirmations work
+        assert_equal(txVerbose4["vin"][0]["height"], 107)
+        assert_equal(txVerbose4["vin"][0]["confirmations"], 1)
+
         print "Passed\n"
 
 
--- a/src/rpcrawtransaction.cpp	Mon Jun 13 11:10:49 2016 -0400
+++ b/src/rpcrawtransaction.cpp	Thu May 19 20:10:02 2016 -0400
@@ -83,6 +83,13 @@
             CSpentIndexValue spentInfo;
             CSpentIndexKey spentKey(txin.prevout.hash, txin.prevout.n);
             if (GetSpentIndex(spentKey, spentInfo)) {
+                // Unconfirmed spentInfo have a height of -1, block 0 is unspendable
+                if (spentInfo.blockHeight > 0) {
+                    in.push_back(Pair("height", spentInfo.blockHeight));
+                    in.push_back(Pair("confirmations", 1 + chainActive.Height() - spentInfo.blockHeight));
+                } else {
+                    in.push_back(Pair("confirmations", 0));
+                }
                 in.push_back(Pair("value", ValueFromAmount(spentInfo.satoshis)));
                 in.push_back(Pair("valueSat", spentInfo.satoshis));
                 if (spentInfo.addressType == 1) {