mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 15:09:59 +01:00
tests: add deterministic chain generation unittest fixture
This commit is contained in:
@@ -199,14 +199,43 @@ TestingSetup::TestingSetup(const std::string& chainName, const std::vector<const
|
||||
}
|
||||
}
|
||||
|
||||
TestChain100Setup::TestChain100Setup()
|
||||
TestChain100Setup::TestChain100Setup(bool deterministic)
|
||||
{
|
||||
m_deterministic = deterministic;
|
||||
|
||||
if (m_deterministic) {
|
||||
SetMockTime(1598887952);
|
||||
constexpr std::array<unsigned char, 32> vchKey = {
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
}
|
||||
};
|
||||
coinbaseKey.Set(vchKey.begin(), vchKey.end(), false);
|
||||
} else {
|
||||
coinbaseKey.MakeNewKey(true);
|
||||
}
|
||||
|
||||
// Generate a 100-block chain:
|
||||
coinbaseKey.MakeNewKey(true);
|
||||
this->mineBlocks(COINBASE_MATURITY);
|
||||
|
||||
if (m_deterministic) {
|
||||
LOCK(::cs_main);
|
||||
assert(
|
||||
m_node.chainman->ActiveChain().Tip()->GetBlockHash().ToString() ==
|
||||
"49c95db1e470fed04496d801c9d8fbb78155d2c7f855232c918823d2c17d0cf6");
|
||||
}
|
||||
}
|
||||
|
||||
void TestChain100Setup::mineBlocks(int num_blocks)
|
||||
{
|
||||
CScript scriptPubKey = CScript() << ToByteVector(coinbaseKey.GetPubKey()) << OP_CHECKSIG;
|
||||
for (int i = 0; i < COINBASE_MATURITY; i++) {
|
||||
for (int i = 0; i < num_blocks; i++)
|
||||
{
|
||||
std::vector<CMutableTransaction> noTxns;
|
||||
CBlock b = CreateAndProcessBlock(noTxns, scriptPubKey);
|
||||
if (m_deterministic) {
|
||||
SetMockTime(GetTime() + 1);
|
||||
}
|
||||
m_coinbase_txns.push_back(b.vtx[0]);
|
||||
}
|
||||
}
|
||||
@@ -234,6 +263,9 @@ CBlock TestChain100Setup::CreateAndProcessBlock(const std::vector<CMutableTransa
|
||||
TestChain100Setup::~TestChain100Setup()
|
||||
{
|
||||
gArgs.ForceSetArg("-segwitheight", "0");
|
||||
if (m_deterministic) {
|
||||
SetMockTime(0);
|
||||
}
|
||||
}
|
||||
|
||||
CTxMemPoolEntry TestMemPoolEntryHelper::FromTx(const CMutableTransaction& tx) const
|
||||
|
||||
Reference in New Issue
Block a user