内建对象可以分为两个,分别为block和msg;
block:区块信息
- block.coinbase (address): 当前块的矿工的地址
- block.difficulty (uint):当前块的难度系数
- block.gaslimit (uint):当前块gas的上限
- block.number (uint):当前块编号
- block.blockhash (function(uint) returns (bytes32)):函数,返回指定块的哈希值,已经被内建函数blockhash所代替
- block.timestamp (uint):当前块的时间戳
msg:调用时数据
- msg.data (bytes):完整的calldata
- msg.gas (uint):剩余的gas量
- msg.sender (address):消息的发送方(调用者)(最为重要)
- msg.sig (bytes4):calldata的前四个字节(即函数标识符)
- msg.value (uint):所发送的消息中wei的数量,联盟链中无需使用此数据
计算随机数,示例代码如下:
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.7;
contract builtin_demo{
address public admin;
bytes32 public hash;
uint256 random;
constructor(){
admin=msg.sender; //msg.sender是调用者
hash=blockhash(0); //返回