генерация событий на самом деле является очень хорошим подходом для поиска чего-то в дальнейшем.
Настолько хорошо, что некоторые разработчики ethql и даже TheGraph .
Но хотя на первый взгляд эти два могут показаться немного сложными, вы можете очень легко сделать то, что вы хотите, используя ethers .
Вот пример
let tx = await contractWithSigner.setValue("I like turtles.");
contract.on("ValueChanged", (author, oldValue, newValue, event) => {
// Called when anyone changes the value
console.log(author);
// "0x14791697260E4c9A71f18484C9f997B308e59325"
console.log(oldValue);
// "Hello World"
console.log(newValue);
// "Ilike turtles."
// See Event Emitter below for all properties on Event
console.log(event.blockNumber);
// 4115004
});
await tx.wait();
Используя следующий контракт
pragma solidity ^0.4.24;
contract SimpleStorage {
event ValueChanged(address indexed author, string oldValue, string newValue);
string _value;
constructor(string value) public {
emit ValueChanged(msg.sender, _value, value);
_value = value;
}
function getValue() view public returns (string) {
return _value;
}
function setValue(string value) public {
emit ValueChanged(msg.sender, _value, value);
_value = value;
}
}