Hi. Is anyone here, who can explain what exactly is happening in the m_saveAncestors and priv_fastGetBlockHash__ functions in btcChain.se? I understand the idea of the indexing of block ancestors but I'm concerned about the exact details of the implementation.

Specifically, this code block in m_saveAncestors

with $i = 1 : while $i < NUM_ANCESTOR_DEPTHS: with $depth = m_getAncDepth( $i ): if m_getHeight( $blockHash ) % $depth == 1 : m_mwrite32( ref ( $ancWord ) + 4 * $i , $prevIbIndex ) else : m_mwrite32( ref ( $ancWord ) + 4 * $i , m_getAncestor( $hashPrevBlock , $i )) $i += 1

Also, could it be, that priv_fastGetBlockHash__ fails if the requested block has more than 78125 confirmations? I may be wrong, but it seems to me that the following check will fail in this case:

(excerpt from priv_fastGetBlockHash__ ):

blockHash = self .heaviestBlock anc_index = NUM_ANCESTOR_DEPTHS - 1 <-- this is equal to 7 while m_getHeight (blockHash) > blockHeight: while m_getHeight (blockHash) - blockHeight < m_getAncDepth (anc_index) && anc_index > 0 : anc_index -= 1 blockHash = self .internalBlock [ m_getAncestor (blockHash, anc_index) ] return (blockHash)

Note: m_getAncDepth(7) returns 78125

Thx!