Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
07ea998
partial bitcoin#24595: move g_versionbitscache global to ChainstateMa…
kwvg Dec 19, 2025
b25e4fd
refactor: adapt ProTx logic to `DeploymentActive{At,After}`
kwvg Dec 19, 2025
a223b8c
refactor: adapt CbTx, CreditPool logic to `DeploymentActive{At,After}`
kwvg Dec 19, 2025
dc3f6bd
trivial: force stricter lambda signature for `ForEachMN{,Shared}()`
kwvg Oct 18, 2025
2f9210f
refactor: abstract masternode structures from Qt wallet
kwvg Nov 29, 2025
d4dc191
refactor: adapt LLMQ logic to `DeploymentActive{At,After}`
kwvg Dec 19, 2025
838cfcb
refactor: move `IsQuorumTypeEnabled` to `ChainstateManager`
kwvg Dec 19, 2025
14a77f6
refactor: accept `ChainstateManager` in `CMNHFManager` ctor
kwvg Dec 19, 2025
95d5f97
merge bitcoin#24595: move g_versionbitscache global to ChainstateManager
kwvg Dec 19, 2025
2dc0a25
lint: update circular dependencies allowlist
kwvg Oct 14, 2025
0a13845
merge bitcoin#23508: Add getdeploymentinfo RPC
kwvg Oct 23, 2025
55d401c
merge bitcoin#24187: Followups for getdeploymentinfo
kwvg Oct 11, 2025
c705ea6
merge bitcoin#24528: rename getdeploymentinfo status-next to status_next
kwvg Oct 11, 2025
0a1e55b
merge bitcoin#24579: Fix getblockchaininfo/getdeploymentinfo RPC docs
kwvg Mar 16, 2022
1c10883
merge bitcoin#25412: add `/deploymentinfo` endpoint
kwvg Oct 14, 2025
988c432
refactor: move `BLSInit()` call out of `SanityChecks()`
kwvg Oct 19, 2025
c9b0e51
merge bitcoin#25065: Introduce `kernel::Context`, encapsulate global …
kwvg Mar 3, 2022
43ee958
ArgsMan: Add Get*Arg functions returning optional
kwvg Oct 24, 2021
35d6c41
scripted-diff: Rename DEFAULT_MAX_MEMPOOL_SIZE to indicate SI unit
kwvg Oct 11, 2025
a7f4e85
pool: Add and use MemPoolOptions, ApplyArgsManOptions
kwvg Dec 19, 2025
082976a
mempool: Pass in -maxmempool instead of referencing gArgs
kwvg Oct 11, 2025
c53d751
mempool: Make GetMinFee() with custom size protected
kwvg Jun 27, 2022
f550afa
init: Only determine maxmempool once
kwvg May 18, 2022
6c17b86
mempool: Pass in -mempoolexpiry instead of referencing gArgs
kwvg Oct 28, 2021
197a642
scripted-diff: Rename DEFAULT_MEMPOOL_EXPIRY to indicate time unit
kwvg Oct 11, 2025
98b87c6
scripted-diff: Rename anc/desc size limit vars to indicate SI unit
kwvg Oct 11, 2025
7d73f16
mempool: Introduce (still-unused) MemPoolLimits
kwvg Mar 18, 2022
69b2f92
mempoolaccept: Use limits from mempool in constructor
kwvg Jun 7, 2022
30a71b9
node/ifaces: Use existing MemPoolLimits
kwvg May 18, 2022
582caf6
mempool: Use m_limit for UpdateTransactionsFromBlock
kwvg May 18, 2022
b30dfec
init: Remove redundant -*mempool*, -limit* queries
kwvg Jun 6, 2022
4922ebe
fees: Pass in a filepath instead of referencing gArgs
kwvg Dec 19, 2025
fc3c2d6
merge bitcoin#25290: Decouple `CTxMemPool` from `ArgsManager`
kwvg Oct 11, 2025
14fbd4b
interfaces, refactor: Add more block information to block connected n…
kwvg Jan 13, 2022
118469e
indexes, refactor: Pass Chain interface instead of CChainState class …
kwvg Oct 20, 2025
f59846c
indexes, refactor: Remove CBlockIndex* uses in coinstatsindex LookUpO…
kwvg Jan 17, 2022
52d8a74
indexes, refactor: Remove CBlockIndex* uses in index Init methods
kwvg Jan 17, 2022
275efd6
refactor: drop `fV20Active` where possible
kwvg Oct 20, 2025
7ffddd2
indexes, refactor: Remove CBlockIndex* uses in index WriteBlock methods
kwvg Jan 18, 2022
5784cbe
indexes, refactor: Remove CBlockIndex* uses in index Rewind methods
kwvg Jan 18, 2022
e03e18e
indexes, refactor: Remove CChainState use in index CommitInternal method
kwvg Jan 18, 2022
c79521c
merge bitcoin#25494: Stop using node internal types
kwvg Oct 20, 2025
bf6b5a4
merge bitcoin#25439: Return incrementalrelayfee in getmempoolinfo
kwvg Jun 21, 2022
5996724
merge bitcoin#25648: Remove all policy globals
kwvg Oct 20, 2025
c521a98
merge bitcoin#25772: Add missing static to IsStandardTx helper
kwvg Oct 20, 2025
3c85e8a
merge bitcoin#25222: Pass reference to LookUpStats
kwvg May 26, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ci/dash/lint-tidy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ iwyu_tool.py \
"src/init" \
"src/node/chainstate.cpp" \
"src/node/minisketchwrapper.cpp" \
"src/node/mempool_args.cpp" \
"src/policy/feerate.cpp" \
"src/policy/packages.cpp" \
"src/policy/settings.cpp" \
Expand Down
9 changes: 9 additions & 0 deletions doc/REST-interface.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,15 @@ Returns various state info regarding block chain processing.
Only supports JSON as output format.
Refer to the `getblockchaininfo` RPC help for details.

