Bitcoin-Core-Development
CChain::Next 不應該檢查給定的塊是否是尖端塊嗎?
這個函式在這裡給出一個指向塊的指針,並返回該指針的後繼塊。
/** Find the successor of a block in this chain, or nullptr if the given index is not found or is the tip. */ CBlockIndex* Next(const CBlockIndex* pindex) const { if (Contains(pindex)) return (*this)[pindex->nHeight + 1]; else return nullptr; }
如果給定的塊包含在鏈中,它會嘗試返回後繼塊。因此,如果
Chain.Tip()
給出了,它會在沒有提示塊的後繼者時嘗試到達後繼者。檢查nHeight
給定塊是否小於Chain.Tip().nHeight - 1
或不是更好嗎?
這並不能保證目前檢查的塊有後繼者。雖然最終網路會在一條最佳鏈上收斂,但當兩個礦工在相同高度找到一個區塊時,網路偶爾會暫時分叉。如果一個節點位於正在重組的鏈尖上,則可能有一個高度更高的塊,而它不是節點目前最佳塊的後繼。就目前而言,我們必須處理沒有後繼者的塊,所以我假設
nullptr
在周圍程式碼中的某處處理得很好(不過我還沒有檢查過)。