Wie kann ich den Indexwert einer Enum zurückgeben?

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:

Geben Sie hier die Bildbeschreibung ein

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?

Antworten (1)

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 returnfortsetzen .});.then()

Ich gehe hier nur nach Ton, also hoffe ich, dass ich die Syntax nicht vermasselt habe.

Ich hoffe es hilft.

Vielen Dank für die Antwort, aber anstatt ein int zurückzugeben, gibt es ein Versprechen zurück.
Ich verstehe was du meinst. Aktualisierung.
Wow vielen Dank! Auch die Erklärung hilft wirklich weiter.