Microbenchmark for simple accesses to a CCoinsViewCache database. Note from laanwj, "replicating the actual usage patterns of the client is hard though, many times micro-benchmarks of the database showed completely different characteristics than e.g. reindex timings. But that's not a requirement of every benchmark." (https://github.com/bitcoin/bitcoin/issues/7883#issuecomment-224807484)
| 17 | // every benchmark." |
| 18 | // (https://github.com/bitcoin/bitcoin/issues/7883#issuecomment-224807484) |
| 19 | static void CCoinsCaching(benchmark::Bench& bench) |
| 20 | { |
| 21 | const ECCVerifyHandle verify_handle; |
| 22 | ECC_Start(); |
| 23 | |
| 24 | FillableSigningProvider keystore; |
| 25 | CCoinsView coinsDummy; |
| 26 | CCoinsViewCache coins(&coinsDummy); |
| 27 | std::vector<CMutableTransaction> dummyTransactions = |
| 28 | SetupDummyInputs(keystore, coins, {11 * COIN, 50 * COIN, 21 * COIN, 22 * COIN}); |
| 29 | |
| 30 | CMutableTransaction t1; |
| 31 | t1.vin.resize(3); |
| 32 | t1.vin[0].prevout.hash = dummyTransactions[0].GetHash(); |
| 33 | t1.vin[0].prevout.n = 1; |
| 34 | t1.vin[0].scriptSig << std::vector<unsigned char>(65, 0); |
| 35 | t1.vin[1].prevout.hash = dummyTransactions[1].GetHash(); |
| 36 | t1.vin[1].prevout.n = 0; |
| 37 | t1.vin[1].scriptSig << std::vector<unsigned char>(65, 0) << std::vector<unsigned char>(33, 4); |
| 38 | t1.vin[2].prevout.hash = dummyTransactions[1].GetHash(); |
| 39 | t1.vin[2].prevout.n = 1; |
| 40 | t1.vin[2].scriptSig << std::vector<unsigned char>(65, 0) << std::vector<unsigned char>(33, 4); |
| 41 | t1.vout.resize(2); |
| 42 | t1.vout[0].nValue = 90 * COIN; |
| 43 | t1.vout[0].scriptPubKey << OP_1; |
| 44 | |
| 45 | // Benchmark. |
| 46 | const CTransaction tx_1(t1); |
| 47 | bench.run([&] { |
| 48 | bool success{AreInputsStandard(tx_1, coins)}; |
| 49 | assert(success); |
| 50 | }); |
| 51 | ECC_Stop(); |
| 52 | } |
| 53 | |
| 54 | BENCHMARK(CCoinsCaching); |
nothing calls this directly
no test coverage detected