|
|
@ -17,7 +17,6 @@ |
|
|
|
#include "version.h" |
|
|
|
#include "version.h" |
|
|
|
|
|
|
|
|
|
|
|
#include <boost/algorithm/string.hpp> |
|
|
|
#include <boost/algorithm/string.hpp> |
|
|
|
#include <boost/dynamic_bitset.hpp> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <univalue.h> |
|
|
|
#include <univalue.h> |
|
|
|
|
|
|
|
|
|
|
@ -502,7 +501,8 @@ static bool rest_getutxos(HTTPRequest* req, const std::string& strURIPart) |
|
|
|
vector<unsigned char> bitmap; |
|
|
|
vector<unsigned char> bitmap; |
|
|
|
vector<CCoin> outs; |
|
|
|
vector<CCoin> outs; |
|
|
|
std::string bitmapStringRepresentation; |
|
|
|
std::string bitmapStringRepresentation; |
|
|
|
boost::dynamic_bitset<unsigned char> hits(vOutPoints.size()); |
|
|
|
std::vector<bool> hits; |
|
|
|
|
|
|
|
bitmap.resize((vOutPoints.size() + 7) / 8); |
|
|
|
{ |
|
|
|
{ |
|
|
|
LOCK2(cs_main, mempool.cs); |
|
|
|
LOCK2(cs_main, mempool.cs); |
|
|
|
|
|
|
|
|
|
|
@ -518,10 +518,11 @@ static bool rest_getutxos(HTTPRequest* req, const std::string& strURIPart) |
|
|
|
for (size_t i = 0; i < vOutPoints.size(); i++) { |
|
|
|
for (size_t i = 0; i < vOutPoints.size(); i++) { |
|
|
|
CCoins coins; |
|
|
|
CCoins coins; |
|
|
|
uint256 hash = vOutPoints[i].hash; |
|
|
|
uint256 hash = vOutPoints[i].hash; |
|
|
|
|
|
|
|
bool hit = false; |
|
|
|
if (view.GetCoins(hash, coins)) { |
|
|
|
if (view.GetCoins(hash, coins)) { |
|
|
|
mempool.pruneSpent(hash, coins); |
|
|
|
mempool.pruneSpent(hash, coins); |
|
|
|
if (coins.IsAvailable(vOutPoints[i].n)) { |
|
|
|
if (coins.IsAvailable(vOutPoints[i].n)) { |
|
|
|
hits[i] = true; |
|
|
|
hit = true; |
|
|
|
// Safe to index into vout here because IsAvailable checked if it's off the end of the array, or if
|
|
|
|
// Safe to index into vout here because IsAvailable checked if it's off the end of the array, or if
|
|
|
|
// n is valid but points to an already spent output (IsNull).
|
|
|
|
// n is valid but points to an already spent output (IsNull).
|
|
|
|
CCoin coin; |
|
|
|
CCoin coin; |
|
|
@ -533,10 +534,11 @@ static bool rest_getutxos(HTTPRequest* req, const std::string& strURIPart) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bitmapStringRepresentation.append(hits[i] ? "1" : "0"); // form a binary string representation (human-readable for json output)
|
|
|
|
hits.push_back(hit); |
|
|
|
|
|
|
|
bitmapStringRepresentation.append(hit ? "1" : "0"); // form a binary string representation (human-readable for json output)
|
|
|
|
|
|
|
|
bitmap[i / 8] |= ((uint8_t)hit) << (i % 8); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
boost::to_block_range(hits, std::back_inserter(bitmap)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch (rf) { |
|
|
|
switch (rf) { |
|
|
|
case RF_BINARY: { |
|
|
|
case RF_BINARY: { |
|
|
|