Skip to content

Commit 7a266a6

Browse files
author
MarcoFalke
committed
Merge #18173: refactor: test/bench: deduplicate SetupDummyInputs()
7bf4ce4 refactor: test/bench: dedup SetupDummyInputs() (Sebastian Falbesoner) Pull request description: The only difference between `SetupDummyInputs()` in `test/transaction_tests.cpp` and the one in `bench/ccoins_caching.cpp` was the nValue amounts of the outputs, so we allow to pass those in an extra (fixed-size) array parameter. ACKs for top commit: MarcoFalke: re-ACK 7bf4ce4, only change is schuffling includes 🚶 Empact: ACK bitcoin/bitcoin@7bf4ce4 Tree-SHA512: e13643b2470f6b6ab429da0c0a8eebd4cb41e2ff2e421ef36f85fa4847bf4ea8aab88d59a01e94cac4c4eb85edb561463f02215b174c50b573ac6bbcc2bf98a3
2 parents 9aa8145 + 7bf4ce4 commit 7a266a6

File tree

4 files changed

+50
-79
lines changed

4 files changed

+50
-79
lines changed

src/bench/ccoins_caching.cpp

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,47 +6,10 @@
66
#include <coins.h>
77
#include <policy/policy.h>
88
#include <script/signingprovider.h>
9+
#include <test/util/transaction_utils.h>
910

1011
#include <vector>
1112

12-
// FIXME: Dedup with SetupDummyInputs in test/transaction_tests.cpp.
13-
//
14-
// Helper: create two dummy transactions, each with
15-
// two outputs. The first has 11 and 50 COIN outputs
16-
// paid to a TX_PUBKEY, the second 21 and 22 COIN outputs
17-
// paid to a TX_PUBKEYHASH.
18-
//
19-
static std::vector<CMutableTransaction>
20-
SetupDummyInputs(FillableSigningProvider& keystoreRet, CCoinsViewCache& coinsRet)
21-
{
22-
std::vector<CMutableTransaction> dummyTransactions;
23-
dummyTransactions.resize(2);
24-
25-
// Add some keys to the keystore:
26-
CKey key[4];
27-
for (int i = 0; i < 4; i++) {
28-
key[i].MakeNewKey(i % 2);
29-
keystoreRet.AddKey(key[i]);
30-
}
31-
32-
// Create some dummy input transactions
33-
dummyTransactions[0].vout.resize(2);
34-
dummyTransactions[0].vout[0].nValue = 11 * COIN;
35-
dummyTransactions[0].vout[0].scriptPubKey << ToByteVector(key[0].GetPubKey()) << OP_CHECKSIG;
36-
dummyTransactions[0].vout[1].nValue = 50 * COIN;
37-
dummyTransactions[0].vout[1].scriptPubKey << ToByteVector(key[1].GetPubKey()) << OP_CHECKSIG;
38-
AddCoins(coinsRet, CTransaction(dummyTransactions[0]), 0);
39-
40-
dummyTransactions[1].vout.resize(2);
41-
dummyTransactions[1].vout[0].nValue = 21 * COIN;
42-
dummyTransactions[1].vout[0].scriptPubKey = GetScriptForDestination(PKHash(key[2].GetPubKey()));
43-
dummyTransactions[1].vout[1].nValue = 22 * COIN;
44-
dummyTransactions[1].vout[1].scriptPubKey = GetScriptForDestination(PKHash(key[3].GetPubKey()));
45-
AddCoins(coinsRet, CTransaction(dummyTransactions[1]), 0);
46-
47-
return dummyTransactions;
48-
}
49-
5013
// Microbenchmark for simple accesses to a CCoinsViewCache database. Note from
5114
// laanwj, "replicating the actual usage patterns of the client is hard though,
5215
// many times micro-benchmarks of the database showed completely different
@@ -58,7 +21,8 @@ static void CCoinsCaching(benchmark::State& state)
5821
FillableSigningProvider keystore;
5922
CCoinsView coinsDummy;
6023
CCoinsViewCache coins(&coinsDummy);
61-
std::vector<CMutableTransaction> dummyTransactions = SetupDummyInputs(keystore, coins);
24+
std::vector<CMutableTransaction> dummyTransactions =
25+
SetupDummyInputs(keystore, coins, {11 * COIN, 50 * COIN, 21 * COIN, 22 * COIN});
6226

