mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-04 04:45:10 +02:00
Merge #12479: RPC: Add child transactions to getrawmempool verbose output
1dfb4e7d7[Tests] Check output of parent/child tx list from getrawmempool, getmempooldescendants, getmempoolancestors, and REST interface (Conor Scott)fc44cb108[RPC] Add list of child transactions to verbose output of getrawmempool (Conor Scott) Pull request description: `bitcoin-cli getrawmempool true` only lists a transaction's parents in the `depends` field. This change adds a `spentby` field to the json response, which lists the transaction's children in the mempool. Currently the only way to find child transactions is to use `getrawmempool` or make another call to `getmempooldescendants` and search the response for transactions that list the parent_txid in the `depends` list, which is inefficient. This change allows direct lookup of children. Example Output ``` "9a9b5733c0d89f207908cfa3fe17809bee71f629aa095c9f8754524e29e98ba4": { ...other geterawmempool data... "wtxid": "9a9b5733c0d89f207908cfa3fe17809bee71f629aa095c9f8754524e29e98ba4", "depends": [ "bdd92851d5766a42aeb62af667bb422a116cab4e032bba5e3dd6efe5b4b40aa0" ], "spentby": [ "dc5d3ec388a9121421208738a041ac30a22163bc2e17758f2275b6c51a15ba7b" ] }, ``` Tree-SHA512: 83da7d421c9799a40ef65af3b7fdb586d6d87385f3f2ede3afd2c311725444b858f9d91cc110422a0fa31905779934fee07211ca6fe6b746792b83692c94b3ce
This commit is contained in:
@@ -372,6 +372,9 @@ std::string EntryDescriptionString()
|
||||
" \"wtxid\" : hash, (string) hash of serialized transaction, including witness data\n"
|
||||
" \"depends\" : [ (array) unconfirmed transactions used as inputs for this transaction\n"
|
||||
" \"transactionid\", (string) parent transaction id\n"
|
||||
" ... ]\n"
|
||||
" \"spentby\" : [ (array) unconfirmed transactions spending outputs from this transaction\n"
|
||||
" \"transactionid\", (string) child transaction id\n"
|
||||
" ... ]\n";
|
||||
}
|
||||
|
||||
@@ -406,6 +409,15 @@ void entryToJSON(UniValue &info, const CTxMemPoolEntry &e)
|
||||
}
|
||||
|
||||
info.pushKV("depends", depends);
|
||||
|
||||
UniValue spent(UniValue::VARR);
|
||||
const CTxMemPool::txiter &it = mempool.mapTx.find(tx.GetHash());
|
||||
const CTxMemPool::setEntries &setChildren = mempool.GetMemPoolChildren(it);
|
||||
for (const CTxMemPool::txiter &childiter : setChildren) {
|
||||
spent.push_back(childiter->GetTx().GetHash().ToString());
|
||||
}
|
||||
|
||||
info.pushKV("spentby", spent);
|
||||
}
|
||||
|
||||
UniValue mempoolToJSON(bool fVerbose)
|
||||
|
||||
Reference in New Issue
Block a user