# 特殊变量及函数(Special Variables and Functions)
有一些变量和函数存在于¥全局上下文中。主要用来提供一些区块链当前的信息。
### 区块和交易的属性(Block And Transaction Properties)
- `block.blockhash(uint blockNumber) returns (bytes32)`,给定区块号的哈希值,只支持最近256个区块,且不包含当前区块。
- `block.coinbase (address)` 当前块矿工的地址。
- `block.difficulty (uint)`当前块的难度。
- `block.gaslimit (uint)`当前块的`gaslimit`。
- `block.number (uint)`当前区块的块号。
- `block.timestamp (uint)`当前块的时间戳。
- `msg.data (bytes)`完整的调用数据(calldata)。
- `msg.gas (uint)`当前还剩的`gas`。
- `msg.sender (address)`当前调用发起人的地址。
- `msg.sig (bytes4)`调用数据的前四个字节(函数标识符)。
- `msg.value (uint)`这个消息所附带的货币量,单位为`wei`。
- `now (uint)`当前块的时间戳,等同于`block.timestamp`
- `tx.gasprice (uint)` 交易的`gas`价格。
- `tx.origin (address)`交易的发送者(完整的调用链)
`msg`的所有成员值,如`msg.sender`,`msg.value`的值可以因为每一次外部函数调用,或库函数调用发生变化(因为`msg`就是和调用相关的全局变量)。
如果你想在库函数中,用`msg.sender`实现访问控制,你需要将`msg.sender`做为参数(就是说不能使用默认的`msg.value`,因为它可能被更改)。
为了可扩展性的原因,你只能查最近256个块,所有其它的将返回0.
- Solidity语言
- 入门说明
- Solidity智能合约文件结构
- 智能合约源文件的基本要素概览
- 值类型
- 类型
- 布尔
- 整型
- 地址
- 字节数组
- 小数
- 字符串
- 十六进制字面量
- 枚举
- 函数
- 引用类型
- 引用类型
- 数据位置
- 数组
- 数据结构
- 杂项
- 映射
- 左值运算符
- 类型间的转换
- 类型推断
- 单位
- 货币单位
- 时间单位
- 语言内置特性
- 特殊变量及函数
- 数学和加密函数
- 地址相关
- 进阶
- 入参和出参
- 控制结构
- 函数调用
- 创建合约实例
- 表达式的执行顺序
- 赋值
- 作用范围和声明
- 异常
- 内联汇编
- 合约详解
- 合约
- 可见性或权限控制
- 访问函数
- 函数修改器
- 常状态变量
- 回退函数
- 事件
- 继承
- 接口
- 其它
- 库
- 状态变量的存储模型
- 内存变量的存局
- 调用数据的布局