以太坊转账 gas 费用太低,一直 pending 怎么办

字数 585阅读 1056

最近Fcoin搞的创业板上币计划“累计充值人数排名”,使得以太坊转账手续费上涨了十多倍,以太坊矿工手续费收的很开心。转账的人大概不开心。

以太坊拥堵了,gas 费用给低的话,基本转不成功,一直处于 pending。比如说这笔交易


pending transaction

再看 gas 的使用情况,etherscan.io/gasTracker 上查看最近一个 Block 的 gas 费用,如下:

gasTracker

gas 是以太坊中执行操作的计价单位,在以太坊虚拟机中执行写每一步的写操作都要消耗 gas。每一笔交易 gas 花费的计算公式:gasLimit * gasPrice,gasLimit是上限,实际消耗的 gas 会少于这个值。gasLimit 如果给少了,交易会被回滚,但已消耗的 gas 不会被退回。所以一般发起交易的时候,gasLimit都会设置地高一些。

gasPrice 的单位是 Gwei,1 ETH = 1000000000 Gwei 。一般 gasPrice 的价格是个位数。以太网络中,矿工在打包区块时会优先处理 gasPrice 高的交易。

如果出现网络拥堵,给出的 gasPrice 太小的时候,交易一直在 pending 状态,又想尽快完成交易时,可以重新发起一笔新的交易,提高 gasPrice,并将 nonce 值和被挂起的交易一样。那么旧交易就会被新交易所替代。

如果使用 web3.js 调用 sendTransaction 时,可设置 nonce。这种方式最灵活,ETH 转账和合约交易都可修改。下面是 ETH 转账示例:

web3.eth.sendTransaction({
    from: 0x4fd9555dd1309e7a2a356ea7e92c1b41cb7bb144,
    to: 0xf7deba629960e4f31f1aba61927f6f1e966c4462, 
    value: web3.toWei(1, "ether"), 
    gas: 60000,
    gasPrice: web3.toWei(40,'gwei'),
    nonce: 30
});   

MetaMask 也可实现重新设置 ETH 转账的 gasLimit 和 gasPrice:


retry tx

使用 MetaMask 转账,若转账迟迟未成交,MetaMask会给出一个 Retry 的链接,点击进去,修改该笔交易的 Gas LimitGas PriceGas Price 要高于之前的费用,否则该交易无法提交成功。

retry tx

修改后,点击 submit提交就行,旧交易就会被覆盖。

以太坊 pending transactions 常年在 2 万左右

pending txs

处理速度上不去,gasPrice 轻轻松松就被抬高。也不知道分片技术啥时候能上线。拭目以待吧。

推荐阅读更多精彩内容