Examinar una variable de mapeo

Este es mi contrato donde estoy creando una lista de miembros que usarán una addVotefunción. La allMembersVotedfunción siempre parece regresar falsea pesar de que el depurador de Remix muestra que la función regresa truecorrectamente. ¿Me pueden ayudar a encontrar lo que falta?

El flujo es así:

  • Crear nuevo contrato
  • Lista de compilación
  • Votar
  • Comprobar si todos han votado

    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;
    }
    

Respuestas (1)

Aparentemente, el culpable fue la forma en que estaba agregando a las matrices. Cambié la adición a través del índice push()y las cosas están funcionando ahora. Entonces, lm.members[i + 1] = listMembers[i]se convirtió en lm.members.push(listMembers[i])).