Network
發送庫存消息之前的兩個 if
經過
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>),我認為這會減少集合的大小等。