为什么交易一直不打包?

为什么交易一直不打包?

因为当前区块链存在低吞吐率,高使用门槛等问题,通过区块链发送交易的时候难免会遇到交易迟迟不被打包的问题。
以 Conflux 为例,Conflux 网络正常情况一秒钟出两个块,一笔交易被成功发出之后应该在几秒到十几秒内,会被打包并执行。
如果交易迟迟不被打包,那大概率是什么地方出了问题,需要发送者进行手动干预.

如何确定交易 pending 的原因

Pending 的交易, 如果被成功传播到 Scan 所使用节点的交易池内,那么可以在 Scan 上通过 hash 搜索到该交易,在交易详情页可以看到交易的状态为 Pending

这时我们可以进入到交易发送方的账户详情页,通过账户的 Pending 交易列表 Tab,查看该用户目前 pending 的交易

在该 tab 可以看到当前用户 pending 交易的总数,以及最早 pending 的交易(最多10条)。最为关键的是还可以看到第一条 pending 交易的 pending 原因,可能的原因有三种:

  • Wrong nonce
  • Insufficient balance
  • Ready to pack

该页面其实是通过 RPC 方法 cfx_getAccountPendingTransactions 获取的某账户当前 pending 的交易信息的

Wrong nonce

此种错误表示发送的交易使用了错误的 nonce,正常情况交易需要按照 nonce 顺序 one by one 执行。如果某笔交易的 nonce 之前有一个或多个 nonce 的交易未执行,则此交易会一直等待,直到之前所有的交易成功执行。

这种情况我们需要使用正确的 nonce 重新发送交易。需要注意的是 pending 的交易在其前边所有交易都执行后(并且余额足够),会自动执行。

Insufficient balance

在 Conflux 网络,如果交易的发送方余额不足以支付某笔交易的金额+手续费,交易也可以被成功发送到交易池,但会处于 pending 的状态,不被打包执行。
此种情况只需要向该账户转足够的 CFX 即可。

Ready to pack

此种情况比较特殊,表示交易本身已经达到了可以被打包的条件,但是因为整个网络比较拥堵或其他原因,还未被打包。

如果交易长时间处于此种状态,可以适当提高交易的 gasPrice 重新发送交易,这样可以提高交易的打包执行速度。

如何正确的设置 gasPrice

交易的打包执行快慢主要受交易的 gasPrice 所影响,gasPrice 越高,上链越快,所以正确的设置 gasPrice 非常重要。

可以使用 fullnode 的 cfx_gasPrice RPC 方法获取一个建议的 gasPrice 值。该方法会根据一定数量最新的区块的 gas 使用情况及其中的交易的 gasPrice 来给出一个推荐值。

最理想的方式是根据网络节点交易池中交易的 gasPrice 设置情况来计算一个合适的 gasPrice,但当前缺少相关的 RPC 方法支持。

1 Like

这个一般玩家解决不了,如何优化自动可以有提示设置,可以适时调整

这是开发文档,非开发者使用最新版钱包或者提高gas就可以


今天在三角归还AU时就一直不成功,按贴文上述找不到pending
然后过了一会儿多次尝试不成功,检查不是费用设置问题。关闭重进后才行。随后马上又试质押AU
同样出现

即使取消尾数取整数400,同样合约交互问题
反复,过一会儿成功。
不知问题所在

这种是交易没有发送成功,所以根本没进交易池,如果交易发送成功,但一直不打包执行,可用本文方法查找原因

大大的影响操作体验