二维码

5.1 比特币区块扩容 - 数据结构 - 机器学习

1319 人阅读 | 时间:2021年01月15日 01:05
5.1 比特币区块扩容 - 数据结构 - 机器学习 #daohang ul li t,.reed .riqi,a.shangg,a.xiatt,a.shangg:hover,a.xiatt:hover,a.shang,a.xiat,a.shang:hover,a.xiat:hover,.reed-pinglun-anniu,span.now-page,#daohangs-around,#caidan-tubiao,#daohangs,#daohangs li,#btnPost{background-color:#D10B04;} .dinglanyou1 h3{border-bottom:3px solid #D10B04;} #dibuer{border-top:2px solid #D10B04;}.cebianlan .rongqi h3{border-bottom:1px solid #D10B04;} #edtSearch{border:1px solid #D10B04;} #daohang .zuo ul li{border-right:1px solid #;} #daohang ul li t a{border-top:1px solid #;border-right:1px solid #D10B04;} #daohang ul li t a:hover{border-right:1px solid #;} #daohang .you ul li a:hover,#daohang .zuo ul li a:hover,.reed-pinglun-anniu:hover{background-color:#;} a:hover,.reed h6 a:hover,#dibuer a:hover,.reed .riqiding,.cebianlan .rongqi li a:hover,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.shu a,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.huifuliuyan a:hover,.reed-biaoti h6 span{color:#D10B04;} .reed .kan a{color:#0A0AF5;}.reed .kan a:hover{color:#D10101;} @media screen and (max-width:1492px){a.shang,a.xiat{background:none;} a.xiat:hover,a.shang:hover{background-color:#f9f9f9;background-image:none;text-decoration:none;}} var _hmt = _hmt || [];(function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?2d748c9763cfc72fb7d1ccab29f0770d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f6d451f3f1be23f3abf240c64c469c1b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();

当前位置:首页 » 区块链精品文章 » 正文

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646201", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646162", container: s }); })();

5.1 比特币区块扩容

1145 人参与  2018年08月25日 17:17  分类 : 区块链精品文章  评论

首先我们要解释什么是比特币的扩容问题,为什么比特币要扩容。比特币的扩容问题来自一个很直接的现实,那就是保存在比 特币区块链上的数据块的物理大小限制是1MB。任何大于1MB的区块都会被比特币网络当作攻击而被拒绝接受,这是当初由中本聪对比特币核心的设计决定的, 逻辑规则都写在了源码中。

大家都知道比特币其实就是一个分布式的公共记账(数据库)系统。也就是说,比特币本质其实是拿来记账用的,当然大部分情况是对比特币这个数字货币记账。

由比特币底层技术发展起来的区块链技术也是对各种承载价值以及数据状态进行记账。比特币的数据包含交易数据及其对 应的货币台账,我们简单想一想,最主要的问题来自大家在日常交易转账的时候,需要不断地把交易数据发送到网络中的节点,经过矿工打包成区块后广播给其他节 点,每个节点验证通过后独立的加入自己本地的区块链账本数据库中。随着时间的推移以及比特币生态系统的扩张发展与深入应用,用户数越来越广泛,交易次数也 越来越多,网络中等待确认的交易则排起了长长的队伍,这时我们就会遇到单个区块的容量限制问题了。

而现在这样的容量限制问题已经发生,比特币网络已经由于交易缓慢而变得拥挤不堪。由于区块大小1MB的限制,单个 区块只能容纳很有限的交易事务,在一个区块的结构中,区块头也就是区块的摘要信息字段占据了80个字节,每条交易事务平均在200字节左右,往多了算,假 设区块中的交易都是一对一的简单交易,单个区块能够容纳的交易数也就8000左右,而实际上根据目前的使用统计,单个区块容纳的交易数才1700多,就这 还得要等上间隔10分钟的打包确认,因此算下来,交易速度最高大概1秒钟只能处理3笔交易。[1][2]要知道已经被市场所广泛熟悉与习惯的支付手段(像VISA、Master卡等信用卡银行卡)交易处理速度每秒钟高达几千笔交易。

由于这个区块大小的限制,很多用户为了能够尽快让网络确认自己的交易,不得不增加交易手续费(比特币中矿工节点会 按照手续费高低进行优先级处理)。大量交易费用的增加以及交易处理严重延迟等问题,已经成了比特币的性能瓶颈,大大限制了比特币的应用和发展。为了比特币 的未来着想,很多人建议增加比特币区块数据的大小。原因很简单,因为大部分商家和最终用户不会使用一个需要等待好几个小时才能确认一笔交易的系统。理论上 来讲,增加比特币区块的大小会允许更多的交易数据可以放到一个数据块中,使得更多的人使用比特币的时候网络运行更顺畅。

