目前以太坊正面临着许多积压的交易,导致一些交易数小时甚至数天都未被处理。 本文解释了转账如何被卡住,以及如何释放它们。

确定gas价格

发送以太坊交易时,有许多方法可以确定最佳gas值。https://ethgasstation.info 等网站提供了gas使用情况的概述,https://www.etherscan.io/txsPending 提供了当前交易池的有关信息。

后者的网站特别有用,因为它可以通过gas价格组织交易清单。 你可以点击 GasPrice 栏来查看。 由此产生的清单大致也是矿工看待交易的方式,所以如果您据此选择一个gas价格以确保您的交易是在前几页,您可能会有一个非常短的交易确认时间。

但是如果你的交易没有被确认呢?它有可能被阻塞了,需要进行释放。

理解阻塞交易

在解释如何释放阻塞交易之前,首先了解交易为什么被阻塞是非常重要的。以太坊是一个区块链:由许多区块组成,每一个区块包含多个交易,一个接着一个,都被链到区块链中,如下图所示:

-以太坊的区块链简化视图-

(实际上,单个块和链的结构都比较复杂,但是为理解本文,图表提供的信息足够了。)

区块的创造是由矿工通过所谓的”挖矿“过程而产生的,这一概念已经众所周知,但是很多人对交易是如何被一个特定区块选择包含进去的过程并不清楚。为了更详细地探索这个过程,让我们看看下面的示例块1434的创建。

以太坊包含除区块链以外的许多要素,其中之一就是交易池。交易池包含所有已提交给以太坊网络但尚未分配到区块中的交易。

区块 1433 一旦被挖出,对区块 1434 的开采就开始了。区块1434 开始为空:

-块1434的初始矿工状态-

矿工将从交易池中选择多个交易插入到块 1434 中,开始挖矿:

-在挖矿之前先填充块-

一旦块1434被成功开采,它就成为了区块链的一部分,并且把相关交易从交易池中移除:

-挖出第1434块:已经挖掘的交易从交易池中移除-

(再次声明,这是对真正发生的事情的简单的解释。)

一个显而易见的问题是“矿工是如何选择要包含哪些交易到区块中?”,答案是“钱”。

提交给以太坊的每笔交易都附有一个数字,代表着提交者愿意向矿工支付的交易费,即 gas 价格。当一个矿工检查交易池并看到两个完全相同的交易时,它将选择 gas 价格高的交易,因为这样会挖矿时矿工能得到更多的钱。

(另一个简化说明:提交者支付给矿工的资金总额实际上是 gas 价格乘以用到的 gas 量而且,所用的 gas 量取决于交易调用的合约的复杂性。需要记住的是,gas 值高的交易对矿工来说更具吸引力)。

当进入交易池中的交易量超过可以包含到下一个区块中的交易量时,这意味着那些gas价格较低的交易将被排除在该区块之外。如果,交易池中 gas 价格高的交易数量达到或者超过了每一个区块的容量,那么 gas 价格低的可能交易就不会被选中。在这一点上,gas价格低的交易就被阻塞了。

处理阻塞交易

如果提交给以太坊的交易量下降,那么阻塞的交易就会自动解除阻塞,否则就需要手动干预来释放交易。

释放交易需要将交易的 gas 价格提高,使得当矿工为区块选择交易时,该交易将在交易清单较高的位置。要做到这一点,交易必须以更高的 gas 价格再次广播。例如,这是一个因为gas价格较低而被阻塞的交易:

Type: Pending transaction
From: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40
To: 0xa34C6BCAe6F46ac6470443CCea67d937f6060c7E
Nonce: 1
Gas limit: 21000
Gas price: 1 GWei
Value: 0.005 Ether
注意,gas价格此时为1 GWei。以较高的gas价格(10 GWei)重新提交覆盖之前的交易:

Type: Pending transaction
From: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40
To: 0xa34C6BCAe6F46ac6470443CCea67d937f6060c7E
Nonce: 1
Gas limit: 21000
Gas price: 10 GWei
Value: 0.005 Ether
注意 “From” 地址和 “Nonce” 值在两个交易中是相同的。这两个值可以用来唯一确定一个交易,允许交易覆盖。而且 gas 价格发生了相应的变化。

