Marktkapitalisierung: $2.2391T 1.66%
Volumen (24h): $47.003B 22.54%
Angst- und Gier-Index:

39 - Furcht

  • Marktkapitalisierung: $2.2391T 1.66%
  • Volumen (24h): $47.003B 22.54%
  • Angst- und Gier-Index:
  • Marktkapitalisierung: $2.2391T 1.66%
Kryptos
Themen
Cryptospedia
Nachricht
Cryptostopics
Videos
Top Cryptospedia

Sprache auswählen

Sprache auswählen

Währung wählen

Kryptos
Themen
Cryptospedia
Nachricht
Cryptostopics
Videos

Wie baut man ein einfaches Abstimmungssystem mit einem Smart Contract auf?

A blockchain voting smart contract ensures transparent, tamper-proof elections via immutable on-chain votes, whitelisted participants, time-bound windows, and autonomous execution—no owner control post-deployment.

Jan 11, 2026 at 07:39 am

Die Kernmechanik verstehen

1. Ein intelligenter Abstimmungsvertrag läuft auf einer Blockchain, in der jede Stimme als unveränderliche Transaktion aufgezeichnet wird. Dies sorgt für Transparenz und verhindert Manipulationen nach der Übermittlung.

2. Der Vertrag muss Wahlberechtigte definieren, typischerweise durch eine Whitelist, die in einer Zuordnung von Adressen zu booleschen Werten gespeichert ist. Nur Teilnehmer auf der Whitelist können ihre Stimme abgeben.

3. Abstimmungsoptionen werden im Vertrag als uint8- oder String-Konstanten codiert, wobei jeder Option eine eindeutige Kennung für die Zähllogik zugewiesen wird.

4. Zeitbeschränkungen werden mithilfe von block.timestamp-Prüfungen durchgesetzt, sodass die Abstimmung nur innerhalb eines vordefinierten Zeitfensters möglich ist, um eine unbegrenzte Teilnahme zu verhindern.

5. Der Vertragseigentümer behält nach der Bereitstellung kein Stimmrecht; Nach der Bereitstellung wird die gesamte Logik autonom ohne externes Eingreifen ausgeführt.

Entwerfen der On-Chain-Datenstrukturen

1. Eine Struktur namens Voter enthält Felder wie hasVoted (bool), voteChoice (uint8) und delegationTarget (address) und ermöglicht so mehrschichtige Beteiligungsmodelle.

2. Eine öffentliche Wählerzuordnung verknüpft Ethereum-Adressen mit Wählerstrukturen und gewährleistet so zeitkonstante Suchvorgänge während der Stimmvalidierung.

3. Ein Array Candidates speichert Kandidatennamen als Strings, während ein paralleles uint[] voteCounts die Zählwerte pro Index verfolgt.

4. Eine uint-Variable „votingEndBlock“ erfasst die endgültige Blocknummer für die Wahlberechtigung und vermeidet so die Abhängigkeit von externen Orakeln.

5. Der Vertrag verwendet strikt require() -Anweisungen – zur Prüfung der Wählerberechtigung, des aktiven Wahlzeitraums und der Vermeidung doppelter Eingaben vor der Zustandsänderung.

Implementierung der Abstimmungslogik

1. Die Funktion vote(uint8 _choice) überprüft, ob msg.sender auf der Whitelist steht und noch nicht abgestimmt hat, bevor sie fortfährt.

2. Mithilfe von require(_choice < Candidates.length) wird überprüft, ob _choice innerhalb der Grenzen des Kandidaten-Arrays liegt, wodurch Schreibvorgänge außerhalb der Grenzen verhindert werden.

3. Nach der Validierung wird voters[msg.sender].hasVoted auf true gesetzt und voteCounts[_choice] um eins erhöht, wodurch das Ledger atomar aktualisiert wird.

4. Ereignisse wie „Voted(address indexed voter, uint8 choice)“ geben On-Chain-Protokolle aus, sodass Off-Chain-Schnittstellen Ergebnisse in Echtzeit indizieren und anzeigen können.

5. In Basisimplementierungen ist kein Wiedereintrittsschutz erforderlich, da es keinen externen Aufruf im Abstimmungspfad gibt – aber Modifikatoren wie „nonReentrant“ werden unerlässlich, wenn später Delegation oder Rückerstattungen hinzugefügt werden.

Bereitstellung und Interaktion über EVM-Tools

1. Die Kompilierung erfolgt mit Solidity v0.8.20 oder höher, wobei der Optimierer bei 200 Läufen aktiviert ist, um die Gaskosten für die Bereitstellung zu senken, ohne die Lesbarkeit zu beeinträchtigen.

2. Bereitstellungsskripte verwenden Hardhat oder Foundry, um Konstruktorargumente wie die Eigentümeradresse und die Kandidatenliste direkt an den Bytecode zu übergeben.

3. Die Interaktion erfolgt über ethers.js oder web3.js, wobei Benutzer Transaktionen lokal signieren, bevor sie an Netzwerke wie Sepolia oder Base Testnet senden.

4. Die Frontend-Integration basiert auf der Erkennung der MetaMask-Verfügbarkeit, der Anforderung von Kontozugriff und dem Aufruf von vote() mit vom Benutzer ausgewählten Indizes über ABI-codierte Anrufdaten.

5. Die Gasschätzung wird kundenseitig vor der Einreichung durchgeführt und zeigt ungefähre Gebühren in der ETH an, um fehlgeschlagene Transaktionen aufgrund unzureichender Mittel zu vermeiden.

Häufig gestellte Fragen

F: Kann ein Wähler seine Stimme nach der Abgabe ändern? A: Nein. Sobald eine Abstimmung in der Kette bestätigt wurde, kann sie nicht mehr geändert oder gelöscht werden. Der Vertrag erzwingt die Single-Vote-Semantik über das Flag hasVoted.

F: Was passiert, wenn zwei Transaktionen im selben Block Stimmen abgeben? A: Beide Transaktionen werden nacheinander basierend auf ihrer Position im Block ausgeführt. Der Vertragsstatus wird deterministisch aktualisiert, wodurch die Abstimmungsintegrität unabhängig von der Reihenfolge gewahrt bleibt.

F: Ist es möglich, nach der Bereitstellung neue Kandidaten hinzuzufügen? A: Nicht in einer Minimalimplementierung. Das Kandidaten-Array ist bei der Erstellung festgelegt. Die Erweiterung der Funktionalität würde aktualisierbare Muster wie Proxy-Verträge erfordern, die zusätzliche Vertrauensannahmen einführen würden.

F: Wie wird die Anonymität der Wähler gewahrt? A: Stimmen sind mit Ethereum-Adressen verknüpft, nicht mit realen Identitäten. Der Datenschutz hängt davon ab, wie die Whitelist erstellt wird. Wenn die Adressen pseudonym und nicht verknüpft sind, gilt die Anonymität auf Protokollebene.

Haftungsausschluss:info@kdj.com

Die bereitgestellten Informationen stellen keine Handelsberatung dar. kdj.com übernimmt keine Verantwortung für Investitionen, die auf der Grundlage der in diesem Artikel bereitgestellten Informationen getätigt werden. Kryptowährungen sind sehr volatil und es wird dringend empfohlen, nach gründlicher Recherche mit Vorsicht zu investieren!

Wenn Sie glauben, dass der auf dieser Website verwendete Inhalt Ihr Urheberrecht verletzt, kontaktieren Sie uns bitte umgehend (info@kdj.com) und wir werden ihn umgehend löschen.

Verwandtes Wissen

Alle Artikel ansehen

User not found or password invalid

Your input is correct