为此,比特币网络实际控制者以及各路专家等组成的比特币社区提出了很多对比特币扩容的方案。2015年,比特币扩 容改进方案BIP100(BIP=Bitcoin Imprevement Proposal)和BIP101先后被提出,也开启了比特币扩容的解决方案在比特币社区激烈的冲突和争论。

2017年7月21日,真正的扩容行动开始,全球比特币矿工开始锁定一个扩容软件升级。这次升级是基于比特币改进 建议BIP91提出的“隔离见证”(Segregated Witness=SegWit)的方案,并计划在2017年11月份将比特币区块大小从1MB提升到2MB[3]。

大家在这里可能会产生一些疑惑,怎么又是区块扩容又是“隔离见证”,这里面都是些什么关系呢?我们来解释一下,首 先所谓的区块扩容主要是要增加区块中容纳交易事务的区块体的空间大小,这个地方可谓是寸土寸金,现在不够住了,怎么办呢?相信大家根据生活经验也能给出两 个一般性的做法:

1)增加区块空间的大小,宽敞又明亮;

2)缩小交易数据的尺寸,节能又环保。

第一种方案显然是最符合人们一般性思维的,这也是社区中坚持区块直接扩容一派的思想,那么第二种的缩小交易数据尺寸是什么意思,这里需要解释一个概念,那就是“隔离见证”,我们来简要说明一下。

“隔离见证”,英文是Segregated Witness,我们知道在比特币的交易数据结构中,是通过发起者签署自己的UTXO(未花费交易输出),然后填上接收者的地址而建立起来的,过程类似于 签署支票,一张支票就相当于一条比特币的交易事务,签署UTXO就相当于支票签名,也就是所谓的“见证”,这是用来确认支票合法性的。我们知道,支票上的 关键内容无非就是签名和接收方以及支付金额,那么如何来确定这张支票数据的唯一性或者说完整性呢?在比特币中会对每一条交易事务数据进行一次哈希计算,得 到一个事务ID,在计算这个事务ID的过程中,都有哪些数据参与了计算呢?答案是整条交易事务,包括那个签名。那么这里就有可以探讨的余地了,一切就围绕 这个签名来展开讨论,我们从比特币的交易历史数据中随便截取某笔交易的签名信息来看一下:


"scriptSig": {
   "asm": "3044022065c13d7cf6557af8ad45dbfd2b0847950e0f11e3c0eb2468ca9a8ad612e21d5b022064bea5eb078b7c89aad63730dbde1e8dd7dbaa0614b2c0809fa1baedf66eac21[ALL] 036b07144610d46dbe4bdcc2ff3ecd68627e645027aac62cc5e9147a6575f7cb55",  
   "hex": "473044022065c13d7cf6557af8ad45dbfd2b0847950e0f11e3c0eb2468ca9a8ad612e21d5b022064bea5eb078b7c89aad63730dbde1e8dd7dbaa0614b2c0809fa1baedf66eac210121036b07144610d46dbe4bdcc2ff3ecd68627e645027aac62cc5e9147a6575f7cb55"

}


可以看到这个签名信息占据的空间还是不少的,如果能够把这块签名信息从交易事务中隔离开,存储在另外一边,那就能 省出一块空间来容纳更多的交易数据。这些签名信息的主要作用就是见证交易数据的来源合法性,而实际上见证的过程只需要进行一次就行了,矿工负责见证交易数 据是否得到了合法的授权,其他普通的节点只关心接收的结果,见证过后这些签名数据实际上没多大用处,节点在接收时可以丢弃这部分数据。这种将见证信息与交 易数据隔离开的设想也就是“隔离见证”的意思。实际上“隔离见证”还在一定程度上能解决一个叫“交易延展性”的问题。

如上所述,交易事务ID在计算时将计算整条含签名的交易数据,而这个签名是可以被更改掉的,因为签名有很多种写 法,攻击者无法修改交易事务中的输入和输出,但是却能重新修改签名,从而导致交易事务ID的计算值发生变化,一旦被攻击者更改,虽然不能被窃取比特币,但 是却有可能导致交易不被网络确认(网络中会同时存在没有被修改过和被修改过的交易事务,这会导致冲突),而隔离开签名信息后,交易事务一旦发起将会完全固 化。由于“隔离见证”的这些特点,因此这种方案也有不少人支持。

至此,比特币的扩容方案就有了如下的选择:

1)进行“隔离见证”并扩容区块;

2)仅进行隔离见证,区块容量保持不变;

3)仅扩容区块,不进行隔离见证。

