Durchsuchen einer Mapping-Variablen

Dies ist mein Vertrag, in dem ich eine Liste von Mitgliedern erstelle, die eine addVoteFunktion verwenden werden. Die allMembersVotedFunktion scheint immer zurückzukehren, falseobwohl der Remix-Debugger dies anzeigt, die Funktion kehrt truekorrekt zurück. Können Sie mir bitte helfen herauszufinden, was fehlt?

Der Ablauf ist so:

  • Neuen Vertrag erstellen
  • Liste bauen
  • Abstimmung
  • Ü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;
    }
    

Antworten (1)

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])).