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

使用near-workspace.js+AVA测试合约:如何获取区块时间戳及调整Sandbox时间?

在near-workspace.js+AVA环境中处理区块时间戳与sandbox时间调整

获取当前/最新区块时间戳

在本地测试环境中,有两种常用方式获取区块时间戳:

  • 直接查询sandbox的最新区块信息
    使用near-workspace.js提供的sandbox.getBlock('latest')方法,返回的区块对象包含timestamp字段(单位为纳秒),示例代码:

    const latestBlock = await sandbox.getBlock('latest');
    console.log('当前区块时间戳:', latestBlock.timestamp);
    
  • 从合约执行上下文获取
    如果是在合约内部需要时间戳,Rust合约可通过env::block_timestamp()获取,AssemblyScript合约则用context.blockTimestamp。测试时若要验证合约使用的时间戳,可让合约方法返回该值,或在合约调用后立即查询最新区块的时间戳(交易会被打包进当前最新区块)。

在near-sandbox中调整时间

near-sandbox提供了两种调整时间的方式,满足不同测试场景:

  • 快进指定时长
    使用sandbox.fastForward()方法,传入以纳秒为单位的时长,快速推进区块时间:

    // 快进1小时(1小时=3600秒,转换为纳秒需乘以1e9)
    await sandbox.fastForward(3600 * 1_000_000_000);
    
  • 直接设置目标时间戳
    使用sandbox.setTimestamp()方法,直接指定区块的时间戳(单位纳秒):

    // 设置为当前时间后1天的时间戳(先将当前毫秒时间转为纳秒,再加1天的纳秒数)
    const targetTimestamp = Date.now() * 1_000_000 + 86400 * 1_000_000_000;
    await sandbox.setTimestamp(targetTimestamp);
    

注意事项

  • NEAR生态中所有时间戳的单位均为纳秒,进行时间转换时需注意单位换算;
  • 调整时间后,再次调用sandbox.getBlock('latest')即可确认时间已更新,后续合约执行时获取的区块时间戳也会同步变化;
  • 若需要更详细的方法定义,可查看项目依赖中@near/workspaces包的类型定义文件,里面包含所有sandbox相关方法的参数与返回值说明。

内容的提问来源于stack exchange,提问作者Alex Agadganov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:15:32