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

如何不使用时间戳计算时间间隔?NEAR投票系统选block_index还是epoch_height

NEAR 投票系统时间判定方案解答

接口选择

不使用block_timestamp的前提下,你应该使用near_sdk::env提供的block_index()接口。

二选一对比:block_index 与 epoch_height

  • epoch_height:指代NEAR网络的纪元高度,主网默认每个纪元时长约12小时,精度极低,无法满足投票场景的时间窗口控制需求,不推荐使用。
  • block_index(区块高度):NEAR主网平均出块间隔约1.3秒,你可以在投票启动时记录当前区块高度,叠加提前计算的一周对应区块数(约46.5万块)作为结束阈值,后续请求触发时判定当前区块高度是否超过阈值即可,时间误差可控制在分钟级,完全适配投票场景需求。

block_index 不连续的说法是否属实?

该说法不成立。NEAR网络的最终确认区块高度是严格单调递增的,不存在编号缺失、跳号的情况,你可以完全信任block_index()返回值的连续性。

参考代码示例

use near_sdk::env;

// 提前计算一周对应区块数,可根据实际需求调整冗余量
const VOTE_DURATION_BLOCK: u64 = 465000;

// 投票结构体示例
pub struct VoteContract {
    start_block: u64,
    // 其他投票相关字段
}

impl VoteContract {
    // 启动投票时调用,记录起始区块高度
    pub fn start_vote(&mut self) {
        self.start_block = env::block_index();
    }

    // 判定投票是否结束
    pub fn is_vote_closed(&self) -> bool {
        env::block_index() >= self.start_block + VOTE_DURATION_BLOCK
    }
}

内容的提问来源于stack exchange,提问作者Amiya Behera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:09:03