6327
CMutableTransaction t1;
6428
t1.vin.resize(3);

src/test/transaction_tests.cpp

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <script/standard.h>
2323
#include <streams.h>
2424
#include <util/strencodings.h>
25+
#include <test/util/transaction_utils.h>
2526

2627
#include <map>
2728
#include <string>
@@ -280,50 +281,13 @@ BOOST_AUTO_TEST_CASE(basic_transaction_tests)
280281
BOOST_CHECK_MESSAGE(!CheckTransaction(CTransaction(tx), state) || !state.IsValid(), "Transaction with duplicate txins should be invalid.");
281282
}
282283

283-
//
284-
// Helper: create two dummy transactions, each with
285-
// two outputs. The first has 11 and 50 CENT outputs
286-
// paid to a TX_PUBKEY, the second 21 and 22 CENT outputs
287-
// paid to a TX_PUBKEYHASH.
288-
//
289-
static std::vector<CMutableTransaction>
290-
SetupDummyInputs(FillableSigningProvider& keystoreRet, CCoinsViewCache& coinsRet)
291-
{
292-
std::vector<CMutableTransaction> dummyTransactions;
293-
dummyTransactions.resize(2);
294-
295-
// Add some keys to the keystore:
296-
CKey key[4];
297-
for (int i = 0; i < 4; i++)
298-
{
299-
key[i].MakeNewKey(i % 2);
300-
keystoreRet.AddKey(key[i]);
301-
}
302-
303-
// Create some dummy input transactions
304-
dummyTransactions[0].vout.resize(2);
305-
dummyTransactions[0].vout[0].nValue = 11*CENT;
306-
dummyTransactions[0].vout[0].scriptPubKey << ToByteVector(key[0].GetPubKey()) << OP_CHECKSIG;
307-
dummyTransactions[0].vout[1].nValue = 50*CENT;
308-
dummyTransactions[0].vout[1].scriptPubKey << ToByteVector(key[1].GetPubKey()) << OP_CHECKSIG;
309-
AddCoins(coinsRet, CTransaction(dummyTransactions[0]), 0);
310-
311-
dummyTransactions[1].vout.resize(2);
312-
dummyTransactions[1].vout[0].nValue = 21*CENT;
313-
dummyTransactions[1].vout[0].scriptPubKey = GetScriptForDestination(PKHash(key[2].GetPubKey()));
314-
dummyTransactions[1].vout[1].nValue = 22*CENT;
315-
dummyTransactions[1].vout[1].scriptPubKey = GetScriptForDestination(PKHash(key[3].GetPubKey()));
316-
AddCoins(coinsRet, CTransaction(dummyTransactions[1]), 0);
317-
318-
return dummyTransactions;
319-
}
320-
321284
BOOST_AUTO_TEST_CASE(test_Get)
322285
{
323286
FillableSigningProvider keystore;
324287
CCoinsView coinsDummy;
325288
CCoinsViewCache coins(&coinsDummy);
326-
std::vector<CMutableTransaction> dummyTransactions = SetupDummyInputs(keystore, coins);
289+
std::vector<CMutableTransaction> dummyTransactions =
290+
SetupDummyInputs(keystore, coins, {11*CENT, 50*CENT, 21*CENT, 22*CENT});
327291

328292
CMutableTransaction t1;
329293
t1.vin.resize(3);
@@ -683,7 +647,8 @@ BOOST_AUTO_TEST_CASE(test_IsStandard)
683647
FillableSigningProvider keystore;
684648
CCoinsView coinsDummy;
685649
CCoinsViewCache coins(&coinsDummy);
686-
std::vector<CMutableTransaction> dummyTransactions = SetupDummyInputs(keystore, coins);
650+
std::vector<CMutableTransaction> dummyTransactions =
651+
SetupDummyInputs(keystore, coins, {11*CENT, 50*CENT, 21*CENT, 22*CENT});
687652

688653
CMutableTransaction t;
689654
t.vin.resize(1);

src/test/util/transaction_utils.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

55
#include <test/util/transaction_utils.h>
6+
#include <coins.h>
7+
#include <script/signingprovider.h>
68

79
CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey, int nValue)
810
{
@@ -37,3 +39,33 @@ CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CSc
3739

3840
return txSpend;
3941
}
42+
43+
std::vector<CMutableTransaction> SetupDummyInputs(FillableSigningProvider& keystoreRet, CCoinsViewCache& coinsRet, const std::array<CAmount,4>& nValues)
44+
{
45+
std::vector<CMutableTransaction> dummyTransactions;
46+
dummyTransactions.resize(2);
47+
48+
// Add some keys to the keystore:
49+
CKey key[4];
50+
for (int i = 0; i < 4; i++) {
51+
key[i].MakeNewKey(i % 2);
52+
keystoreRet.AddKey(key[i]);
53+
}
54+
55+
// Create some dummy input transactions
56+
dummyTransactions[0].vout.resize(2);
57+
dummyTransactions[0].vout[0].nValue = nValues[0];
58+
dummyTransactions[0].vout[0].scriptPubKey << ToByteVector(key[0].GetPubKey()) << OP_CHECKSIG;
59+
dummyTransactions[0].vout[1].nValue = nValues[1];
60+
dummyTransactions[0].vout[1].scriptPubKey << ToByteVector(key[1].GetPubKey()) << OP_CHECKSIG;
61+
AddCoins(coinsRet, CTransaction(dummyTransactions[0]), 0);
62+
63+
dummyTransactions[1].vout.resize(2);
64+
dummyTransactions[1].vout[0].nValue = nValues[2];
65+
dummyTransactions[1].vout[0].scriptPubKey = GetScriptForDestination(PKHash(key[2].GetPubKey()));
66+
dummyTransactions[1].vout[1].nValue = nValues[3];
67+
dummyTransactions[1].vout[1].scriptPubKey = GetScriptForDestination(PKHash(key[3].GetPubKey()));
68+
AddCoins(coinsRet, CTransaction(dummyTransactions[1]), 0);
69+
70+
return dummyTransactions;
71+
}

src/test/util/transaction_utils.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77

88
#include <primitives/transaction.h>
99

10+
#include <array>
11+
12+
class FillableSigningProvider;
13+
class CCoinsViewCache;
14+
1015
// create crediting transaction
1116
// [1 coinbase input => 1 output with given scriptPubkey and value]
1217
CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey, int nValue = 0);
@@ -16,4 +21,9 @@ CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey, int n
1621
// 1 output with empty scriptPubKey, full value of referenced transaction]
1722
CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CScriptWitness& scriptWitness, const CTransaction& txCredit);
1823

24+
// Helper: create two dummy transactions, each with two outputs.
25+
// The first has nValues[0] and nValues[1] outputs paid to a TX_PUBKEY,
26+
// the second nValues[2] and nValues[3] outputs paid to a TX_PUBKEYHASH.
27+
std::vector<CMutableTransaction> SetupDummyInputs(FillableSigningProvider& keystoreRet, CCoinsViewCache& coinsRet, const std::array<CAmount,4>& nValues);
28+
1929
#endif // BITCOIN_TEST_UTIL_TRANSACTION_UTILS_H

0 commit comments

Comments
 (0)