Wir werden ein Vorschlagssystem und eine Option für registrierte Wähler zur Abstimmung hinzufügen. Dazu benötigen wir ein Array zum Speichern der Vorschläge und eine neue Funktion zum Abstimmen.
Fügen Sie im Voter
Vertrag die folgenden Codezeilen hinzu:
Solidity
// SPDX-License-Identifier: GPL-3.0
Pragma Solidity >=0.7.0 <0.9.0;
Vertrag Wähler {
struct Person {
bool voted;
uint vote;
}
struct Proposal {
string name;
uint voteCount;
}
Proposal[] öffentliche Vorschläge;
Mapping(Adresse => Person) öffentliche Wähler;
Funktion registerVoter() öffentlich {
voters[msg.sender].voted = false;
}
Funktion addProposal(string Memory _name) öffentlich {
proposals.push(Proposal(_name, 0));
}
Funktion vote(uint _proposal) öffentlich {
require(_proposal < proposals.length, "Invalid proposal index."); // This is the added check
Person storage sender = voters[msg.sender];
require(!sender.voted, "Already voted.");
sender.voted = true;
sender.vote = _proposal;
proposals[_proposal].voteCount += 1;
}
}
Lassen Sie uns den neuen Code aufschlüsseln:
Vorschlagsstruktur: Wir haben eine neue Struktur hinzugefügt, Proposal
, die den Namen des Vorschlags und die Anzahl der erhaltenen Stimmen enthält.
Proposals-Array: Das proposals
Array enthält alle Vorschläge im Abstimmungssystem.
Funktion „Vorschlag hinzufügen“: Mit der Funktion addProposal
können wir einen neuen Vorschlag zum proposals
Array hinzufügen. Der Vorschlagsname wird als Parameter übergeben und die Stimmenzahl wird zunächst auf Null gesetzt.
Abstimmungsfunktion: Mit der vote
kann ein registrierter Wähler seine Stimme abgeben. Es verwendet den Index eines Vorschlags als Parameter und erhöht die Stimmenzahl des Vorschlags um eins. Außerdem wird überprüft, ob der Wähler bereits abgestimmt hat, und der Status des Wählers aktualisiert.
Nachdem wir unserem Vertrag nun weitere Funktionen hinzugefügt haben, ist es an der Zeit, ihn zu kompilieren und zu testen. Klicken Sie in der Remix-IDE auf das Solidity-Compiler-Symbol in der linken Seitenleiste und dann auf die Schaltfläche „Kompilieren“.
Um Ihren Vertrag zu testen, gehen Sie zur Registerkarte „Transaktionen bereitstellen und ausführen“ (unter dem Solidity-Compiler-Symbol) und klicken Sie auf die Schaltfläche „Bereitstellen“. Sobald der Vertrag bereitgestellt ist, können Sie mit ihm interagieren, indem Sie seine Funktionen auf dieser Registerkarte aufrufen. Versuchen Sie, einen Wähler zu registrieren, einen Vorschlag hinzuzufügen und eine Stimme abzugeben, um zu sehen, wie es funktioniert.
In der nächsten Lektion werden wir die Funktionalität implementieren, um die Stimmen zu zählen und das Ergebnis des Abstimmungsprozesses bekannt zu geben. Bis dahin können Sie den Vertrag gerne erkunden und damit experimentieren. Solidity bietet viele weitere Funktionen, die Ihren Vertrag robuster und sicherer machen können. Viel Spaß beim Codieren!
Wir werden ein Vorschlagssystem und eine Option für registrierte Wähler zur Abstimmung hinzufügen. Dazu benötigen wir ein Array zum Speichern der Vorschläge und eine neue Funktion zum Abstimmen.
Fügen Sie im Voter
Vertrag die folgenden Codezeilen hinzu:
Solidity
// SPDX-License-Identifier: GPL-3.0
Pragma Solidity >=0.7.0 <0.9.0;
Vertrag Wähler {
struct Person {
bool voted;
uint vote;
}
struct Proposal {
string name;
uint voteCount;
}
Proposal[] öffentliche Vorschläge;
Mapping(Adresse => Person) öffentliche Wähler;
Funktion registerVoter() öffentlich {
voters[msg.sender].voted = false;
}
Funktion addProposal(string Memory _name) öffentlich {
proposals.push(Proposal(_name, 0));
}
Funktion vote(uint _proposal) öffentlich {
require(_proposal < proposals.length, "Invalid proposal index."); // This is the added check
Person storage sender = voters[msg.sender];
require(!sender.voted, "Already voted.");
sender.voted = true;
sender.vote = _proposal;
proposals[_proposal].voteCount += 1;
}
}
Lassen Sie uns den neuen Code aufschlüsseln:
Vorschlagsstruktur: Wir haben eine neue Struktur hinzugefügt, Proposal
, die den Namen des Vorschlags und die Anzahl der erhaltenen Stimmen enthält.
Proposals-Array: Das proposals
Array enthält alle Vorschläge im Abstimmungssystem.
Funktion „Vorschlag hinzufügen“: Mit der Funktion addProposal
können wir einen neuen Vorschlag zum proposals
Array hinzufügen. Der Vorschlagsname wird als Parameter übergeben und die Stimmenzahl wird zunächst auf Null gesetzt.
Abstimmungsfunktion: Mit der vote
kann ein registrierter Wähler seine Stimme abgeben. Es verwendet den Index eines Vorschlags als Parameter und erhöht die Stimmenzahl des Vorschlags um eins. Außerdem wird überprüft, ob der Wähler bereits abgestimmt hat, und der Status des Wählers aktualisiert.
Nachdem wir unserem Vertrag nun weitere Funktionen hinzugefügt haben, ist es an der Zeit, ihn zu kompilieren und zu testen. Klicken Sie in der Remix-IDE auf das Solidity-Compiler-Symbol in der linken Seitenleiste und dann auf die Schaltfläche „Kompilieren“.
Um Ihren Vertrag zu testen, gehen Sie zur Registerkarte „Transaktionen bereitstellen und ausführen“ (unter dem Solidity-Compiler-Symbol) und klicken Sie auf die Schaltfläche „Bereitstellen“. Sobald der Vertrag bereitgestellt ist, können Sie mit ihm interagieren, indem Sie seine Funktionen auf dieser Registerkarte aufrufen. Versuchen Sie, einen Wähler zu registrieren, einen Vorschlag hinzuzufügen und eine Stimme abzugeben, um zu sehen, wie es funktioniert.
In der nächsten Lektion werden wir die Funktionalität implementieren, um die Stimmen zu zählen und das Ergebnis des Abstimmungsprozesses bekannt zu geben. Bis dahin können Sie den Vertrag gerne erkunden und damit experimentieren. Solidity bietet viele weitere Funktionen, die Ihren Vertrag robuster und sicherer machen können. Viel Spaß beim Codieren!