比特币网络是中本聪做为一个实验性的网络提出来并运行的。没想到的是这一个实验性质的网络,竟然成了如今虚拟货币世界的龙头老大。这个结局估计是中本聪本人都没有想到过的。java
既然是一个实验性的网络,那么比特币网络中又隐藏着哪些痛点呢?快来看看吧。程序员
比特币网络是基于P2P架构的。在整个比特币网络中可能有成千上万的节点。算法
那么问题来了,这么多节点的网络,还会受到攻击吗?会受到什么类型的攻击呢?spring
下面讲三种攻击方式方式:安全
“自私的矿池”还必须监视其它矿池,预测他们何时发现新的区块。当”诚实的矿池”广播发现一个新块的时候,”自私的矿池”还必须发动一个Sybil Attack(女巫攻击)以抢先让他们偷挖的区块获得网络的认可。区块头固然有时间戳,”自私的矿池”还必须有足够的Sybil节点来报告是”自私的矿池”先发现区块,这样网络会接受报告并奖励”自私的矿池”。网络
若是这个时候网络接收到大量的小额交易,那么那些真正的大额交易就会被阻塞。架构
更多精彩内容且看:分布式
空块的意思就是块中不包含任何交易。spring-boot
那么空块是怎么产生的呢?假如咱们有两个A,B矿池。区块链
A矿池产生块后,把新块传遍全网是须要时间的。
B矿池收到A矿池新块的基本数据后,为充分利用算力,不等新块里的交易数据传完,就开始算下一个块了。
在传输交易数据的期间,B矿池有必定几率算出下一个块,这时候B矿池不知道哪些未确认交易已经被A矿池打包进前一个块,为避免打包了同一个交易,致使交易冲突,块被拒,B矿池就不会打包任何交易。
这就是空块的来历。
若是你们去查看比特币区块链的历史,能够发现(从区块364188到345469)一共18720个区块,其中只有1个交易(即coinbase交易)的有422个。
比特币区块链是全球的、分布式的、有限容量的、代价昂贵的系统。每一笔交易的价值含量是不同的,当块容量不够用时,咱们应该保障高价值的交易进块。高价值的交易有意愿有能力支付足够高的网络手续费,从而得到足够高的优先级进块。
随着比特币的繁荣,交易数量会愈来愈大,有限的块容量会使得低价值的交易(例如发送1分钱)永远没法进块,由于低价值的交易不可能支付高网络手续费。
进而网络退化为清算系统,低价值含量交易被赶出,这些交易由第三方记帐系统进行代替完成。
在闪电网络出现以前,第三方记帐系统主要是链外钱包提供商。用户信任某第三方钱包平台,把比特币存入其中,同一平台用户之间转帐仅带来帐户余额变动,并不会产生比特币交易。
现金系统意味着全部交易均应该进入区块,那么当块容量不够用时,则应该及时提升块体积限制,对系统进行扩容。短期可能发生交易入块堵塞,但长期来看全部交易应该都可以入块。人人都享有比特币系统带来的巨大便利和优点。
为了解决区块链容量的问题,比特币在2017年8月24日引入了隔离见证。
再来回顾一下上图的比特币中区块链中交易的构造。
每一个交易的的input中都包含了一个ScriptSig,这个ScriptSig主要是用来作交易验证的,只对须要验证交易的矿工来讲是有意义,对于普通用户来讲这个ScriptSig是彻底不须要的。
而隔离见证就是把这个ScriptSig剔除到了交易以外。从而扩大了可容纳的交易数量。
同时把ScriptSig剔除到了交易以外还有一个好处就是避免了交易延展性攻击(Transaction Malleability)。
延展性的意思是一个东西变形了,但其本质是不变的。对于交易来讲,ScriptSig中包含的签名,实际上是能够变化的。从而致使整个交易的变化,最后致使Transaction ID的变化。
由于Transaction ID是对整个交易作的一个Hash。
为何签名是能够变化的呢?
由于对某一种签名算法来讲,可能有好几种签名方式,从而多种签名方式都是正确有效的签名。可是最终会致使交易id的变化。
假设有这样一种状况。 小明在火币网发起了一笔提现交易。当这笔交易被广播到网络中,而且尚未被打包到区块中的时候。
小明监听到了这个交易,并对这个交易的签名作了微调,从而生成了一笔新的交易,发送到比特币网络中。
最终比特币网络接收了小明修改过的交易。
可是,这个时候小明能够向火币网投诉没有收到交易。火币网的客服会根据以前的交易id去查询这笔记录,固然是查不到的。最终火币网会赔偿小明一笔费用。因而,小明就攻击成功了。
比特币的区块链大小是一直在增长的,其实不光是比特币,全部的区块链网络都会存在这个问题,由于每一个区块链的节点都须要保存全部的链上信息。
咱们看下区块链的大小,2020年,一个全节点的大小就会超过250G!
对于比特币而言,挖矿自己就是一种投票,本来的构想就是以CPU为单位用算力进行投票来确保系统的安全。可是随着“聪明”的技术人员们将CPU换成GPU,而后到FPGA,再到ASIC矿机,这条路已经和原来的初衷渐行渐远。
任何一个在比特币社区的人都会发现,持有比特币的人和挖矿的人成为彻底不一样的两我的群。比特币的矿工群体仿佛已经和社区彻底割裂开来,许多矿工可能彻底不了解比特币的生态,他们甚至不关心比特币的将来。
因此每一年均可以看到一些奇怪的景象,持有比特币的社区不得不经过谴责和呼吁,要求某些矿池把算力降下来,以避免严重影响比特币的发展。
而这些矿池也会表示本身是基于道德和觉悟来下降本身的份额。任何一个持有比特币的人,难道不对这种景象感到怪异么,比特币的命运居然是掌握在并不必定关心比特币命运的人手上。
这彷佛有点相似于,一个公司的命运并非那些持有公司股份的股东来决定的,而是那些有可能根本不拥有股份,而只要有钱的人来决定的,也就是金融世界中的那些“门口的野蛮人”。那些持有比特币的人彻底没法对比特币的将来作出本身的决定。咱们仿佛从中本聪设定的一CPU一票的文明世界,一会儿沦为纯粹是靠蛮力,看谁力气更大的原始社会。
比特币在发展初期主要是依靠以中本聪为核心的技术团队制定相关技术标准和研发比特币钱包。可是随着中本聪退出比特币界,这方面的任务就逐渐转移到比特币基金会。
比特币基金会是一个负责协调比特币发展的非营利机构。他们除了负责开发比特币钱包以外,还参与推广比特币理念和应用、教育市场以及和政府沟通等事项。因为基金会自己是非营利机构,只能依靠捐款来运做。可是比特币世界上大量的资金都投入到矿机中,而开发者很难从比特币发展中获利。
开发者每每面临一个两难的困境,因为比特币已经在全世界得到必定程度的承认,它的客户端被全球几百万人在使用,可是它的早期核心开发者已经不知所踪,让后续的开发者不敢改动核心代码,只能在外围作一些修补。由于一旦修改核心代码,任何的小问题均可能引发全球比特币网络的瘫痪(这在比特币发展过程当中已经出现过),而没有太多的开发者愿意承担这样的风险。可是若是可以改动成功而且稳定运做,开发者除了得到社区的掌声以外,并不能得到任何实际上的利益。
而且是否使用新版本客户端的决定权在比特币矿工的手上,因此任何对矿工不利的修改都不可能经过,即便比特币基金会也无能为力,因此也致使开发者没有足够的热情去修改。在这种状况下,比特币客户端在发展了多年以后仍是停留在很是原始的状态,不只不适合普通人使用,并且彻底不像一个互联网时代的软件。中本聪本来设想的社区众多开发者不断修改系统,出现像Linux同样,经过社区协力来推进系统顺应时代发展的状况并无出现。
那么对于区块扩容的问题,其实如今已经有了两个比较好的解决办法。
第一个就是闪电网络:
闪电网络能够看作是一个临时记帐系统,好比说A和B直接有不少的交易,那么他们能够先在区块链中构建一个通道。
后面全部的交易都在这个通道中进行(能够经过智能合约的形式),只有通道关闭的时候,二者的交易才会正式更新到比特币网络中。
这样就为A和B节约了很多的交易费用。
还有一个叫作侧链技术
侧链技术其实是在比特币网络以外又构建了一个链。比特币网络只作清算使用。
固然,为了解决比特币的问题,第二代甚至是第三代区块链技术平台都出现了。感兴趣的朋友能够继续关注我后续的更新。
本文介绍了区块链网络中的困境和一些解决办法,但愿你们可以喜欢。
本文做者:flydean程序那些事本文连接:http://www.flydean.com/bitcoin-in-trouble/
本文来源:flydean的博客
欢迎关注个人公众号:程序那些事,更多精彩等着您!