Solidez - Variáveis Especiais
Variáveis especiais são variáveis globalmente disponíveis e fornecem informações sobre o blockchain. A seguir está a lista de variáveis especiais -
Sr. Não. | Variável Especial e Descrição |
---|---|
1 | blockhash(uint blockNumber) returns (bytes32) Hash do bloco fornecido - funciona apenas para os 256 blocos mais recentes, excluindo os atuais. |
2 | block.coinbase (address payable) Endereço do mineiro do bloco atual. |
3 | block.difficulty (uint) dificuldade do bloco atual. |
4 | block.gaslimit (uint) Limite de gás do bloco atual. |
5 | block.number (uint) Número do bloco atual. |
6 | block.timestamp Carimbo de data / hora do bloco atual em segundos desde a época unix. |
7 | gasleft() returns (uint256) Gás restante. |
8 | msg.data (bytes calldata) Calldata completa. |
9 | msg.sender (address payable) Remetente da mensagem (chamada atual). |
10 | msg.sig (bytes4) Os primeiros quatro bytes do calldata (ou seja, identificador de função) |
11 | msg.value (uint) Número de wei enviado com a mensagem. |
12 | now (uint) Carimbo de data e hora do bloco atual (alias para block.timestamp). |
13 | tx.gasprice (uint) Preço do gás da transação. |
14 | tx.origin (address payable) Remetente da transação (cadeia de chamadas completa). |
Exemplo
Tente o seguinte código para ver o uso de msg, uma variável especial para obter o endereço do remetente no Solidity.
pragma solidity ^0.5.0;
contract LedgerBalance {
mapping(address => uint) public balances;
function updateBalance(uint newBalance) public {
balances[msg.sender] = newBalance;
}
}
contract Updater {
function updateBalance() public returns (uint) {
LedgerBalance ledgerBalance = new LedgerBalance();
ledgerBalance.updateBalance(10);
return ledgerBalance.balances(address(this));
}
}
Execute o programa acima usando as etapas fornecidas no capítulo Aplicativo Solidity First .
Primeiro clique updateBalance Botão para definir o valor como 10, em seguida, olhe para os logs que mostrarão a saída decodificada como -
Resultado
{
"0": "uint256: 10"
}