mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 20:42:59 +01:00
refactor: new method listMNCollaterials() for chain interface
This commit is contained in:
parent
4966bf7582
commit
2c61d842a9
@ -141,6 +141,8 @@ public:
|
||||
//! Check if block is chainlocked.
|
||||
virtual bool hasChainLock(int height, const uint256& hash) = 0;
|
||||
|
||||
//! Return list of MN Collateral from outputs
|
||||
virtual std::vector<COutPoint> listMNCollaterials(const std::vector<std::pair<const CTransactionRef&, unsigned int>>& outputs) = 0;
|
||||
//! Return whether node has the block and optionally return block metadata
|
||||
//! or contents.
|
||||
virtual bool findBlock(const uint256& hash, const FoundBlock& block={}) = 0;
|
||||
|
@ -727,6 +727,22 @@ public:
|
||||
if (m_node.llmq_ctx == nullptr || m_node.llmq_ctx->clhandler == nullptr) return false;
|
||||
return m_node.llmq_ctx->clhandler->HasChainLock(height, hash);
|
||||
}
|
||||
std::vector<COutPoint> listMNCollaterials(const std::vector<std::pair<const CTransactionRef&, unsigned int>>& outputs) override
|
||||
{
|
||||
const CBlockIndex *tip = WITH_LOCK(::cs_main, return ::ChainActive().Tip());
|
||||
CDeterministicMNList mnList{};
|
||||
if (tip != nullptr && deterministicMNManager != nullptr) {
|
||||
mnList = deterministicMNManager->GetListForBlock(tip);
|
||||
}
|
||||
std::vector<COutPoint> listRet;
|
||||
for (const auto& [tx, index]: outputs) {
|
||||
COutPoint nextOut{tx->GetHash(), index};
|
||||
if (CDeterministicMNManager::IsProTxWithCollateral(tx, index) || mnList.HasMNByCollateral(nextOut)) {
|
||||
listRet.emplace_back(nextOut);
|
||||
}
|
||||
}
|
||||
return listRet;
|
||||
}
|
||||
bool findBlock(const uint256& hash, const FoundBlock& block) override
|
||||
{
|
||||
WAIT_LOCK(cs_main, lock);
|
||||
|
@ -4299,18 +4299,17 @@ void CWallet::ListLockedCoins(std::vector<COutPoint>& vOutpts) const
|
||||
|
||||
void CWallet::ListProTxCoins(std::vector<COutPoint>& vOutpts) const
|
||||
{
|
||||
auto mnList = deterministicMNManager->GetListAtChainTip();
|
||||
std::vector<std::pair<const CTransactionRef&, unsigned int>> outputs;
|
||||
|
||||
AssertLockHeld(cs_wallet);
|
||||
for (const auto &o : setWalletUTXO) {
|
||||
auto it = mapWallet.find(o.hash);
|
||||
if (it != mapWallet.end()) {
|
||||
const auto &p = it->second;
|
||||
if (CDeterministicMNManager::IsProTxWithCollateral(p.tx, o.n) || mnList.HasMNByCollateral(o)) {
|
||||
vOutpts.emplace_back(o);
|
||||
}
|
||||
const auto &ptx = it->second;
|
||||
outputs.emplace_back(ptx.tx, o.n);
|
||||
}
|
||||
}
|
||||
vOutpts = m_chain->listMNCollaterials(outputs);
|
||||
}
|
||||
|
||||
/** @} */ // end of Actions
|
||||
|
Loading…
Reference in New Issue
Block a user