为什么交易始终不打包?
因为以后区块链存在低吞吐率,高应用门槛等问题,通过区块链发送交易的时候难免会遇到交易迟迟不被打包的问题。
以 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 办法反对。