rpc_mempool.cpp
1 // Copyright (c) 2011-present The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #include <bench/bench.h> 6 #include <consensus/amount.h> 7 #include <kernel/cs_main.h> 8 #include <primitives/transaction.h> 9 #include <rpc/mempool.h> 10 #include <script/script.h> 11 #include <sync.h> 12 #include <test/util/setup_common.h> 13 #include <test/util/txmempool.h> 14 #include <txmempool.h> 15 #include <univalue.h> 16 #include <util/check.h> 17 18 #include <memory> 19 #include <vector> 20 21 22 static void AddTx(const CTransactionRef& tx, const CAmount& fee, CTxMemPool& pool) EXCLUSIVE_LOCKS_REQUIRED(cs_main, pool.cs) 23 { 24 LockPoints lp; 25 TryAddToMempool(pool, CTxMemPoolEntry(tx, fee, /*time=*/0, /*entry_height=*/1, /*entry_sequence=*/0, /*spends_coinbase=*/false, /*sigops_cost=*/4, lp)); 26 } 27 28 static void RpcMempool(benchmark::Bench& bench) 29 { 30 const auto testing_setup = MakeNoLogFileContext<const ChainTestingSetup>(ChainType::MAIN); 31 CTxMemPool& pool = *Assert(testing_setup->m_node.mempool); 32 LOCK2(cs_main, pool.cs); 33 34 for (int i = 0; i < 1000; ++i) { 35 CMutableTransaction tx = CMutableTransaction(); 36 tx.vin.resize(1); 37 tx.vin[0].scriptSig = CScript() << OP_1; 38 tx.vin[0].scriptWitness.stack.push_back({1}); 39 tx.vout.resize(1); 40 tx.vout[0].scriptPubKey = CScript() << OP_1 << OP_EQUAL; 41 tx.vout[0].nValue = i; 42 const CTransactionRef tx_r{MakeTransactionRef(tx)}; 43 AddTx(tx_r, /*fee=*/i, pool); 44 } 45 46 bench.run([&] { 47 (void)MempoolToJSON(pool, /*verbose=*/true); 48 }); 49 } 50 51 BENCHMARK(RpcMempool);