Json-Rpc
為什麼使用過濾器 - eth_getLogs 與 eth_newFilter
在我看來
eth_getLogs
比eth_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
.