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

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).

  • 1
    Minor correction: the ´log´ function in C and C++ computes the natural logarithm (base e), not base 10. – Nate Eldredge May 7 '15 at 6:30
  • @NateEldredge Oops, thanks for the correction. – Christopher Gurnee May 7 '15 at 13:37
  • 1
    What'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 May 8 '15 at 8:53
  • 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 May 8 '15 at 12:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.