Ich versuche, einen einfachen doppelten Escrow-Vertrag zu erstellen. Ich habe eine Aufzählung für den Zustand:
enum State { Created, Locked, Inactive }
State public state;
Wenn ich versuche, über die Truffle-Konsole mit dem Vertrag zu interagieren, kann ich den Enum-Typ zurückgeben lassen:
aber ich verstehe nicht, wie man Vergleiche mit dem zurückgegebenen Wert anstellt. Kann mir jemand sagen, wie ich den zurückgegebenen Wert vergleichen kann?
Es ist eine BigNumber: https://github.com/ethereum/wiki/wiki/JavaScript-API#a-note-on-big-numbers-in-web3js
Versuchen Sie dies, um die Idee zu bekommen:
> var stateReadable = state.toString(10);
> stateReadable
Ich hoffe es hilft.
Update ... das wird ein bisschen grob, weil es ein Bild ist und kein Code, mit dem ich spielen kann. Mit diesem Teil gibst du ein Versprechen zurück. return instance.state()
. Jetzt müssen Sie etwas mit diesem Versprechen tun.
var state =
ist ein Fehler, weil Sie nicht wollen, dass es ein Versprechen ist.
Ich werde es zur Lesbarkeit und Veranschaulichung ein wenig herunterbrechen.
Versuchen:
> var state;
> var contract;
> Escrow.deployed().then(function(instance) { contract = instance; });
> contract.state().then(function(value) { state = value) });
> state.toString(10);
Als geskriptete Sache würde ich diese wahrscheinlich verketten, damit die Dinge nicht zu schnell vorausdonnern. Warten Sie auf die Instanz und fragen Sie dann die Funktion ab.
var state;
var escrow; // more conventional naming
Escrow.deployed()
.then(function(instance) {
escrow = instance;
return escrow.state(); // this way we know it won't get called until the instance returns
})
.then(function(response) { // now we do something with the promise we returned.
state = response;
console.log(state.toString(10);
});
Sehen Sie, wie die Versprechen beginnen, eine Kette zu bilden? Sie können weiterhin Versprechen zurückgeben, dann den Block schließen und anhängen, .then(...
um die Ergebnisse an den nächsten Schritt zu übergeben. Mit anderen Worten, wenn Sie nach my eine weitere Interaktion mit dem Vertrag benötigen console.log()
, würden Sie die Funktion und dann at mit einer anderen return
fortsetzen .});
.then()
Ich gehe hier nur nach Ton, also hoffe ich, dass ich die Syntax nicht vermasselt habe.
Ich hoffe es hilft.
Nepoche
Rob Hitchens
Nepoche