#### Deployment info
`GET /rest/deploymentinfo.json`
`GET /rest/deploymentinfo/<BLOCKHASH>.json`

Returns an object containing various state info regarding deployments of
consensus changes at the current chain tip, or at <BLOCKHASH> if provided.
Only supports JSON as output format.
Refer to the `getdeploymentinfo` RPC help for details.

#### Query UTXO set
- `GET /rest/getutxos/<TXID>-<N>/<TXID>-<N>/.../<TXID>-<N>.<bin|hex|json>`
- `GET /rest/getutxos/checkmempool/<TXID>-<N>/<TXID>-<N>/.../<TXID>-<N>.<bin|hex|json>`
Expand Down
17 changes: 17 additions & 0 deletions doc/release-notes-6888.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Updated RPCs
------------

- Information on soft fork status has been moved from `getblockchaininfo`
to the new `getdeploymentinfo` RPC which allows querying soft fork status at any
block, rather than just at the chain tip. Inclusion of soft fork
status in `getblockchaininfo` can currently be restored using the
configuration `-deprecatedrpc=softforks`, but this will be removed in
a future release. Note that in either case, the `status` field
now reflects the status of the current block rather than the next
block.

New REST endpoint
-----------------

- A new `/rest/deploymentinfo` endpoint has been added for fetching various
state info regarding deployments of consensus changes.
16 changes: 14 additions & 2 deletions src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,12 @@ BITCOIN_CORE_H = \
instantsend/lock.h \
instantsend/net_instantsend.h \
instantsend/signing.h \
kernel/chain.h \
kernel/checks.h \
kernel/coinstats.h \
kernel/context.h \
kernel/mempool_limits.h \
kernel/mempool_options.h \
key.h \
key_io.h \
limitedmap.h \
Expand Down Expand Up @@ -315,18 +320,20 @@ BITCOIN_CORE_H = \
node/connection_types.h \
node/context.h \
node/eviction.h \
node/interface_ui.h \
node/mempool_args.h \
node/miner.h \
node/minisketchwrapper.h \
node/psbt.h \
node/sync_manager.h \
node/transaction.h \
node/txreconciliation.h \
node/interface_ui.h \
node/utxo_snapshot.h \
noui.h \
outputtype.h \
policy/feerate.h \
policy/fees.h \
policy/fees_args.h \
policy/packages.h \
policy/policy.h \
policy/settings.h \
Expand Down Expand Up @@ -536,7 +543,10 @@ libbitcoin_node_a_SOURCES = \
instantsend/lock.cpp \
instantsend/net_instantsend.cpp \
instantsend/signing.cpp \
kernel/chain.cpp \
kernel/checks.cpp \
kernel/coinstats.cpp \
kernel/context.cpp \
llmq/blockprocessor.cpp \
llmq/commitment.cpp \
llmq/context.cpp \
Expand Down Expand Up @@ -572,16 +582,18 @@ libbitcoin_node_a_SOURCES = \
node/connection_types.cpp \
node/context.cpp \
node/eviction.cpp \
node/interface_ui.cpp \
node/interfaces.cpp \
node/mempool_args.cpp \
node/miner.cpp \
node/minisketchwrapper.cpp \
node/psbt.cpp \
node/sync_manager.cpp \
node/transaction.cpp \
node/txreconciliation.cpp \
node/interface_ui.cpp \
noui.cpp \
policy/fees.cpp \
policy/fees_args.cpp \
policy/packages.cpp \
policy/policy.cpp \
policy/settings.cpp \
Expand Down
2 changes: 1 addition & 1 deletion src/bench/duplicate_inputs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ static void DuplicateInputs(benchmark::Bench& bench)
coinbaseTx.vin[0].prevout.SetNull();
coinbaseTx.vout.resize(1);
coinbaseTx.vout[0].scriptPubKey = SCRIPT_PUB;
coinbaseTx.vout[0].nValue = GetBlockSubsidyInner(block.nBits, nHeight, chainparams.GetConsensus(), /*fV20Active=*/ false);
coinbaseTx.vout[0].nValue = GetBlockSubsidyInner(block.nBits, nHeight, chainparams.GetConsensus(), /*is_v20_active_override=*/false);
coinbaseTx.vin[0].scriptSig = CScript() << nHeight << OP_0;

