Warum Filter verwenden – eth_getLogs vs. eth_newFilter

Es scheint mir eth_getLogsviel einfacher als eth_newFilter+ eth_getFilterLogs.

eth_getLogsbenötigt keine Installation, hat dieselben Parameter, fängt Ereignisse nachträglich ab. Was sind überhaupt Anwendungsfälle von Filtern?

Wie in meiner vorherigen Frage :

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

Antworten (1)

eth_getLogsgibt ein Array von Filterprotokollen zurück. Sie übergeben die Parameter - zB fromBlock, toBlock usw. - die Sie diskriminieren möchten. Dies sind dieselben Parameter, die von verwendet werden eth_newFilter.

eth_newFilterverwendet die gleichen Parameter, gibt aber filterIdanstelle eines Arrays von Protokollen ein zurück. Diese ID kann dann an übergeben werden eth_getFilterLogs, die das Array von Protokollen zurückgibt.

So weit, so ähnlich.

Sie filterIDkönnen jedoch auch verwenden eth_getFilterChanges, was ein:

Abfragemethode für einen Filter, der ein Array von Protokollen zurückgibt, die seit der letzten Abfrage aufgetreten sind.

Wenn Sie sich den Code ansehen und einem Filter eine ID zuweisen, ist diese Abfragefunktion besser möglich, da sie einen Schlüssel bereitstellt, anhand dessen wir speichern können, wann der Filter das letzte Mal überprüft wurde.

Wenn Sie sich nicht für Umfragen interessieren, möchten Sie wahrscheinlich nur eth_getLogs.

wo wird das idgespeichert? Was ist, wenn ich mit Infura spreche, einem Cluster von Knoten, und meine ID verloren gehen könnte?
Infura unterstützt keine Filter und insbesondere keine der folgenden Operationen: * eth_coinbas * eth_sign * eth_sendTransaction * eth_newFilter * eth_newBlockFilter * eth_newPendingTransactionFilter * eth_uninstallFilter * eth_getFilterChanges * eth_getFilterLogs * db_putString * db_getString * db_putHex * db_getHex