mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-31 19:06:10 +02:00
wallet: Replace max descendant count with cluster_count
With the descendant size limits removed, replace the concept of "max number of descendants of any ancestor of a given tx" with the cluster count of the cluster that the transaction belongs to.
This commit is contained in:
@@ -296,7 +296,7 @@ inline CTransactionRef make_tx(std::vector<CAmount>&& output_values, std::vector
|
||||
|
||||
BOOST_AUTO_TEST_CASE(MempoolAncestryTests)
|
||||
{
|
||||
size_t ancestors, descendants;
|
||||
size_t ancestors, clustersize;
|
||||
|
||||
CTxMemPool& pool = *Assert(m_node.mempool);
|
||||
LOCK2(cs_main, pool.cs);
|
||||
@@ -309,10 +309,10 @@ BOOST_AUTO_TEST_CASE(MempoolAncestryTests)
|
||||
CTransactionRef tx1 = make_tx(/*output_values=*/{10 * COIN});
|
||||
AddToMempool(pool, entry.Fee(10000LL).FromTx(tx1));
|
||||
|
||||
// Ancestors / descendants should be 1 / 1 (itself / itself)
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, descendants);
|
||||
// Ancestors / clustersize should be 1 / 1 (itself / itself)
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 1ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 1ULL);
|
||||
BOOST_CHECK_EQUAL(clustersize, 1ULL);
|
||||
|
||||
/* Child transaction */
|
||||
//
|
||||
@@ -321,17 +321,17 @@ BOOST_AUTO_TEST_CASE(MempoolAncestryTests)
|
||||
CTransactionRef tx2 = make_tx(/*output_values=*/{495 * CENT, 5 * COIN}, /*inputs=*/{tx1});
|
||||
AddToMempool(pool, entry.Fee(10000LL).FromTx(tx2));
|
||||
|
||||
// Ancestors / descendants should be:
|
||||
// transaction ancestors descendants
|
||||
// Ancestors / clustersize should be:
|
||||
// transaction ancestors clustersize
|
||||
// ============ =========== ===========
|
||||
// tx1 1 (tx1) 2 (tx1,2)
|
||||
// tx2 2 (tx1,2) 2 (tx1,2)
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, descendants);
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 1ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 2ULL);
|
||||
pool.GetTransactionAncestry(tx2->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 2ULL);
|
||||
pool.GetTransactionAncestry(tx2->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 2ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 2ULL);
|
||||
BOOST_CHECK_EQUAL(clustersize, 2ULL);
|
||||
|
||||
/* Grand-child 1 */
|
||||
//
|
||||
@@ -340,21 +340,21 @@ BOOST_AUTO_TEST_CASE(MempoolAncestryTests)
|
||||
CTransactionRef tx3 = make_tx(/*output_values=*/{290 * CENT, 200 * CENT}, /*inputs=*/{tx2});
|
||||
AddToMempool(pool, entry.Fee(10000LL).FromTx(tx3));
|
||||
|
||||
// Ancestors / descendants should be:
|
||||
// transaction ancestors descendants
|
||||
// Ancestors / clustersize should be:
|
||||
// transaction ancestors clustersize
|
||||
// ============ =========== ===========
|
||||
// tx1 1 (tx1) 3 (tx1,2,3)
|
||||
// tx2 2 (tx1,2) 3 (tx1,2,3)
|
||||
// tx3 3 (tx1,2,3) 3 (tx1,2,3)
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, descendants);
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 1ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 3ULL);
|
||||
pool.GetTransactionAncestry(tx2->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 3ULL);
|
||||
pool.GetTransactionAncestry(tx2->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 2ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 3ULL);
|
||||
pool.GetTransactionAncestry(tx3->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 3ULL);
|
||||
pool.GetTransactionAncestry(tx3->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 3ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 3ULL);
|
||||
BOOST_CHECK_EQUAL(clustersize, 3ULL);
|
||||
|
||||
/* Grand-child 2 */
|
||||
//
|
||||
@@ -365,25 +365,25 @@ BOOST_AUTO_TEST_CASE(MempoolAncestryTests)
|
||||
CTransactionRef tx4 = make_tx(/*output_values=*/{290 * CENT, 250 * CENT}, /*inputs=*/{tx2}, /*input_indices=*/{1});
|
||||
AddToMempool(pool, entry.Fee(10000LL).FromTx(tx4));
|
||||
|
||||
// Ancestors / descendants should be:
|
||||
// transaction ancestors descendants
|
||||
// Ancestors / clustersize should be:
|
||||
// transaction ancestors clustersize
|
||||
// ============ =========== ===========
|
||||
// tx1 1 (tx1) 4 (tx1,2,3,4)
|
||||
// tx2 2 (tx1,2) 4 (tx1,2,3,4)
|
||||
// tx3 3 (tx1,2,3) 4 (tx1,2,3,4)
|
||||
// tx4 3 (tx1,2,4) 4 (tx1,2,3,4)
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, descendants);
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 1ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 4ULL);
|
||||
pool.GetTransactionAncestry(tx2->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 4ULL);
|
||||
pool.GetTransactionAncestry(tx2->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 2ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 4ULL);
|
||||
pool.GetTransactionAncestry(tx3->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 4ULL);
|
||||
pool.GetTransactionAncestry(tx3->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 3ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 4ULL);
|
||||
pool.GetTransactionAncestry(tx4->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 4ULL);
|
||||
pool.GetTransactionAncestry(tx4->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 3ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 4ULL);
|
||||
BOOST_CHECK_EQUAL(clustersize, 4ULL);
|
||||
|
||||
/* Make an alternate branch that is longer and connect it to tx3 */
|
||||
//
|
||||
@@ -401,56 +401,56 @@ BOOST_AUTO_TEST_CASE(MempoolAncestryTests)
|
||||
tyi = make_tx(/*output_values=*/{v}, /*inputs=*/i > 0 ? std::vector<CTransactionRef>{*ty[i - 1]} : std::vector<CTransactionRef>{});
|
||||
v -= 50 * CENT;
|
||||
AddToMempool(pool, entry.Fee(10000LL).FromTx(tyi));
|
||||
pool.GetTransactionAncestry(tyi->GetHash(), ancestors, descendants);
|
||||
pool.GetTransactionAncestry(tyi->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, i+1);
|
||||
BOOST_CHECK_EQUAL(descendants, i+1);
|
||||
BOOST_CHECK_EQUAL(clustersize, i+1);
|
||||
}
|
||||
CTransactionRef ty6 = make_tx(/*output_values=*/{5 * COIN}, /*inputs=*/{tx3, ty5});
|
||||
AddToMempool(pool, entry.Fee(10000LL).FromTx(ty6));
|
||||
|
||||
// Ancestors / descendants should be:
|
||||
// transaction ancestors descendants
|
||||
// Ancestors / clustersize should be:
|
||||
// transaction ancestors clustersize
|
||||
// ============ =================== ===========
|
||||
// tx1 1 (tx1) 5 (tx1,2,3,4, ty6)
|
||||
// tx2 2 (tx1,2) 5 (tx1,2,3,4, ty6)
|
||||
// tx3 3 (tx1,2,3) 5 (tx1,2,3,4, ty6)
|
||||
// tx4 3 (tx1,2,4) 5 (tx1,2,3,4, ty6)
|
||||
// ty1 1 (ty1) 6 (ty1,2,3,4,5,6)
|
||||
// ty2 2 (ty1,2) 6 (ty1,2,3,4,5,6)
|
||||
// ty3 3 (ty1,2,3) 6 (ty1,2,3,4,5,6)
|
||||
// ty4 4 (y1234) 6 (ty1,2,3,4,5,6)
|
||||
// ty5 5 (y12345) 6 (ty1,2,3,4,5,6)
|
||||
// ty6 9 (tx123, ty123456) 6 (ty1,2,3,4,5,6)
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, descendants);
|
||||
// tx1 1 (tx1) 10 (tx1-5, ty1-5)
|
||||
// tx2 2 (tx1,2) 10
|
||||
// tx3 3 (tx1,2,3) 10
|
||||
// tx4 3 (tx1,2,4) 10
|
||||
// ty1 1 (ty1) 10
|
||||
// ty2 2 (ty1,2) 10
|
||||
// ty3 3 (ty1,2,3) 10
|
||||
// ty4 4 (y1234) 10
|
||||
// ty5 5 (y12345) 10
|
||||
// ty6 9 (tx123, ty123456) 10
|
||||
pool.GetTransactionAncestry(tx1->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 1ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 5ULL);
|
||||
pool.GetTransactionAncestry(tx2->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
pool.GetTransactionAncestry(tx2->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 2ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 5ULL);
|
||||
pool.GetTransactionAncestry(tx3->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
pool.GetTransactionAncestry(tx3->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 3ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 5ULL);
|
||||
pool.GetTransactionAncestry(tx4->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
pool.GetTransactionAncestry(tx4->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 3ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 5ULL);
|
||||
pool.GetTransactionAncestry(ty1->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
pool.GetTransactionAncestry(ty1->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 1ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 6ULL);
|
||||
pool.GetTransactionAncestry(ty2->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
pool.GetTransactionAncestry(ty2->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 2ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 6ULL);
|
||||
pool.GetTransactionAncestry(ty3->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
pool.GetTransactionAncestry(ty3->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 3ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 6ULL);
|
||||
pool.GetTransactionAncestry(ty4->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
pool.GetTransactionAncestry(ty4->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 4ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 6ULL);
|
||||
pool.GetTransactionAncestry(ty5->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
pool.GetTransactionAncestry(ty5->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 5ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 6ULL);
|
||||
pool.GetTransactionAncestry(ty6->GetHash(), ancestors, descendants);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
pool.GetTransactionAncestry(ty6->GetHash(), ancestors, clustersize);
|
||||
BOOST_CHECK_EQUAL(ancestors, 9ULL);
|
||||
BOOST_CHECK_EQUAL(descendants, 6ULL);
|
||||
BOOST_CHECK_EQUAL(clustersize, 10ULL);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(MempoolAncestryTestsDiamond)
|
||||
|
||||
Reference in New Issue
Block a user