或者,交易可能需要取消。以太坊没有从交易池中移除交易的机制,但可以用不同的信息覆盖交易,例如用0值转移回发送方,这具有类似的效果。但这仍然是一个交易,仍然需要被开采。重新提交上述交易来达到取消交易的结果,如下所示:

Type: Pending transaction
From: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40
To: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40
Nonce: 1
Gas limit: 21000
Gas price: 60 GWei
Value: 0
注意,“To”地址改成了“From”地址,“Value”改成了0。

当交易被替换时,新的 gas 价格要比原来的 gas 值高10%,所以把 20GWei 改成 1GWei 是不可能成功的,而且原来的交易仍然会留在交易池中。

用Ethereal释放阻塞交易

Ethereal是一个命令行工具,它允许您使用标准的 Geth 或 Parity 存储来执行通用的Ethereum活动。Ethereal包含释放阻塞交易的命令。

要安装Ethereal要先安装Go,查看你是否安装Go以及它的版本:

go version

如果已经安装了Go,你会看到一个版本报告,例如:

go version go1.8.1 linux/amd64

如果你没有安装Go,你可以用电脑安装包管理器安装,或者通过下面网页上的指令安装: https://golang.org/doc/install

一旦安装好Go,可以通过下面的命令安装Ethereal:

go get -u github.com/wealdtech/ethereal

确认Ethereal是可用的,而且通过运行以下命令可以看到发送阻塞交易的账户:

ethereal account list

并且确保你想看的账户在列表中。

查看交易的状态就运行ethereal transaction info命令,例如,查询前一节中提到的阻塞的交易:

ethereal transaction info --transaction=0xec08e7609d80f233fd92cc41068ea0dd6da5d9c05263d45b0a5eee6e20f96194
为了在不改变其他参数的情况下,提高交易的gas价格,以更改后的gas价格来进行交易,例如将gas价格提高到10 Gwei:

ethereal transaction up --transaction=0xec08e7609d80f233fd92cc41068ea0dd6da5d9c05263d45b0a5eee6e20f96194 --gasprice=10gwei --passphrase=secret
其中,passphrase是解锁发送阻塞交易的账户的命令。

若要取消一项没有包含到区块的交易,则以改变gas价格的方式来取消交易。

ethereal transaction cancel --transaction=0xc04116457f8f420bb13d770ffbb233501f193ba7c57cd1e4bc2ec02804a8df6a --gasprice=60gwei --passphrase=secret
使用Ethereal可以为您提供释放阻塞交易的能力,并确保即使在Ethereum网络繁忙的时候,交易也能及时通过。

