¿Qué es la aplicación de votación descentralizada (DApps)?

El nombre del proyecto es Aplicación de votación descentralizada (DApps) que se basa en Solidity Language. Este proyecto muestra muchas de las características de Solidity. Implementa un contrato de votación. Por supuesto, el principal problema del voto electrónico es cómo evitar que se asigne el voto duplicado.

Algunos conceptos importantes son: 

1. Contrato: un contrato es como una clase en Solidity que consiste (sus funciones) y datos (su estado) que residen en una dirección específica en Ethereum Blockchain. En cada contrato, podemos definir variables de estado, métodos y eventos, etc. Un contrato inteligente se ejecuta exactamente según lo programado sin posibilidad de tiempo de inactividad, censura, fraude e interferencia de terceros.

2. Estructura: la estructura es una colección de diferentes tipos de tipos de datos, como C y C++ , que se muestra en el siguiente ejemplo: 
 

struct Voter{
          bool authorized;
          bool voted;
      }

3. Mapeo: el mapeo es como las tablas hash. Almacena el valor según la clave. No se pueden usar como parámetros o devolver parámetros de funciones de contrato que son públicamente visibles. No puede iterar sobre asignaciones, es decir, no puede enumerar sus claves. Es posible implementar una estructura de datos encima de ellos e iterar sobre eso. 

Ejemplo: 

mapping(address=>Voter) info; 

4. Modificador: Los modificadores se utilizan para cambiar fácilmente el comportamiento de una función. Pueden verificar automáticamente las condiciones antes de ejecutar las funciones. 
 

modifier ownerOn() {
        require(msg.sender==owner);
        _;
    }
function temaAF(address _address) public {
        require(!info[_address].voted, "already voted person"); //If already not vote
        require(info[_address].authorized, "You Have No Right for Vote");
        info[_address].voted = true;
        teamA++;
        totalVotes++;
      }

Explicación:

require(!info[_address].voted, "already voted person"); 

En primer lugar, debemos verificar que la persona haya votado o no. Si se vota Person, deténgase para continuar con el código; de lo contrario, continúe con el resto del código.

Implementación en Solidity 

Solidity

// Solidity program to demonstrate
// DApps
 
pragma solidity 0.5.11;
 
// Smart Contract for the Voting application
contract VotingForTopper {
 
      // Refer to the owner
      address  owner;
 
      // Declaring the public variable 'purpose'
      // to demonstrate the purpose of voting
      string public purpose;
      
      // Defining a structure with boolean 
      // variables authorized and voted
      struct Voter{
          bool authorized; 
          bool voted;
      }
 
      // Declaring the unsigned integer
      // variables totalVotes, and for the
      //3 teams- A,B, and C
      uint  totalVotes;
      uint teamA;
      uint  teamB;
      uint teamC;
       
      // Creating a mapping for the total Votes
      mapping(address=>Voter) info;
 
      // Defining a constructor indicating
      // the purpose of voting
      constructor(
      string memory _name) public{
        purpose = _name;  
        owner = msg.sender;
      }
    
      // Defining a modifier to
      // verify the ownership
      modifier ownerOn() {
        require(msg.sender==owner);
        _;
    }
       
      // Defining a function to verify
      // the person is voted or not
      function authorize(
      address _person) ownerOn public {
        info[_person].authorized= true;
         
    }
    
      // Defining a function to check and
      // skip the code if the person is already
      // voted else allow to vote and
      // calculate totalvotes for team A  
      function temaAF(address _address) public {
        require(
        !info[_address].voted,
        "already voted person");
        require(
        info[_address].authorized,
        "You Have No Right for Vote");
        info[_address].voted = true;
        teamA++;
        totalVotes++;
      }
 
      // Defining a function to check
      // and skip the code if the person
      // is already voted else allow to vote
      // and calculate totalvotes for team B 
      function temaBF(address _address) public {
       require(
       !info[_address].voted,
       "already voted person");
        require(
        info[_address].authorized,
        "You Have No Right for Vote");
        teamB++;
        info[_address].voted = true;
        totalVotes++;
      }
 
      // Defining a function to check
      // and skip the code if the person
      // is already voted else allow to vote
      // and calculate totalvotes for team C  
      function temaCF(address _address) public returns(
      string memory){
        require(
        !info[_address].voted,
        "already voted person");
        require(
        info[_address].authorized,
        "You Have No Right for Vote");
        info[_address].voted = true;
        teamC++;
        totalVotes++;
        return("Thanks for Voting");
      }
 
      function totalVotesF() public view returns(uint){
          return totalVotes;
      }
 
      // Defining a function to announce
      // the result of voting and
      // the name of the winning team
      function resultOfVoting() public view returns(
      string memory){
          if(teamA>teamB){
              if(teamA>teamC){
                  return"A is Winning";
              }
              else if(teamC>teamA){
                  return "C is Winning"; } }
          else if(teamB>teamC) {
              return "B is Winning";
          }
          else if(
          teamA==teamB && teamA==teamC || teamB==teamC ){
              return "No One is Winning";
          }
      }
    }

Publicación traducida automáticamente

Artículo escrito por VikasTomar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *