Network

發送庫存消息之前的兩個 if

  • June 10, 2015

經過main.cpp我無法完全理解編碼為 if 語句的雙重障礙的目的:

我指的是……

if (pto->setInventoryKnown.count(inv))

if (pto->setInventoryKnown.insert(inv).second)

檢查目標對等方是否知道庫存兩次背後的想法是什麼?
我知道if (pto->setInventoryKnown.count(inv))僅檢查目標對等方是否已知條目並if (pto->setInventoryKnown.insert(inv).second)在檢查其唯一性後插入庫存項目。
我的意思是不能只使用一個if 語句組合嗎?

我也沒有看到第二個if聲明的任何理由。我在這裡不是從任何形式的權威發言,但對我來說它看起來像是一個(微小的)效率錯誤。

自第一次送出以來,第二條if語句就一直存在。第一條語句是在大約一年後添加 tx inv 消息的“trickling”時插入的,大概是為了更早地檢查集合成員身份,以避免在不需要時執行trickling 邏輯。我猜第二個的刪除被忽略了。if``if

我不確定第二個 if 是否沒用。

第二個 if 做了更詳細的檢查(見mruset.hL50 <https://github.com/bitcoin/bitcoin/blob/3fce72eaa3ea75aa911e32c4d96313848338cede/src/mruset.h#L51>),我認為這會減少集合的大小等。

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