Solidity-Ereignisse serverseitig abhören

Ich habe folgenden Vertrag:

pragma solidity ^0.4.17;

contract FileDetail {
 struct File{
    string fileName;
    string fileHash;
 }



 File[] private files;

 event Uploaded(
       string fileName,
       string fileHash
    );


 function setFile(string fName, string fileHash) public{
 File memory file = File({fileName:fName,fileHash:fileHash});
  files.push(file);
 emit Uploaded(fName,fileHash);
 }

 function getFile(uint256 index) external view returns(
 string fileName,
 string fileHash

 ){

   File memory file = files[index];
   fileName = file.fileName;
   fileHash = file.fileHash;

 }
}

Ich möchte das von diesem Vertrag ausgegebene Ereignis serverseitig (nicht clientseitig) in Node.js abhören. Ich möchte, dass die Methode eines Controllers aufgerufen wird, wenn ein Ereignis ausgegeben wird, damit ich die vom Vertrag zurückgegebenen Werte in der Datenbank speichern kann.

Antworten (1)

Sie können dies wie folgt tun,

var event = contract.myEvent();
event.watch((err, res) => {
    console.log(res); // event response
    // Do something on event;
    event.stopWatching() // Stop watching for the event once you've done what you wanted to do.
});

Es wäre übrigens ziemlich nett, wenn Sie auch Ihren node.js-Code posten könnten.

BEARBEITEN: Wichtig zu wissen ist, dass Sie, wenn Sie mit infura (Test- oder Mainnet) verbunden sind, eine Verbindung zu ihrem Websocket-Anbieter und jetzt zu ihrem http-Anbieter herstellen müssen, also statt zum Beispiel: Sie müssen als Anbieter https://mainnet.infura.io/einfügen wss://mainnet.infura.io/ws.

Seltsam! Es funktioniert mit "http://127.0.0.1:8545".
Das ist großartig! Wenn meine Lösung das Problem löst, markiere sie bitte als Antwort, damit andere sehen können, dass sie gelöst ist =)