]> Git Repo - VerusCoin.git/blame - src/checkpoints.cpp
Test
[VerusCoin.git] / src / checkpoints.cpp
CommitLineData
f914f1a7 1// Copyright (c) 2009-2014 The Bitcoin Core developers
fa94b9d5 2// Distributed under the MIT software license, see the accompanying
3a25a2b9 3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
eb5fff9e 4
10fd7f66 5#include "checkpoints.h"
eb5fff9e 6
e11712df 7#include "chainparams.h"
ed6d0b5f
PW
8#include "main.h"
9#include "uint256.h"
10
51ed9ec9
BD
11#include <stdint.h>
12
51ed9ec9
BD
13#include <boost/foreach.hpp>
14
e10dcf27
PK
15namespace Checkpoints {
16
fa94b9d5 17 /**
b05a89b2
LD
18 * How many times slower we expect checking transactions after the last
19 * checkpoint to be (from checking signatures, which is skipped up to the
20 * last checkpoint). This number is a compromise, as it can't be accurate
21 * for every system. When reindexing from a fast disk with a slow CPU, it
fa94b9d5
MF
22 * can be up to 20, while when downloading from a slow network with a
23 * fast multicore CPU, it won't be much higher than 1.
24 */
39278369 25 static const double SIGCHECK_VERIFICATION_FACTOR = 5.0;
9f2467ad 26
fa94b9d5 27 //! Guess how far we are in the verification process at the given block index
11982d36 28 double GuessVerificationProgress(const CCheckpointData& data, CBlockIndex *pindex, bool fSigchecks) {
9f2467ad
PW
29 if (pindex==NULL)
30 return 0.0;
31
51ed9ec9 32 int64_t nNow = time(NULL);
9f2467ad 33
39278369 34 double fSigcheckVerificationFactor = fSigchecks ? SIGCHECK_VERIFICATION_FACTOR : 1.0;
9f2467ad
PW
35 double fWorkBefore = 0.0; // Amount of work done before pindex
36 double fWorkAfter = 0.0; // Amount of work left after pindex (estimated)
e7906d18 37 // Work is defined as: 1.0 per transaction before the last checkpoint, and
9f2467ad
PW
38 // fSigcheckVerificationFactor per transaction after.
39
9f2467ad
PW
40 if (pindex->nChainTx <= data.nTransactionsLastCheckpoint) {
41 double nCheapBefore = pindex->nChainTx;
42 double nCheapAfter = data.nTransactionsLastCheckpoint - pindex->nChainTx;
43 double nExpensiveAfter = (nNow - data.nTimeLastCheckpoint)/86400.0*data.fTransactionsPerDay;
44 fWorkBefore = nCheapBefore;
45 fWorkAfter = nCheapAfter + nExpensiveAfter*fSigcheckVerificationFactor;
46 } else {
47 double nCheapBefore = data.nTransactionsLastCheckpoint;
48 double nExpensiveBefore = pindex->nChainTx - data.nTransactionsLastCheckpoint;
209377a7 49 double nExpensiveAfter = (nNow - pindex->GetBlockTime())/86400.0*data.fTransactionsPerDay;
9f2467ad
PW
50 fWorkBefore = nCheapBefore + nExpensiveBefore*fSigcheckVerificationFactor;
51 fWorkAfter = nExpensiveAfter*fSigcheckVerificationFactor;
52 }
53
54 return fWorkBefore / (fWorkBefore + fWorkAfter);
55 }
56
11982d36 57 int GetTotalBlocksEstimate(const CCheckpointData& data)
eb5fff9e 58 {
11982d36 59 const MapCheckpoints& checkpoints = data.mapCheckpoints;
857b3ad9 60
a8cdaf5c
CF
61 if (checkpoints.empty())
62 return 0;
eb5fff9e 63
c87c8cd1 64 return checkpoints.rbegin()->first;
eb5fff9e 65 }
10fd7f66 66
11982d36 67 CBlockIndex* GetLastCheckpoint(const CCheckpointData& data)
10fd7f66 68 {
11982d36 69 const MapCheckpoints& checkpoints = data.mapCheckpoints;
10fd7f66 70
c87c8cd1 71 BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, checkpoints)
10fd7f66
GA
72 {
73 const uint256& hash = i.second;
145d5be8 74 BlockMap::const_iterator t = mapBlockIndex.find(hash);
10fd7f66
GA
75 if (t != mapBlockIndex.end())
76 return t->second;
77 }
78 return NULL;
79 }
e10dcf27
PK
80
81} // namespace Checkpoints
This page took 0.136856 seconds and 4 git commands to generate.