Это мой контракт, в котором я создаю список участников, которые будут использовать функцию addVote
. Кажется, что функция allMembersVoted
всегда возвращает значение false
, хотя отладчик Remix показывает, что функция возвращает true
правильный результат. Не могли бы вы помочь мне узнать, чего не хватает?
Поток такой:
Проверить, все ли проголосовали
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;
}
Судя по всему, виноват был способ, которым я добавлял массивы. Я изменил дополнение через индекс, push()
и теперь все работает. Итак, lm.members[i + 1] = listMembers[i]
стал lm.members.push(listMembers[i]))
.