naughtyTx.vout.resize(1);
Expand Down
5 changes: 4 additions & 1 deletion src/bitcoind.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,11 +193,14 @@ static bool AppInit(NodeContext& node, int argc, char* argv[])
// InitError will have been called with detailed error, which ends up on console
return false;
}
if (!AppInitSanityChecks())

node.kernel = std::make_unique<kernel::Context>();
if (!AppInitSanityChecks(*node.kernel))
{
// InitError will have been called with detailed error, which ends up on console
return false;
}

if (args.GetBoolArg("-daemon", DEFAULT_DAEMON) || args.GetBoolArg("-daemonwait", DEFAULT_DAEMONWAIT)) {
#if HAVE_DECL_FORK
tfm::format(std::cout, PACKAGE_NAME " starting\n");
Expand Down
8 changes: 3 additions & 5 deletions src/bls/bls.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,6 @@ bool CBLSSignature::Recover(Span<CBLSSignature> sigs, Span<CBLSId> ids)
}

#ifndef BUILD_BITCOIN_INTERNAL

static std::once_flag init_flag;
static mt_pooled_secure_allocator<uint8_t>* secure_allocator_instance;
static void create_secure_allocator()
Expand Down Expand Up @@ -423,12 +422,11 @@ static void secure_free(void* p)
size_t n = *reinterpret_cast<size_t*>(ptr);
return get_secure_allocator().deallocate(ptr, n);
}
#endif
#endif // BUILD_BITCOIN_INTERNAL

bool BLSInit()
void BLSInit()
{
#ifndef BUILD_BITCOIN_INTERNAL
bls::BLS::SetSecureAllocator(secure_allocate, secure_free);
#endif
return true;
#endif // BUILD_BITCOIN_INTERNAL
}
2 changes: 1 addition & 1 deletion src/bls/bls.h
Original file line number Diff line number Diff line change
Expand Up @@ -594,6 +594,6 @@ class CBLSLazyPublicKeyVersionWrapper {

using BLSVerificationVectorPtr = std::shared_ptr<std::vector<CBLSPublicKey>>;

bool BLSInit();
void BLSInit();

#endif // DASH_CRYPTO_BLS_H
5 changes: 2 additions & 3 deletions src/coinjoin/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1044,9 +1044,8 @@ CDeterministicMNCPtr CCoinJoinClientManager::GetRandomNotUsedMasternode()
// fill a vector
std::vector<CDeterministicMNCPtr> vpMasternodesShuffled;
vpMasternodesShuffled.reserve(nCountEnabled);
mnList.ForEachMNShared(true, [&vpMasternodesShuffled](const CDeterministicMNCPtr& dmn) {
vpMasternodesShuffled.emplace_back(dmn);
});
mnList.ForEachMNShared(/*onlyValid=*/true,
[&vpMasternodesShuffled](const auto& dmn) { vpMasternodesShuffled.emplace_back(dmn); });

// shuffle pointers
Shuffle(vpMasternodesShuffled.begin(), vpMasternodesShuffled.end(), FastRandomContext());
Expand Down
2 changes: 0 additions & 2 deletions src/deploymentstatus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@

#include <type_traits>

VersionBitsCache g_versionbitscache;

/* Basic sanity checking for BuriedDeployment/DeploymentPos enums and
* ValidDeployment check */

Expand Down
11 changes: 4 additions & 7 deletions src/deploymentstatus.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,17 @@

#include <limits>

/** Global cache for versionbits deployment status */
extern VersionBitsCache g_versionbitscache;

/** Determine if a deployment is active for the next block */
inline bool DeploymentActiveAfter(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::BuriedDeployment dep)
{
assert(Consensus::ValidDeployment(dep));
return (pindexPrev == nullptr ? 0 : pindexPrev->nHeight + 1) >= params.DeploymentHeight(dep);
}

inline bool DeploymentActiveAfter(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::DeploymentPos dep)
inline bool DeploymentActiveAfter(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::DeploymentPos dep, VersionBitsCache& versionbitscache)
{
assert(Consensus::ValidDeployment(dep));
return ThresholdState::ACTIVE == g_versionbitscache.State(pindexPrev, params, dep);
return ThresholdState::ACTIVE == versionbitscache.State(pindexPrev, params, dep);
}

/** Determine if a deployment is active for this block */
Expand All @@ -33,10 +30,10 @@ inline bool DeploymentActiveAt(const CBlockIndex& index, const Consensus::Params
return index.nHeight >= params.DeploymentHeight(dep);
}

inline bool DeploymentActiveAt(const CBlockIndex& index, const Consensus::Params& params, Consensus::DeploymentPos dep)
inline bool DeploymentActiveAt(const CBlockIndex& index, const Consensus::Params& params, Consensus::DeploymentPos dep, VersionBitsCache& versionbitscache)
{
assert(Consensus::ValidDeployment(dep));
return DeploymentActiveAfter(index.pprev, params, dep);
return DeploymentActiveAfter(index.pprev, params, dep, versionbitscache);
}

/** Determine if a deployment is enabled (can ever be active) */
Expand Down
31 changes: 16 additions & 15 deletions src/evo/creditpool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ static std::optional<CreditPoolDataPerBlock> GetCreditDataFromBlock(const gsl::n
const Consensus::Params& consensusParams)
{
// There's no CbTx before DIP0003 activation
if (!DeploymentActiveAt(*block_index, Params().GetConsensus(), Consensus::DEPLOYMENT_DIP0003)) {
if (!DeploymentActiveAt(*block_index, consensusParams, Consensus::DEPLOYMENT_DIP0003)) {
return std::nullopt;
}

Expand Down Expand Up @@ -117,7 +117,7 @@ std::string CCreditPool::ToString() const

std::optional<CCreditPool> CCreditPoolManager::GetFromCache(const CBlockIndex& block_index)
{
if (!DeploymentActiveAt(block_index, Params().GetConsensus(), Consensus::DEPLOYMENT_V20)) return CCreditPool{};
if (!DeploymentActiveAt(block_index, m_chainman.GetConsensus(), Consensus::DEPLOYMENT_V20)) return CCreditPool{};

const uint256 block_hash = block_index.GetBlockHash();
CCreditPool pool;
Expand Down Expand Up @@ -148,10 +148,9 @@ void CCreditPoolManager::AddToCache(const uint256& block_hash, int height, const
}
}

CCreditPool CCreditPoolManager::ConstructCreditPool(const gsl::not_null<const CBlockIndex*> block_index,
CCreditPool prev, const Consensus::Params& consensusParams)
CCreditPool CCreditPoolManager::ConstructCreditPool(const gsl::not_null<const CBlockIndex*> block_index, CCreditPool prev)
{
std::optional<CreditPoolDataPerBlock> opt_block_data = GetCreditDataFromBlock(block_index, consensusParams);
std::optional<CreditPoolDataPerBlock> opt_block_data = GetCreditDataFromBlock(block_index, m_chainman.GetConsensus());
if (!opt_block_data) {
// If reading of previous block is not successfully, but
// prev contains credit pool related data, something strange happened
Expand All @@ -178,20 +177,21 @@ CCreditPool CCreditPoolManager::ConstructCreditPool(const gsl::not_null<const CB
}

const CBlockIndex* distant_block_index{
block_index->GetAncestor(block_index->nHeight - Params().CreditPoolPeriodBlocks())};
block_index->GetAncestor(block_index->nHeight - m_chainman.GetParams().CreditPoolPeriodBlocks())};
CAmount distantUnlocked{0};
if (distant_block_index) {
if (std::optional<CreditPoolDataPerBlock> distant_block{GetCreditDataFromBlock(distant_block_index, consensusParams)};
if (std::optional<CreditPoolDataPerBlock> distant_block{
GetCreditDataFromBlock(distant_block_index, m_chainman.GetConsensus())};
distant_block) {
distantUnlocked = distant_block->unlocked;
}
}

CAmount currentLimit = blockData.credit_pool;
const CAmount latelyUnlocked = prev.latelyUnlocked + blockData.unlocked - distantUnlocked;
if (DeploymentActiveAt(*block_index, Params().GetConsensus(), Consensus::DEPLOYMENT_V24)) {
if (DeploymentActiveAt(*block_index, m_chainman, Consensus::DEPLOYMENT_V24)) {
currentLimit = std::max(CAmount(0), std::min(currentLimit, LimitAmountV24 - latelyUnlocked));
} else if (DeploymentActiveAt(*block_index, Params().GetConsensus(), Consensus::DEPLOYMENT_WITHDRAWALS)) {
} else if (DeploymentActiveAt(*block_index, m_chainman.GetConsensus(), Consensus::DEPLOYMENT_WITHDRAWALS)) {
currentLimit = std::min(currentLimit, LimitAmountV22);
} else {
// Unlock limits in pre-v22 are max(100, min(.10 * assetlockpool, 1000)) inside window
Expand Down Expand Up @@ -221,7 +221,7 @@ CCreditPool CCreditPoolManager::ConstructCreditPool(const gsl::not_null<const CB

}

CCreditPool CCreditPoolManager::GetCreditPool(const CBlockIndex* block_index, const Consensus::Params& consensusParams)
CCreditPool CCreditPoolManager::GetCreditPool(const CBlockIndex* block_index)
{
std::stack<gsl::not_null<const CBlockIndex*>> to_calculate;

Expand All @@ -232,14 +232,15 @@ CCreditPool CCreditPoolManager::GetCreditPool(const CBlockIndex* block_index, co
}
if (block_index == nullptr) poolTmp = CCreditPool{};
while (!to_calculate.empty()) {
poolTmp = ConstructCreditPool(to_calculate.top(), *poolTmp, consensusParams);
poolTmp = ConstructCreditPool(to_calculate.top(), *poolTmp);
to_calculate.pop();
}
return *poolTmp;
}

CCreditPoolManager::CCreditPoolManager(CEvoDB& _evoDb) :
evoDb{_evoDb}
CCreditPoolManager::CCreditPoolManager(CEvoDB& _evoDb, const ChainstateManager& chainman) :
evoDb{_evoDb},
m_chainman{chainman}
{
}

Expand All @@ -254,7 +255,7 @@ CCreditPoolDiff::CCreditPoolDiff(CCreditPool starter, const CBlockIndex* pindexP

if (DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_MN_RR)) {
// If credit pool exists, it means v20 is activated
platformReward = PlatformShare(GetMasternodePayment(pindexPrev->nHeight + 1, blockSubsidy, /*fV20Active=*/ true));
platformReward = PlatformShare(GetMasternodePayment(pindexPrev->nHeight + 1, blockSubsidy, consensusParams));
}
}

Expand Down Expand Up @@ -326,7 +327,7 @@ std::optional<CCreditPoolDiff> GetCreditPoolDiffForBlock(CCreditPoolManager& cpo
const CAmount blockSubsidy, BlockValidationState& state)
{
try {
const CCreditPool creditPool = cpoolman.GetCreditPool(pindexPrev, consensusParams);
const CCreditPool creditPool = cpoolman.GetCreditPool(pindexPrev);
LogPrint(BCLog::CREDITPOOL, "%s: CCreditPool is %s\n", __func__, creditPool.ToString());
CCreditPoolDiff creditPoolDiff(creditPool, pindexPrev, consensusParams, blockSubsidy);
for (size_t i = 1; i < block.vtx.size(); ++i) {
Expand Down
14 changes: 8 additions & 6 deletions src/evo/creditpool.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@
#include <evo/assetlocktx.h>

#include <gsl/pointers.h>

#include <optional>
#include <unordered_set>

class BlockValidationState;
class CBlock;
class CBlockIndex;
class BlockValidationState;
class ChainstateManager;
class CEvoDB;
class TxValidationState;
namespace Consensus {
Expand Down Expand Up @@ -114,6 +116,7 @@ class CCreditPoolManager
Uint256LruHashMap<CCreditPool> creditPoolCache GUARDED_BY(cache_mutex){CreditPoolCacheSize};

CEvoDB& evoDb;
const ChainstateManager& m_chainman;

static constexpr int DISK_SNAPSHOT_PERIOD = 576; // once per day

Expand All @@ -126,23 +129,22 @@ class CCreditPoolManager
CCreditPoolManager() = delete;
CCreditPoolManager(const CCreditPoolManager&) = delete;
CCreditPoolManager& operator=(const CCreditPoolManager&) = delete;
explicit CCreditPoolManager(CEvoDB& _evoDb);
explicit CCreditPoolManager(CEvoDB& _evoDb, const ChainstateManager& chainman);
~CCreditPoolManager();

/**
* @return CCreditPool with data or with empty depends on activation V19 at that block
* In case if block is invalid the function GetCreditPool throws an exception
* it can happen if there limits of withdrawal (unlock) exceed
*/
CCreditPool GetCreditPool(const CBlockIndex* block, const Consensus::Params& consensusParams)
EXCLUSIVE_LOCKS_REQUIRED(!cache_mutex);
CCreditPool GetCreditPool(const CBlockIndex* block) EXCLUSIVE_LOCKS_REQUIRED(!cache_mutex);

private:
std::optional<CCreditPool> GetFromCache(const CBlockIndex& block_index) EXCLUSIVE_LOCKS_REQUIRED(!cache_mutex);
void AddToCache(const uint256& block_hash, int height, const CCreditPool& pool) EXCLUSIVE_LOCKS_REQUIRED(!cache_mutex);

CCreditPool ConstructCreditPool(const gsl::not_null<const CBlockIndex*> block_index, CCreditPool prev,
const Consensus::Params& consensusParams) EXCLUSIVE_LOCKS_REQUIRED(!cache_mutex);
CCreditPool ConstructCreditPool(const gsl::not_null<const CBlockIndex*> block_index, CCreditPool prev)
EXCLUSIVE_LOCKS_REQUIRED(!cache_mutex);
};

std::optional<CCreditPoolDiff> GetCreditPoolDiffForBlock(CCreditPoolManager& cpoolman, const node::BlockManager& blockman, const llmq::CQuorumManager& qman,
Expand Down
Loading
Loading