区块链扩容方案之Gas值限制
区块链扩容一直是区块链团队的重点研究方向。因为比特币对区块大小的设定是固定的,而且中本聪将最初大小值限定为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值限制的更多相关文章
- 正本清源区块链——Caoz
正本清源区块链 说明:以下内容整理自Caoz的<正本清源区块链>,如有不妥,请联系我修改或删除. 简介 不讨论炒币!不讨论炒币!不讨论炒币! 本课程内容分为两部分: 第一部分,烧脑篇,介绍 ...
- 用JavaScript写一个区块链
几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数人懂得隐藏在它们背后的技术.在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的.我将会称之 ...
- ZT-----用javascrip写一个区块链
几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数人懂得隐藏在它们背后的技术.在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的.我将会称之 ...
- 信息摘要算法之七:SHA在区块链中的应用
最近几年比特币的火爆带动了人们对区块链技术的研究.当然我们在这里并不讨论区块链技术本身,而是讨论一下区块链中的SHA算法的应用.对于SHA系列算法我们已经在前面作了说明,在这里也不再重复. 1.区块链 ...
- 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识
给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...
- NGK公链如何构建区块链数字经济商业帝国?
2020年对于区块链市场来说,重大的利好消息莫过于NGK公链的上线了.NGK公链其广泛的市场前景.顶尖的技术,一直备受众多大型机构以及投资者所看好.同时,NGK公链也不负众望,在上线以后,就开始落地到 ...
- 区块链公链分片技术(sharding)方案,配思维导图
区块链公链分片技术(sharding)方案,配思维导图 分片技术(sharding)方案 以太坊分片思路 其基本思想是,将网络中的节点分成不同的碎片,各分片可以并行处理不同交易,这样可以并行处理相互之 ...
- 破除区块链支付壁垒,NGK支付架构方案浮出水面
什么叫做区块链支付?区块链支付系统与传统支付系统有哪些不同?简要地说,原来传统的支付系统是有一个类似于银行的中间平台存在的,用户们的支付交易第一时间是寄存在平台,由平台核实验证交易行为之后,方才放行交 ...
- Datahero inc:区块链方案如何在现有食品溯源系统里实现落地?
在食品行业,区块链溯源平台的应用,主要是指围绕"从农田到餐桌"的安全管理理念,综合运用区块链技术.大数据技术和二维码技术等前沿技术,具有产品生产企业管理. 产品生产档案 (农药/防 ...
随机推荐
- ZooKeeper 分布式协调服务介绍
0. 说明 从自己的独立博客迁移,该部分为 Zookeeper分布式协调服务介绍 原文链接 ZooKeeper 指南 1. ZooKeeper 简介 [官方介绍] ZooKeeper 是一种集中式服 ...
- elasticsearch安装步骤
今天我们来安装一下elasticsearch,我们采用RPM包安装的方式来,版本为6.5.4.系统为centos7.5版本. 1.首先设置系统环境 1)编辑/etc/sysctl.conf文件添加下面 ...
- String、StringBuffer与StringBuilder的区别-陈远波
String Stringbuffer StringBuilder的区别: 1.string是字符串常量,且长度是不可改变的,Stringbuffer.stringBuilder是字符串变量 2.S ...
- Markdown基本语法规范
1. 标题 #的个数即表示Hn, 一下依次从h1~h6. 也可在句尾添加同样个数的#(也可忽略) # This is H1 ## This is H2 ### This is H3 #### Thi ...
- MP实战系列(十六)之性能分析插件
性能分析拦截器,用于输出每条 SQL 语句及其执行时间. 虽然使用阿里的Druid连接池可以完成这个目的,但是,我们一般认为,目前的组件能够达到这个目的,尽量使用目前的组件,因为修改配置和引入第三方库 ...
- 多线程之CAS
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2 ...
- Android 给TextView中的字体加上“中间线”
大家都知道在做购物App或者购物网站的时候,商品价格往往会有一个“现价”和“原价”而原价往往会在中间加上一个黑色的横线.便于醒目客户,但是这种效果在App中应该怎样做呢? 废话不多少,直接给大家看代码 ...
- AI1.1-人工智能史
来自:http://zh.wikipedia.org/wiki/人工智能史#CITEREFBerlinski2000 这篇是来自维基百科上面的人工智能史,将其大部分保留(真的是大部分,所以差不多没有原 ...
- Debian 鼠标左右手
环境:debian testing;xfce4桌面 在debian中想把鼠标改为左手操作,在设置中调整鼠标的按钮为左撇子根本没用!网上搜索后发现事实很简单,简单到不知该怎么说. 废话少说,放码过来. ...
- 前后台分离式开发(swagger)
一.前后台分离开发(swagger) 1.安装maven 配置的maven环境变量 M2_HOME/MAVEN_HOME Path %M2_HOME%/bin 打开运行窗口:输入mvn -v,查看是否 ...