2016-03-19 10 views
3

Ich habe einen Vertrag, der eine Methode auf einen anderen Vertrag ruft, die verursacht, dass es ein Ereignis ausstrahlt - die ich in einem Knotenprozess abhöre.Ethereum Call Contract-Methode, die ein Ereignis aus einem anderen Vertrag ausgibt

Wenn ich die Methode ausführen, die das Ereignis direkt (von der Konsole) auslöst - wird es gut ausgelöst. Aber wenn ich die Methode ausfühle, indem ich zuerst den ursprünglichen Vertrag anrufe, um wiederum den Vertrag aufzurufen, der das Ereignis auslöst, wird das Ereignis nicht ausgelöst.

Gibt es eine Möglichkeit, eine Vertragsfolge zu verlangen, die ich vermisse, oder kann ich das nicht per Entwurf tun? Der folgende Code beschreibt das Problem:

contract EventEmitter{ 
    event Emit(address addr, string message); 

    //this works when I call it directly from the console,ie: 
    //emitter.doEmit("blah", {from: "[primary acc]", value: web3.toWei(100, "ether")}); 
    function doEmit(string message) returns (bool){ 
     Emit(msg.sender, message); 
     return true; 
    } 
} 

contract EventEmitterCaller{ 
    event TestEvent(string message); 

    function callDoEmit(string message) returns (bool){ 
     EventEmitter emitter = new EventEmitter(); 
     //always returns false 
     //emitterCaller.callDoEmit("blah", {from: "[primary acc]", value: web3.toWei(100, "ether")}); 
     return emitter.doEmit(message); 
    } 

} 
+0

duh. Ich muss den EventEmitterCaller ändern, um auf den EventEmitter-Vertrag durch seine Adresse zu verweisen: EventEmitter-Emitter = EventEmitter ([Adresse von eventemitter]) –

+0

fyi, http://ethereum.stackexchange.com/ – default

Antwort

1

benötigt zum EventEmitter durch seine Adresse beziehen:

statt

von
EventEmitter emitter = new EventEmitter(); 

tun

EventEmitter emitter = EventEmitter(0xef833fea60388efd541b62737c7aa3b59a6d80ef);