Browse Source

Fix bug where finding index entries of other types, such as timestampindex, stopped our iterator

pull/4/head
Duke Leto 6 years ago
parent
commit
3350160a6c
  1. 19
      src/txdb.cpp

19
src/txdb.cpp

@ -411,6 +411,7 @@ extern UniValue CBlockTreeDB::Snapshot()
pcursor->SeekToLast();
int64_t startingHeight = chainActive.Height();
//fprintf(stderr, "starting_height=%li\n", startingHeight);
while (pcursor->Valid())
{
@ -423,7 +424,8 @@ extern UniValue CBlockTreeDB::Snapshot()
ssKey >> chType;
ssKey >> indexKey;
if ( chType == DB_ADDRESSUNSPENTINDEX )
//fprintf(stderr, "chType=%d\n", chType);
if (chType == DB_ADDRESSUNSPENTINDEX)
{
try {
leveldb::Slice slValue = pcursor->value();
@ -435,7 +437,7 @@ extern UniValue CBlockTreeDB::Snapshot()
std::map <std::string, CAmount>::iterator pos = addressAmounts.find(address);
if (pos == addressAmounts.end()) {
// insert new address + utxo amount
//fprintf(stderr, "inserting new address %s with amount %li\n", address.c_str(), nValue);
fprintf(stderr, "inserting new address %s with amount %li\n", address.c_str(), nValue);
addressAmounts[address] = nValue;
totalAddresses++;
} else {
@ -446,9 +448,10 @@ extern UniValue CBlockTreeDB::Snapshot()
//fprintf(stderr,"{\"%s\", %.8f},\n",address.c_str(),(double)nValue/COIN);
total += nValue;
} catch (const std::exception& e) {
return error("failed to get address index value");
// this should not happen normally, but maybe if an index is corrupt
fprintf(stderr, "failed to get address index value\n");
}
} else { break; }
}
} catch (const std::exception& e) {
fprintf(stderr, "%s: LevelDB exception! - %s\n", __func__, e.what());
break;
@ -477,9 +480,11 @@ extern UniValue CBlockTreeDB::Snapshot()
addressesSorted.push_back(obj);
}
result.push_back(make_pair("addresses", addressesSorted));
result.push_back(make_pair("total", total / COIN ));
result.push_back(make_pair("average",(double) (total/COIN) / totalAddresses ));
if (totalAddresses > 0) {
result.push_back(make_pair("addresses", addressesSorted));
result.push_back(make_pair("total", total / COIN ));
result.push_back(make_pair("average",(double) (total/COIN) / totalAddresses ));
}
// Total number of addresses in this snaphot
result.push_back(make_pair("total_addresses", totalAddresses));
// The snapshot began at this block height

Loading…
Cancel
Save