mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-15 12:51:00 +02:00
Merge 3487e421a7 into merged_master (Bitcoin PR #20004)
This commit is contained in:
commit
86c430b852
9 changed files with 100 additions and 37 deletions
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include <chainparams.h>
|
||||
#include <net.h>
|
||||
#include <signet.h>
|
||||
#include <validation.h>
|
||||
|
||||
#include <test/util/setup_common.h>
|
||||
|
|
@ -40,7 +41,7 @@ static void TestBlockSubsidyHalvings(int nSubsidyHalvingInterval)
|
|||
|
||||
BOOST_AUTO_TEST_CASE(block_subsidy_test)
|
||||
{
|
||||
const auto chainParams = CreateChainParams(CBaseChainParams::MAIN);
|
||||
const auto chainParams = CreateChainParams(*m_node.args, CBaseChainParams::MAIN);
|
||||
TestBlockSubsidyHalvings(chainParams->GetConsensus()); // As in main
|
||||
TestBlockSubsidyHalvings(150); // As in regtest
|
||||
TestBlockSubsidyHalvings(1000); // Just another interval
|
||||
|
|
@ -48,7 +49,7 @@ BOOST_AUTO_TEST_CASE(block_subsidy_test)
|
|||
|
||||
BOOST_AUTO_TEST_CASE(subsidy_limit_test)
|
||||
{
|
||||
const auto chainParams = CreateChainParams(CBaseChainParams::MAIN);
|
||||
const auto chainParams = CreateChainParams(*m_node.args, CBaseChainParams::MAIN);
|
||||
CAmount nSum = 0;
|
||||
for (int nHeight = 0; nHeight < 14000000; nHeight += 1000) {
|
||||
CAmount nSubsidy = GetBlockSubsidy(nHeight, chainParams->GetConsensus());
|
||||
|
|
@ -59,6 +60,67 @@ BOOST_AUTO_TEST_CASE(subsidy_limit_test)
|
|||
BOOST_CHECK_EQUAL(nSum, CAmount{2099999997690000});
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(signet_parse_tests)
|
||||
{
|
||||
ArgsManager signet_argsman;
|
||||
signet_argsman.ForceSetArg("-signetchallenge", "51"); // set challenge to OP_TRUE
|
||||
const auto signet_params = CreateChainParams(signet_argsman, CBaseChainParams::SIGNET);
|
||||
CBlock block;
|
||||
BOOST_CHECK(signet_params->GetConsensus().signet_challenge == std::vector<uint8_t>{{OP_TRUE}});
|
||||
CScript challenge{OP_TRUE};
|
||||
|
||||
// empty block is invalid
|
||||
BOOST_CHECK(!SignetTxs::Create(block, challenge));
|
||||
BOOST_CHECK(!CheckSignetBlockSolution(block, signet_params->GetConsensus()));
|
||||
|
||||
// no witness commitment
|
||||
CMutableTransaction cb;
|
||||
cb.vout.emplace_back(CAsset(), 0, CScript{});
|
||||
block.vtx.push_back(MakeTransactionRef(cb));
|
||||
block.vtx.push_back(MakeTransactionRef(cb)); // Add dummy tx to excercise merkle root code
|
||||
BOOST_CHECK(!SignetTxs::Create(block, challenge));
|
||||
BOOST_CHECK(!CheckSignetBlockSolution(block, signet_params->GetConsensus()));
|
||||
|
||||
// no header is treated valid
|
||||
std::vector<uint8_t> witness_commitment_section_141{0xaa, 0x21, 0xa9, 0xed};
|
||||
for (int i = 0; i < 32; ++i) {
|
||||
witness_commitment_section_141.push_back(0xff);
|
||||
}
|
||||
cb.vout.at(0).scriptPubKey = CScript{} << OP_RETURN << witness_commitment_section_141;
|
||||
block.vtx.at(0) = MakeTransactionRef(cb);
|
||||
BOOST_CHECK(SignetTxs::Create(block, challenge));
|
||||
BOOST_CHECK(CheckSignetBlockSolution(block, signet_params->GetConsensus()));
|
||||
|
||||
// no data after header, valid
|
||||
std::vector<uint8_t> witness_commitment_section_325{0xec, 0xc7, 0xda, 0xa2};
|
||||
cb.vout.at(0).scriptPubKey = CScript{} << OP_RETURN << witness_commitment_section_141 << witness_commitment_section_325;
|
||||
block.vtx.at(0) = MakeTransactionRef(cb);
|
||||
BOOST_CHECK(SignetTxs::Create(block, challenge));
|
||||
BOOST_CHECK(CheckSignetBlockSolution(block, signet_params->GetConsensus()));
|
||||
|
||||
// Premature end of data, invalid
|
||||
witness_commitment_section_325.push_back(0x01);
|
||||
witness_commitment_section_325.push_back(0x51);
|
||||
cb.vout.at(0).scriptPubKey = CScript{} << OP_RETURN << witness_commitment_section_141 << witness_commitment_section_325;
|
||||
block.vtx.at(0) = MakeTransactionRef(cb);
|
||||
BOOST_CHECK(!SignetTxs::Create(block, challenge));
|
||||
BOOST_CHECK(!CheckSignetBlockSolution(block, signet_params->GetConsensus()));
|
||||
|
||||
// has data, valid
|
||||
witness_commitment_section_325.push_back(0x00);
|
||||
cb.vout.at(0).scriptPubKey = CScript{} << OP_RETURN << witness_commitment_section_141 << witness_commitment_section_325;
|
||||
block.vtx.at(0) = MakeTransactionRef(cb);
|
||||
BOOST_CHECK(SignetTxs::Create(block, challenge));
|
||||
BOOST_CHECK(CheckSignetBlockSolution(block, signet_params->GetConsensus()));
|
||||
|
||||
// Extraneous data, invalid
|
||||
witness_commitment_section_325.push_back(0x00);
|
||||
cb.vout.at(0).scriptPubKey = CScript{} << OP_RETURN << witness_commitment_section_141 << witness_commitment_section_325;
|
||||
block.vtx.at(0) = MakeTransactionRef(cb);
|
||||
BOOST_CHECK(!SignetTxs::Create(block, challenge));
|
||||
BOOST_CHECK(!CheckSignetBlockSolution(block, signet_params->GetConsensus()));
|
||||
}
|
||||
|
||||
static bool ReturnFalse() { return false; }
|
||||
static bool ReturnTrue() { return true; }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue