Nesta secção, iremos discutir o processo de escrita de um contrato inteligente básico utilizando Solidity. Iremos abordar componentes essenciais como variáveis, funções e modificadores. Em seguida, iremos passar por um exemplo de implementação de um contrato de token simples.
Variáveis, funções e modificadores
Exemplo1: Implementação de um contrato de token simples
Vamos criar um contrato de token simples usando Solidity. Este contrato permitirá aos usuários transferir tokens entre contas e verificar o saldo do token de qualquer conta.
Tipo de contrato TypeScript pragma solidez ^0.8.0;contrato SimpleToken { // Declarar variáveis de estado endereço público proprietário; mapeamento(endereço => uint256) públicas saldos; // Inicializar o contrato de token construtor(uint256 ofertaInicial) { proprietário = msg.sender; saldos[proprietário] = ofertaInicial; } // Função para transferir tokens função transferir(endereço para, uint256 montante) públicos { exigir(saldos[msg.sender] >= montante, "Saldo insuficiente"); saldos[msg.sender] -= montante; saldos[para] += montante; } // Função para verificar o saldo de token de uma conta função saldoDe(endereço conta) públicos ver retorna (uint256) { return saldos[conta]; }}
Neste contrato, temos:
proprietário
esaldos
para armazenar o endereço do proprietário do contrato e os saldos de tokens de todos os endereços, respetivamente.construtor
função que define o fornecimento inicial de tokens e os atribui ao proprietário do contrato.transferir
função que permite aos utilizadores transferir tokens para outras contas. Ele utiliza o exigir
declaração para garantir que o remetente tem tokens suficientes para transferir.saldoDe
função que devolve o saldo do token de uma conta especificada.Exemplo2: Implementação de um sistema de votação simples
Tipo de scriptpragma solidez ^0.8.0;contrato Sistema de Votação { mapeamento (bytes32 => uint256) public votesReceived; bytes32[] public candidateList; constructor(bytes32[] memory candidateNames) { candidateList = candidateNames; } função voteForCandidate(bytes32 candidato) público { exigir candidato válido(candidato), "Candidato inválido."); votesReceived[candidato] += 1; } função totalVotesFor(bytes32 candidato) público view returns (uint256) { exigir candidato válido(candidato), "Candidato inválido."); return votesReceived[candidato]; } função candidato válido(bytes32 candidato) público view returns (bool) { for (uint256 i = 0; i < candidateList.length; i++) { if (candidateList[i] == candidato) { return true; } } return false; }}
Neste exemplo, o Sistema de Votação
o contrato permite aos usuários votar em um dos vários candidatos ligando para o votarNoCandidato
função. O contrato mantém o controle do número de votos recebidos para cada candidato usando um votosRecebidos
mapeamento, onde a chave é o nome do candidato e o valor é o número de votos. O lista de candidatos
a variável armazena a lista de candidatos válidos. O totalVotesFor
a função pode ser chamada para verificar o número de votos que um candidato específico recebeu e o candidato válido
A função verifica se um candidato é válido. Este é um exemplo simples de como o Solidity pode ser usado para construir aplicações descentralizadas com lógica complexa.
Destaque
Variáveis, funções e modificadores são componentes essenciais nos contratos inteligentes Solidity.
Solidity tem dois tipos de variáveis: variáveis de estado e variáveis locais.
As funções são usadas para realizar tarefas e podem ter parâmetros de entrada e valores de retorno.
Os modificadores são usados para modificar o comportamento de uma função e melhorar a legibilidade e a facilidade de gestão do código.
O contrato SimpleToken permite aos utilizadores transferir tokens e verificar saldos de tokens.
O contrato SimpleToken demonstra o uso de variáveis de estado, uma função construtora e funções como transferência e balanceOf.
O contrato VotingSystem permite aos usuários votar em candidatos e rastrear contagens de votos.
O contrato VotingSystem mostra o uso de mapeamentos, arrays e funções como voteForCandidate, totalVotesFor e validCandidate.
Nesta secção, iremos discutir o processo de escrita de um contrato inteligente básico utilizando Solidity. Iremos abordar componentes essenciais como variáveis, funções e modificadores. Em seguida, iremos passar por um exemplo de implementação de um contrato de token simples.
Variáveis, funções e modificadores
Exemplo1: Implementação de um contrato de token simples
Vamos criar um contrato de token simples usando Solidity. Este contrato permitirá aos usuários transferir tokens entre contas e verificar o saldo do token de qualquer conta.
Tipo de contrato TypeScript pragma solidez ^0.8.0;contrato SimpleToken { // Declarar variáveis de estado endereço público proprietário; mapeamento(endereço => uint256) públicas saldos; // Inicializar o contrato de token construtor(uint256 ofertaInicial) { proprietário = msg.sender; saldos[proprietário] = ofertaInicial; } // Função para transferir tokens função transferir(endereço para, uint256 montante) públicos { exigir(saldos[msg.sender] >= montante, "Saldo insuficiente"); saldos[msg.sender] -= montante; saldos[para] += montante; } // Função para verificar o saldo de token de uma conta função saldoDe(endereço conta) públicos ver retorna (uint256) { return saldos[conta]; }}
Neste contrato, temos:
proprietário
esaldos
para armazenar o endereço do proprietário do contrato e os saldos de tokens de todos os endereços, respetivamente.construtor
função que define o fornecimento inicial de tokens e os atribui ao proprietário do contrato.transferir
função que permite aos utilizadores transferir tokens para outras contas. Ele utiliza o exigir
declaração para garantir que o remetente tem tokens suficientes para transferir.saldoDe
função que devolve o saldo do token de uma conta especificada.Exemplo2: Implementação de um sistema de votação simples
Tipo de scriptpragma solidez ^0.8.0;contrato Sistema de Votação { mapeamento (bytes32 => uint256) public votesReceived; bytes32[] public candidateList; constructor(bytes32[] memory candidateNames) { candidateList = candidateNames; } função voteForCandidate(bytes32 candidato) público { exigir candidato válido(candidato), "Candidato inválido."); votesReceived[candidato] += 1; } função totalVotesFor(bytes32 candidato) público view returns (uint256) { exigir candidato válido(candidato), "Candidato inválido."); return votesReceived[candidato]; } função candidato válido(bytes32 candidato) público view returns (bool) { for (uint256 i = 0; i < candidateList.length; i++) { if (candidateList[i] == candidato) { return true; } } return false; }}
Neste exemplo, o Sistema de Votação
o contrato permite aos usuários votar em um dos vários candidatos ligando para o votarNoCandidato
função. O contrato mantém o controle do número de votos recebidos para cada candidato usando um votosRecebidos
mapeamento, onde a chave é o nome do candidato e o valor é o número de votos. O lista de candidatos
a variável armazena a lista de candidatos válidos. O totalVotesFor
a função pode ser chamada para verificar o número de votos que um candidato específico recebeu e o candidato válido
A função verifica se um candidato é válido. Este é um exemplo simples de como o Solidity pode ser usado para construir aplicações descentralizadas com lógica complexa.
Destaque
Variáveis, funções e modificadores são componentes essenciais nos contratos inteligentes Solidity.
Solidity tem dois tipos de variáveis: variáveis de estado e variáveis locais.
As funções são usadas para realizar tarefas e podem ter parâmetros de entrada e valores de retorno.
Os modificadores são usados para modificar o comportamento de uma função e melhorar a legibilidade e a facilidade de gestão do código.
O contrato SimpleToken permite aos utilizadores transferir tokens e verificar saldos de tokens.
O contrato SimpleToken demonstra o uso de variáveis de estado, uma função construtora e funções como transferência e balanceOf.
O contrato VotingSystem permite aos usuários votar em candidatos e rastrear contagens de votos.
O contrato VotingSystem mostra o uso de mapeamentos, arrays e funções como voteForCandidate, totalVotesFor e validCandidate.