如何不使用时间戳计算时间间隔?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
相关产品推荐
相关产品推荐

