以太坊提币pending
① 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网络的拥堵状况,发送每笔交易时,设置合理的矿工费用,避免大量的交易积压在交易池。
② 跨行转账整整8天了仍未到帐,也没退款
我们在转账之后,有时会出现转账迟迟未到账的情况,很多用户十分着急,甚至认为自己的币丢失了。Tokenview收到了一封来自昵称为港湾用户的求助邮件。邮件中说,该用户在进行USDT转账时发生了USDT丢失的情况。用户提供了提币地址,交易ID,接收地址以及转账金额和转账时间,问是否可以找回。
首先,我们需要先确定没到账的原因。一般来说,转账没到账的原因有四个:
1、地址填错
2、网络拥堵,暂未到账
3、确认数未达标,暂未入账
4、手续费不足,交易被退回
我们一个个来分析。如果是第一种情况,地址填错。地址填错大约分二种情况,第一种情况是地址种类填错,或者格式错误。这种情况下,转账可能无法顺利进行,相应的钱包软件会进行提示,如果交易不能发起,也就不存在丢币的情况。但在种类填错的情况下也不是不可能发起交易的。举例来说,如果我们把USDT—OMNI提现到了USDT-ERC20,就会丢币,这样丢失的币是无法找回的。第二种情况就是地址张冠李戴,是对应的链上地址,但是错填成他人地址。这种情况交易将会顺利发起,而此时交易上链后,基于区块链不可逆的特性,任何人都无法对该笔交易进行撤回操作,除非接收方原因将币转回原地址。
如何判断接收地址是否填写错误呢?我们复制交易ID,或者直接复制自己的转出地址,通过Tokenview区块浏览器进行查询。我们通过查询该用户提供的交易ID,可以发现,该用户进行了火币的一笔提现操作,其转入地址与用户提供的转入地址不符,也就是说,出于某种原因,用户将USDT转去了错误的地址。
这种情况下,交易将是无法撤回的,除非改接收地址的持有人愿意将这笔“天降之财”原路退回。但由于区块链的匿名性,除了Tokenview标记出的交易所出入金地址及某些大户地址外,其余BTC、USDT地址我们是无法通过地址哈希定位其所有人的,因此可以说,在这种情况下,找回币的几率微乎其微。
第二种情况是网络拥堵。这种情况我们能做的就是等待交易打包上链。我们可以在tokenview.com的Pending交易池中看看交易是否存在。如:https://btc.tokenview.com/cn/pending。
第三种情况一般存在于交易平台充币。当交易上链时,确认数为1,但由于不同交易所对确认数的要求不同,例如大部分对比特币的确认数要求要达到6才会被确认充值成功,而以太坊则是12个。我们可以通过tokenview.com来查询交易数。如果交易数还没有达到要求,我们还需要再耐心等一下。
最后一种情况是手续费不足,交易被退回。这种情况交易会失败。拿以太坊的转账为例,如果手续费不足,此交易将扣取手续费,并将ETH退回到转出地址,并不存在丢币的情况。
转账未到账的几种情况我们已经介绍完毕了。其中最关键的是大家在转账之前一定要再三确认交易地址是否填写无误。如果是进行USDT的转账,一定要确认其USDT类型。是OMNI,还是ERC20,还是TRC20,避免发生填错类型而丢币的意外,从而造成损失。
③ 2021-01-19 记录一次以太坊nonce值的问题
之前在做后端接口的时候,封装了构造交易及发送交易这一层,其中构造交易的时候,获取用户的nonce这里,没有自己维护,而是从链上获取,且之前由于一些业务这里没有做队列,导致前端并发调用的时候,会产生一个账户同时构造两个相同nonce值得交易,最终会导致失败一条。
Client.PendingNonceAt 是从pending中获取该账户的本次交易改用的nonce,本以为这里已经处理了就没管,不曾想,还是会出现上面的交易重复的bug。
经修改,如果是特殊账户,可在业务层自行维护计数器做nonce值,维护成本较大,且复杂。
第二种 就是这里加个队列,毕竟及时性不是区块链该有的东西。
④ 以太坊被提币了能查到或者追回吗
能。报警处理,警察会立案调查追回。转账记录可作为证据使用,公安机关一般应当立案侦查。“以太坊(英文Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供去中心化的以太虚拟机(EthereumVirtualMachine)来处理点对点合约。
⑤ 刚刚买的加密货币暂时无法提款
刚刚买的加密货币暂时无法提款是因为
加密货币贷款机构Celsius告诉客户,他们暂时无法从该平台提取资金。该公司表示:“由于极端的市场条件,我们今天宣布,Celsius暂停所有取款、掉期和账户之间的转账。领先的加密货币,包括以太坊(ETH)、卡达诺(ADA)、索拉纳(SOL)和狗狗币(DOGE)的损失甚至比比特币更严重,在过去一天下跌了15%至25%。虽然许多加密货币持有者正在清算他们的资产,但加密货币贷款机构Celsius告诉客户,他们暂时无法从该平台提取资金。该公司今天表示:“由于极端的市场条件,我们今天宣布,Celsius暂停所有取款、掉期和账户之间的转账。”在加密货币市场暴跌的最后一天,NFT交易量激增。根据CryptoSlam的数据,包括Bored Ape Yacht Club (BAYC)、Mutant Ape Yacht Club (MAYC)和Crypto Punks在内的顶级NFT项目在过去24小时内增长了100%。
⑥ 以太坊提币一般多久到账
提币半小时左右到账,充值提现即时到账。
你提币那么是需要有Hubi审核的,一般由风控人员审核,审核通过后就会给你打币,但是多久到账,这个是会受到网络环境或是区块拥不拥挤所影响,当然在其他交易所也是一样的。上次在Hubi提过EOS和BTC,他们的审核很快,两个币到账的时候也不一样,BTC略长一点,可能是区块拥挤的原因,但是有短信和邮箱的提醒,这一点是挺好的。
⑦ 以太显示支付为什么没到账
因为网络有一定的延迟原因,所以会导致转账成功,但是没有到账。
这个情况可以查下自己是否已经扣款,要是扣款了,很快对面会到账的。
以太坊提币到不原因有两个:
第一类是以太坊投资者在某个交易所平台当中进行了以太坊提现,结果发现eth没收到;
第二类则是一些投资者在进行购入以太坊购买交易过程中,已经按照提示支付了对应的购买价款和手续费,但是却发现eth没收到。
网络上所反映的有关“eth没收到”的情况大致就如此,除此之外可能还存在其他的一些与“eth没收到”有关的咨询,但是大致仍然脱离不了这两类范畴。
⑧ 以太坊ETH覆盖或删除处于pending状态交易
有人肯定遇到跟我一样的问题,账号里还有一些eth,但是有一笔交易一直处于pending状态,导致后续的交易全部卡死。除非这一笔pending状态的交易被矿工打包。请注意nonce,由于每一个账号的每一个交易nonce都是递增的,因此如果用已经成功的交易的nonce重新交易,一定会报错nonce too low。
1、发现有一笔订单一直处于pending状态,后续的所有交易都不能正常进行
2、解决方案,通过设置较高的gasprice来覆盖或替换该交易
3、接下来,该账号就可以正常转账啦。
目前市场上尚未找到能满足该功能的工具/钱包,如需提供技术服务,请联系作者,微信号:hqfeijian ,备注:以太坊替换交易
⑨ 以太币提现不到账
刷新。
有两种可能一种可能平台没有给你打币,需要咨询客服。第二种钱包问题未能收到你的体现。我之前在ZB平台提过也出现过这种情况。平台客服说钱包问题,然后给我退回,原来账户拉。