以太坊交易池处理逻辑

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

当交易进入交易池(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 条评论
登录 后参与评论

相关文章

来自专栏互联网大杂烩

Hyperledger Fabric系统结构

Fabric系统主要由两个应用构成:Orderer和Peer,其中Orderer负责交易共识并生成区块,Peer节点负责模拟执行交易和记账。这种划分可以使整个平...

1222
来自专栏奔跑的蛙牛技术博客

200行python代码实现区块链你想要的都在这里 传送门 && star

. 节点注册 . 创建新的区块 . 创建交易区块 . 生成hash函数 . 获取区块链最后一个元素 . 工作量证明 . 验证工作量证明 . 验证是...

982
来自专栏比原链

比原链猜谜合约使用指南

4、在锁定资产页面中,选择我们要奖励给猜对答案的资产奖励(当前不支持直接锁定BTM,所以我们需要新建一种资产进行锁定);

1363
来自专栏智能计算时代

Ethereum - 以太坊项目

以太坊项目进一步扩展了区块链网络的能力,从交易延伸为智能合约(Smart Contract)。 其官网首页为 ethereum.org。 简介 根据以太坊官方的...

2957
来自专栏汇智网教程

以太坊查看账户余额

3467
来自专栏华仔的技术笔记

部署一个私链以太坊的智能合约

4433
来自专栏区块链大本营

【手把手】如何在10分钟内搭建一个以太坊私有链?

5343
来自专栏网络

虾说区块链-52-《精通比特币》笔记七

一直在说区块链是一系列技术结合后的新的技术架构,那么这里分别介绍下这些相关技术,也涉及到一些扩展开去的相关内容。 ? 区块链-《精通比特币》笔记七: 《精通比特...

2078
来自专栏崔庆才的专栏

Windows系统上Eclipse配置JSP开发环境

JSP是由Sun Microsystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成HTML、XML或其他格式文档的Web网...

3810
来自专栏比原链

Bytom资产发行与部署合约教程

Gitee地址:https://gitee.com/BytomBlockchain/bytom

1122

扫码关注云+社区

领取腾讯云代金券