这些方案各有不同的社区成员支持,这些成员主要包括比特币核心客户端维护团队、各大矿池以及比较有影响力的开发团 队和广大的社区用户,对于到底选择何种方案,各方进行了旷日持久的争论。我们不去细究这里面潜在的各方利益问题,单就技术角度而言,有一个问题是确定的, 那就是无论选择何种方案,都避免不了会产生比特币主链的分叉,“隔离见证”或者扩容,都需要修改现有的比特币源代码。这对于传统软件来说是分分钟的事,无 论怎么升级,只要保持兼容原有的数据格式就行了,可是对于比特币这种区块链应用程序,首先它是分布式的,谁也没有能力强制大家共同升级到一个新版,那就势 必会导致一旦新版本发布后,网络中会同时存在老版本和旧版本的节点,而对于矿工或者说矿池而言,也会选择不同的支持方案,那么网络中新打包出来的区块有些 是旧版本格式的,有些是新版本格式的,彼此之间无论如何也很难做到完全一致,这样就会导致原先单一的主链由于后续产生了不同格式的区块而分叉出两条链,甚 至多条链,非但如此,当某一方的挖矿算力明显占据优势的时候,相对弱的那一方产生的区块链甚至会因为得不到大多数的节点背书而沦为孤儿链,这会使得原本牢 固的去中心化区块链共识网络变得脆弱,这不是我们所愿意见到的。当然,从长远来看,如果解决一个问题不得不付出一些代价,分叉也并非完全不能接受,只是这 个过程如何过渡好需要仔细衡量。

我们来看一下这些年为了比特币区块扩容发生的那些事。

·2015-Bitcoin XT(比特币扩展),2015年提出通过增加数据块的大小限制来提高交易处理效率,最早建议数据块大小是8MB,然后数据块大小根据交易数据情况自动增长,每两年大小翻一倍等,但是事后这个建议没有得到足够的支持而最后未被接受。

·2016-Bitcoin Classic(比特币经典),2016年也提出通过增加数据块的大小限制来提高交易处理效率,但是没有Bitcoin XT那么激进,最早提出区块大小从1MB扩容到2MB,然后在后期决定把区块大小上限交给矿池和交易节点来决定,不过并没有得到比特币核心开发团队的支 持。

·2016-香港共识,2016年2月21日,在香港数码港,由比特币业界代表和开发社区代表参与的圆桌会议达成了扩容共识:软件激活由比特币核心开发人员执行在2015年12月提出的隔离见证,并将区块大小限制扩充到2MB;很遗憾,此次共识达成的两个行动都逾期了。

·2016-Bitcoin Unlimited(BU-比特币无极限),在Bitcoin XT和Bitcoin Classic扩容方案夭折之后,Bitcoin Unlimited提出增加区块大小的方案是完全取消区块大小限制,让用户通过查看大多数共识区块的大小决定并自行设置自己区块的大小。这个方案得到了不 少矿池的支持。2017年1月发布1.0.0版本得到了包括Antpool、bitcoin.com、BTC.TOP、GBMiners和ViaBTC等 矿池的支持。至2017年3月,全球大概由11%的节点运行BU升级版。但是,比特币的扩容并不是简简单单地将区块大小限制取消就万事大吉,扩容涉及很多 方面的技术细节并需要大量的测试。果然,2017年1月19日BU发现重大漏洞,由bitcoin.com矿池打包出第450529无效区块,1月31日 打补丁,2017年3月14日,BU全节点遭到攻击,BU节点数量大量宕机,然后代码漏洞一个接一个,2017年4月24日,70%的BU节点因为内存泄 露而出现系统崩溃[4]。

·2017- BIP148,一个通过用户激活的软分叉比特币扩容方案被提出。BIP148打算绕过矿工和矿池的支持,在2017年8月1号启动一个用户欢迎程度来激活 (UASF)的比特币扩容软件升级方案,该方案建议2017年8月1号起,激活比特币的隔离见证(SegWit)功能。

·2017- 纽约共识(SegWit2x),2017年5月,“数字货币集团”公布一个扩容方案,也就是SegWit2x,即著名的“纽约共识”:先在获得80%的比 特币算力支持基础上首先激活隔离见证方案,并在6个月后获得80%比特币算力支持的时候激活将区块大小从1MB扩展到2MB的升级。时至2017年7月中 旬,矿工和矿池基本一致同意在2017年8月1号前实施激活隔离见证(Segwit2x)方案[5]。

·2017-Bitcoin Cash(BCC),BCC是2017年8月1日比特币硬分叉产生的一个新的比特币区块链变种。当比特币矿池和交易所ViaBTC为了对抗隔离见证(SegWit),挖出第478559区块,正式宣告比特币历史上的第一次硬分叉[6]。 比特币硬分叉后产生两个新的币种:比特币(BTC)和比特币现金(BitCoin Cash,以下简称BCC),硬分叉前的比特币所有者会自动分配同时拥有分叉后的比特币(BCC)和比特币现金(BCC)。BCC的区块大小从1MB扩容 到8MB,而不引入隔离见证。在2017年8月1日午夜之后,BCC的市场市值达到继比特币和以太坊之后的第三大市值,随后越来越多的交易所也慢慢开始支 持BCC[7]。

