mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-13 07:28:59 +01:00
Merge #18267: BIP-325: Signet [consensus]
8258c4c007test: some sanity checks for consensus logic (Anthony Towns)e47ad375bftest: basic signet tests (Karl-Johan Alm)4c189abdc4test: add small signet fuzzer (practicalswift)ec9b25d046test: signet network selection tests (Karl-Johan Alm)3efe298dccsignet: hard-coded parameters for Signet Global Network VI (2020-09-07) (Karl-Johan Alm)c7898bca4eqt: update QT to support signet network (Karl-Johan Alm)a8de47a1c9consensus: add signet validation (Karl-Johan Alm)e8990f1214add signet chain and accompanying parameters (Karl-Johan Alm)404682b7cdadd signet basic support (signet.cpp) (Karl-Johan Alm)a2147d7dadvalidation: move GetWitnessCommitmentIndex to consensus/validation (Karl-Johan Alm) Pull request description: This PR is a part of BIP-325 (https://github.com/bitcoin/bips/blob/master/bip-0325.mediawiki), and is a sub-PR of #16411. * Signet consensus (this) * Signet RPC tools (pending) * Signet utility scripts (contrib/signet) (pending) ACKs for top commit: jonatack: re-ACK8258c4c007per `git diff dbeea65 8258c4c`, only change since last review is updated `-signet*` config option naming. fjahr: re-ACK8258c4claanwj: ACK8258c4c007MarcoFalke: Approach ACK8258c4c007🌵 Tree-SHA512: 5d158add96755910837feafa8214e13695b769a6aec3a2da753cf672618bef377fac43b0f4b772a87b25dd9f0c1c9b29f2789785d7a7d47a155cdcf48f7c975d
This commit is contained in:
34
src/test/fuzz/signet.cpp
Normal file
34
src/test/fuzz/signet.cpp
Normal file
@@ -0,0 +1,34 @@
|
||||
// Copyright (c) 2020 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <chainparams.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <primitives/block.h>
|
||||
#include <signet.h>
|
||||
#include <streams.h>
|
||||
#include <test/fuzz/fuzz.h>
|
||||
#include <test/fuzz/FuzzedDataProvider.h>
|
||||
#include <test/fuzz/util.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
|
||||
void initialize()
|
||||
{
|
||||
InitializeFuzzingContext(CBaseChainParams::SIGNET);
|
||||
}
|
||||
|
||||
void test_one_input(const std::vector<uint8_t>& buffer)
|
||||
{
|
||||
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
||||
const std::optional<CBlock> block = ConsumeDeserializable<CBlock>(fuzzed_data_provider);
|
||||
if (!block) {
|
||||
return;
|
||||
}
|
||||
(void)CheckSignetBlockSolution(*block, Params().GetConsensus());
|
||||
if (GetWitnessCommitmentIndex(*block) != NO_WITNESS_COMMITMENT) {
|
||||
(void)SignetTxs(*block, ConsumeScript(fuzzed_data_provider));
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@ BOOST_AUTO_TEST_CASE(key_io_invalid)
|
||||
std::string exp_base58string = test[0].get_str();
|
||||
|
||||
// must be invalid as public and as private key
|
||||
for (const auto& chain : { CBaseChainParams::MAIN, CBaseChainParams::TESTNET, CBaseChainParams::REGTEST }) {
|
||||
for (const auto& chain : { CBaseChainParams::MAIN, CBaseChainParams::TESTNET, CBaseChainParams::SIGNET, CBaseChainParams::REGTEST }) {
|
||||
SelectParams(chain);
|
||||
destination = DecodeDestination(exp_base58string);
|
||||
BOOST_CHECK_MESSAGE(!IsValidDestination(destination), "IsValid pubkey in mainnet:" + strTest);
|
||||
|
||||
@@ -135,4 +135,51 @@ BOOST_AUTO_TEST_CASE(GetBlockProofEquivalentTime_test)
|
||||
}
|
||||
}
|
||||
|
||||
void sanity_check_chainparams(std::string chainName)
|
||||
{
|
||||
const auto chainParams = CreateChainParams(chainName);
|
||||
const auto consensus = chainParams->GetConsensus();
|
||||
|
||||
// hash genesis is correct
|
||||
BOOST_CHECK_EQUAL(consensus.hashGenesisBlock, chainParams->GenesisBlock().GetHash());
|
||||
|
||||
// target timespan is an even multiple of spacing
|
||||
BOOST_CHECK_EQUAL(consensus.nPowTargetTimespan % consensus.nPowTargetSpacing, 0);
|
||||
|
||||
// genesis nBits is positive, doesn't overflow and is lower than powLimit
|
||||
arith_uint256 pow_compact;
|
||||
bool neg, over;
|
||||
pow_compact.SetCompact(chainParams->GenesisBlock().nBits, &neg, &over);
|
||||
BOOST_CHECK(!neg && pow_compact != 0);
|
||||
BOOST_CHECK(!over);
|
||||
BOOST_CHECK(UintToArith256(consensus.powLimit) >= pow_compact);
|
||||
|
||||
// check max target * 4*nPowTargetTimespan doesn't overflow -- see pow.cpp:CalculateNextWorkRequired()
|
||||
if (!consensus.fPowNoRetargeting) {
|
||||
arith_uint256 targ_max("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
|
||||
targ_max /= consensus.nPowTargetTimespan*4;
|
||||
BOOST_CHECK(UintToArith256(consensus.powLimit) < targ_max);
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ChainParams_MAIN_sanity)
|
||||
{
|
||||
sanity_check_chainparams(CBaseChainParams::MAIN);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ChainParams_REGTEST_sanity)
|
||||
{
|
||||
sanity_check_chainparams(CBaseChainParams::REGTEST);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ChainParams_TESTNET_sanity)
|
||||
{
|
||||
sanity_check_chainparams(CBaseChainParams::TESTNET);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ChainParams_SIGNET_sanity)
|
||||
{
|
||||
sanity_check_chainparams(CBaseChainParams::SIGNET);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
@@ -848,8 +848,8 @@ struct ArgsMergeTestingSetup : public BasicTestingSetup {
|
||||
ForEachNoDup(conf_actions, SET, SECTION_NEGATE, [&] {
|
||||
for (bool soft_set : {false, true}) {
|
||||
for (bool force_set : {false, true}) {
|
||||
for (const std::string& section : {CBaseChainParams::MAIN, CBaseChainParams::TESTNET}) {
|
||||
for (const std::string& network : {CBaseChainParams::MAIN, CBaseChainParams::TESTNET}) {
|
||||
for (const std::string& section : {CBaseChainParams::MAIN, CBaseChainParams::TESTNET, CBaseChainParams::SIGNET}) {
|
||||
for (const std::string& network : {CBaseChainParams::MAIN, CBaseChainParams::TESTNET, CBaseChainParams::SIGNET}) {
|
||||
for (bool net_specific : {false, true}) {
|
||||
fn(arg_actions, conf_actions, soft_set, force_set, section, network, net_specific);
|
||||
}
|
||||
@@ -1003,7 +1003,7 @@ BOOST_FIXTURE_TEST_CASE(util_ArgsMerge, ArgsMergeTestingSetup)
|
||||
// Results file is formatted like:
|
||||
//
|
||||
// <input> || <IsArgSet/IsArgNegated/GetArg output> | <GetArgs output> | <GetUnsuitable output>
|
||||
BOOST_CHECK_EQUAL(out_sha_hex, "8fd4877bb8bf337badca950ede6c917441901962f160e52514e06a60dea46cde");
|
||||
BOOST_CHECK_EQUAL(out_sha_hex, "d1e436c1cd510d0ec44d5205d4b4e3bee6387d316e0075c58206cb16603f3d82");
|
||||
}
|
||||
|
||||
// Similar test as above, but for ArgsManager::GetChainName function.
|
||||
@@ -1106,7 +1106,7 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup)
|
||||
// Results file is formatted like:
|
||||
//
|
||||
// <input> || <output>
|
||||
BOOST_CHECK_EQUAL(out_sha_hex, "f0b3a3c29869edc765d579c928f7f1690a71fbb673b49ccf39cbc4de18156a0d");
|
||||
BOOST_CHECK_EQUAL(out_sha_hex, "f263493e300023b6509963887444c41386f44b63bc30047eb8402e8c1144854c");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(util_ReadWriteSettings)
|
||||
|
||||
Reference in New Issue
Block a user