一:块函数: 可以获取块信息
1,block.timestamp (uint) 当前块的实际戳,单位秒。
2,block.number (uint) 当前块高度。
3,block.chainid 当前区块的琏ID。
4,block.difficulty (uint) 矿工会用到的出块难度。
5,block.gaslimit (uint) 计算块需要消耗的gas限制,是转账gas和智能合约的执行gas之和
6,block.coinbase (address payable) 矿工地址:块产生的gas费 转账地址。 也是写入块数据的地址
7,gasleft() returns (uint256) 每个块都有执行成本,但是不一定能够完全消耗完。 矿工一般会按照最接近的gas费用来打包出块。gaslefe就是剩下的部分。
二:Message 函数 在合约内获取用户签名后的信息。
1,msg.data (bytes calldata) 用户发生的转账之外的内容,可以是文字备注之类的,但是如果接受信息的是智能合约那合约会对data进行解析,并执行date中指定的函数。
2,msg.sender (address payable) 发送信息的发送者
3,msg.sig (bytes4) calldata 前四个字节的内容,在合约内验证调用的那个函数。
4,msg.value (uint) 用户转账的ETH额度,单位是wei(18位的整数)。 调用合约时一般都为0,如果想给合约转账可以在这定义转账的ETH数量,如果合约内部没有转账ETH的对应操纵函数,这个费用会卡在合约地址中无法转出。
三. Tx 函数
1,tx.gasprice (uint): 交易中发送者愿意支付的价格,发送者决定。 gasgasprice 决定矿工打包交易的收入。如果太低,只有块比较空的时候矿工才愿意打包这笔交易。所有对发送者来说需要等待的时间就会比较长。n10秒。
2,tx.origin (address payable): 这笔交易的发送者。 在开发中避免使用,合约调用有Delegate call的方式可能不会与你的预期不一致。
四:其他
1,now (uint) 当前时间时间戳的别名,特别注意在老版本EVM中是系统时间,在最新规范中不推荐使用。
2,blockhash(uint blockNumber) 把块高反算成块哈希。 这个计算量比较大,有限制。不推荐使用。
3,assembly 在EVM 虚拟机中直接执行 open code 的关键字。