使用Anchor部署程序到Solana devnet失败报错问题求助
Anchor 部署到 Devnet 出现 Blockhash 过期、部署失败问题排查与解决
错误本质
部署交易使用的最近区块哈希在交易被链上打包前就已过期,核心原因是交易传输/排队耗时超过区块哈希有效期(通常为150个插槽,约2分钟)。
排查步骤
- 验证网络连接质量:运行
solana ping -u devnet -c 10,若平均延迟高于500ms、丢包率超过10%,说明本地到公共Devnet RPC的连接不稳定。 - 检查部署钱包余额:运行
solana balance -u devnet,部署1MB大小的程序至少需要预留2~3SOL的部署费用,余额不足会导致交易无法被打包。 - 核对程序体积:运行
ls -lh target/deploy/*.so查看编译后的程序二进制大小,Solana单程序部署上限为10MB,体积过大会导致上传耗时过久。 - 确认Anchor配置:检查
Anchor.toml中[provider]段的cluster配置是否为Devnet,避免误连其他集群。
解决方案
- 替换稳定RPC端点:不要使用官方公共Devnet RPC,峰值时期拥堵率极高,更换为低延迟的私有Devnet RPC后重新部署,部署时可临时指定RPC:
anchor deploy --provider.cluster <你的稳定Devnet RPC地址> - 调高交易优先级费用:在
Anchor.toml中添加优先级费用配置,提高交易打包优先级:
也可部署时临时指定:[provider] priority_fee = 100000 # 可根据拥堵情况上调,单位是lamportanchor deploy -- --priority-fee 100000 - 分阶段部署大程序:如果程序体积超过3MB,先上传部署缓冲账户,再执行部署生效,避免单次传输超时:
# 第一步:创建缓冲账户并上传程序 solana program write-buffer target/deploy/<你的程序名>.so -u devnet # 第二步:使用已上传的缓冲账户完成部署 solana program deploy --buffer <上一步输出的缓冲账户地址> -u devnet - 跳过非必要校验步骤:已经提前完成
anchor build校验的前提下,部署时跳过 lint 和重复编译步骤,减少耗时:anchor deploy --skip-lint --skip-build - 错峰部署:Devnet拥堵时段(通常为工作日欧美白班时段)部署成功率极低,可换非高峰时段重试,或先切换到Testnet验证部署流程无问题后再尝试Devnet部署。
内容的提问来源于stack exchange,提问作者Detech
相关产品推荐
相关产品推荐

