mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-16 13:01:19 +02:00
Merge dd5f5713bc into merged_master (Bitcoin PR bitcoin/bitcoin#28391)
This commit is contained in:
commit
d55f2b27cb
14 changed files with 113 additions and 94 deletions
|
|
@ -301,7 +301,7 @@ static void entryToJSON(const CTxMemPool& pool, UniValue& info, const CTxMemPool
|
|||
info.pushKV("descendantsize", e.GetSizeWithDescendants());
|
||||
info.pushKV("ancestorcount", e.GetCountWithAncestors());
|
||||
info.pushKV("ancestorsize", e.GetSizeWithAncestors());
|
||||
info.pushKV("wtxid", pool.vTxHashes[e.vTxHashesIdx].first.ToString());
|
||||
info.pushKV("wtxid", e.GetTx().GetWitnessHash().ToString());
|
||||
|
||||
UniValue fees(UniValue::VOBJ);
|
||||
fees.pushKV("base", ValueFromAmount(e.GetFee()));
|
||||
|
|
@ -327,9 +327,7 @@ static void entryToJSON(const CTxMemPool& pool, UniValue& info, const CTxMemPool
|
|||
info.pushKV("depends", depends);
|
||||
|
||||
UniValue spent(UniValue::VARR);
|
||||
const CTxMemPool::txiter& it = pool.mapTx.find(tx.GetHash());
|
||||
const CTxMemPoolEntry::Children& children = it->GetMemPoolChildrenConst();
|
||||
for (const CTxMemPoolEntry& child : children) {
|
||||
for (const CTxMemPoolEntry& child : e.GetMemPoolChildrenConst()) {
|
||||
spent.push_back(child.GetTx().GetHash().ToString());
|
||||
}
|
||||
|
||||
|
|
@ -356,14 +354,13 @@ UniValue MempoolToJSON(const CTxMemPool& pool, bool verbose, bool include_mempoo
|
|||
}
|
||||
LOCK(pool.cs);
|
||||
UniValue o(UniValue::VOBJ);
|
||||
for (const CTxMemPoolEntry& e : pool.mapTx) {
|
||||
const uint256& hash = e.GetTx().GetHash();
|
||||
for (const CTxMemPoolEntry& e : pool.entryAll()) {
|
||||
UniValue info(UniValue::VOBJ);
|
||||
entryToJSON(pool, info, e);
|
||||
// Mempool has unique entries so there is no advantage in using
|
||||
// UniValue::pushKV, which checks if the key already exists in O(N).
|
||||
// UniValue::pushKVEnd is used instead which currently is O(1).
|
||||
o.pushKVEnd(hash.ToString(), info);
|
||||
o.pushKVEnd(e.GetTx().GetHash().ToString(), info);
|
||||
}
|
||||
return o;
|
||||
} else {
|
||||
|
|
@ -472,12 +469,12 @@ static RPCHelpMan getmempoolancestors()
|
|||
const CTxMemPool& mempool = EnsureAnyMemPool(request.context);
|
||||
LOCK(mempool.cs);
|
||||
|
||||
CTxMemPool::txiter it = mempool.mapTx.find(hash);
|
||||
if (it == mempool.mapTx.end()) {
|
||||
const auto entry{mempool.GetEntry(Txid::FromUint256(hash))};
|
||||
if (entry == nullptr) {
|
||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction not in mempool");
|
||||
}
|
||||
|
||||
auto ancestors{mempool.AssumeCalculateMemPoolAncestors(self.m_name, *it, CTxMemPool::Limits::NoLimits(), /*fSearchForParents=*/false)};
|
||||
auto ancestors{mempool.AssumeCalculateMemPoolAncestors(self.m_name, *entry, CTxMemPool::Limits::NoLimits(), /*fSearchForParents=*/false)};
|
||||
|
||||
if (!fVerbose) {
|
||||
UniValue o(UniValue::VARR);
|
||||
|
|
@ -533,15 +530,15 @@ static RPCHelpMan getmempooldescendants()
|
|||
const CTxMemPool& mempool = EnsureAnyMemPool(request.context);
|
||||
LOCK(mempool.cs);
|
||||
|
||||
CTxMemPool::txiter it = mempool.mapTx.find(hash);
|
||||
if (it == mempool.mapTx.end()) {
|
||||
const auto it{mempool.GetIter(hash)};
|
||||
if (!it) {
|
||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction not in mempool");
|
||||
}
|
||||
|
||||
CTxMemPool::setEntries setDescendants;
|
||||
mempool.CalculateDescendants(it, setDescendants);
|
||||
mempool.CalculateDescendants(*it, setDescendants);
|
||||
// CTxMemPool::CalculateDescendants will include the given tx
|
||||
setDescendants.erase(it);
|
||||
setDescendants.erase(*it);
|
||||
|
||||
if (!fVerbose) {
|
||||
UniValue o(UniValue::VARR);
|
||||
|
|
@ -585,14 +582,13 @@ static RPCHelpMan getmempoolentry()
|
|||
const CTxMemPool& mempool = EnsureAnyMemPool(request.context);
|
||||
LOCK(mempool.cs);
|
||||
|
||||
CTxMemPool::txiter it = mempool.mapTx.find(hash);
|
||||
if (it == mempool.mapTx.end()) {
|
||||
const auto entry{mempool.GetEntry(Txid::FromUint256(hash))};
|
||||
if (entry == nullptr) {
|
||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction not in mempool");
|
||||
}
|
||||
|
||||
const CTxMemPoolEntry &e = *it;
|
||||
UniValue info(UniValue::VOBJ);
|
||||
entryToJSON(mempool, info, e);
|
||||
entryToJSON(mempool, info, *entry);
|
||||
return info;
|
||||
},
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue