Skip to content

Commit 191b3de

Browse files
committed
refactor: move CheckSpecialTx into CSpecialTxProcessor
1 parent 91f4588 commit 191b3de

File tree

5 files changed

+54
-39
lines changed

5 files changed

+54
-39
lines changed

src/evo/specialtxman.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ static bool CheckSpecialTxInner(CDeterministicMNManager& dmnman, const CTransact
7272
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-tx-type-check");
7373
}
7474

75-
bool CheckSpecialTx(CDeterministicMNManager& dmnman, const CTransaction& tx, const CBlockIndex* pindexPrev, const CCoinsViewCache& view, bool check_sigs, TxValidationState& state)
75+
bool CSpecialTxProcessor::CheckSpecialTx(const CTransaction& tx, const CBlockIndex* pindexPrev, const CCoinsViewCache& view, bool check_sigs, TxValidationState& state)
7676
{
7777
AssertLockHeld(cs_main);
78-
return CheckSpecialTxInner(dmnman, tx, pindexPrev, view, std::nullopt, check_sigs, state);
78+
return CheckSpecialTxInner(m_dmnman, tx, pindexPrev, view, std::nullopt, check_sigs, state);
7979
}
8080

8181
[[nodiscard]] bool CSpecialTxProcessor::ProcessSpecialTx(const CTransaction& tx, const CBlockIndex* pindex, TxValidationState& state)

src/evo/specialtxman.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ class CChainLocksHandler;
2929

3030
extern RecursiveMutex cs_main;
3131

32-
bool CheckSpecialTx(CDeterministicMNManager& dmnman, const CTransaction& tx, const CBlockIndex* pindexPrev,
33-
const CCoinsViewCache& view, bool check_sigs, TxValidationState& state) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
34-
3532
class CSpecialTxProcessor
3633
{
3734
private:
@@ -51,6 +48,8 @@ class CSpecialTxProcessor
5148
const Consensus::Params& consensus_params, const llmq::CChainLocksHandler& clhandler) :
5249
m_cpoolman(cpoolman), m_dmnman{dmnman}, m_mnhfman{mnhfman}, m_qblockman{qblockman}, m_consensus_params{consensus_params}, m_clhandler{clhandler} {}
5350

51+
bool CheckSpecialTx(const CTransaction& tx, const CBlockIndex* pindexPrev, const CCoinsViewCache& view, bool check_sigs, TxValidationState& state)
52+
EXCLUSIVE_LOCKS_REQUIRED(cs_main);
5453
bool ProcessSpecialTxsInBlock(const CBlock& block, const CBlockIndex* pindex, const CCoinsViewCache& view, bool fJustCheck,
5554
bool fCheckCbTxMerkleRoots, BlockValidationState& state, std::optional<MNListUpdates>& updatesRet)
5655
EXCLUSIVE_LOCKS_REQUIRED(cs_main);

src/rpc/evo.cpp

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <consensus/validation.h>
99
#include <core_io.h>
1010
#include <deploymentstatus.h>
11+
#include <evo/chainhelper.h>
1112
#include <evo/deterministicmns.h>
1213
#include <evo/dmn_types.h>
1314
#include <evo/providertx.h>
@@ -324,13 +325,13 @@ static void SignSpecialTxPayloadByHash(const CMutableTransaction& tx, SpecialTxP
324325
payload.sig = key.Sign(hash);
325326
}
326327

