MCPcopy Create free account
hub / github.com/LUX-Core/lux / checkCalculatedDifficulty

Function checkCalculatedDifficulty

src/cpp-ethereum/test/libethcore/difficulty.cpp:44–102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42)";
43
44void checkCalculatedDifficulty(BlockHeader const& _bi, BlockHeader const& _parent, Network _n, ChainOperationParams const& _p, string const& _testName = "")
45{
46 u256 difficulty = _bi.difficulty();
47 u256 frontierDiff = _p.u256Param("homsteadForkBlock");
48
49 //The ultimate formula (Homestead)
50 if (_bi.number() > frontierDiff)
51 {
52 u256 minimumDifficulty = _p.u256Param("minimumDifficulty");
53 bigint block_diff = _parent.difficulty();
54
55 bigint a = (_parent.difficulty() / 2048);
56 int b = 1 - int(_bi.timestamp() - _parent.timestamp()) / 10;
57 bigint c = (_bi.number() / 100000) - 2;
58
59 block_diff += a * max<int>(b, -99);
60 block_diff += u256(1) << (unsigned)c;
61 block_diff = max<bigint>(minimumDifficulty, block_diff);
62
63 BOOST_CHECK_MESSAGE(difficulty == block_diff, "Homestead Check Calculated diff = " << difficulty << " expected diff = " << block_diff << _testName);
64 return;
65 }
66
67 u256 durationLimit;
68 u256 minimumDifficulty;
69 u256 difficultyBoundDivisor;
70 switch(_n)
71 {
72 case Network::MainNetwork:
73 case Network::FrontierTest:
74 case Network::HomesteadTest:
75 case Network::Ropsten:
76 case Network::TransitionnetTest:
77 durationLimit = 13;
78 minimumDifficulty = 131072;
79 difficultyBoundDivisor = 2048;
80 break;
81 default:
82 cerr << "testing undefined network difficulty";
83 durationLimit = _p.u256Param("durationLimit");
84 minimumDifficulty = _p.u256Param("minimumDifficulty");
85 difficultyBoundDivisor = _p.u256Param("difficultyBoundDivisor");
86 break;
87 }
88
89 //Frontier Era
90 bigint block_diff = _parent.difficulty();
91
92 bigint a = (_parent.difficulty() / difficultyBoundDivisor);
93 bigint b = ((_bi.timestamp() - _parent.timestamp()) < durationLimit) ? 1 : -1;
94 bigint c = (_bi.number() / 100000) - 2;
95
96 block_diff += a * b;
97 block_diff += u256(1) << (unsigned)c;
98 block_diff = max<bigint>(minimumDifficulty, block_diff);
99
100 BOOST_CHECK_MESSAGE(difficulty == block_diff, "Check Calculated diff = " << difficulty << " expected diff = " << block_diff << _testName);
101 return;

Callers 1

testDifficultyFunction · 0.85

Calls 3

difficultyMethod · 0.80
u256ParamMethod · 0.80
numberMethod · 0.45

Tested by

no test coverage detected