переменная состояния такова:mapping(address=>uint) public userVotes;
теперь у меня есть функция:
function votePresident(uint _id) external {
presidents[_id-1].voteCount++;
userVotes[msg.sender] = _id;
Voter(msg.sender, _id, userVotes[msg.sender]);
}
последняя строка - событие. Итак, что здесь происходит, так это то, что после выполнения этой функции я помещаю адрес исполнителя в сопоставление в качестве ключа и значения, которое он передал. Затем я регистрирую это.
У меня есть другая функция, где я использую этот userVotes
function getPresident(uint _index) public view returns (uint, string, uint, string, uint) {
President storage president = presidents[_index];
return (president.voteCount, president.hashImage, president.id, president.name, userVotes[msg.sender] );
}
посмотри в строке возврата последний параметр, userVotes[msg.sender]
т.к. К сожалению, он всегда возвращает 0. Я не знаю, почему он это делает. Я проверил журнал после выполнения первой функции и не увидел 0. Я просто увидел фактическое значение. Пожалуйста помоги . Если я вызываю функцию getPresident в remix, она возвращает фактическое значение, а не 0.
Кому-то это может понадобиться.
Иногда вы можете забыть передать учетную запись, когда на самом деле вызываете бесплатный метод, который просто что-то возвращает. В моем случае я вызывал бесплатную (без газа) функцию, и поскольку я не использовал транзакцию отправки, я забыл передать имя учетной записи. Вы можете передать учетную запись в функцию вызова так же, как и в функцию отправки.
Шон Табризи
msg.sender
просто отлично в этих ситуациях, насколько я вижу.Георгий Лагидзе
Шон Табризи
Георгий Лагидзе
Шон Табризи
пользователь19510
getPresident
вроде работает. Что не работает, так это ваш код JavaScript, который его вызывает. Вы не поделились этим кодом, но я предполагаю, что вы не передаетеfrom
адрес.Георгий Лагидзе
Шон Табризи