eth最多pending几天
㈠ 玩FOMO3D遇到ETH转账油费不够Pending的问题
在玩FOMO3D遇到ETH转账油费不够导致Pending的问题时,可以尝试以下解决方案:
查看交易详情:
- 使用小狐狸钱包跳转至Ethereum Blockchain Explorer,以查看当前处于pending状态的交易详情。
提高gas费:
- 若交易长时间未确认,很可能是gas费设置过低。此时,不要急于取消订单,而是尝试提高gas费后重新提交交易。
使用MyEtherWallet处理:
- 转至MyEtherWallet.com,输入交易ID以获取交易的详细信息。
- 选择private key方式处理,输入私钥并解锁账户。
- 点击“自动生成交易”按钮,并确认发送以提高gas费。
处理send offline模式下的pending情况:
- 如果交易处于send offline模式导致的pending状态,需要输入接收地址,并获取与pending交易一致的gas price和Nonce值。
- 输入0个ETH,然后按照上述步骤操作以重新提交交易。
注意事项: 在处理pending交易时,请确保了解每一步操作的含义,并谨慎操作,以避免造成资金损失。 如果不确定如何操作,建议寻求专业人士的帮助或咨询相关社区。
通过上述步骤,大部分因gas费不足导致的pending问题应该能得到解决。
㈡ 以太坊ETH覆盖或删除处于pending状态交易
有人肯定遇到跟我一样的问题,账号里还有一些eth,但是有一笔交易一直处于pending状态,导致后续的交易全部卡死。除非这一笔pending状态的交易被矿工打包。请注意nonce,由于每一个账号的每一个交易nonce都是递增的,因此如果用已经成功的交易的nonce重新交易,一定会报错nonce too low。
1、发现有一笔订单一直处于pending状态,后续的所有交易都不能正常进行
2、解决方案,通过设置较高的gasprice来覆盖或替换该交易
3、接下来,该账号就可以正常转账啦。
目前市场上尚未找到能满足该功能的工具/钱包,如需提供技术服务,请联系作者,微信号:hqfeijian ,备注:以太坊替换交易
㈢ ETH开发实践——批量发送交易
在使用同一个地址连续发送交易时,每笔交易往往不可能立即到账, 当前交易还未到账的情况下,下一笔交易无论是通过 eth.getTransactionCount() 获取nonce值来设置,还是由节点自动从区块中查询,都会获得和前一笔交易同样的nonce值,这时节点就会报错 Error: replacement transaction underpriced
在构建一笔新的交易时,在交易数据结构中会产生一个nonce值, nonce是当前区块链下,发送者(from地址)发出的交易(成功记录进区块的)总数, 再加上1。例如新构建一笔从A发往B的交易,A地址之前的交易次数为10,那么这笔交易中的nonce则会设置成11, 节点验证通过后则会放入交易池(txPool),并向其他节点广播,该笔交易等待矿工将其打包进新的区块。
那么,如果在先构建并发送了一笔从地址A发出的,nonce为11的交易,在该交易未打包进区块之前, 再次构建一笔从A发出的交易,并将它发送到节点,不管是先通过web3的eth.getTransactionCount(A)获取到的过往的交易数量,还是由节点自行填写nonce, 后面的这笔交易的nonce同样是11, 此时就出现了问题:
实际场景中,会有批量从一个地址发送交易的需求,首先这些操作可能也应该是并行的,我们不会等待一笔交易成功写入区块后再发起第二笔交易,那么此时有什么好的解决办法呢?先来看看geth节点中交易池对交易的处理流程
如之前所说,构建一笔交易时如果不手动设置nonce值,geth节点会默认计算发起地址此前最大nonce数(写入区块的才算数),然后将其加上1, 然后将这笔交易放入节点交易池中的pending队列,等到节点将其打包进区块。
构建交易时,nonce值是可以手动设置的,如果当前的nonce本应该设置成11, 但是我手动设置成了13, 在节点收到这笔交易时, 发现pending队列中并没有改地址下nonce为11及12的交易, 就会将这笔nonce为13的交易放入交易池的queued队列中。只有当前面的nonce补齐(nonce为11及12的交易被发现并放入pending队列)之后,才会将它放入pending队列中等待打包。
我们把pending队列中的交易视为可执行的,因为它们可能被矿工打包进最新的区块。 而queue队列因为前面的nonce存在缺失,暂时无法被矿工打包,称为不可执行交易。
那么实际开发中,批量从一个地址发送交易时,应该怎么办呢?
方案一:那么在批量从一个地址发送交易时, 可以持久化一个本地的nonce,构建交易时用本地的nonce去累加,逐一填充到后面的交易。(要注意本地的nonce可能会出现偏差,可能需要定期从区块中重新获取nonce,更新至本地)。这个方法也有一定的局限性,适合内部地址(即只有这个服务会使用该地址发送交易)。
说到这里还有个坑,许多人认为通过 eth.getTransactionCount(address, "pending") ,第二个参数为 pending , 就能获得包含本地交易池pending队列的nonce值,但是实际情况并不是这样, 这里的 pending 只包含待放入打包区块的交易, 假设已写入交易区块的数量为20, 又发送了nonce为21,22,23的交易, 通过上面方法取得nonce可能是21(前面的21,22,23均未放入待打包区块), 也可能是22(前面的21放入待打包区块了,但是22,23还未放入)。
方案二是每次构建交易时,从geth节点的pending队列取到最后一笔可执行交易的nonce, 在此基础上加1,再发送给节点。可以通过 txpool.content 或 txpool.inspect 来获得交易池列表,里面可以看到pending及queue的交易列表。
启动节点时,是可以设置交易池中的每个地址的pending队列的容量上限,queue队列的上容量上限, 以及整个交易池的pending队列和queue队列的容量上限。所以高并发的批量交易中,需要增加节点的交易池容量。
当然,除了扩大交易池,控制发送频率,更要设置合理的交易手续费,eth上交易写入区块的速度取决于手续费及eth网络的拥堵状况,发送每笔交易时,设置合理的矿工费用,避免大量的交易积压在交易池。
㈣ 叶胜超:一分钟了解以太坊的gas燃料以及手续费的计算方法(98)
理解以太坊的Gas燃料与手续费计算方法是进入加密货币世界的关键一步。Gas,翻译为“燃气”,在以太坊网络中扮演着燃料的角色。进行交易,无论是转账到另一个账户还是部署智能合约,都需要先支付Gas。
Gas Limit是指交易发送方最多接受的Gas数量,用以执行交易。Gas Used则是交易中实际消耗的Gas数量。Gas Price表示交易发送方对每单位Gas愿意支付的价格,通常以Gwei为单位。
以太币的单位包括wei、Gwei、和eth。1eth等于1e9 Gwei,而1Gwei等于1e9 wei,所以1个eth相当于10的9次方Gwei,1个Gwi相当于10的9次方wei,最常用的单位为eth、Gwei和wei。
了解了Gas、GasLimit、GasPrice后,我们可以对Gas Limit和Gas Price进行设置。例如,如果一笔交易的Gas Used为21000GAS,而设置的单价Gas Price为6Gwei/GAS,则发送这笔交易的手续费为21000*6=126000Gwei,相当于约0.00013ETH。
设置Gas Limit过低会导致交易失败,手续费不会退回。设置Gas Price过低则显示交易处于Pending状态,但也不能过高,否则会增加成本。设置具体价格时,可以参考区块链浏览器上的最佳价格建议,例如tokenview。
此系列文章由叶胜超撰写,旨在普及区块链基础知识。欢迎转载,但需注明出处。关注叶胜超,每天学习一个知识点,积累经验变老鸟。
投资箴言:行情总在绝望中诞生,在半信半疑中成长,在憧憬中成熟,在希望中毁灭。生存法则:踏实工作、闲钱投资、熊市定投、牛市定抛,按时吃饭睡觉。币圈生存法则,非绝世高手不得无视,谨记生存法则可保不死。