From source code:
/** The block chain is a tree shaped structure starting with the * genesis block at the root, with each block potentially having multiple * candidates to be the next block. A blockindex may have multiple pprev pointing * to it, but at most one of them can be part of the currently active branch. */ class CBlockIndex //! pointer to the index of the predecessor of this block CBlockIndex* pprev; //! pointer to the index of some further predecessor of this block CBlockIndex* pskip;
Can anyone help me understand the need for skip pointers, perhaps with a picture? Why should we track this? The comment says some predecessor . When and where are these useful?