可以看到,为了一个区块扩容竟然产生了这么多的讨论和争议,一个初看起来似乎很简单的问题却包含了各种技术考量, 不过就在比特币社区在方案上悬而未决的时候,比特币的兄弟莱特币在2017年5月却率先完成了隔离见证,莱特币是通过对比特币源码的简单修改而来的,因此 在血统上很接近比特币,莱特币成功实行隔离见证激活的经验也给比特币社区做了一个示范和参考,就技术方案而言,莱特币具体是通过一个叫“用户激活软分叉” 的方案来进行的,我们来了解一下。

用户激活软分叉(User-Activated Soft Folk,UASF)是一个很有意思,也备受争议的软分叉升级模式。主要是为了避开掌握着大量算力的矿工和矿池的反对,而将支持升级的决定权交给矿工和矿 池之外的所有节点和用户。这样就使得区块链核心研发团队可以避免等待掌握大量算力的矿池节点的支持。将软件升级支持设置在运行全节点的交易所、钱包,还有 莱特币使用者手中。因为只要是区块链全节点(full node),都具有校验区块和交易数据合法性的功能。当交易所征集到大部分用户的签名和支持后,新的升级版软件才会被事先已经安装的软件激活。这样所有支 持软分叉的交易所和用户都会安装新版规则和共识的软件,从而成功实现大多数人支持的软分叉。

不过这样聪明的软分叉方式有一个问题,就是开发成本太高,软件更新周期太长,没有在掌握算力的矿池那里直接升级来 得高效、直接、快速。当然,这种明目张胆绕开掌握大量算力的矿池的做法也会引起不可预见的后果,那就是其矿池节点也可以自行选择修改规则发布自己的升级版 软件而强制区块链硬分叉。

我们可以看到,对于区块链这种新型的网络软件结构,有其明显的优势,但是也有明显的问题所在,就区块扩容这个问题 而言是具有代表性的,比特币、莱特币、以太坊等其实都会有这样的问题,区块容量爆炸一直都是这个领域的难点问题,尤其是对于使用广泛的区块链系统,这个问 题的严重程度尤甚。以太坊相对比特币、莱特币等支持了更复杂的智能合约,并且使用广泛,问题也就更多,目前以太坊社区提出的解决方案有提高Gas限制以及 分片,提高Gas限制相当于提高用户的使用成本,与其说这是一种技术方案,不如说是一种经济制裁方案,分片的意思是将区块数据按照某种分类存储在不同的节 点上,而不像现在所有的节点都保存同样的副本数据,不过这种方案的争议也是很大的,可靠性和安全性都有待验证。说到这里,有读者可能会提出,既然靠单个链 内很难完善地解决这个问题,那有没有可能将某些交易事务移出去呢?答案是可行,链内方案的地雷太多,那么看看链外的方案如何,接下来介绍的侧链、闪电网络 以及多链就是这种思路。

[1] Mike Orcutt (19 May 2015). “Leaderless Bitcoin Struggles to Make Its Most Crucial Decision”. MIT Technology Review. Retrieved 15 November 2016.

[2] http://money.cnn.com/2017/08/01/technology/business/bitcoin-cash-new-currency/index.html.

[3] Hertig, Alyssa (July 21, 2017). “BIP 91 Locks In: What This Means for Bitcoin and Why It’s Not Scaled Yet”.

[4] Quentson, Andrew (24 April 2017). “Bitcoin Unlimited Nodes Crash Due to Memory Leaks”. Cryptocoinsnews.Retrieved 15 March 2017.

[5] CNBC (July 14, 2017). “Dispute could mean fi nancial panic in bitcoin”. Associated Press.

[6] Coleman, Lester (July 25, 2017). “Bitmain Clarifi es Its‘ Bitcoin Cash’ Fork Position”. CryptoCoinsNews.

[7] CNorrie, Adam (July 29, 2017). “Bitcoin Cash: Another Fork in the Road for Bitcoin”. CryptoCoinsNews.

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=88

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdPic":"","bdStyle":"0","bdSize":"16"},"share":{},"image":{"viewList":["qzone","tsina","tqq","renren","weixin"],"viewText":"分享到:","viewSize":"16"},"selectShare":{"bdContainerClass":null,"bdSelectMiniList":["qzone","tsina","tqq","renren","weixin"]}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
区块链是什么  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646186", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646175", container: s }); })();
搜索

网站分类

标签列表

最近发表

    (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!

jQuery(document).ready(function($){ /* prepend menu icon */ $('#daohangs-around').prepend('
'); /* toggle nav */ $("#caidan-tubiao").on("click", function(){ $("#daohangs").slideToggle(); $(this).toggleClass("active"); }); });

©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×