Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
bench
mempool_ephemeral_spends.cpp
Go to the documentation of this file.
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 <
policy/ephemeral_policy.h
>
9
#include <
policy/policy.h
>
10
#include <
primitives/transaction.h
>
11
#include <
script/script.h
>
12
#include <
sync.h
>
13
#include <
test/util/setup_common.h
>
14
#include <
test/util/txmempool.h
>
15
#include <
txmempool.h
>
16
#include <
util/check.h
>
17
18
#include <cstdint>
19
#include <memory>
20
#include <vector>
21
22
23
static
void
AddTx
(
const
CTransactionRef
& tx,
CTxMemPool
& pool)
EXCLUSIVE_LOCKS_REQUIRED
(
cs_main
, pool.cs)
24
{
25
int64_t nTime{0};
26
unsigned
int
nHeight
{1};
27
uint64_t
sequence
{0};
28
bool
spendsCoinbase
{
false
};
29
unsigned
int
sigOpCost
{4};
30
uint64_t
fee
{0};
31
LockPoints
lp
;
32
TryAddToMempool
(pool,
CTxMemPoolEntry
(
33
tx,
fee
, nTime,
nHeight
,
sequence
,
34
spendsCoinbase
,
sigOpCost
,
lp
));
35
}
36
37
static
void
MempoolCheckEphemeralSpends
(
benchmark::Bench
& bench)
38
{
39
const
auto
testing_setup =
MakeNoLogFileContext<const TestingSetup>
();
40
41
int
number_outputs{1000};
42
if
(bench.
complexityN
() > 1) {
43
number_outputs =
static_cast<
int
>
(bench.
complexityN
());
44
}
45
46
// Tx with many outputs
47
CMutableTransaction
tx1;
48
tx1.
vin
.resize(1);
49
tx1.
vout
.resize(number_outputs);
50
for
(
size_t
i = 0; i < tx1.
vout
.size(); i++) {
51
tx1.
vout
[i].scriptPubKey =
CScript
();
52
// Each output progressively larger
53
tx1.
vout
[i].nValue = i * CENT;
54
}
55
56
const
auto
& parent_txid = tx1.
GetHash
();
57
58
// Spends all outputs of tx1, other details don't matter
59
CMutableTransaction
tx2;
60
tx2.
vin
.resize(tx1.
vout
.size());
61
for
(
size_t
i = 0; i < tx2.
vin
.size(); i++) {
62
tx2.
vin
[0].prevout.hash = parent_txid;
63
tx2.
vin
[0].prevout.n = i;
64
}
65
tx2.
vout
.resize(1);
66
67
CTxMemPool
& pool = *
Assert
(testing_setup->m_node.mempool);
68
LOCK2
(
cs_main
, pool.
cs
);
69
// Create transaction references outside the "hot loop"
70
const
CTransactionRef
tx1_r{MakeTransactionRef(tx1)};
71
const
CTransactionRef
tx2_r{MakeTransactionRef(tx2)};
72
73
AddTx
(tx1_r, pool);
74
75
uint32_t iteration{0};
76
77
TxValidationState
dummy_state;
78
Wtxid
dummy_wtxid;
79
80
bench.
run
([&]()
NO_THREAD_SAFETY_ANALYSIS
{
81
82
CheckEphemeralSpends
({tx2_r},
/*dust_relay_rate=*/
CFeeRate
(iteration * COIN / 10), pool, dummy_state, dummy_wtxid);
83
iteration++;
84
});
85
}
86
87
BENCHMARK
(
MempoolCheckEphemeralSpends
);
amount.h
bench.h
BENCHMARK
#define BENCHMARK(n)
Definition
bench.h:68
TryAddToMempool
TryAddToMempool(pool, CTxMemPoolEntry(tx, fee, 0, 1, 0, false, 4, lp))
check.h
Assert
#define Assert(val)
Identity function.
Definition
check.h:113
CFeeRate::CFeeRate
CFeeRate()=default
Fee rate of 0 satoshis per 0 vB.
CScript::CScript
CScript()=default
CTxMemPoolEntry::CTxMemPoolEntry
CTxMemPoolEntry(const CTxMemPoolEntry &)=delete
CTxMemPool
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
Definition
txmempool.h:187
CTxMemPool::cs
RecursiveMutex cs
This mutex needs to be locked when accessing mapTx or other members that are guarded by it.
Definition
txmempool.h:258
TxValidationState
Definition
validation.h:125
ankerl::nanobench::Bench
Main entry point to nanobench's benchmarking facility.
Definition
nanobench.h:627
ankerl::nanobench::Bench::run
Bench & run(char const *benchmarkName, Op &&op)
Repeatedly calls op() based on the configuration, and performs measurements.
Definition
nanobench.h:1234
ankerl::nanobench::Bench::complexityN
Bench & complexityN(T n) noexcept
Definition
nanobench.h:1265
cs_main
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
Definition
cs_main.cpp:8
cs_main.h
CheckEphemeralSpends
bool CheckEphemeralSpends(const Package &package, CFeeRate dust_relay_rate, const CTxMemPool &tx_pool, TxValidationState &out_child_state, Wtxid &out_child_wtxid)
Called for each transaction(package) if any dust is in the package.
Definition
ephemeral_policy.cpp:33
ephemeral_policy.h
AddTx
static void AddTx(const CTransactionRef &tx, CTxMemPool &pool) EXCLUSIVE_LOCKS_REQUIRED(cs_main
nHeight
unsigned int nHeight
Definition
mempool_ephemeral_spends.cpp:26
MempoolCheckEphemeralSpends
static void MempoolCheckEphemeralSpends(benchmark::Bench &bench)
Definition
mempool_ephemeral_spends.cpp:37
fee
uint64_t fee
Definition
mempool_ephemeral_spends.cpp:30
spendsCoinbase
bool spendsCoinbase
Definition
mempool_ephemeral_spends.cpp:28
sigOpCost
unsigned int sigOpCost
Definition
mempool_ephemeral_spends.cpp:29
sequence
uint64_t sequence
Definition
mempool_ephemeral_spends.cpp:27
lp
LockPoints lp
Definition
mempool_ephemeral_spends.cpp:31
policy.h
transaction.h
CTransactionRef
std::shared_ptr< const CTransaction > CTransactionRef
Definition
transaction.h:403
script.h
setup_common.h
MakeNoLogFileContext
std::unique_ptr< T > MakeNoLogFileContext(const ChainType chain_type=ChainType::REGTEST, TestOpts opts={})
Make a test setup that has disk access to the debug.log file disabled.
Definition
setup_common.h:250
CMutableTransaction
A mutable version of CTransaction.
Definition
transaction.h:358
CMutableTransaction::vout
std::vector< CTxOut > vout
Definition
transaction.h:360
CMutableTransaction::GetHash
Txid GetHash() const
Compute the hash of this CMutableTransaction.
Definition
transaction.cpp:69
CMutableTransaction::vin
std::vector< CTxIn > vin
Definition
transaction.h:359
LockPoints
Definition
mempool_entry.h:26
sync.h
LOCK2
#define LOCK2(cs1, cs2)
Definition
sync.h:259
txmempool.h
EXCLUSIVE_LOCKS_REQUIRED
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition
threadsafety.h:51
NO_THREAD_SAFETY_ANALYSIS
#define NO_THREAD_SAFETY_ANALYSIS
Definition
threadsafety.h:53
Wtxid
transaction_identifier< true > Wtxid
Wtxid commits to all transaction fields including the witness.
Definition
transaction_identifier.h:73
txmempool.h
Generated on
for Bitcoin Core by
1.18.0