Gibt es eine Möglichkeit, ein Vertragsereignis zu abonnieren, ohne einen Filter zu erstellen?

Ich habe einen Vertrag mit einigen Veranstaltungen abgeschlossen. Es wurde mit einem lokalen Knoten getestet gethund funktionierte wie erwartet. Nun möchte ich es einsetzen und habe mich für infura.io als Public Node Provider entschieden.

Hier hatte ich ein Problem mit dem Stoppen der Anzeige: infura bietet nur begrenzte Set- oder RPC-Aufrufe und newFilterist nicht in dieser Liste enthalten. Ich sehe, dass beim Abonnieren von Ereignissen in meinem Vertrag zuerst ein fehlgeschlagener Anruf web3gesendet wird .eth_newFilter

Ich vermute, dass ich die Filteranweisung sicher aus meiner Vertragsdefinition entfernen kann:

this.contract.logWinner({fromBlock:'latest'}).watch(this.onWinner.bind(this));

und ersetzen Sie es durch

this.contract.logWinner({}).watch(this.onWinner.bind(this));

aber newFilterdie Funktion ruft immer noch auf und die App ist abgestürzt.

Meine Frage: Könnte ich es irgendwie vermeiden zu rufen eth.newfilter?

Antworten (1)

Anstelle der infura.io API, die nicht unterstützt wird,eth_newFilter können Sie die etherscan.io API verwenden .

So erhalten Sie beispielsweise EOS- Transfer Ereignisse:

const api = "https://api.etherscan.io/api?module=logs&action=getLogs";
const range = "&fromBlock=379224&toBlock=latest";
const addr = "&address=0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0";
const topic = "&topic0=0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";
fetch(api + range + addr + topic).then(r => r.json).then(console.log);
Ich muss überhaupt keine Drittanbieter-API aufrufen. Meine Frage bezog sich auf einen ganz anderen Fall.
Warum erwähnst du dann "Showstoppproblem: Infura bietet nur begrenzte Set- oder RPC-Aufrufe"?