Variáveis Globais em Solidity
Variáveis Globais em Solidity
As variáveis globais em Solidity fornecem informações úteis sobre o contexto atual do contrato, como detalhes da transação, do bloco, e do ambiente de execução. Aqui está um resumo das principais variáveis globais:
Transação e Mensagem
msg.sender
: Endereço do remetente da chamada atual (quem está enviando a transação).msg.value
: Quantidade de wei (a menor unidade de ether) enviada com a chamada.msg.data
: Dados completos enviados na chamada (útil para contratos que lidam com chamadas não padrão).msg.sig
: Primeiro quatro bytes dos dados enviados na chamada (a assinatura da função chamada).msg.gas
: Quantidade de gás restante na chamada (depreciado na versão 0.4.21 e removido nas versões posteriores).
Bloco
block.number
: Número do bloco atual.block.timestamp
: Timestamp do bloco atual (em segundos desde a epoch).block.difficulty
: Dificuldade do bloco atual.block.coinbase
: Endereço do minerador que criou o bloco atual.block.gaslimit
: Limite de gás do bloco atual.block.chainid
: ID da cadeia de blocos (útil para redes que suportam múltiplas cadeias).
Ambiente
tx.origin
: Endereço do remetente original da transação (não apenas o remetente da chamada atual).tx.gasprice
: Preço do gás da transação atual.
Exemplos de Uso
Verificação de Sender
pragma solidity ^0.8.0;
contract Example {
address public owner;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
function doSomething() public onlyOwner {
// Função que só o proprietário pode chamar
}
}
Registro de Transações
pragma solidity ^0.8.0;
contract TransactionLogger {
event TransactionDetails(address sender, uint value, bytes data);
function logTransaction() public payable {
emit TransactionDetails(msg.sender, msg.value, msg.data);
}
}
Uso de Block Timestamp
pragma solidity ^0.8.0;
contract Timed {
uint public startTime;
constructor() {
startTime = block.timestamp;
}
function timeElapsed() public view returns (uint) {
return block.timestamp - startTime;
}
}