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!
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.
Pizzapim
natewelch_