Parameters in UpdateTip - calculation of log2_work

4

I looked up log2_work inside main.cpp and I can't follow its calculation by log(chainActive.Tip()->nChainWork.getdouble())/log(2.0).

a) What is -> explicitely indicating? (I'm at basic level of C++)

b) And what is log2_work exactly saying? Does it quantify the effort of calculation?

Related Question: here

Aliakbar Ahmadi

Posted 2015-05-06T15:04:36.517

Reputation: 1 335

Answers

7

FYI the code under discussion is available here on GitHub.

-> is a member access operator in C++, just as . is. They both expect the name of an object's member on the right (e.g. a member function or variable). The difference is that . expects an object on the left, whereas -> expects a pointer to an object which it first dereferences.

So chainActive.Tip()->nChainWork.getdouble() starts with the active chain, gets a pointer to a CBlockIndex object which represents the current tip, dereferences that pointer and gets the total chain work of the tip (which is a 256 bit integer), and converts it to a double.

Next it calculates natural_log(total_chain_work) / natural_log(2), which is the same as calculating log_base_2(total_chain_work). I presume this is simply to make the output smaller, as opposed to having to output the entire (much longer) total_chain_work.

If you'd like to get it back into the total_chain_work format used in older versions, just calculate 2log2_work, e.g. pow(2.0, log2_work).

Christopher Gurnee

Posted 2015-05-06T15:04:36.517

Reputation: 2 263

1Minor correction: the ´log´ function in C and C++ computes the natural logarithm (base e), not base 10.Nate Eldredge 2015-05-07T06:30:04.180

@NateEldredge Oops, thanks for the correction.Christopher Gurnee 2015-05-07T13:37:26.320

1What's the "total chain work of the tip"? What's the "tip" (I assume the currently known head of the "best" blockchain)? If I see e.g. log2_work=69.1234 what does it tell me?Flow 2015-05-08T08:53:57.147

4@Flow Yes, the "tip" is the most recent block in the "best" chain. The "total chain work" is the number of SHA-256d hashes that would be required (on average) to recreate the entire chain up to and including this tip (assuming the same the difficulty target of each block in the best chain). The "best" chain is the chain whose total work is greatest. If you see log2_work=82.749277 (which is the current log2_work according to my node), it means that the total work (approximate total # of hashes calculated) is about 2^82.749277 ≈ 8.12858 * 10^24.Christopher Gurnee 2015-05-08T12:33:14.073