Transactions
布隆過濾器中究竟包含什麼?
交易收據布隆過濾器中究竟包含哪些地址?我知道收據日誌中的每個“地址”都包括在內(事件簽名和索引事件參數也是如此)。
我有信心(但好奇我是否正確)交易中的
to
和from
地址不在收據的布隆過濾器中。我也有信心(但再次好奇)事務可能“呼叫”到的任何地址都包含在布隆過濾器中(在
Parity
–not sure about上geth
)。我不知道“contractAddress”欄位是否包含在合約創建中,也不知道是否包含獲勝礦工的地址。
是否有明確的文件(除了對布隆過濾器的極其困難的一段黃皮書描述)可以準確解釋哪些地址正在布隆,哪些不在布隆中?
[我必須查看此程式碼,因此如果以下內容不完整,您可能需要進一步探勘。(我想我已經正確地遵循了。)這是 Geth 的實現。]
通過
bloom9.go
將接收日誌傳遞到CreateBloom()
.func CreateBloom(receipts Receipts) Bloom { bin := new(big.Int) for _, receipt := range receipts { bin.Or(bin, LogsBloom(receipt.Logs)) } return BytesToBloom(bin.Bytes()) }
從這里通用呼叫鍊是
LogsBloom()
->bloom9()
->Keccak256()
,可以在同一個文件中遵循。這些函式中的第一個向我們展示了內容:日誌地址和主題列表。
func LogsBloom(logs []*Log) *big.Int { bin := new(big.Int) for _, log := range logs { bin.Or(bin, bloom9(log.Address.Bytes())) for _, b := range log.Topics { bin.Or(bin, bloom9(b[:])) } } return bin }