mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-17 18:40:09 +00:00
Merge #9053: IBD using chainwork instead of height and not using header timestamps
e141beb IsInitialBlockDownload no longer uses header-only timestamps. (Gregory Maxwell) 2082b55 Remove GetTotalBlocksEstimate and checkpoint tests that test nothing. (Gregory Maxwell) fd46136 IBD check uses minimumchain work instead of checkpoints. (Gregory Maxwell)
This commit is contained in:
commit
508404de98
@ -12,6 +12,7 @@ Before every minor and major release:
|
|||||||
* Update [bips.md](bips.md) to account for changes since the last release.
|
* Update [bips.md](bips.md) to account for changes since the last release.
|
||||||
* Update version in sources (see below)
|
* Update version in sources (see below)
|
||||||
* Write release notes (see below)
|
* Write release notes (see below)
|
||||||
|
* Update `src/chainparams.cpp` nMinimumChainWork with information from the getblockchaininfo rpc.
|
||||||
|
|
||||||
Before every major release:
|
Before every major release:
|
||||||
|
|
||||||
|
@ -50,7 +50,6 @@ BITCOIN_TESTS =\
|
|||||||
test/bip32_tests.cpp \
|
test/bip32_tests.cpp \
|
||||||
test/blockencodings_tests.cpp \
|
test/blockencodings_tests.cpp \
|
||||||
test/bloom_tests.cpp \
|
test/bloom_tests.cpp \
|
||||||
test/Checkpoints_tests.cpp \
|
|
||||||
test/coins_tests.cpp \
|
test/coins_tests.cpp \
|
||||||
test/compress_tests.cpp \
|
test/compress_tests.cpp \
|
||||||
test/crypto_tests.cpp \
|
test/crypto_tests.cpp \
|
||||||
|
@ -96,6 +96,9 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1479168000; // November 15th, 2016.
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1479168000; // November 15th, 2016.
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1510704000; // November 15th, 2017.
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1510704000; // November 15th, 2017.
|
||||||
|
|
||||||
|
// The best chain should have at least this much work.
|
||||||
|
consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000002cb971dd56d1c583c20f90");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The message start string is designed to be unlikely to occur in normal data.
|
* The message start string is designed to be unlikely to occur in normal data.
|
||||||
* The characters are rarely used upper ASCII, not valid as UTF-8, and produce
|
* The characters are rarely used upper ASCII, not valid as UTF-8, and produce
|
||||||
@ -191,6 +194,9 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1462060800; // May 1st 2016
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1462060800; // May 1st 2016
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1493596800; // May 1st 2017
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1493596800; // May 1st 2017
|
||||||
|
|
||||||
|
// The best chain should have at least this much work.
|
||||||
|
consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000198b4def2baa9338d6");
|
||||||
|
|
||||||
pchMessageStart[0] = 0x0b;
|
pchMessageStart[0] = 0x0b;
|
||||||
pchMessageStart[1] = 0x11;
|
pchMessageStart[1] = 0x11;
|
||||||
pchMessageStart[2] = 0x09;
|
pchMessageStart[2] = 0x09;
|
||||||
@ -224,6 +230,7 @@ public:
|
|||||||
fRequireStandard = false;
|
fRequireStandard = false;
|
||||||
fMineBlocksOnDemand = false;
|
fMineBlocksOnDemand = false;
|
||||||
|
|
||||||
|
|
||||||
checkpointData = (CCheckpointData) {
|
checkpointData = (CCheckpointData) {
|
||||||
boost::assign::map_list_of
|
boost::assign::map_list_of
|
||||||
( 546, uint256S("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")),
|
( 546, uint256S("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")),
|
||||||
@ -265,6 +272,9 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 0;
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 0;
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 999999999999ULL;
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 999999999999ULL;
|
||||||
|
|
||||||
|
// The best chain should have at least this much work.
|
||||||
|
consensus.nMinimumChainWork = uint256S("0x00");
|
||||||
|
|
||||||
pchMessageStart[0] = 0xfa;
|
pchMessageStart[0] = 0xfa;
|
||||||
pchMessageStart[1] = 0xbf;
|
pchMessageStart[1] = 0xbf;
|
||||||
pchMessageStart[2] = 0xb5;
|
pchMessageStart[2] = 0xb5;
|
||||||
|
@ -55,16 +55,6 @@ namespace Checkpoints {
|
|||||||
return fWorkBefore / (fWorkBefore + fWorkAfter);
|
return fWorkBefore / (fWorkBefore + fWorkAfter);
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetTotalBlocksEstimate(const CCheckpointData& data)
|
|
||||||
{
|
|
||||||
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
|
||||||
|
|
||||||
if (checkpoints.empty())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return checkpoints.rbegin()->first;
|
|
||||||
}
|
|
||||||
|
|
||||||
CBlockIndex* GetLastCheckpoint(const CCheckpointData& data)
|
CBlockIndex* GetLastCheckpoint(const CCheckpointData& data)
|
||||||
{
|
{
|
||||||
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
||||||
|
@ -19,9 +19,6 @@ struct CCheckpointData;
|
|||||||
namespace Checkpoints
|
namespace Checkpoints
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Return conservative estimate of total number of blocks, 0 if unknown
|
|
||||||
int GetTotalBlocksEstimate(const CCheckpointData& data);
|
|
||||||
|
|
||||||
//! Returns last CBlockIndex* in mapBlockIndex that is a checkpoint
|
//! Returns last CBlockIndex* in mapBlockIndex that is a checkpoint
|
||||||
CBlockIndex* GetLastCheckpoint(const CCheckpointData& data);
|
CBlockIndex* GetLastCheckpoint(const CCheckpointData& data);
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@ struct Params {
|
|||||||
int64_t nPowTargetSpacing;
|
int64_t nPowTargetSpacing;
|
||||||
int64_t nPowTargetTimespan;
|
int64_t nPowTargetTimespan;
|
||||||
int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; }
|
int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; }
|
||||||
|
uint256 nMinimumChainWork;
|
||||||
};
|
};
|
||||||
} // namespace Consensus
|
} // namespace Consensus
|
||||||
|
|
||||||
|
15
src/main.cpp
15
src/main.cpp
@ -1746,13 +1746,14 @@ bool IsInitialBlockDownload()
|
|||||||
return false;
|
return false;
|
||||||
if (fImporting || fReindex)
|
if (fImporting || fReindex)
|
||||||
return true;
|
return true;
|
||||||
if (fCheckpointsEnabled && chainActive.Height() < Checkpoints::GetTotalBlocksEstimate(chainParams.Checkpoints()))
|
if (chainActive.Tip() == NULL)
|
||||||
return true;
|
return true;
|
||||||
bool state = (chainActive.Height() < pindexBestHeader->nHeight - 24 * 6 ||
|
if (chainActive.Tip()->nChainWork < UintToArith256(chainParams.GetConsensus().nMinimumChainWork))
|
||||||
std::max(chainActive.Tip()->GetBlockTime(), pindexBestHeader->GetBlockTime()) < GetTime() - nMaxTipAge);
|
return true;
|
||||||
if (!state)
|
if (chainActive.Tip()->GetBlockTime() < (GetTime() - nMaxTipAge))
|
||||||
latchToFalse.store(true, std::memory_order_relaxed);
|
return true;
|
||||||
return state;
|
latchToFalse.store(true, std::memory_order_relaxed);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fLargeWorkForkFound = false;
|
bool fLargeWorkForkFound = false;
|
||||||
@ -1780,7 +1781,7 @@ void CheckForkWarningConditions()
|
|||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
// Before we get past initial download, we cannot reliably alert about forks
|
// Before we get past initial download, we cannot reliably alert about forks
|
||||||
// (we assume we don't get stuck on a fork before the last checkpoint)
|
// (we assume we don't get stuck on a fork before finishing our initial sync)
|
||||||
if (IsInitialBlockDownload())
|
if (IsInitialBlockDownload())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
// Copyright (c) 2011-2015 The Bitcoin Core developers
|
|
||||||
// Distributed under the MIT software license, see the accompanying
|
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
||||||
|
|
||||||
//
|
|
||||||
// Unit tests for block-chain checkpoints
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "checkpoints.h"
|
|
||||||
|
|
||||||
#include "uint256.h"
|
|
||||||
#include "test/test_bitcoin.h"
|
|
||||||
#include "chainparams.h"
|
|
||||||
|
|
||||||
#include <boost/test/unit_test.hpp>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
BOOST_FIXTURE_TEST_SUITE(Checkpoints_tests, BasicTestingSetup)
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(sanity)
|
|
||||||
{
|
|
||||||
const CCheckpointData& checkpoints = Params(CBaseChainParams::MAIN).Checkpoints();
|
|
||||||
BOOST_CHECK(Checkpoints::GetTotalBlocksEstimate(checkpoints) >= 134444);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
|
Loading…
x
Reference in New Issue
Block a user