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

NEAR localnet部署合约需多次重试且频繁交易过期如何解决?

本地NEAR测试链部署合约交易过期问题解决方案

我们搭建了一条运行在本地计算机上的测试链,启动的链包含4个验证节点(与localnet高度相似),我们在该链上部署智能合约,测试链的各类功能,包括失败交易、异步收据、参数编码、日志等内容。
我部署合约时,总是需要重试2到3次才能让交易成功执行,更严重的是,约33%的情况下,我会达到重试上限,收到Transaction Expired错误。
所有服务都运行在我本地计算机上,部署合约时也是链上唯一的交易,不存在网络拥堵(实际上完全没有其他流量),所以需要这么多次重试非常奇怪。
请问如何实现无需重试即可立即成功部署合约,且完全不会出现交易过期的问题?

  • 调整交易有效期参数
    NEAR协议默认交易的有效区块高度范围为当前链上高度+10个区块,你可以在构造交易时主动拉长这个阈值:
    • 若使用near-cli部署,添加参数--expiry 50即可将有效期提升到50个区块
    • 若使用near-api-js等SDK部署,构造交易时自定义expires_in参数为对应区块数即可
      本地测试链不存在公链的重放攻击风险,即使设置到100个区块也不会有安全问题。
  • 固定RPC请求目标
    如果你在客户端配置了多个本地验证节点的RPC地址轮询,很可能会请求到同步落后的节点,拿到旧的区块高度/区块哈希构造交易,导致交易的有效起始高度本身就低于链上实际高度,有效期被提前耗尽。直接固定请求单个出块节点的RPC端口即可解决该问题。
  • 优化本地测试链出块配置
    4节点验证集群的BFT法定人数为3,需要保证所有节点的网络连通正常、无CPU/内存资源限制:
    • 将出块间隔调整为1s,和官方localnet配置对齐,不要使用主网的3s出块参数
    • 关闭状态同步、历史数据归档等非必要功能,降低节点运行负载,避免出块延迟
      出块速度稳定后,交易的打包速度会明显提升,不会出现有效期到了还没被打包的情况。
  • 修正nonce获取逻辑
    不要使用本地缓存的账户nonce构造交易,每次部署前必须从链上拉取最新的nonce值,旧nonce的交易不会被节点打包,会一直挂到过期才返回错误,容易和正常的过期问题混淆。
  • 拉长客户端超时时间
    不要用默认的5s请求超时,将超时时间调整为和你设置的交易有效期匹配,比如设置了50个区块的有效期,就将超时时间设为60s,避免客户端提前断开连接误认为交易过期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:02