Я хочу изменить некоторые переменные состояния, но вернуть вид - PullRequest
0 голосов
/ 12 июня 2019

Я хочу изменить значение сопоставления isUsed в операторе isValid if-else и вернуть логическое значение на основе if else

Я пытался включить ключевое слово view в объявление функции, но это привело к неизменным результатам

function createVoucher(string val )public
   { var stud= VKey[val];
     isKey[val]=true;
     stud.key=val;
     stud.count=1 }

function isValid(string  val)public  view returns(bool){
    if(isKey[val] && isUsed[val]==false)
    {var stud=VKey[val];
     isKey[val]=false;
     stud.count=stud.count--;
     isUsed[val]=true;
    return  true;}

    else return false  }}

`

Я ожидал, что созданный ваучер вернет true при первом вызове isValid () и false при последующих вызовах

1 Ответ

0 голосов
/ 12 июня 2019

isValid объявлена ​​как функция view, поэтому при ее вызове код просто выполняется локально на одном узле, и никакая транзакция не добавляется в цепочку блоков.Это означает, что он не может изменить любое состояние.

Вам необходимо удалить модификатор view, если вы хотите, чтобы ваша функция изменила значения хранилища.Но обратите внимание, что транзакции не имеют возвращаемых значений , поэтому вы больше не сможете получить логическое значение.Вместо этого вы можете захотеть создать событие или использовать отдельную функцию для проверки isUsed.

...