原文链接: https://medium.com/@jgm.orinoco/releasing-stuck-ethereum-transactions-1390149f297d
作者: Jim McDonald
翻译&校对: 刘艳安 & Elisa
稿源:以太坊爱好者(https://ethfans.org/ajian1984/articles/900)

释放阻塞的以太坊交易相关推荐

  1. java如何监听以太坊交易

    2019独角兽企业重金招聘Python工程师标准>>> 你可以在web3j库的帮助下使用java轻松监听以太坊交易,但此库无法监听Erc20 Token交易. 要监听Erc20Tok ...

  2. Infura Http 客户端 以太坊 交易

    web3j Infura 模块提供了一个Infura Http 客户端(InfuraHttpService),它为Infura特定的Infura-Ethereum-Preferred-Client提供 ...

  3. 以太坊地址和公钥_以太坊交易签名解析源码解读

    上篇文章<以太坊交易签名过程源码解析[1]>从源码角度分析了一个合约调用的的签名过程,签名后的交易发送到以太坊节点后,节点需要从签名交易中还原出公钥(从公钥中单向计算出账号地址),进而将交 ...

  4. 以太坊交易信息及event、input、logs、topics等概念机制

    文章目录 一.交易信息获取 1.1 合约事件例子定义 1.2 以太坊交易获取 二.input解析 2.1 input内容解析 2.2 input处理逻辑 三.logs解析 3.1 logs解析代码 四 ...

  5. 以太坊交易中的nonce和confirmation

    1. 以太坊交易中的nonce及其价值 1.1 以太坊交易中的nonce值 在以太坊中,每笔交易都有一个nonce值,该nonce值代表的是从该交易发起地址发出的交易数.(当存在使用同一地址从多个客户 ...

  6. 观点:以太坊交易费市场泡沫预警,交易费日渐成为用户难以承受之重

    在经历了一次大熊市之后,以太坊已经再次流行起来.受包括 ETH 价格反弹以及所谓"去中心化金融"(DeFi)的采用等因素的综合影响,以太坊区块链的活跃用户和日交易量都出现了强力增长 ...

  7. 区块链 以太坊 交易结构、执行、存储 解析 交易中为什么没有包含发送者地址这条数据

    一. 交易的结构 1. Transaction结构 交易结构定义在 core/types/transaction.go 中: type Transaction struct {//交易数据data t ...

  8. 以太坊交易Nonce设置

    1 什么是nonce? 以太坊中的nonce有两个意义: 1.工作量证明:为了证明工作量的无意义的值,这是采矿的本质,这个值将决定采矿的难度, 2.账户的随机数:在一个账户中的防止多重交易的用途.例如 ...

  9. Web3j通过合约地址监听transfer事件获取以太坊交易数据

    Web3j通过合约地址监听transfer事件获取以太坊交易数据 We3j web3j是一个轻量级的Java库,用于在Ethereum网络上集成客户端(节点). 核心特性 通过Java类型的JSON- ...

  10. 如何用树莓派和PHP开发一个比特币和以太坊交易机器人

    我最近得到了Raspberry Pi Zero Wifi,我告诉你这个东西是改变游戏规则的.我之前使用过RasPis,但由于该设备的占地面积小得多,耗电少,价格便宜且无线上网,因此非常适合低端或物联网 ...

最新文章

  1. 2021-08-31 openCV批量读取把 path0 里面的与 path 同名文件(.jpg)提取出来,然后生成.png放进 path1 路径里面
  2. Android 数据库框架ormlite 使用精要
  3. 使用应用程序(Java/Python)访问MaxCompute Lightning进行数据开发
  4. WebAssembly生态将完善网络安全性
  5. mysql导出表结构_mysql导入导出表结构及表数据及执行sql文件
  6. Spring 框架基础(06):Mvc架构模式简介,执行流程详解
  7. python3 xpath_「手把手教python3接口自动化」:非结构化数据提取(二)
  8. 95-190-744-源码-WindowFunction-WindowFunction
  9. tomcat如何进入管理页面 manager/html 配置方法
  10. docker容器别人访问很卡_docker容器下远程访问jupyter的方式
  11. Visio—如何画虚线?
  12. 嵌入式学习4--混杂设备驱动
  13. win10安装msi文件
  14. PHP生成PDF-TCPDF
  15. html实现相册效果,图片播放(相册效果) - CSS实现
  16. Visual Studio运行C语言程序(第一个程序)
  17. Oracle中的chr()函数与ascii()函数
  18. PB控件:Graph图形控件
  19. 利用matlab建立含间隙关节的曲柄滑块动力学分析
  20. WebSphere MQ概述

热门文章

  1. 2023年网络安全比赛--attack(新)数据包分析中职组(超详细)
  2. es6两个数组包含对象对比去重
  3. HDU 2552 三足鼎立
  4. jsp mysql实验选课系统下载_课内资源 - 基于jsp与mysql的选课系统
  5. 智能合约开发实例(4)——房产产权——2021.7.30
  6. 用C语言写PL0编译器
  7. 敏捷集团双盘联动,持续提升优质人居体验
  8. VMware 安装苹果macos解锁工具报Couldn‘t open file D:\VMware\vmwarebase.dll解决方案
  9. 软件工程毕业设计 SSM大学生就业企业推荐系统(源码+论文)
  10. 微信小程序实战(一)之仿美丽说