/ src / bench / rpc_mempool.cpp
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);