区块链扩容一直是区块链团队的重点研究方向。因为比特币对区块大小的设定是固定的,而且中本聪将最初大小值限定为1M,但随着交易量的增加,网络拥堵情况也愈渐严重,最终也导致了比特币的分叉。

区别于比特币固定区块大小的设定,以太坊则引入了燃料(gas)的概念,并采取了区块燃料限制(Block Gas Limit)动态调整机制,即根据交易量大小来调节Block Gas Limit。通常我们以TPS来衡量区块链的交易处理能力, Block Gas Limit值越大则意味着允许区块打包的交易量也就越多,也就是说网络拥有越高的TPS。所以,以太坊的扩容方案之一就是提高Gas值限制,以此来缓解网络拥堵的情况。

Gas Limit动态调整机制

以太坊主要通过矿工投票机制来决定目标燃料限制(TGL,Target Gas Limit),同时不能小于最小燃料限制(MGL,Min Gas Limit)。而其动态调整机制主要是在区块gas使用量超过父区块Block Gas Limit的2/3时,全网对当前区块的Block Gas Limit进行适当提升,但不允许超过TGL。

然而,通过提升Block Gas Limit的扩容方案在实现上也有弊端。若Block Gas Limit无上限,那么区块在进行广播的时候必定会有时延问题。越高的TGL也就意味着Block Gas Limit值越大,被允许打包到区块之中的交易越多,消耗的gas也就越多,其同步到整个区块链网络所需的时间也就越长,那么该区块也很有可能因为时延问题而竞争失败,最终被抛弃而成为叔块(Uncle Block)。根据Vitalik Buterin的脚本实验分析,被打包的区块每增加1,000,000 gas价值的交易,其变为叔块的概率就会增加约1.86%。一方面,因为数块只能获得75%的区块奖励,所以矿工因为利益问题也不愿意选择提升TGL。另一方面,在提升TGL的同时也需要面临算力中心化的问题。就目前来说,尚未找到合适的数学算法来对TGL进行设定,其决定权依然归属于矿工,所以区块燃料限制动态调整机制仍需完善。

Gas相关的计算

Gas主要用来支付交易的手续费,其计算也相对简单。当我们在进行交易时,gas的最大消耗限制需要由交易者自行设置,即gas limit。那么我们可以得到交易的最大gas费用计算公式,如下所示

其中,表示允许消耗的gas最大值,表示单位gas的价值,两者相乘即为最大的交易手续费。举例来说,Gas Limit=50,000,Gas Price=20Gwei,那么所需最高手续费(以最大消耗量来算)为0.001ETH。其中

然而在整个交易执行过程中,还可能涉及其他费用,如合约创建费用等。那么实际消耗的gas计算公式,如下所示

其中,Predifined Gas Fee表示执行交易预定费用,Storage Fee表示随交易发送的数据的gas费用(零字节和非零字节会根据对应的设定值消耗一定的gas量),Contract Creation表示合约创建交易还需额外的费用。

那么,交易完成后剩余的gas即为交易最大gas费用减去使用的Intrinsic Gas

其中,Gas Limit≧Intrinsic Gas,待交易执行完毕,剩余的gas也会退还给交易者。

在费用估算上,对交易者而言,前期gas费用可以取最大gas费用与传送总值的总和。

其中,Upfront Cost表示交易执行的前期费用,Gas Limit表示gas消耗的最大量,Gas Price表示gas单价,Value表示发送方传送给接收方的总值。

对于以太坊网络来说,“网络又堵了”常常被拿出来讨论。从2017年的加密猫堵死网络事件到近期的交易所刷单大拥堵事件,或者是面对黑客的DDOS攻击,以太坊也尝试通过调整Gas值限制来解决网络堵塞问题,虽然可以见到暂时性的成效,但问题并没有完全解决,仍需通过其他扩容方案来优化网络性能,从而有效解决网络大拥堵问题。

