Unter dezentraler Abstimmung versteht man ein Abstimmungssystem, das auf einer Blockchain läuft. Die Schlüsselidee besteht darin, die Transparenz, Sicherheit und Unveränderlichkeit der Blockchain-Technologie zu nutzen, um ein Abstimmungssystem aufzubauen, das schwer zu manipulieren und leicht zu überprüfen ist.
In einem dezentralen Abstimmungssystem ist jede Stimme eine Transaktion auf der Blockchain, die für alle Teilnehmer sichtbar ist, aber nur vom Wähler geändert werden kann, bis die Stimme abgegeben wird. Sobald eine Stimme abgegeben wurde, wird sie in der Blockchain aufgezeichnet und kann nicht verändert werden, wodurch ein transparenter und manipulationssicherer Abstimmungsmechanismus bereitgestellt wird.
Remix IDE (Integrated Development Environment) ist ein leistungsstarkes Open-Source-Tool, das speziell für die Entwicklung intelligenter Ethereum-Verträge entwickelt wurde. Es läuft direkt in Ihrem Webbrowser, sodass Sie nichts auf Ihrem Computer installieren müssen.
Sie können auf die Remix-IDE unter https://remix.ethereum.org zugreifen. Wenn Sie Remix in Ihrem Browser öffnen, finden Sie drei Bereiche:
Linker Bereich: Hier können Sie Ihre Solidity-Dateien erstellen, importieren und verwalten. Es enthält außerdem verschiedene Plugins zum Kompilieren, Testen, Debuggen und Bereitstellen Ihrer Verträge.
Zentrales Panel: Dies ist Ihr Code-Editor. Hier schreiben und bearbeiten Sie Ihren Solidity-Code.
Rechtes Panel: Dieses Panel bietet verschiedene Tools zum Zusammenstellen Ihrer Verträge, zum Bereitstellen im Ethereum-Netzwerk (entweder in einem echten Ethereum-Netzwerk oder in einer JavaScript-VM-Simulation) und zum Interagieren mit Ihren bereitgestellten Verträgen.
Beginnen wir mit einem einfachen „Wähler“-Vertrag. Dieser Vertrag wird die Wähler in unserem System verfolgen.
Gehen Sie in der Remix-IDE zum „Datei-Explorer“ und klicken Sie auf das „+“-Symbol, um eine neue Datei zu erstellen. Nennen Sie es Voter.sol
.
Beginnen wir nun mit dem Schreiben unseres Vertrags:
Solidity
// SPDX-License-Identifier: GPL-3.0
Pragma Solidity >=0.7.0 <0.9.0;
Vertrag Wähler {
// Eine Struktur zur Darstellung einer Person
Struktur Person {
bool voted; // if true, that person already voted
uint vote; // index of the voted proposal
}
// Eine Zuordnung zur Verfolgung aller Wähler
Zuordnung (Adresse => Person) öffentliche Wähler;
// Eine Funktion zum Registrieren eines Wählers
function registerVoter() public {
voters[msg.sender].voted = false;
}
}
SPDX-Lizenzkennung: Die Zeile // SPDX-License-Identifier: GPL-3.0
gibt an, dass unser Vertrag die GNU General Public License v3.0 verwendet. Dies ist eine häufig verwendete Lizenz für freie Software, die Endbenutzern die Freiheit garantiert, die Software auszuführen, zu studieren, zu teilen und zu ändern.
Pragma-Direktive: Die pragma solidity >=0.7.0 <0.9.0;
Die Anweisung gibt an, dass der Vertrag in einer Version von Solidity geschrieben ist, die größer oder gleich 0.7.0 und kleiner als 0.9.0 ist. Dadurch wird verhindert, dass der Vertrag mit einer neueren, inkompatiblen Compilerversion kompiliert wird.
Vertragsdefinition: Der Block contract Voter {...}
definiert einen neuen Vertrag mit dem Namen Voter
. Hier legen wir die Zustandsvariablen und Funktionen des Vertrags fest.
Strukturdefinition: Innerhalb des Vertrags definieren wir eine Struktur Person
, die eine Person in unserem Abstimmungssystem darstellt. Jede Person
verfügt über einen booleschen Wert „ voted
“, der angibt, ob sie bereits abgestimmt hat, und über eine Ganzzahl vote
“, die den Vorschlag verfolgt, für den sie gestimmt hat.
Zustandsvariable: Die mapping(address => Person) public voters;
Die Anweisung deklariert eine Zustandsvariable voters
, die eine Verknüpfung zwischen einer Ethereum-Adresse und einer Person
herstellt. Dadurch können wir nachverfolgen, wer im System wahlberechtigt ist und welche Stimme sie abgegeben haben. Das Schlüsselwort public
erstellt automatisch eine Getter-Funktion für voters
.
Funktionsdefinition: Der function registerVoter() public {...}
definiert eine öffentliche Funktion, die es Benutzern ermöglicht, sich selbst als Wähler im System zu registrieren. Die voters[msg.sender].voted = false;
Die Anweisung setzt den voted
des neuen Wählers auf false
.
Das war's mit diesem Vertrag! Im Laufe des Kurses werden wir diesen Vertrag erweitern, indem wir weitere Funktionen für den Abstimmungsprozess hinzufügen. Denken Sie daran, Ihren Code regelmäßig zu kompilieren und zu testen, um sicherzustellen, dass alles wie erwartet funktioniert. In der Remix-IDE können Sie Ihren Vertrag kompilieren, indem Sie auf das Solidity-Compiler-Symbol in der linken Seitenleiste (das dritte von oben) und dann auf die Schaltfläche „Kompilieren“ klicken.
In der nächsten Lektion lernen wir, wie man registrierten Wählern die Stimmabgabe ermöglicht und wie man die Logik für ein Wahlsystem implementiert. Aber spielen Sie zunächst einmal mit dem Vertrag herum und machen Sie sich mit der Remix-Umgebung vertraut. Sie haben gerade Ihren ersten Schritt in die Welt der intelligenten Vertragsentwicklung gemacht!
Unter dezentraler Abstimmung versteht man ein Abstimmungssystem, das auf einer Blockchain läuft. Die Schlüsselidee besteht darin, die Transparenz, Sicherheit und Unveränderlichkeit der Blockchain-Technologie zu nutzen, um ein Abstimmungssystem aufzubauen, das schwer zu manipulieren und leicht zu überprüfen ist.
In einem dezentralen Abstimmungssystem ist jede Stimme eine Transaktion auf der Blockchain, die für alle Teilnehmer sichtbar ist, aber nur vom Wähler geändert werden kann, bis die Stimme abgegeben wird. Sobald eine Stimme abgegeben wurde, wird sie in der Blockchain aufgezeichnet und kann nicht verändert werden, wodurch ein transparenter und manipulationssicherer Abstimmungsmechanismus bereitgestellt wird.
Remix IDE (Integrated Development Environment) ist ein leistungsstarkes Open-Source-Tool, das speziell für die Entwicklung intelligenter Ethereum-Verträge entwickelt wurde. Es läuft direkt in Ihrem Webbrowser, sodass Sie nichts auf Ihrem Computer installieren müssen.
Sie können auf die Remix-IDE unter https://remix.ethereum.org zugreifen. Wenn Sie Remix in Ihrem Browser öffnen, finden Sie drei Bereiche:
Linker Bereich: Hier können Sie Ihre Solidity-Dateien erstellen, importieren und verwalten. Es enthält außerdem verschiedene Plugins zum Kompilieren, Testen, Debuggen und Bereitstellen Ihrer Verträge.
Zentrales Panel: Dies ist Ihr Code-Editor. Hier schreiben und bearbeiten Sie Ihren Solidity-Code.
Rechtes Panel: Dieses Panel bietet verschiedene Tools zum Zusammenstellen Ihrer Verträge, zum Bereitstellen im Ethereum-Netzwerk (entweder in einem echten Ethereum-Netzwerk oder in einer JavaScript-VM-Simulation) und zum Interagieren mit Ihren bereitgestellten Verträgen.
Beginnen wir mit einem einfachen „Wähler“-Vertrag. Dieser Vertrag wird die Wähler in unserem System verfolgen.
Gehen Sie in der Remix-IDE zum „Datei-Explorer“ und klicken Sie auf das „+“-Symbol, um eine neue Datei zu erstellen. Nennen Sie es Voter.sol
.
Beginnen wir nun mit dem Schreiben unseres Vertrags:
Solidity
// SPDX-License-Identifier: GPL-3.0
Pragma Solidity >=0.7.0 <0.9.0;
Vertrag Wähler {
// Eine Struktur zur Darstellung einer Person
Struktur Person {
bool voted; // if true, that person already voted
uint vote; // index of the voted proposal
}
// Eine Zuordnung zur Verfolgung aller Wähler
Zuordnung (Adresse => Person) öffentliche Wähler;
// Eine Funktion zum Registrieren eines Wählers
function registerVoter() public {
voters[msg.sender].voted = false;
}
}
SPDX-Lizenzkennung: Die Zeile // SPDX-License-Identifier: GPL-3.0
gibt an, dass unser Vertrag die GNU General Public License v3.0 verwendet. Dies ist eine häufig verwendete Lizenz für freie Software, die Endbenutzern die Freiheit garantiert, die Software auszuführen, zu studieren, zu teilen und zu ändern.
Pragma-Direktive: Die pragma solidity >=0.7.0 <0.9.0;
Die Anweisung gibt an, dass der Vertrag in einer Version von Solidity geschrieben ist, die größer oder gleich 0.7.0 und kleiner als 0.9.0 ist. Dadurch wird verhindert, dass der Vertrag mit einer neueren, inkompatiblen Compilerversion kompiliert wird.
Vertragsdefinition: Der Block contract Voter {...}
definiert einen neuen Vertrag mit dem Namen Voter
. Hier legen wir die Zustandsvariablen und Funktionen des Vertrags fest.
Strukturdefinition: Innerhalb des Vertrags definieren wir eine Struktur Person
, die eine Person in unserem Abstimmungssystem darstellt. Jede Person
verfügt über einen booleschen Wert „ voted
“, der angibt, ob sie bereits abgestimmt hat, und über eine Ganzzahl vote
“, die den Vorschlag verfolgt, für den sie gestimmt hat.
Zustandsvariable: Die mapping(address => Person) public voters;
Die Anweisung deklariert eine Zustandsvariable voters
, die eine Verknüpfung zwischen einer Ethereum-Adresse und einer Person
herstellt. Dadurch können wir nachverfolgen, wer im System wahlberechtigt ist und welche Stimme sie abgegeben haben. Das Schlüsselwort public
erstellt automatisch eine Getter-Funktion für voters
.
Funktionsdefinition: Der function registerVoter() public {...}
definiert eine öffentliche Funktion, die es Benutzern ermöglicht, sich selbst als Wähler im System zu registrieren. Die voters[msg.sender].voted = false;
Die Anweisung setzt den voted
des neuen Wählers auf false
.
Das war's mit diesem Vertrag! Im Laufe des Kurses werden wir diesen Vertrag erweitern, indem wir weitere Funktionen für den Abstimmungsprozess hinzufügen. Denken Sie daran, Ihren Code regelmäßig zu kompilieren und zu testen, um sicherzustellen, dass alles wie erwartet funktioniert. In der Remix-IDE können Sie Ihren Vertrag kompilieren, indem Sie auf das Solidity-Compiler-Symbol in der linken Seitenleiste (das dritte von oben) und dann auf die Schaltfläche „Kompilieren“ klicken.
In der nächsten Lektion lernen wir, wie man registrierten Wählern die Stimmabgabe ermöglicht und wie man die Logik für ein Wahlsystem implementiert. Aber spielen Sie zunächst einmal mit dem Vertrag herum und machen Sie sich mit der Remix-Umgebung vertraut. Sie haben gerade Ihren ersten Schritt in die Welt der intelligenten Vertragsentwicklung gemacht!