MCPcopy Create free account
hub / github.com/bitcoinxt/bitcoinxt / GetNextMaxBlockSize

Function GetNextMaxBlockSize

src/maxblocksize.cpp:15–67  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13#include <boost/lexical_cast.hpp>
14
15uint64_t GetNextMaxBlockSize(const CBlockIndex* pindexLast, const Consensus::Params& params)
16{
17 // BIP100 not active, return legacy max size
18 if (pindexLast == NULL ||
19 ((Opt().UAHFTime() != 0) && (pindexLast->GetMedianTimePast() < Opt().UAHFTime())) ||
20 ((Opt().UAHFTime() == 0) && (pindexLast->nHeight < params.bip100ActivationHeight)))
21 return MAX_BLOCK_SIZE;
22
23 // Bump to 8MB at UAHF fork
24 if (IsUAHFActivatingBlock(pindexLast->GetMedianTimePast(), pindexLast->pprev))
25 return UAHF_INITIAL_MAX_BLOCK_SIZE;
26
27 uint64_t nMaxBlockSize = pindexLast->nMaxBlockSize;
28
29 // Only change once per difficulty adjustment interval
30 if ((pindexLast->nHeight+1) % params.DifficultyAdjustmentInterval() != 0) {
31 return nMaxBlockSize;
32 }
33
34 std::vector<uint64_t> votes;
35 const CBlockIndex *pindexWalk = pindexLast;
36 for (int64_t i = 0; i < params.DifficultyAdjustmentInterval(); i++) {
37 assert(pindexWalk);
38 votes.push_back(pindexWalk->nMaxBlockSizeVote ? pindexWalk->nMaxBlockSizeVote : nMaxBlockSize);
39 pindexWalk = pindexWalk->pprev;
40 }
41
42 std::sort(votes.begin(),votes.end());
43 uint64_t lowerValue = votes.at(params.nMaxBlockSizeChangePosition - 1);
44 uint64_t raiseValue = votes.at(params.DifficultyAdjustmentInterval() - params.nMaxBlockSizeChangePosition);
45
46 assert(lowerValue >= 1000000); // minimal vote supported is 1MB
47 assert(lowerValue >= raiseValue); // lowerValue comes from a higher sorted position
48
49 uint64_t raiseCap = nMaxBlockSize * 105 / 100;
50 raiseValue = (raiseValue > raiseCap ? raiseCap : raiseValue);
51 if (raiseValue > nMaxBlockSize) {
52 nMaxBlockSize = raiseValue;
53 } else {
54 uint64_t lowerFloor = nMaxBlockSize * 100 / 105;
55 lowerValue = (lowerValue < lowerFloor ? lowerFloor : lowerValue);
56 if (lowerValue < nMaxBlockSize)
57 nMaxBlockSize = lowerValue;
58 }
59
60 if (nMaxBlockSize != pindexLast->nMaxBlockSize) {
61 LogPrintf("GetNextMaxBlockSize RETARGET\n");
62 LogPrintf("Before: %d\n", pindexLast->nMaxBlockSize);
63 LogPrintf("After: %d\n", nMaxBlockSize);
64 }
65
66 return nMaxBlockSize;
67}
68
69static uint32_t FindVote(const std::string& coinbase) {
70

Callers 9

CreateNewBlockFunction · 0.85
BitcoinMinerFunction · 0.85
generateFunction · 0.85
getblocktemplateFunction · 0.85
FindBlockPosFunction · 0.85
TestBlockValidityFunction · 0.85
LoadBlockIndexDBFunction · 0.85
BOOST_AUTO_TEST_CASEFunction · 0.85

Calls 8

OptClass · 0.85
IsUAHFActivatingBlockFunction · 0.85
UAHFTimeMethod · 0.80
GetMedianTimePastMethod · 0.80
push_backMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by 2

TestBlockValidityFunction · 0.68
BOOST_AUTO_TEST_CASEFunction · 0.68