refactor: removed duplicated code with errors messages for txindex, timestampindex, spentindex

This commit is contained in:
Konstantin Akimov 2024-12-11 01:26:07 +07:00
parent dd1b36636c
commit a275bda266
No known key found for this signature in database
GPG Key ID: 2176C4A5D01EA524
5 changed files with 23 additions and 58 deletions

View File

@ -870,10 +870,6 @@ static RPCHelpMan getblockhashes()
},
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
{
if (!IsTimestampIndexAvailable()) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Timestamp index is disabled. You should run Dash Core with -timestampindex (requires reindex)");
}
unsigned int high = request.params[0].get_int();
unsigned int low = request.params[1].get_int();
std::vector<uint256> blockHashes;

View File

@ -6,13 +6,17 @@
#include <rpc/index_util.h>
#include <node/blockstorage.h>
#include <rpc/protocol.h>
#include <rpc/request.h>
#include <txdb.h>
#include <txmempool.h>
#include <uint256.h>
bool IsAddressIndexAvailable()
static void EnsureAddressIndexAvailable()
{
return fAddressIndex;
if (!fAddressIndex) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Address index is disabled. You should run Dash Core with -addressindex (requires reindex)");
}
}
bool GetAddressIndex(CBlockTreeDB& block_tree_db, const uint160& addressHash, const AddressType type,
@ -20,12 +24,11 @@ bool GetAddressIndex(CBlockTreeDB& block_tree_db, const uint160& addressHash, co
const int32_t start, const int32_t end)
{
AssertLockHeld(::cs_main);
EnsureAddressIndexAvailable();
if (!fAddressIndex)
return error("Address index not enabled");
if (!block_tree_db.ReadAddressIndex(addressHash, type, addressIndex, start, end))
if (!block_tree_db.ReadAddressIndex(addressHash, type, addressIndex, start, end)) {
return error("Unable to get txids for address");
}
return true;
}
@ -34,9 +37,7 @@ bool GetAddressUnspentIndex(CBlockTreeDB& block_tree_db, const uint160& addressH
std::vector<CAddressUnspentIndexEntry>& unspentOutputs, const bool height_sort)
{
AssertLockHeld(::cs_main);
if (!fAddressIndex)
return error("Address index not enabled");
EnsureAddressIndexAvailable();
if (!block_tree_db.ReadAddressUnspentIndex(addressHash, type, unspentOutputs))
return error("Unable to get txids for address");
@ -56,8 +57,7 @@ bool GetMempoolAddressDeltaIndex(const CTxMemPool& mempool,
std::vector<CMempoolAddressDeltaEntry>& addressDeltaEntries,
const bool timestamp_sort)
{
if (!fAddressIndex)
return error("Address index not enabled");
EnsureAddressIndexAvailable();
if (!mempool.getAddressIndex(addressDeltaIndex, addressDeltaEntries))
return error("Unable to get address delta information");
@ -72,18 +72,14 @@ bool GetMempoolAddressDeltaIndex(const CTxMemPool& mempool,
return true;
}
bool IsSpentIndexAvailable()
{
return fSpentIndex;
}
bool GetSpentIndex(CBlockTreeDB& block_tree_db, const CTxMemPool& mempool, const CSpentIndexKey& key,
CSpentIndexValue& value)
{
AssertLockHeld(::cs_main);
if (!fSpentIndex)
return error("Spent index not enabled");
if (!fSpentIndex) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Spent index is disabled. You should run Dash Core with -spentindex (requires reindex)");
}
if (mempool.getSpentIndex(key, value))
return true;
@ -94,18 +90,14 @@ bool GetSpentIndex(CBlockTreeDB& block_tree_db, const CTxMemPool& mempool, const
return true;
}
bool IsTimestampIndexAvailable()
{
return fTimestampIndex;
}
bool GetTimestampIndex(CBlockTreeDB& block_tree_db, const uint32_t high, const uint32_t low,
std::vector<uint256>& hashes)
{
AssertLockHeld(::cs_main);
if (!fTimestampIndex)
return error("Timestamp index not enabled");
if (!fTimestampIndex) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Timestamp index is disabled. You should run Dash Core with -timestampindex (requires reindex)");
}
if (!block_tree_db.ReadTimestampIndex(high, low, hashes))
return error("Unable to get hashes for timestamps");

View File

@ -24,25 +24,27 @@ enum class AddressType : uint8_t;
extern RecursiveMutex cs_main;
bool IsAddressIndexAvailable();
//! throws JSONRPCError if address index is unavailable
bool GetAddressIndex(CBlockTreeDB& block_tree_db, const uint160& addressHash, const AddressType type,
std::vector<CAddressIndexEntry>& addressIndex,
const int32_t start = 0, const int32_t end = 0)
EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
//! throws JSONRPCError if address index is unavailable
bool GetAddressUnspentIndex(CBlockTreeDB& block_tree_db, const uint160& addressHash, const AddressType type,
std::vector<CAddressUnspentIndexEntry>& unspentOutputs, const bool height_sort = false)
EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
//! throws JSONRPCError if address index is unavailable
bool GetMempoolAddressDeltaIndex(const CTxMemPool& mempool,
const std::vector<CMempoolAddressDeltaKey>& addressDeltaIndex,
std::vector<CMempoolAddressDeltaEntry>& addressDeltaEntries,
const bool timestamp_sort = false);
bool IsSpentIndexAvailable();
//! throws JSONRPCError if spent index is unavailable
bool GetSpentIndex(CBlockTreeDB& block_tree_db, const CTxMemPool& mempool, const CSpentIndexKey& key,
CSpentIndexValue& value)
EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
bool IsTimestampIndexAvailable();
//! throws JSONRPCError if timestamp index is unavailable
bool GetTimestampIndex(CBlockTreeDB& block_tree_db, const uint32_t high, const uint32_t low,
std::vector<uint256>& hashes)
EXCLUSIVE_LOCKS_REQUIRED(::cs_main);

View File

@ -742,10 +742,6 @@ static RPCHelpMan getaddressmempool()
},
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
{
if (!IsAddressIndexAvailable()) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Address index is disabled. You should run Dash Core with -addressindex (requires reindex)");
}
CTxMemPool& mempool = EnsureAnyMemPool(request.context);
std::vector<std::pair<uint160, AddressType>> addresses;
@ -818,12 +814,7 @@ static RPCHelpMan getaddressutxos()
},
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
{
if (!IsAddressIndexAvailable()) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Address index is disabled. You should run Dash Core with -addressindex (requires reindex)");
}
std::vector<std::pair<uint160, AddressType> > addresses;
if (!getAddressesFromParams(request.params, addresses)) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid address");
}
@ -894,10 +885,6 @@ static RPCHelpMan getaddressdeltas()
},
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
{
if (!IsAddressIndexAvailable()) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Address index is disabled. You should run Dash Core with -addressindex (requires reindex)");
}
UniValue startValue = find_value(request.params[0].get_obj(), "start");
UniValue endValue = find_value(request.params[0].get_obj(), "end");
@ -988,10 +975,6 @@ static RPCHelpMan getaddressbalance()
},
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
{
if (!IsAddressIndexAvailable()) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Address index is disabled. You should run Dash Core with -addressindex (requires reindex)");
}
std::vector<std::pair<uint160, AddressType> > addresses;
if (!getAddressesFromParams(request.params, addresses)) {
@ -1064,10 +1047,6 @@ static RPCHelpMan getaddresstxids()
},
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
{
if (!IsAddressIndexAvailable()) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Address index is disabled. You should run Dash Core with -addressindex (requires reindex)");
}
std::vector<std::pair<uint160, AddressType> > addresses;
if (!getAddressesFromParams(request.params, addresses)) {
@ -1157,10 +1136,6 @@ static RPCHelpMan getspentinfo()
},
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
{
if (!IsSpentIndexAvailable()) {
throw JSONRPCError(RPC_INVALID_REQUEST, "Spent index is disabled. You should run Dash Core with -spentindex (requires reindex)");
}
UniValue txidValue = find_value(request.params[0].get_obj(), "txid");
UniValue indexValue = find_value(request.params[0].get_obj(), "index");

View File

@ -75,7 +75,7 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, CTxMemPool& mempo
// Add spent information if spentindex is enabled
CSpentIndexTxInfo txSpentInfo;
if (IsSpentIndexAvailable()) {
if (fSpentIndex) {
txSpentInfo = CSpentIndexTxInfo{};
for (const auto& txin : tx.vin) {
if (!tx.IsCoinBase()) {