Drucken in die Konsole: Events TypeError - 'watch' ist keine Funktion

Drucken in die Konsole

Ich muss Werte wie diese grünen Linien ausdrucken:

von ethereum.org

1) Versucht zurückzugeben

Wenn ich eine Funktion aufrufe, die eine Zeichenfolge zurückgibt, wird die Hexa-Transaktionsadresse anstelle des Funktionswerts gedruckt.

2) Versuchte js

Unter Bezugnahme auf diesen Link habe ich die folgende js-Datei geladen, in der Hoffnung, Variablenwerte auszudrucken.

var abi = /*abi interface*/
var Insurance= web3.eth.contract(abi);
var insurance = Insurance.at(web3.eth.accounts[0]);
var event = insurance.claimInsurance();

// watch for changes
event.watch(function(error, result){
    if (!error)
        console.log(result);
});
event.get(function(error, result){
    if (!error)
        console.log(result);
});

Ich bekomme err: TypeError: 'watch' is not a function.

Gibt es eine Möglichkeit, Variablenwerte aus der Geth-Konsole auszudrucken?

Antworten (1)

Um dies zu erreichen, müssen Sie 3 Dinge tun:

  1. definiere ein Ereignis in der Solidität:

    event myEvent1(address _sender, string _msg);
    
  2. Rufen Sie dieses Ereignis innerhalb der Funktion in solidity auf. in Ihrem Fall "listProposal()"

    myEvent1(msg.sender,"this event called")
    
  3. Rufen Sie zuerst die Methode im JS mit dem web3-Objekt auf, das Ihr Ereignis enthält, dh listProposal(). wenn dies in der EVM ausgeführt werden soll, soll sie das Ereignis ausgeben. Sie müssen also eine JS-Funktion erstellen, die auf die Änderung des Ereignisstatus lauscht:

    //method call
    var abc = insurance.listProposal(42,function(err,res){...});
    
    //now you should here start watching for any event being emitted from the EVM
    var eventGenerated = insurance.myEvent1({},function(err,res){
    if(!err){
     console.log(res.args._sender+"has this message:"+ res.args._msg);// this is the line which you want to show to the console, when your message gets called, which is in green line in the console.
    }
    else{
     console.log(err);
    }
    });
    

Ich hoffe das hilft. Ich habe es mit der Callback-Methode gemacht. Dort schreibe ich die gewünschte Nachricht, sobald Ihr Vertrag erfolgreich ausgeführt wurde.

Hoffe das hilft. Vielen Dank.

Sie haben keine abcVariablen verwendet? @Vixon