SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
13.11.2024

Lição: 018: Variáveis Globais em Solidity

Em Solidity, as variáveis globais são variáveis predefinidas que estão disponíveis em todos os contratos e fornecem informações úteis sobre o estado atual da blockchain ou da transação. Compreender essas variáveis globais é essencial para desenvolvedores de Solidity, pois podem ajudar na criação de contratos inteligentes mais eficientes e eficazes.

Tipos de Variáveis Globais

Existem várias categorias de variáveis globais em Solidity:

  1. Variáveis de Bloco
  2. Variáveis de Transação
  3. Variáveis de Mensagem

Vamos explorar cada categoria em detalhe com exemplos.

1. Variáveis de Bloco

As variáveis de bloco fornecem informações sobre o bloco atual sendo processado. Aqui estão algumas variáveis de bloco comumente usadas:

  • block.number: Retorna o número do bloco atual.
  • block.timestamp: Retorna o timestamp do bloco atual em segundos desde a época Unix.
  • block.difficulty: Retorna a dificuldade do bloco atual.
  • block.gaslimit: Retorna o limite de gás do bloco atual.

Exemplo

pragma solidity ^0.8.0;

contract InformacoesDoBloco {
    function obterInformacoesDoBloco() public view returns (uint, uint, uint) {
        return (block.number, block.timestamp, block.gaslimit);
    }
}

No exemplo acima, a função obterInformacoesDoBloco retorna o número do bloco atual, o timestamp e o limite de gás. Essas informações podem ser úteis para várias lógicas em seu contrato.

2. Variáveis de Transação

As variáveis de transação armazenam informações sobre a transação atual. Algumas variáveis de transação importantes incluem:

  • msg.sender: Retorna o endereço da conta que iniciou a transação.
  • msg.value: Retorna a quantidade de Ether (em wei) enviada com a transação.
  • tx.origin: Retorna o endereço original que iniciou a transação (não recomendado por razões de segurança).

Exemplo

pragma solidity ^0.8.0;

contract InformacoesDaTransacao {
    event DetalhesDaTransacao(address remetente, uint valor);

    function registrarTransacao() public payable {
        emit DetalhesDaTransacao(msg.sender, msg.value);
    }
}

Neste exemplo, a função registrarTransacao emite um evento quando chamada. Ela registra o endereço do remetente e a quantidade de Ether enviada junto com a transação.

3. Variáveis de Mensagem

As variáveis de mensagem fornecem contexto sobre a chamada da função. A variável de mensagem mais comumente usada é:

  • msg.data: Contém todo o calldata (assinatura da função e parâmetros) para a chamada da função.

Exemplo

pragma solidity ^0.8.0;

contract DadosDaMensagem {
    function obterDadosDaMensagem() public view returns (bytes memory) {
        return msg.data;
    }
}

Este contrato define um método obterDadosDaMensagem que retorna os dados brutos da mensagem recebida, o que é útil para depuração e compreensão de como o contrato está sendo chamado.

Conclusão

As variáveis globais em Solidity desempenham um papel crucial ao fornecer informações sobre o estado da blockchain, dados da transação e o contexto da chamada da função. Ao usar essas variáveis de forma eficaz, os desenvolvedores podem escrever contratos mais inteligentes e seguros. Sempre tenha em mente as implicações e possíveis considerações de segurança ao utilizar variáveis como tx.origin.

Ao dominar as variáveis globais, você poderá aprimorar as implementações de seus contratos inteligentes, tornando-os mais informativos e amigáveis. Sempre teste e valide seus contratos quanto à confiabilidade e segurança. Boa codificação!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!