专栏首页jouypub以太坊交易池处理逻辑
原创

以太坊交易池处理逻辑

  以太坊网络中,我们发送一笔交易时,可能发送成功,也可能发送失败,那么交易是如何判断能否发送成功的呢。当我们发送交易后,交易会被广播到矿工,矿工会监听交易的广播,然后把交易放到本地的交易池中等待处理,但是交易能否放到交易池中,以及在交易池中的交易如何处理的,具体如下:

当交易进入交易池(tx_pool)时,矿工节点会做以下验证:

  1. 通过交易Hash判断交易在交易池中是否存在,如果存在就使用新的交易替换以前的交易
  2. 验证交易的合法性,如长度、value、是否溢出当前区块的GasLimit、Nonce值等、Gas是否足够,如果验证不通过就会返回对应的错误代码
  3. 验证是否孤儿交易,如果是就本地保存,不转发,防止DDOS攻击
  4. 如果交易池满了,就会验证交易Gas是否比当前交易池中的最低Gas低,如果低于交易池的最低Gas会返回ErrUnderpriced,如果高于最低值,就剔除最低Gas的交易。发生这种情况后,在etherscan中会发现在这笔交易pending中消失了(也有很大机率依然能够查到这笔交易在pending列表中,因为etherscan连接了很多节点,每个节点的交易池的状态都是不一样的,那条被踢出的交易可能在别的节点中仍然处于pending状态)
  5. 如果交易已经在交易池中,会判断Gas是否高于上一条相同Nonce的交易Gas某一个阈值(默认10%),如果Gas高于,就剔除前一笔交易,就使用新的交易替换前一笔交易,如果没有高于当前的交易就会返回失败
  6. 按顺序放入到交易池中,等待打包
  7. 等待新的交易加入到交易池,会重复上述步骤。

在明白上述逻辑之前我们需要了解几个细节

  1. 矿工不能在一个区块中打包任意多的tx(只能尽可能多的打包),因为一个区块有GasLimit限制和区块大小限制。
  2. 矿工运行以太坊实例时,是可以根据需要修改最低的GasPrice值,这样可以过滤很多低Gas的交易。
  3. 交易池容纳的交易数默认是有上限的。以太坊的txpool中的pending集合(miner是从pending中拿交易组装block的)中容纳的交易数量默认设置为最大4096。但是在Geth v1.6.2中支持外部重置交易池默认配置。具体是–txpool.globalslots value。在Parity v1.6.8中也支持外部设置,具体是--tx-queue-size LIMIT。Parity默认是1024。一个账户默认只能放16条交易到pending中,满了以后,第17条乃至以后更多的交易会有一套规则来替换先前位于pending中的16条交易。
欢迎订阅「K叔区块链」 - 专注于区块链技术学习

博客地址:http://www.jouypub.com

简书主页:https://www.jianshu.com/u/756c9c8ae984

segmentfault主页:https://segmentfault.com/blog/jouypub

腾讯云主页:https://cloud.tencent.com/developer/column/72548

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据仓库的对比和选择

      presto:facebook开源的一个java写的分布式数据查询框架,原生集成了Hive、Hbase和关系型数据库,Presto背后所使用的执行模式与Hi...

    JouyPub
  • 十分钟检查Linux服务器性能

    你是否遇到过:服务器负载飙升;服务被已经挂起,接口长时间没响应;服务刚重启,过一会又无法访问等等。这时下面这几条命令就可以尽快的帮你快速定位问题,找出问题的根源

    JouyPub
  • Git撤销修改、回退版本相关命令

    回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit(代码回滚到上个版本,并提交git)

    JouyPub
  • 【年度系列】经过多年交易之后你应该学到的东西(深度分享)

    公众号推送了很多技术类的文章,今天为大家带来一篇软文,直指交易实战。所有策略、算法等,可能都需要经过实践的检验和不断的改进才有可能为你带来一定的财富,但也不是永...

    量化投资与机器学习微信公众号
  • 3.(补充)python中的lambda

    从上面的例子可以看出,lambda函数不需要手动定义返回值,表达式的结果,就会直接作为返回值返回。

    py3study
  • CSS遮罩的过渡效果有趣的幻灯片

    今天,我们想向您展示如何使用CSS Masks创建一个有趣而简单却引人注目的过渡效果。与裁剪一起,遮罩是定义可见性和与元素合成的另一种方式。在下面的教程中,我们...

    企鹅号小编
  • 被骗多年!原来你发的每一条微博都应该获得广告费

    区块链大本营
  • 如何设计一个 A/B test?

    作者:刘健阁(Jiange Liu),PCG 数据分析师 实验设计 AB Test 实验一般有 2 个目的: 判断哪个更好:例如,有 2 个 UI 设计,究竟...

    腾讯大讲堂
  • 数据分析师最不能错过的数据是什么?

    作为一名数据分析师最不能错过的数据是什么?当然是和每一位数据分析师息息相关的,决定大家是吃土还是吃面包的招聘数据。

    1480
  • Java数据结构和算法(2)--《Java数据结构和算法》第二版 Robert lafore第二章【数组】编码作业

    用户2032165

扫码关注云+社区

领取腾讯云代金券