diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index f8d7d94abf..438b6ce6e6 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1168,6 +1168,10 @@ static RPCHelpMan gettxoutsetinfo() throw JSONRPCError(RPC_INVALID_PARAMETER, "Querying specific block heights requires coinstatsindex"); } + if (stats.m_hash_type == CoinStatsHashType::HASH_SERIALIZED) { + throw JSONRPCError(RPC_INVALID_PARAMETER, "hash_serialized_2 hash type cannot be queried for a specific block"); + } + pindex = ParseHashOrHeight(request.params[1], chainman); } diff --git a/test/functional/feature_coinstatsindex.py b/test/functional/feature_coinstatsindex.py index cef60c5731..d3adde5cc5 100755 --- a/test/functional/feature_coinstatsindex.py +++ b/test/functional/feature_coinstatsindex.py @@ -52,6 +52,7 @@ class CoinStatsIndexTest(BitcoinTestFramework): self._test_coin_stats_index() self._test_use_index_option() self._test_reorg_index() + self._test_index_rejects_hash_serialized() def block_sanity_check(self, block_info): block_subsidy = 50 @@ -298,6 +299,15 @@ class CoinStatsIndexTest(BitcoinTestFramework): self.wait_until(lambda: not try_rpc(-32603, "Unable to read UTXO set", node.gettxoutsetinfo, 'muhash')) assert_raises_rpc_error(-32603, "Unable to read UTXO set", node.gettxoutsetinfo, 'muhash', reorg_block) + def _test_index_rejects_hash_serialized(self): + self.log.info("Test that the rpc raises if the legacy hash is passed with the index") + + msg = "hash_serialized_2 hash type cannot be queried for a specific block" + assert_raises_rpc_error(-8, msg, self.nodes[1].gettxoutsetinfo, hash_type='hash_serialized_2', hash_or_height=111) + + for use_index in {True, False, None}: + assert_raises_rpc_error(-8, msg, self.nodes[1].gettxoutsetinfo, hash_type='hash_serialized_2', hash_or_height=111, use_index=use_index) + if __name__ == '__main__': CoinStatsIndexTest().main()