Skip to content

Commit 8f14d20

Browse files
author
MarcoFalke
committed
Merge #17183: refactor: test/bench: dedup Build{Crediting,Spending}Transaction()
a0fc076 refactor: test/bench: dedup Build{Crediting,Spending}Transaction() (Sebastian Falbesoner) Pull request description: prototypes used in `src/test/script_tests.cpp`: - `CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey, int nValue = 0);` - `CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CScriptWitness& scriptWitness, const CTransaction& txCredit);` prototypes used in `bench/verify_script.cpp`: - `CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey);` - `CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CMutableTransaction& txCredit);` The more generic versions from the script tests are moved into `setup_common.cpp` and the calls are adapted accordingly in the verify_script benchmark (passing the nValue of 1 explicitely for `BuildCreditingTransaction()`, passing empty scriptWitness explicitely and converting txCredit parameter to CTransaction in `BuildSpendingTransaction()`). Top commit has no ACKs. Tree-SHA512: 8444f8a18f15070eeec1e5dfd255b55a851dfc2e6647c12b1995a6f7abd7196e830db2181d0e860bcd4cf4c815967584a3756dd450346bca70649dd1d4493e04
2 parents a884b32 + a0fc076 commit 8f14d20

File tree

7 files changed

+67
-71
lines changed

7 files changed

+67
-71
lines changed

build_msvc/test_bitcoin/test_bitcoin.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<ClCompile Include="..\..\src\test\*_properties.cpp" />
1414
<ClCompile Include="..\..\src\test\gen\*_gen.cpp" />
1515
<ClCompile Include="..\..\src\wallet\test\*_tests.cpp" />
16+
<ClCompile Include="..\..\src\test\lib\*.cpp" />
1617
<ClCompile Include="..\..\src\test\setup_common.cpp" />
1718
<ClCompile Include="..\..\src\test\main.cpp" />
1819
<ClCompile Include="..\..\src\wallet\test\*_fixture.cpp" />

src/Makefile.bench.include

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ bench_bench_bitcoin_SOURCES = \
3939
bench/lockedpool.cpp \
4040
bench/poly1305.cpp \
4141
bench/prevector.cpp \
42+
test/lib/transaction_utils.h \
43+
test/lib/transaction_utils.cpp \
4244
test/setup_common.h \
4345
test/setup_common.cpp \
4446
test/util.h \

src/Makefile.test.include

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ RAW_TEST_FILES =
5353
GENERATED_TEST_FILES = $(JSON_TEST_FILES:.json=.json.h) $(RAW_TEST_FILES:.raw=.raw.h)
5454

5555
BITCOIN_TEST_SUITE = \
56+
test/lib/transaction_utils.h \
57+
test/lib/transaction_utils.cpp \
5658
test/main.cpp \
5759
test/setup_common.h \
5860
test/setup_common.cpp

src/bench/verify_script.cpp

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,44 +10,10 @@
1010
#include <script/script.h>
1111
#include <script/standard.h>
1212
#include <streams.h>
13+
#include <test/lib/transaction_utils.h>
1314

1415
#include <array>
1516

16-
// FIXME: Dedup with BuildCreditingTransaction in test/script_tests.cpp.
17-
static CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey)
18-
{
19-
CMutableTransaction txCredit;
20-
txCredit.nVersion = 1;
21-
txCredit.nLockTime = 0;
22-
txCredit.vin.resize(1);
23-
txCredit.vout.resize(1);
24-
txCredit.vin[0].prevout.SetNull();
25-
txCredit.vin[0].scriptSig = CScript() << CScriptNum(0) << CScriptNum(0);
26-
txCredit.vin[0].nSequence = CTxIn::SEQUENCE_FINAL;
27-
txCredit.vout[0].scriptPubKey = scriptPubKey;
28-
txCredit.vout[0].nValue = 1;
29-
30-
return txCredit;
31-
}
32-
33-
// FIXME: Dedup with BuildSpendingTransaction in test/script_tests.cpp.
34-
static CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CMutableTransaction& txCredit)
35-
{
36-
CMutableTransaction txSpend;
37-
txSpend.nVersion = 1;
38-
txSpend.nLockTime = 0;
39-
txSpend.vin.resize(1);
40-
txSpend.vout.resize(1);
41-
txSpend.vin[0].prevout.hash = txCredit.GetHash();
42-
txSpend.vin[0].prevout.n = 0;
43-
txSpend.vin[0].scriptSig = scriptSig;
44-
txSpend.vin[0].nSequence = CTxIn::SEQUENCE_FINAL;
45-
txSpend.vout[0].scriptPubKey = CScript();
46-
txSpend.vout[0].nValue = txCredit.vout[0].nValue;
47-
48-
return txSpend;
49-
}
50-
5117
// Microbenchmark for verification of a basic P2WPKH script. Can be easily
5218
// modified to measure performance of other types of scripts.
5319
static void VerifyScriptBench(benchmark::State& state)
@@ -71,8 +37,8 @@ static void VerifyScriptBench(benchmark::State& state)
7137
CScript scriptPubKey = CScript() << witnessversion << ToByteVector(pubkeyHash);
7238
CScript scriptSig;
7339
CScript witScriptPubkey = CScript() << OP_DUP << OP_HASH160 << ToByteVector(pubkeyHash) << OP_EQUALVERIFY << OP_CHECKSIG;
74-
const CMutableTransaction& txCredit = BuildCreditingTransaction(scriptPubKey);
75-
CMutableTransaction txSpend = BuildSpendingTransaction(scriptSig, txCredit);
40+
const CMutableTransaction& txCredit = BuildCreditingTransaction(scriptPubKey, 1);
41+
CMutableTransaction txSpend = BuildSpendingTransaction(scriptSig, CScriptWitness(), CTransaction(txCredit));
7642
CScriptWitness& witness = txSpend.vin[0].scriptWitness;
7743
witness.stack.emplace_back();
7844
key.Sign(SignatureHash(witScriptPubkey, txSpend, 0, SIGHASH_ALL, txCredit.vout[0].nValue, SigVersion::WITNESS_V0), witness.stack.back());

