Просмотр переменной сопоставления

Это мой контракт, в котором я создаю список участников, которые будут использовать функцию 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;
    }
    

Ответы (1)

Судя по всему, виноват был способ, которым я добавлял массивы. Я изменил дополнение через индекс, push()и теперь все работает. Итак, lm.members[i + 1] = listMembers[i]стал lm.members.push(listMembers[i])).