Bitcoin-Core-Development

CChain::Next 不應該檢查給定的塊是否是尖端塊嗎?

  • July 7, 2022

這個函式在這裡給出一個指向塊的指針,並返回該指針的後繼塊。

   /** 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在周圍程式碼中的某處處理得很好(不過我還沒有檢查過)。

引用自:https://bitcoin.stackexchange.com/questions/114384