Einfaches Logikereignis mit Funktion zum Auslösen, funktioniert perfekt wie erwartet in der Truffle-Entwicklungskonsole, feuert aber nie auf meinem mit create-react-app erstellten Dapp, es scheint nur das Netzwerk nicht zu hören/überwachen, ich habe Leute, die sagen, es sollte kontinuierlich Laden Sie die POST-Anfrage, um das Netzwerk zu überwachen, aber nicht in meinem Fall. Ich verwende Metamask, und alle Smart-Contract-Funktionsaufrufe funktionieren mit Ausnahme von Ereignissen gut.
event RoundStarted(uint256 closingBlock);
function roundStart() public ownerOnly {
RoundStarted(block.number + ROUND_LENGTH);
}
Und die Codezeile, die ich in der Truffle-Entwicklungskonsole verwendet habe, die nicht funktioniert, wenn ich sie in componentWillMount() einfüge
Loto.deployed().then(function(instance){
return instance.RoundStarted({},{fromBlock: 0, toBlock: 'latest'});
}).then((result) => {
return result.watch((error,result) => {
console.log('Found him!')
})
})
UPD: Ich habe herausgefunden, dass Ereignisse in der Truffle React Box gut funktionieren, also löst das irgendwie das Problem, aber ich weiß immer noch nicht, wie sie es geschafft haben, es ist nicht mein Codeproblem, etwas über Abhängigkeiten, ich würde es gerne wissen was vermisse ich in meiner create-react-app.
Funktioniert es, wenn Sie alle JS-Objektargumente im Vertragsereignisaufruf entfernen, z. B. wenn Sie Zeile 2 in Ihrem Snippet durch ersetzenreturn instance.RoundStarted();
Ich habe nicht damit experimentiert, Start- und Endblöcke anzugeben, die ich überwachen möchte, aber vielleicht den Endblock so anzugeben, dass er 'latest'
den letzten Block zum Zeitpunkt des Aufrufs Ihrer componentWillMount()
Funktion übernimmt, was wahrscheinlich ein Block vor dem Auslösen Ihres Ereignisses ist.
willjgriff
const Loto = Contract(LotoContract); Loto.setProvider(web3.currentProvider)
? Wobei web3 vom injizierten Anbieter stammt, zB MetaMask.Andreas Katsewich