Variáveis no Solidity: Um Guia Completo

15/09/2024

1. Tipos de Variáveis em Solidity

Existem três categorias principais de variáveis em Solidity, cada uma com suas características e finalidades:

  • Variáveis de Estado: Armazenam dados permanentemente na blockchain e podem ser lidas e alteradas por funções do contrato.
  • Variáveis Locais: Declaradas dentro de funções e só existem durante a execução da função. Não são armazenadas na blockchain.
  • Variáveis Globais: Fornecem informações sobre a blockchain e transações, como o remetente de uma transação ou o bloco atual.

2. Declarando Variáveis de Estado

As variáveis de estado são armazenadas permanentemente na blockchain e fazem parte do estado global do contrato. Elas podem ser acessadas por qualquer função dentro do contrato.

pragma solidity ^0.8.0;

contract Exemplo {
    // Variável de estado
    uint public numero;
    string public texto;
    
    function definirValores(uint _numero, string memory _texto) public {
        numero = _numero;  // Alterando valor da variável de estado
        texto = _texto;
    }
}

As variáveis de estado como numero e texto são armazenadas permanentemente na blockchain. Você pode ler e alterar essas variáveis usando funções do contrato.

3. Variáveis Locais

Variáveis locais são declaradas dentro de funções e só existem enquanto a função está sendo executada. Elas são usadas para cálculos e manipulação de dados temporários. Ao contrário das variáveis de estado, as variáveis locais não são armazenadas na blockchain.

function calcularSoma(uint a, uint b) public pure returns (uint) {
    uint soma = a + b;  // Variável local
    return soma;
}

Neste exemplo, a variável soma é usada temporariamente para armazenar o resultado da soma de a e b. Após o término da função, essa variável é descartada.

4. Variáveis Globais

Solidity oferece várias variáveis globais que fornecem informações sobre o estado atual da blockchain, como o remetente de uma transação ou o valor de gás utilizado. Essas variáveis são úteis para interagir com dados específicos da blockchain.

  • msg.sender: Endereço do remetente da transação atual.
  • block.timestamp: Timestamp do bloco atual.
  • msg.value: Quantidade de ether enviada na transação.
  • tx.gasprice: Preço do gás pago pela transação.
function depositar() public payable {
    // msg.sender e msg.value são variáveis globais
    require(msg.value > 0, "Valor de depósito deve ser maior que zero");
    emit Deposito(msg.sender, msg.value);
}

A função depositar utiliza as variáveis globais msg.sender e msg.value para obter o endereço do remetente e o valor da transação.

5. Tipos de Dados em Variáveis Solidity

Solidity suporta vários tipos de dados para suas variáveis, que podem ser usados de acordo com as necessidades do contrato. Aqui estão alguns dos tipos mais comuns:

  • uint: Número inteiro sem sinal.
  • int: Número inteiro com sinal.
  • address: Endereço Ethereum de 20 bytes.
  • bool: Booleano (verdadeiro ou falso).
  • string: Cadeia de caracteres (string).
contract Tipos {
    uint public numero;
    address public carteira;
    bool public ativo;
    string public mensagem;
}

Esses tipos de dados são essenciais para definir variáveis que representem os estados e interações dentro dos contratos inteligentes.

6. Escopo e Visibilidade das Variáveis

As variáveis em Solidity podem ter diferentes níveis de visibilidade, determinando quem pode acessá-las. Os principais modificadores de visibilidade são:

  • public: Pode ser acessada tanto internamente quanto externamente.
  • private: Pode ser acessada apenas de dentro do contrato em que foi declarada.
  • internal: Pode ser acessada no contrato e em contratos derivados.
contract Exemplo {
    uint public numeroPublico;  // Visível externamente
    uint private numeroPrivado; // Acessível apenas dentro do contrato
    uint internal numeroInterno; // Acessível em contratos derivados
}

Essa definição de visibilidade permite controlar quem pode acessar e modificar as variáveis, garantindo a segurança e a integridade dos contratos inteligentes.

Conclusão

Variáveis em Solidity desempenham um papel crucial na criação de contratos inteligentes eficientes e seguros. Compreender os diferentes tipos de variáveis, seu escopo e a forma como interagem com a blockchain é fundamental para o desenvolvimento de contratos que funcionam corretamente. Ao dominar variáveis de estado, locais e globais, você estará pronto para escrever contratos inteligentes robustos na blockchain Ethereum.