Json-Rpc

為什麼使用過濾器 - eth_getLogs 與 eth_newFilter

  • October 30, 2016

在我看來eth_getLogseth_newFilter+簡單得多eth_getFilterLogs

eth_getLogs無需安裝,參數相同,可追溯擷取事件。過濾器的案例是什麼?

就像我之前的問題一樣:

from ethjsonrpc import EthJsonRpc
c = EthJsonRpc('127.0.0.1', 8545)
ADDRESS = "0xdb1154368ba2645e6c090f3d1f3ddd5c8c1f8008"
params = {
       "fromBlock": "0x01",
       "address": ADDRESS
   }
before = c.eth_newFilter(params)
for i in range(100):
   tx = c.call_with_transaction(c.eth_coinbase(), ADDRESS, 'setValue(uint32)', [i])
   receipt = c.eth_getTransactionReceipt(tx)
after = c.eth_newFilter(params)

print len(c.eth_getFilterLogs(before)) // 100
print len(c.eth_getFilterLogs(after)) // 0
print len(c.eth_getLogs(params)) // 100

eth_getLogs返回過濾器日誌數組。您傳入參數 - 例如 fromBlock、toBlock 等 - 您想要區別對待。這些與 . 使用的參數相同eth_newFilter

eth_newFilter採用相同的參數,但返回 afilterId而不是日誌數組。然後可以將此 ID 傳遞給eth_getFilterLogs,它返回日誌數組。

到目前為止,如此相似。

但是,filterID允許您也使用eth_getFilterChanges,這是一個:

過濾器的輪詢方法,它返回自上次輪詢以來發生的日誌數組。

查看程式碼,為過濾器提供一個 ID 可以更好地支持此輪詢功能,因為它提供了一個密鑰,我們可以根據該密鑰儲存上次檢查過濾器的時間。

如果您不關心輪詢,那麼您可能只想要eth_getLogs.

引用自:https://ethereum.stackexchange.com/questions/8069