Как вернуть значение индекса Enum?

Я пытаюсь построить простой двойной договор условного депонирования. У меня есть перечисление для состояния:

enum State { Created, Locked, Inactive }
State public state;

Когда я пытаюсь взаимодействовать с контрактом через консоль трюфеля, я могу вернуть тип enum:

введите описание изображения здесь

но я не понимаю, как делать сравнения с возвращаемым значением. Может кто-нибудь сказать мне, как сравнить возвращаемое значение?

Ответы (1)

Это BigNumber: https://github.com/ethereum/wiki/wiki/JavaScript-API#a-note-on-big-numbers-in-web3js .

Попробуйте это, чтобы понять идею:

> var stateReadable = state.toString(10);
> stateReadable

Надеюсь, поможет.

Обновление ... это будет немного грубо, потому что это изображение, а не код, с которым я могу поиграть. Вы возвращаете обещание с этой частью. return instance.state(). Теперь вы должны что-то сделать с этим обещанием.

var state =является ошибкой, потому что вы не хотите, чтобы это было обещанием.

Я собираюсь немного разбить его для удобства чтения и иллюстрации.

Пытаться:

> var state;
> var contract;
> Escrow.deployed().then(function(instance) { contract = instance; });
> contract.state().then(function(value) { state = value) });
> state.toString(10);

По сценарию я бы, вероятно, связал их в цепочку, чтобы события не развивались слишком быстро. Дождитесь экземпляра, затем запросите функцию.

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);
});

Видите, как обещания начинают формировать цепочку? Вы можете продолжать возвращать обещания, затем закрыть блок и добавить, .then(...чтобы передать результаты на следующий шаг. Другими словами, если вам нужно еще одно взаимодействие с контрактом после my console.log(), вы должны выполнить returnфункцию, а затем продолжить at });с другим .then().

Просто по звуку, надеюсь, я не ошибся в синтаксисе.

Надеюсь, поможет.

Спасибо за ответ, но вместо того, чтобы возвращать int, он возвращает обещание.
Я понимаю что ты имеешь ввиду. Обновление.
Вау, спасибо большое! Объяснение действительно помогает.