La variable de estado es esta:mapping(address=>uint) public userVotes;
ahora tengo una función:
function votePresident(uint _id) external {
presidents[_id-1].voteCount++;
userVotes[msg.sender] = _id;
Voter(msg.sender, _id, userVotes[msg.sender]);
}
la última línea es un evento. Entonces, lo que sucede aquí es que después de ejecutar esta función, coloco una dirección del ejecutor en un mapeo como clave y valor cuando pasó. Luego lo registro.
Tengo otra función donde uso este usuarioVotes
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] );
}
mire la línea de retorno el último parámetro, userVotes[msg.sender]
. Desafortunadamente, siempre devuelve 0. No sé por qué lo hace. Revisé el registro después de ejecutar la primera función y no vi 0. Solo vi el valor real. Por favor ayuda . Si llamo a la función getPresident en remix, devuelve el valor real y no 0.
Cualquiera puede necesitarlo.
A veces, puede olvidar pasar una cuenta cuando en realidad está llamando a un método gratuito que solo está devolviendo algo. En mi caso, estaba llamando a una función gratuita (sin gas) y como no usé la transacción de envío, me olvidé de pasar el nombre de la cuenta. Puede pasar la cuenta a la función de llamada como lo haría con la función de envío.
shawn tabrizi
msg.sender
muy bien en estas situaciones por lo que puedo ver.Giorgi Lagidze
shawn tabrizi
Giorgi Lagidze
shawn tabrizi
usuario19510
getPresident
parece funcionar. Lo que no funciona es su código JavaScript que lo llama. No has compartido ese código, pero mi suposición de tiro en la oscuridad es que no estás pasando unafrom
dirección.Giorgi Lagidze
shawn tabrizi