Solidity - специальные переменные
Специальные переменные - это глобально доступные переменные, которые предоставляют информацию о блокчейне. Ниже приведен список специальных переменных -
| Sr.No. | Специальная переменная и описание |
|---|---|
| 1 | blockhash(uint blockNumber) returns (bytes32) Хеш данного блока - работает только с 256 последними блоками, исключая текущий. |
| 2 | block.coinbase (address payable) Текущий адрес майнера блока. |
| 3 | block.difficulty (uint) текущая сложность блока. |
| 4 | block.gaslimit (uint) Текущий блок gaslimit. |
| 5 | block.number (uint) Номер текущего блока. |
| 6 | block.timestamp Временная метка текущего блока в секундах с эпохи unix. |
| 7 | gasleft() returns (uint256) Остающийся газ. |
| 8 | msg.data (bytes calldata) Полная версия calldata. |
| 9 | msg.sender (address payable) Отправитель сообщения (текущий звонок). |
| 10 | msg.sig (bytes4) Первые четыре байта calldata (т.е. идентификатор функции) |
| 11 | msg.value (uint) Количество вэй, отправленных с сообщением. |
| 12 | now (uint) Отметка времени текущего блока (псевдоним для block.timestamp). |
| 13 | tx.gasprice (uint) Цена сделки на газ. |
| 14 | tx.origin (address payable) Отправитель транзакции (полная цепочка вызовов). |
пример
Попробуйте использовать следующий код, чтобы увидеть использование msg, специальной переменной для получения адреса отправителя в 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));
}
}
Запустите указанную выше программу, следуя инструкциям в главе « Первое приложение Solidity» .
Первый клик updateBalance Нажмите кнопку, чтобы установить значение 10, затем просмотрите журналы, которые покажут декодированный вывод как -
Вывод
{
"0": "uint256: 10"
}