From ededdf14136f92a1e1221de1b424ae157aa62c8d Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Thu, 19 May 2016 20:10:02 -0400 Subject: [PATCH] rpc: add input confirmations to getrawtransaction --- qa/rpc-tests/spentindex.py | 8 ++++++++ src/rpc/rawtransaction.cpp | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/qa/rpc-tests/spentindex.py b/qa/rpc-tests/spentindex.py index c233ca019..0a3f93e72 100755 --- a/qa/rpc-tests/spentindex.py +++ b/qa/rpc-tests/spentindex.py @@ -103,6 +103,10 @@ class SpentIndexTest(BitcoinTestFramework): 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 @@ class SpentIndexTest(BitcoinTestFramework): 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" diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index c34223f65..a9e7f630a 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -144,6 +144,13 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry) 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) {