You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity中如何获取最新已开采区块的编号与哈希值?

在Solidity合约中获取最新区块编号与哈希的方法

首先明确:Solidity合约可以直接获取最新已开采区块的编号和哈希,不需要通过外部调用维护数组。

一、正确使用内置变量的方法

你遇到的错误是代码语法问题,block.number是Solidity的内置全局变量,不能单独作为语句存在,需要将其用于赋值、返回或其他表达式操作中。

获取区块编号

直接使用block.number即可,示例代码:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract BlockInfo {
    function getCurrentBlockNumber() public view returns (uint256) {
        return block.number; // 正确返回当前区块编号
    }
}

获取区块哈希

使用blockhash(uint blockNumber)函数,但有两个注意点:

  • 该函数仅能获取最近256个区块的哈希,更早的区块会返回0x0
  • 无法直接获取当前区块的哈希(当前区块未完成挖矿确认),只能获取上一个及更早已确认区块的哈希

示例代码:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract BlockInfo {
    function getLastBlockHash() public view returns (bytes32) {
        // 获取上一个已确认区块的哈希
        return blockhash(block.number - 1);
    }
}

二、错误原因解释

你写出block.number;这类代码会报错,是因为Solidity不允许单独的变量引用作为独立语句,必须将其包裹在有效的代码逻辑中,比如函数的返回语句里。

三、无需外部维护数组的原因

Solidity的block全局变量原生支持访问区块元数据,只有当你需要长期存储超过256个区块的历史哈希时,才需要考虑用数组或其他数据结构手动维护。


内容的提问来源于stack exchange,提问作者Amirul Zaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:15:59