Bytes32 in Array verschieben

Ich versuche, ein bytes32 in ein Array zu schieben, aber es bleibt leer.

Dies ist (ein Teil) meines Codes:

contract Voting {
    bytes32[] public encryptedVotes;
    bytes32[] public candidateList;
    address[] public pollingStationList;
    address public owner;
    function Voting(bytes32[] _candidateList, address[] _pollingStationList) public {
        candidateList = _candidateList;
        pollingStationList = _pollingStationList;
        owner = msg.sender;
    }

    function vote(bytes32 encryptedVote) public {
        encryptedVotes.push(encryptedVote);
    }

    function getEncryptedVotes() view public returns (bytes32[]) {
        return encryptedVotes;
    }
}

Kümmern Sie sich nicht um den "verschlüsselten" Teil des Codes, er ist Teil von mehr Logik.

Das Problem liegt in der „vote“-Funktion. Wenn ich es mit web3 aufrufe, "contractInstance.vote.call("a value")", gibt es [] zurück, ändert aber nicht den Status. Der Aufruf von getEncryptedVotes gibt [] zurück.

Gibt es eine Logik, die bytes32 umgibt, die ich nicht sehe? Vielen Dank im Voraus!

Antworten (1)

Ihr Problem ist, wie Sie es nennen. Die Verwendung von ".call" einer Vertragsfunktion erstellt keine Transaktion, sondern einen schreibgeschützten Aufruf der Funktion. Dies wird für Konstanten-/Ansichtsfunktionen verwendet. Wenn Sie also aufrufen contractInstance.vote.call("a value"), wird die Funktion off-chain ausgeführt und der Status nicht aktualisiert. Sie sollten in der Lage sein, einfach anzurufen constractInstance.vote("a value"), wodurch der Vertragsstatus tatsächlich aktualisiert wird.

Vielen Dank! Es sind immer diese kleinen Dinge ... Meinst du, ich sollte diese Frage löschen, weil die Frage wenig mit der Antwort zusammenhängt?
Kein Problem. Ich hatte dieses Problem definitiv ein paar Mal. Machen Sie sich keine Sorgen über das Löschen, die Leute werden wahrscheinlich auf das gleiche Problem stoßen, ohne die eigentliche Ursache zu erkennen.