En esta sección, discutiremos el proceso de escribir un contrato inteligente básico usando Solidity. Cubriremos componentes esenciales como variables, funciones y modificadores. Luego, recorreremos un ejemplo de implementación de un contrato de token simple.
Variables, funciones y modificadores
Ejemplo 1: Implementación de un contrato de token simple
Creemos un contrato de token simple usando Solidity. Este contrato permitirá a los usuarios transferir tokens entre cuentas y verificar el saldo de tokens de cualquier cuenta.
TypeScriptpragma solidez ^0.8.0;contrato SimpleToken { // Declarar variables de estado dirección pública propietaria; asignación(dirección => uint256) públicas saldos; // Inicializar el contrato del token constructor(uint256 suministroInicial) { propietaria = msg.sender; saldos[propietaria] = suministroInicial; } // Función para transferir tokens función transferir(dirección a, uint256 cantidad) pública { require(saldos[msg.sender] >= cantidad, "Saldo insuficiente"); saldos[msg.sender] -= cantidad; saldos[a] += cantidad; } // Función para verificar el saldo del token de una cuenta función balanceOf(dirección cuenta) pública vista devuelve (uint256) { return saldos[cuenta]; }}En este contrato, tenemos:
propietarioysaldospara almacenar la dirección del propietario del contrato y los saldos de tokens de todas las direcciones, respectivamente.constructorfunción que establece el suministro inicial de tokens y los asigna al propietario del contrato.transferenciafunción que permite a los usuarios transferir tokens a otras cuentas. Utiliza el requerirdeclaración para asegurar que el remitente tiene suficientes tokens para transferir.balanceOffunción que devuelve el saldo del token de una cuenta especificada.Ejemplo2: Implementación de un sistema de votación simple
pragma solidity ^0.8.0;contrato SistemaDeVotacion { mapeo (bytes32 => uint256) public votesReceived; bytes32[] public candidateList; constructor(bytes32[] memory candidateNames) { candidateList = candidateNames; } función voteForCandidate(bytes32 candidate) public { require(validCandidate(candidate), "Candidato inválido."); votesReceived[candidate] += 1; } función totalVotesFor(bytes32 candidate) public view returns (uint256) { require(validCandidate(candidate), "Candidato inválido."); return votesReceived[candidate]; } función validCandidate(bytes32 candidate) public view returns (bool) { for (uint256 i = 0; i < candidateList.length; i++) { if (candidateList[i] == candidate) { return true; } } return false; }}En este ejemplo, el Sistema de votaciónEl contrato permite a los usuarios votar por uno de varios candidatos llamando al votarPorCandidatofunción. El contrato lleva un registro de la cantidad de votos recibidos por cada candidato utilizando un votosRecibidosmapeo, donde la clave es el nombre del candidato y el valor es el número de votos. LaLista de candidatosLa variable almacena la lista de candidatos válidos. totalVotesForLa función se puede llamar para verificar el número de votos que ha recibido un candidato específico, y el Candidato válidoLa función comprueba si un candidato es válido. Este es un ejemplo simple de cómo Solidity puede ser utilizado para construir aplicaciones descentralizadas con lógica compleja.
Aspectos destacados
Las variables, funciones y modificadores son componentes esenciales en contratos inteligentes de Solidity.
Solidity tiene dos tipos de variables: variables de estado y variables locales.
Las funciones se utilizan para realizar tareas y pueden tener parámetros de entrada y valores de retorno.
Los modificadores se utilizan para modificar el comportamiento de una función y mejorar la legibilidad y la facilidad de gestión del código.
El contrato SimpleToken permite a los usuarios transferir tokens y verificar saldos de tokens.
El contrato de SimpleToken muestra el uso de variables de estado, una función constructora y funciones como transfer y balanceOf.
El contrato VotingSystem permite a los usuarios votar por candidatos y hacer un seguimiento de los recuentos de votos.
El contrato VotingSystem muestra el uso de mapeos, matrices y funciones como voteForCandidate, totalVotesFor y validCandidate.