327-
static std::string SignAndSendSpecialTx(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman, const CMutableTransaction& tx, bool fSubmit = true)
328+
static std::string SignAndSendSpecialTx(const JSONRPCRequest& request, CChainstateHelper& chain_helper, const ChainstateManager& chainman, const CMutableTransaction& tx, bool fSubmit = true)
328329
{
329330
{
330331
LOCK(cs_main);
331332

332333
TxValidationState state;
333-
if (!CheckSpecialTx(dmnman, CTransaction(tx), chainman.ActiveChain().Tip(), chainman.ActiveChainstate().CoinsTip(), true, state)) {
334+
if (!chain_helper.special_tx->CheckSpecialTx(CTransaction(tx), chainman.ActiveChain().Tip(), chainman.ActiveChainstate().CoinsTip(), true, state)) {
334335
throw std::runtime_error(state.ToString());
335336
}
336337
} // cs_main
@@ -579,7 +580,7 @@ static void protx_register_prepare_evo_help(const JSONRPCRequest& request)
579580
}
580581

581582
static UniValue protx_register_common_wrapper(const JSONRPCRequest& request,
582-
CDeterministicMNManager& dmnman,
583+
CChainstateHelper& chain_helper,
583584
const ChainstateManager& chainman,
584585
const bool specific_legacy_bls_scheme,
585586
const bool isExternalRegister,
@@ -739,7 +740,7 @@ static UniValue protx_register_common_wrapper(const JSONRPCRequest& request,
739740
ptx.collateralOutpoint.n = collateralIndex;
740741

741742
SetTxPayload(tx, ptx);
742-
return SignAndSendSpecialTx(request, dmnman, chainman, tx, fSubmit);
743+
return SignAndSendSpecialTx(request, chain_helper, chainman, tx, fSubmit);
743744
} else {
744745
// referencing external collateral
745746

@@ -787,7 +788,7 @@ static UniValue protx_register_common_wrapper(const JSONRPCRequest& request,
787788
}
788789
SignSpecialTxPayloadByString(tx, ptx, key);
789790
SetTxPayload(tx, ptx);
790-
return SignAndSendSpecialTx(request, dmnman, chainman, tx, fSubmit);
791+
return SignAndSendSpecialTx(request, chain_helper, chainman, tx, fSubmit);
791792
}
792793
} catch (...) {
793794
if (unlockOnError) {
@@ -798,7 +799,7 @@ static UniValue protx_register_common_wrapper(const JSONRPCRequest& request,
798799
}
799800
}
800801

801-
static UniValue protx_register_evo(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
802+
static UniValue protx_register_evo(const JSONRPCRequest& request, CChainstateHelper& chain_helper, const ChainstateManager& chainman)
802803
{
803804
bool isExternalRegister = request.strMethod == "protxregister_evo";
804805
bool isFundRegister = request.strMethod == "protxregister_fund_evo";
@@ -811,26 +812,26 @@ static UniValue protx_register_evo(const JSONRPCRequest& request, CDeterministic
811812
isFundRegister = request.strMethod == "protxregister_fund_hpmn";
812813
isPrepareRegister = request.strMethod == "protxregister_prepare_hpmn";
813814
}
814-
return protx_register_common_wrapper(request, dmnman, chainman, false, isExternalRegister, isFundRegister, isPrepareRegister, MnType::Evo);
815+
return protx_register_common_wrapper(request, chain_helper, chainman, false, isExternalRegister, isFundRegister, isPrepareRegister, MnType::Evo);
815816
}
816817

817-
static UniValue protx_register(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
818+
static UniValue protx_register(const JSONRPCRequest& request, CChainstateHelper& chain_helper, const ChainstateManager& chainman)
818819
{
819820
bool isExternalRegister = request.strMethod == "protxregister";
820821
bool isFundRegister = request.strMethod == "protxregister_fund";
821822
bool isPrepareRegister = request.strMethod == "protxregister_prepare";
822-
return protx_register_common_wrapper(request, dmnman, chainman, false, isExternalRegister, isFundRegister, isPrepareRegister, MnType::Regular);
823+
return protx_register_common_wrapper(request, chain_helper, chainman, false, isExternalRegister, isFundRegister, isPrepareRegister, MnType::Regular);
823824
}
824825

825-
static UniValue protx_register_legacy(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
826+
static UniValue protx_register_legacy(const JSONRPCRequest& request, CChainstateHelper& chain_helper, const ChainstateManager& chainman)
826827
{
827828
bool isExternalRegister = request.strMethod == "protxregister_legacy";
828829
bool isFundRegister = request.strMethod == "protxregister_fund_legacy";
829830
bool isPrepareRegister = request.strMethod == "protxregister_prepare_legacy";
830-
return protx_register_common_wrapper(request, dmnman, chainman, true, isExternalRegister, isFundRegister, isPrepareRegister, MnType::Regular);
831+
return protx_register_common_wrapper(request, chain_helper, chainman, true, isExternalRegister, isFundRegister, isPrepareRegister, MnType::Regular);
831832
}
832833

833-
static UniValue protx_register_submit(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
834+
static UniValue protx_register_submit(const JSONRPCRequest& request, CChainstateHelper& chain_helper, const ChainstateManager& chainman)
834835
{
835836
protx_register_submit_help(request);
836837

@@ -863,7 +864,7 @@ static UniValue protx_register_submit(const JSONRPCRequest& request, CDeterminis
863864
}
864865

865866
SetTxPayload(tx, ptx);
866-
return SignAndSendSpecialTx(request, dmnman, chainman, tx);
867+
return SignAndSendSpecialTx(request, chain_helper, chainman, tx);
867868
}
868869

869870
static void protx_update_service_help(const JSONRPCRequest& request)
@@ -914,7 +915,7 @@ static void protx_update_service_evo_help(const JSONRPCRequest& request)
914915
}.Check(request);
915916
}
916917

917-
static UniValue protx_update_service_common_wrapper(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman, const MnType mnType)
918+
static UniValue protx_update_service_common_wrapper(const JSONRPCRequest& request, CChainstateHelper& chain_helper, CDeterministicMNManager& dmnman, const ChainstateManager& chainman, const MnType mnType)
918919
{
919920
if (request.strMethod.find("_hpmn") != std::string::npos) {
920921
if (!IsDeprecatedRPCEnabled("hpmn")) {
@@ -1026,7 +1027,7 @@ static UniValue protx_update_service_common_wrapper(const JSONRPCRequest& reques
10261027
SignSpecialTxPayloadByHash(tx, ptx, keyOperator);
10271028
SetTxPayload(tx, ptx);
10281029

1029-
return SignAndSendSpecialTx(request, dmnman, chainman, tx);
1030+
return SignAndSendSpecialTx(request, chain_helper, chainman, tx);
10301031
}
10311032

10321033
static void protx_update_registrar_help(const JSONRPCRequest& request, bool legacy)
@@ -1056,7 +1057,7 @@ static void protx_update_registrar_help(const JSONRPCRequest& request, bool lega
10561057
}.Check(request);
10571058
}
10581059

1059-
static UniValue protx_update_registrar_wrapper(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman, const bool specific_legacy_bls_scheme)
1060+
static UniValue protx_update_registrar_wrapper(const JSONRPCRequest& request, CChainstateHelper& chain_helper, CDeterministicMNManager& dmnman, const ChainstateManager& chainman, const bool specific_legacy_bls_scheme)
10601061
{
10611062
protx_update_registrar_help(request, specific_legacy_bls_scheme);
10621063

@@ -1131,17 +1132,17 @@ static UniValue protx_update_registrar_wrapper(const JSONRPCRequest& request, CD
11311132
SignSpecialTxPayloadByHash(tx, ptx, keyOwner);
11321133
SetTxPayload(tx, ptx);
11331134

1134-
return SignAndSendSpecialTx(request, dmnman, chainman, tx);
1135+
return SignAndSendSpecialTx(request, chain_helper, chainman, tx);
11351136
}
11361137

1137-
static UniValue protx_update_registrar(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
1138+
static UniValue protx_update_registrar(const JSONRPCRequest& request, CChainstateHelper& chain_helper, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
11381139
{
1139-
return protx_update_registrar_wrapper(request, dmnman, chainman, false);
1140+
return protx_update_registrar_wrapper(request, chain_helper, dmnman, chainman, false);
11401141
}
11411142

1142-
static UniValue protx_update_registrar_legacy(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
1143+
static UniValue protx_update_registrar_legacy(const JSONRPCRequest& request, CChainstateHelper& chain_helper, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
11431144
{
1144-
return protx_update_registrar_wrapper(request, dmnman, chainman, true);
1145+
return protx_update_registrar_wrapper(request, chain_helper, dmnman, chainman, true);
11451146
}
11461147

11471148
static void protx_revoke_help(const JSONRPCRequest& request)
@@ -1167,7 +1168,7 @@ static void protx_revoke_help(const JSONRPCRequest& request)
11671168
}.Check(request);
11681169
}
11691170

1170-
static UniValue protx_revoke(const JSONRPCRequest& request, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
1171+
static UniValue protx_revoke(const JSONRPCRequest& request, CChainstateHelper& chain_helper, CDeterministicMNManager& dmnman, const ChainstateManager& chainman)
11711172
{
11721173
protx_revoke_help(request);
11731174

@@ -1227,7 +1228,7 @@ static UniValue protx_revoke(const JSONRPCRequest& request, CDeterministicMNMana
12271228
SignSpecialTxPayloadByHash(tx, ptx, keyOperator);
12281229
SetTxPayload(tx, ptx);
12291230

1230-
return SignAndSendSpecialTx(request, dmnman, chainman, tx);
1231+
return SignAndSendSpecialTx(request, chain_helper, chainman, tx);
12311232
}
12321233

12331234
#endif//ENABLE_WALLET
@@ -1676,24 +1677,27 @@ static UniValue protx(const JSONRPCRequest& request)
16761677
CMasternodeMetaMan& mn_metaman = *node.mn_metaman;
16771678

16781679
#ifdef ENABLE_WALLET
1680+
CHECK_NONFATAL(node.chain_helper);
1681+
CChainstateHelper& chain_helper = *node.chain_helper;
1682+
16791683
if (command == "protxregister" || command == "protxregister_fund" || command == "protxregister_prepare") {
1680-
return protx_register(new_request, dmnman, chainman);
1684+
return protx_register(new_request, chain_helper, chainman);
16811685
} else if (command == "protxregister_evo" || command == "protxregister_fund_evo" || command == "protxregister_prepare_evo" || command == "protxregister_hpmn" || command == "protxregister_fund_hpmn" || command == "protxregister_prepare_hpmn") {
1682-
return protx_register_evo(new_request, dmnman, chainman);
1686+
return protx_register_evo(new_request, chain_helper, chainman);
16831687
} else if (command == "protxregister_legacy" || command == "protxregister_fund_legacy" || command == "protxregister_prepare_legacy") {
1684-
return protx_register_legacy(new_request, dmnman, chainman);
1688+
return protx_register_legacy(new_request, chain_helper, chainman);
16851689
} else if (command == "protxregister_submit") {
1686-
return protx_register_submit(new_request, dmnman, chainman);
1690+
return protx_register_submit(new_request, chain_helper, chainman);
16871691
} else if (command == "protxupdate_service") {
1688-
return protx_update_service_common_wrapper(new_request, dmnman, chainman, MnType::Regular);
1692+
return protx_update_service_common_wrapper(new_request, chain_helper, dmnman, chainman, MnType::Regular);
16891693
} else if (command == "protxupdate_service_evo" || command == "protxupdate_service_hpmn") {
1690-
return protx_update_service_common_wrapper(new_request, dmnman, chainman, MnType::Evo);
1694+
return protx_update_service_common_wrapper(new_request, chain_helper, dmnman, chainman, MnType::Evo);
16911695
} else if (command == "protxupdate_registrar") {
1692-
return protx_update_registrar(new_request, dmnman, chainman);
1696+
return protx_update_registrar(new_request, chain_helper, dmnman, chainman);
16931697
} else if (command == "protxupdate_registrar_legacy") {
1694-
return protx_update_registrar_legacy(new_request, dmnman, chainman);
1698+
return protx_update_registrar_legacy(new_request, chain_helper, dmnman, chainman);
16951699
} else if (command == "protxrevoke") {
1696-
return protx_revoke(new_request, dmnman, chainman);
1700+
return protx_revoke(new_request, chain_helper, dmnman, chainman);
16971701
} else
16981702
#endif
16991703
if (command == "protxlist") {

src/validation.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,12 @@ namespace {
529529
class MemPoolAccept
530530
{
531531
public:
532-
explicit MemPoolAccept(CTxMemPool& mempool, CChainState& active_chainstate) : m_pool(mempool), m_view(&m_dummy), m_viewmempool(&active_chainstate.CoinsTip(), m_pool), m_active_chainstate(active_chainstate),
532+
explicit MemPoolAccept(CTxMemPool& mempool, CChainState& active_chainstate) :
533+
m_pool(mempool),
534+
m_view(&m_dummy),
535+
m_viewmempool(&active_chainstate.CoinsTip(), m_pool),
536+
m_active_chainstate(active_chainstate),
537+
m_chain_helper(active_chainstate.ChainHelper()),
533538
m_limit_ancestors(gArgs.GetArg("-limitancestorcount", DEFAULT_ANCESTOR_LIMIT)),
534539
m_limit_ancestor_size(gArgs.GetArg("-limitancestorsize", DEFAULT_ANCESTOR_SIZE_LIMIT)*1000),
535540
m_limit_descendants(gArgs.GetArg("-limitdescendantcount", DEFAULT_DESCENDANT_LIMIT)),
@@ -621,6 +626,7 @@ class MemPoolAccept
621626
CCoinsViewMemPool m_viewmempool;
622627
CCoinsView m_dummy;
623628
CChainState& m_active_chainstate;
629+
CChainstateHelper& m_chain_helper;
624630

625631
// The package limits in effect at the time of invocation.
626632
const size_t m_limit_ancestors;
@@ -830,7 +836,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
830836
// DoS scoring a node for non-critical errors, e.g. duplicate keys because a TX is received that was already
831837
// mined
832838
// NOTE: we use UTXO here and do NOT allow mempool txes as masternode collaterals
833-
if (!CheckSpecialTx(*::deterministicMNManager, tx, m_active_chainstate.m_chain.Tip(), m_active_chainstate.CoinsTip(), true, state))
839+
if (!m_chain_helper.special_tx->CheckSpecialTx(tx, m_active_chainstate.m_chain.Tip(), m_active_chainstate.CoinsTip(), true, state))
834840
return false;
835841

836842
if (m_pool.existsProviderTxConflict(tx)) {

src/validation.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,12 @@ class CChainState
718718
*/
719719
std::set<CBlockIndex*, CBlockIndexWorkComparator> setBlockIndexCandidates;
720720

721+
CChainstateHelper& ChainHelper()
722+
{
723+
assert(m_chain_helper);
724+
return *m_chain_helper;
725+
}
726+
721727
//! @returns A reference to the in-memory cache of the UTXO set.
722728
CCoinsViewCache& CoinsTip() EXCLUSIVE_LOCKS_REQUIRED(cs_main)
723729
{

0 commit comments

Comments
 (0)