Dies ist mein Vertrag, in dem ich eine Liste von Mitgliedern erstelle, die eine addVote
Funktion verwenden werden. Die allMembersVoted
Funktion scheint immer zurückzukehren, false
obwohl der Remix-Debugger dies anzeigt, die Funktion kehrt true
korrekt zurück. Können Sie mir bitte helfen herauszufinden, was fehlt?
Der Ablauf ist so:
Überprüfen Sie, ob alle abgestimmt haben
struct ListMembers {
bytes32 listOwner;
bytes32[] members;
}
ListMembers public lm;
mapping(bytes32 => bool) public addedMembers;
// Constructor to initialise the ListMembers struct
function Lister(bytes32 listOwner) {
lm.listOwner = listOwner;
lm.members.length = 1;
lm.members[0] = listOwner;
}
function buildList(bytes32[] listMembers) {
lm.members.length = listMembers.length + 1;
for (uint i = 0; i < listMembers.length; i++) {
lm.members[i + 1] = listMembers[i];
}
}
function addVote(bytes32 member, uint256 number) {
if (memberAdded(member) == true) { // Check double votes
return;
} else {
addedMembers[member] = true; // Confirm that vote added
if (memberIsOwner(member) == true) {
// Add vote with weight
} else {
// Add vote without weight
}
}
}
function memberAdded(bytes32 member) returns (bool) {
return addedMembers[member];
}
function allMembersVoted() returns (bool) {
bool voted = true;
for (uint i = 0; i < lm.members.length; i++) {
voted = voted && addedMembers[lm.members[i]];
}
return voted;
}
Anscheinend war der Schuldige die Art und Weise, wie ich Arrays hinzufügte. Ich habe den Zusatz via Index auf geändert push()
und jetzt funktioniert es. Also lm.members[i + 1] = listMembers[i]
wurde lm.members.push(listMembers[i]))
.