使用Web3j部署智能合约时断网会怎样?gas费还会被扣除吗?
Web3j RPC调用断网影响与合约部署Gas扣除规则解答
一、RPC调用过程中断网的影响
你使用Web3j是本地完成签名,仅在与第三方节点交互时需要网络,断网的影响根据发生的阶段不同有区别:
- 断网发生在签名完成但交易尚未发送到第三方节点:交易没有进入链上交易池,不会产生任何链上状态变更,也不会扣除Gas。网络恢复后重新发起请求即可,注意检查本地nonce计数避免重复提交。
- 断网发生在交易已发送到第三方节点,但你未收到节点返回的响应:此时交易大概率已经被节点广播到链上网络,只是你收不到回执。你需要等网络恢复后,通过交易哈希调用
eth_getTransactionReceipt接口或者链上浏览器查询交易状态,不要直接重发交易,否则可能出现两笔同nonce交易被打包的情况,产生额外Gas消耗。 - 如果是只读类RPC调用(比如调用合约
view/pure方法,使用eth_call接口):断网只会导致你拿不到查询结果,不会产生任何链上影响,也不会消耗Gas。
二、合约部署等待10-20秒是否会扣除Gas
Gas是否扣除仅和交易是否被矿工打包上链有关,和你等待响应的时长没有关联:
- 若你的合约部署交易最终被矿工打包进区块:无论你等待了10秒还是20秒,都会扣除交易实际消耗的Gas。哪怕合约部署失败(比如构造函数执行报错、Gas limit设置不足),已经消耗的Gas也不会退还,因为矿工已经付出算力执行了你的交易。
- 若你的部署交易始终未被打包,最终被节点从交易池中清除:不会产生任何Gas扣除,你的钱包余额不会有变化。
你感受到的10-20秒部署时长,是交易等待矿工打包、区块确认的时间,这个时长仅和当前链的拥堵程度、你设置的Gas价格高低有关,不影响Gas扣除逻辑。
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

