// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract Ballot { struct Voter { string name; bool voted; uint256 aadarId; } struct Delegate { uint256 id; string name; uint256 voteCount; } address public admin; mapping(address => Voter) public voters; mapping(address => Delegate) public delegate; mapping(uint=>address) public delegateId; mapping(uint=>address) public voterAadarId; modifier onlyAdmin() { require(msg.sender == admin, "Only admin can call"); _; } constructor() { admin = msg.sender; } function addDelegate( address _delegate, uint256 _id, string memory _name ) external onlyAdmin { require(_delegate != address(0), "Delegate address cannot be 0"); require(_id != 0, "Delegate id cannot be 0"); require(delegateId[_id] == address(0), "Delegate id already exists"); delegate[_delegate] = Delegate(_id, _name, 0); delegateId[_id] = _delegate; } function addVoter( address _voter, string calldata _name, uint256 _aadarId ) external onlyAdmin { require(_voter != address(0), "Voter address cannot be 0"); require(_aadarId != 0, "Voter aadarId cannot be 0"); require(voterAadarId[_aadarId] == address(0), "Voter aadarId already exists"); voters[_voter] = Voter(_name, false, _aadarId); voterAadarId[_aadarId] = _voter; } function vote(address _delegate) external { require(voters[msg.sender].voted == false, "Voter has already voted"); require(_delegate != address(0), "Delegate address cannot be 0"); require(_delegate != msg.sender, "Cannot vote for self"); delegate[_delegate].voteCount++; voters[msg.sender].voted = true; } }
0.7.1