Es scheint mir eth_getLogs
viel einfacher als eth_newFilter
+ eth_getFilterLogs
.
eth_getLogs
benö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
eth_getLogs
gibt 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_newFilter
verwendet die gleichen Parameter, gibt aber filterId
anstelle 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 filterID
kö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
.
rstormsf
id
gespeichert? Was ist, wenn ich mit Infura spreche, einem Cluster von Knoten, und meine ID verloren gehen könnte?Bilgin Ibryam