Ich verwende die JavaScript-API in meinen Truffle-Tests, um die Ereignisse aus dem Vertrag abzurufen: https://github.com/ethereum/wiki/wiki/JavaScript-API#contract-allevents
const allEvents = instance.allEvents({
fromBlock: 0,
toBlock: 'latest'
});
allEvents.watch((err, res) => {
console.log(res);
});
Es hört nie auf zuzuhören, also habe ich versucht, dies am Ende hinzuzufügen:
allEvents.stopWatching()
Das Zuhören stoppt, aber es wird nie etwas protokolliert, also habe ich versucht, eine Verzögerung hinzuzufügen:
setTimeout(allEvents.stopWatching, 1000);
Aber das Zuhören hört nicht auf.
Wie höre ich auf zu hören, nachdem alle bisher ausgegebenen Ereignisse abgerufen wurden?
1) Die Verwendung von indizierten Parametern, z. B. Adresse oder Ganzzahlen, kann ebenfalls sehr nützlich sein
Beispiel mit ERC20.sol- Prüfung hier Erc20.transfer
sollte ausgeben event(address _to, uint256 _amount)
, was indiziert werden kann, wodurch es einfacher wird, an den Front-End- event Transfer(address indexed _to, uint256 _amount);
Vertragsereignissen zu filtern
könnte auf diese Weise geschrieben werden, und Sie erhalten Ereignisse nur von der indizierten Adresse und der indizierten Menge während der Übertragung.
Erc20.events.Transfer({ filter: { _to: recipient, _amount: amount} })
.on("data", function(event) {
....
}).on("error", console.error);
}
Ich hoffe, jemand findet das hilfreich, ich bin auch offen für Korrekturen.
Es besagt, dass Sie stopWatching() nicht aufrufen müssen, wenn Sie eine Callback-Funktion übergeben. Das Problem liegt woanders, also verwerfen Sie einfach die Idee, stopWatching zu verwenden. Könnten Sie stattdessen diese Implementierung versuchen:
const allEvents = instance.allEvents({
fromBlock: 0,
toBlock: 'latest'
});
allEvents.watch((err, res) => {
if (!error)
console.log(res);
});
Geben Sie mir ein Update
Ismael
.stopWatching()
unmittelbar danach aufrufen.watch()
, wird es dort vor jedem Ereignis anhalten, setTimeout funktioniert möglicherweise nicht, daallEvents.stopWatching
es sich um eine Funktion ohne Bindung handelt.Harsha Laxmann