区块链扩容方案之Gas值限制的更多相关文章

  1. 正本清源区块链——Caoz

    正本清源区块链 说明:以下内容整理自Caoz的<正本清源区块链>,如有不妥,请联系我修改或删除. 简介 不讨论炒币!不讨论炒币!不讨论炒币! 本课程内容分为两部分: 第一部分,烧脑篇,介绍 ...

  2. 用JavaScript写一个区块链

    几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数人懂得隐藏在它们背后的技术.在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的.我将会称之 ...

  3. ZT-----用javascrip写一个区块链

    几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数人懂得隐藏在它们背后的技术.在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的.我将会称之 ...

  4. 信息摘要算法之七:SHA在区块链中的应用

    最近几年比特币的火爆带动了人们对区块链技术的研究.当然我们在这里并不讨论区块链技术本身,而是讨论一下区块链中的SHA算法的应用.对于SHA系列算法我们已经在前面作了说明,在这里也不再重复. 1.区块链 ...

  5. 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识

    给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...

  6. NGK公链如何构建区块链数字经济商业帝国?

    2020年对于区块链市场来说,重大的利好消息莫过于NGK公链的上线了.NGK公链其广泛的市场前景.顶尖的技术,一直备受众多大型机构以及投资者所看好.同时,NGK公链也不负众望,在上线以后,就开始落地到 ...

  7. 区块链公链分片技术(sharding)方案,配思维导图

    区块链公链分片技术(sharding)方案,配思维导图 分片技术(sharding)方案 以太坊分片思路 其基本思想是,将网络中的节点分成不同的碎片,各分片可以并行处理不同交易,这样可以并行处理相互之 ...

  8. 破除区块链支付壁垒,NGK支付架构方案浮出水面

    什么叫做区块链支付?区块链支付系统与传统支付系统有哪些不同?简要地说,原来传统的支付系统是有一个类似于银行的中间平台存在的,用户们的支付交易第一时间是寄存在平台,由平台核实验证交易行为之后,方才放行交 ...

  9. Datahero inc:区块链方案如何在现有食品溯源系统里实现落地?

    在食品行业,区块链溯源平台的应用,主要是指围绕"从农田到餐桌"的安全管理理念,综合运用区块链技术.大数据技术和二维码技术等前沿技术,具有产品生产企业管理. 产品生产档案 (农药/防 ...

随机推荐

  1. js fetch处理异步请求

    以往一直认为异步请求只能使用原生js的XMLHttpRequest或jQuery的$.ajax().$.post()等框架封装的异步请求方法 原来js还提供fetch来替代XMLHttpRequest ...

  2. sysbench压力测试工具安装及使用

    使用sysbench指定连接的时候不需要写上mysql-socket参数 如果自己使用sysbench来测试mysql性能的话,建议使用源码编译比较好,版本为0.4版本. 步骤是: .yum inst ...

  3. vuejs安装篇

    1.安装nodejs,自带npm环境. 地址:https://nodejs.org/en/download/,Node.js 历史版本下载地址:https://nodejs.org/dist/  可自 ...

  4. UltraISO制作使用(服务器装机u盘制作)

    1.准备工作: 1)U盘一个,需要格式化(大于4G,毕竟ISO文件就已经大于4G了) 2)CentOS7.1 iso文件一个(去这里下载:http://www.centoscn.com/) 3)Ult ...

  5. C 语言之预处理 ---------文件包括

    文件包括是C预处理程序的还有一个重要功能. 文件包括命令行的一般形式为: #include"文件名称" 在前面我们已多次用此命令包括过库函数的头文件. 比如: #include&q ...

  6. JMX RMI 攻击利用

    攻击者通过构造恶意的MBean,调用 getMBeansFromURL 从远程服务器获取 MBean,通过MLet标签提供恶意的MBean对象下载. 前提条件: 允许远程访问,没有开启认证 (com. ...

  7. 静态性能测试-hc课堂笔记

    UI自动化,需要掌握html相关知识 w3c网站. 会了性能测试就会了接口自动化. 静态扫描:降低40-50% findbugs,隐含的bug checkstyle,风格规范 域名解析: 输入网址-D ...

  8. PAT B1025 反转链表 (25 分)

    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该 ...

  9. kubernetes 生命周期问题分析

    1.Failed  -- pod里至少一个容器以非0code退出,说明应用有问题,需要debug应用容器 2.pending -- 说明API对象已经被创建和保存在etcd数据库里,但是创建过程出了问 ...

  10. 【H5】直接拨打电话

    一般<a href="tel:400-663-5999">400-663-5999</a>实现. 而形如<a href="tel:*9204 ...