Zustandsvariable ist dies:mapping(address=>uint) public userVotes;
Jetzt habe ich eine Funktion:
function votePresident(uint _id) external {
presidents[_id-1].voteCount++;
userVotes[msg.sender] = _id;
Voter(msg.sender, _id, userVotes[msg.sender]);
}
Die letzte Zeile ist ein Ereignis. Was hier also passiert, ist, dass ich nach dem Ausführen dieser Funktion eine Adresse des Ausführenden in ein Mapping als Schlüssel und Wert einfüge, wenn er übergeben wird. Dann protokolliere ich es.
Ich habe eine andere Funktion, wo ich diese userVotes verwende
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] );
}
Schauen Sie sich in der Rückleitung den letzten Parameter an, userVotes[msg.sender]
. Leider gibt es immer 0 zurück. Ich weiß nicht, warum es das tut. Ich habe das Protokoll überprüft, nachdem ich die erste Funktion ausgeführt hatte, und ich habe keine 0 gesehen. Ich habe nur den tatsächlichen Wert gesehen. Bitte helfen Sie. Wenn ich die getPresident-Funktion in Remix aufrufe, gibt sie den tatsächlichen Wert und nicht 0 zurück.
Jeder könnte es brauchen.
Manchmal vergessen Sie möglicherweise, ein Konto zu übergeben, wenn Sie tatsächlich eine kostenlose Methode aufrufen, die nur etwas zurückgibt. In meinem Fall habe ich eine kostenlose (No-Gas) Funktion aufgerufen und weil ich die Sendetransaktion nicht verwendet habe, habe ich vergessen, den Kontonamen zu übergeben. Sie können das Konto wie für die Sendefunktion an die Anruffunktion übergeben.
Shawn Tabrizi
msg.sender
in diesen Situationen gut, wie ich sehen kann.Giorgi Lagidze
Shawn Tabrizi
Giorgi Lagidze
Shawn Tabrizi
Benutzer19510
getPresident
zu funktionieren. Was nicht funktioniert, ist Ihr JavaScript-Code, der es aufruft. Sie haben diesen Code nicht geteilt, aber ich vermute im Dunkeln, dass Sie keinefrom
Adresse weitergeben.Giorgi Lagidze
Shawn Tabrizi