src/test/lib/transaction_utils.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Copyright (c) 2019 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 <test/lib/transaction_utils.h>
6+
7+
CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey, int nValue)
8+
{
9+
CMutableTransaction txCredit;
10+
txCredit.nVersion = 1;
11+
txCredit.nLockTime = 0;
12+
txCredit.vin.resize(1);
13+
txCredit.vout.resize(1);
14+
txCredit.vin[0].prevout.SetNull();
15+
txCredit.vin[0].scriptSig = CScript() << CScriptNum(0) << CScriptNum(0);
16+
txCredit.vin[0].nSequence = CTxIn::SEQUENCE_FINAL;
17+
txCredit.vout[0].scriptPubKey = scriptPubKey;
18+
txCredit.vout[0].nValue = nValue;
19+
20+
return txCredit;
21+
}
22+
23+
CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CScriptWitness& scriptWitness, const CTransaction& txCredit)
24+
{
25+
CMutableTransaction txSpend;
26+
txSpend.nVersion = 1;
27+
txSpend.nLockTime = 0;
28+
txSpend.vin.resize(1);
29+
txSpend.vout.resize(1);
30+
txSpend.vin[0].scriptWitness = scriptWitness;
31+
txSpend.vin[0].prevout.hash = txCredit.GetHash();
32+
txSpend.vin[0].prevout.n = 0;
33+
txSpend.vin[0].scriptSig = scriptSig;
34+
txSpend.vin[0].nSequence = CTxIn::SEQUENCE_FINAL;
35+
txSpend.vout[0].scriptPubKey = CScript();
36+
txSpend.vout[0].nValue = txCredit.vout[0].nValue;
37+
38+
return txSpend;
39+
}

src/test/lib/transaction_utils.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright (c) 2019 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+
#ifndef BITCOIN_TEST_LIB_TRANSACTION_UTILS_H
6+
#define BITCOIN_TEST_LIB_TRANSACTION_UTILS_H
7+
8+
#include <primitives/transaction.h>
9+
10+
// create crediting transaction
11+
// [1 coinbase input => 1 output with given scriptPubkey and value]
12+
CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey, int nValue = 0);
13+
14+
// create spending transaction
15+
// [1 input with referenced transaction outpoint, scriptSig, scriptWitness =>
16+
// 1 output with empty scriptPubKey, full value of referenced transaction]
17+
CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CScriptWitness& scriptWitness, const CTransaction& txCredit);
18+
19+
#endif // BITCOIN_TEST_LIB_TRANSACTION_UTILS_H

src/test/script_tests.cpp

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <script/signingprovider.h>
1313
#include <util/system.h>
1414
#include <util/strencodings.h>
15+
#include <test/lib/transaction_utils.h>
1516
#include <test/setup_common.h>
1617
#include <rpc/util.h>
1718
#include <streams.h>
@@ -121,40 +122,6 @@ static ScriptError_t ParseScriptError(const std::string &name)
121122

122123
BOOST_FIXTURE_TEST_SUITE(script_tests, BasicTestingSetup)
123124

124-
CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey, int nValue = 0)
125-
{
126-
CMutableTransaction txCredit;
127-
txCredit.nVersion = 1;
128-
txCredit.nLockTime = 0;
129-
txCredit.vin.resize(1);
130-
txCredit.vout.resize(1);
131-
txCredit.vin[0].prevout.SetNull();
132-
txCredit.vin[0].scriptSig = CScript() << CScriptNum(0) << CScriptNum(0);
133-
txCredit.vin[0].nSequence = CTxIn::SEQUENCE_FINAL;
134-
txCredit.vout[0].scriptPubKey = scriptPubKey;
135-
txCredit.vout[0].nValue = nValue;
136-
137-
return txCredit;
138-
}
139-
140-
CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CScriptWitness& scriptWitness, const CTransaction& txCredit)
141-
{
142-
CMutableTransaction txSpend;
143-
txSpend.nVersion = 1;
144-
txSpend.nLockTime = 0;
145-
txSpend.vin.resize(1);
146-
txSpend.vout.resize(1);
147-
txSpend.vin[0].scriptWitness = scriptWitness;
148-
txSpend.vin[0].prevout.hash = txCredit.GetHash();
149-
txSpend.vin[0].prevout.n = 0;
150-
txSpend.vin[0].scriptSig = scriptSig;
151-
txSpend.vin[0].nSequence = CTxIn::SEQUENCE_FINAL;
152-
txSpend.vout[0].scriptPubKey = CScript();
153-
txSpend.vout[0].nValue = txCredit.vout[0].nValue;
154-
155-
return txSpend;
156-
}
157-
158125
void DoTest(const CScript& scriptPubKey, const CScript& scriptSig, const CScriptWitness& scriptWitness, int flags, const std::string& message, int scriptError, CAmount nValue = 0)
159126
{
160127
bool expect = (scriptError == SCRIPT_ERR_OK);

0 commit comments

Comments
 (0)