changeset 29672:b32a72bc5d66

main: add amount and address to spentindex value
author Braydon Fuller <braydon@bitpay.com>
date Fri, 13 May 2016 11:43:01 -0400
parents 5e8151b134ea
children 67db818ef672
files src/main.cpp src/main.h
diffstat 2 files changed, 38 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/main.cpp	Thu May 12 16:16:44 2016 -0400
+++ b/src/main.cpp	Fri May 13 11:43:01 2016 -0400
@@ -2492,39 +2492,36 @@
                 for (size_t j = 0; j < tx.vin.size(); j++) {
 
                     const CTxIn input = tx.vin[j];
+                    const CTxOut &prevout = view.GetOutputFor(tx.vin[j]);
+                    uint160 hashBytes;
+                    int addressType;
+
+                    if (prevout.scriptPubKey.IsPayToScriptHash()) {
+                        hashBytes = uint160(vector <unsigned char>(prevout.scriptPubKey.begin()+2, prevout.scriptPubKey.begin()+22));
+                        addressType = 2;
+                    } else if (prevout.scriptPubKey.IsPayToPublicKeyHash()) {
+                        hashBytes = uint160(vector <unsigned char>(prevout.scriptPubKey.begin()+3, prevout.scriptPubKey.begin()+23));
+                        addressType = 1;
+                    } else {
+                        hashBytes.SetNull();
+                        addressType = 0;
+                    }
+
+                    if (fAddressIndex && addressType > 0) {
+                        // record spending activity
+                        addressIndex.push_back(make_pair(CAddressIndexKey(addressType, hashBytes, pindex->nHeight, i, txhash, j, true), prevout.nValue * -1));
+
+                        // remove address from unspent index
+                        addressUnspentIndex.push_back(make_pair(CAddressUnspentKey(addressType, hashBytes, input.prevout.hash, input.prevout.n), CAddressUnspentValue()));
+                    }
 
                     if (fSpentIndex) {
                         // add the spent index to determine the txid and input that spent an output
-                        spentIndex.push_back(make_pair(CSpentIndexKey(input.prevout.hash, input.prevout.n), CSpentIndexValue(txhash, j, pindex->nHeight)));
+                        // and to find the amount and address from an input
+                        spentIndex.push_back(make_pair(CSpentIndexKey(input.prevout.hash, input.prevout.n), CSpentIndexValue(txhash, j, pindex->nHeight, prevout.nValue, addressType, hashBytes)));
                     }
-
-                    if (fAddressIndex) {
-
-                        const CTxOut &prevout = view.GetOutputFor(tx.vin[j]);
-
-                        if (prevout.scriptPubKey.IsPayToScriptHash()) {
-                            vector<unsigned char> hashBytes(prevout.scriptPubKey.begin()+2, prevout.scriptPubKey.begin()+22);
-
-                            // record spending activity
-                            addressIndex.push_back(make_pair(CAddressIndexKey(2, uint160(hashBytes), pindex->nHeight, i, txhash, j, true), prevout.nValue * -1));
-
-                            // remove address from unspent index
-                            addressUnspentIndex.push_back(make_pair(CAddressUnspentKey(2, uint160(hashBytes), input.prevout.hash, input.prevout.n), CAddressUnspentValue()));
-                        } else if (prevout.scriptPubKey.IsPayToPublicKeyHash()) {
-                            vector<unsigned char> hashBytes(prevout.scriptPubKey.begin()+3, prevout.scriptPubKey.begin()+23);
-
-                            // record spending activity
-                            addressIndex.push_back(make_pair(CAddressIndexKey(1, uint160(hashBytes), pindex->nHeight, i, txhash, j, true), prevout.nValue * -1));
-
-                            // remove address from unspent index
-                            addressUnspentIndex.push_back(make_pair(CAddressUnspentKey(1, uint160(hashBytes), input.prevout.hash, input.prevout.n), CAddressUnspentValue()));
-
-                        } else {
-                            continue;
-                        }
-                    }
-
                 }
+
             }
 
             if (fStrictPayToScriptHash)
--- a/src/main.h	Thu May 12 16:16:44 2016 -0400
+++ b/src/main.h	Fri May 13 11:43:01 2016 -0400
@@ -325,6 +325,9 @@
     uint256 txid;
     unsigned int inputIndex;
     int blockHeight;
+    CAmount satoshis;
+    int addressType;
+    uint160 addressHash;
 
     ADD_SERIALIZE_METHODS;
 
@@ -333,12 +336,18 @@
         READWRITE(txid);
         READWRITE(inputIndex);
         READWRITE(blockHeight);
+        READWRITE(satoshis);
+        READWRITE(addressType);
+        READWRITE(addressHash);
     }
 
-    CSpentIndexValue(uint256 t, unsigned int i, int h) {
+    CSpentIndexValue(uint256 t, unsigned int i, int h, CAmount s, int type, uint160 a) {
         txid = t;
         inputIndex = i;
         blockHeight = h;
+        satoshis = s;
+        addressType = type;
+        addressHash = a;
     }
 
     CSpentIndexValue() {
@@ -349,6 +358,9 @@
         txid.SetNull();
         inputIndex = 0;
         blockHeight = 0;
+        satoshis = 0;
+        addressType = 0;
+        addressHash.SetNull();
     }
 
     bool IsNull() const {