比特币网络是由中本聪提出并运营的一个实验性网络。没想到,这个实验网居然成了虚拟货币世界的老大。这个结果估计是中本聪自己都没有想到的。
既然是实验网络,那么比特币网络隐藏了哪些痛点?过来看一看。
攻击比特币网络比特币网络基于P2P架构。整个比特币网络可能有上千个节点。
那么问题来了,这么多节点的网络还会被攻击吗?会是什么样的攻击?
这里有三种攻击方式:
共识攻击(51%攻击):如果一个人的挖掘计算能力超过全网计算能力的51%,就可以随意决定虚拟货币网络区块的内容,比如取消交易或者进行虚拟交易等。这意味着整个虚拟货币网络将会崩溃,虚拟货币的所有资产都将掌握在这个掌握着51%计算能力的人手中。自私挖掘攻击:所谓自私挖掘,是指当一个“自私挖掘池”挖掘出一个新的块时,他们会私下保存它,直到它不得不提交给网络节点。这个理论的基础是“自私矿池”保持区块的私密性,让剩下的网络计算能力浪费资源去挖,这样“自私矿池”就可以在挖下一个区块的时候占得先机。“自私的矿池”还必须监控其他矿池,并预测它们何时会发现新区块。当“诚实矿池”的广播发现一个新的区块时,“自私矿池”也必须发起Sybil攻击(女巫攻击),以使他们窃取的区块首先被网络识别。当然,报头是有时间戳的,“自私矿池”也必须有足够多的Sybil节点来报告“自私矿池”先发现阻塞,网络才会接受报告,对“自私矿池”进行奖励。拒绝服务攻击:发送大量小额交易,阻塞网络。要知道比特币网络的处理能力是非常非常弱的。每10分钟出一个块,块的大小是1M(当然现在有隔离见证好像容量提高了)。块的大小是有限的,这最终导致块中的事务有限。从而限制了比特币网络的交易处理速度。如果此时网络接收到大量的小事务,那些真正的大事务就会被阻塞。空块问题空块意味着该块不包含任何事务。
那么空块是怎么产生的呢?假设我们有两个A和B矿池。
在矿池生产区块后,将新区块分散到整个网络需要时间。
B矿在收到A矿新区块的基础数据后,在新区块的交易数据传输之前,就开始计算下一个区块,以充分利用计算能力。
在事务数据传输期间,池B有一定概率计算下一个块。此时,池B不知道哪些未确认的交易已经被池a打包到前面的块中,为了避免打包相同的交易,导致交易冲突和块拒绝,池B不会打包任何交易。
这就是空块的由来。
如果你看一下比特币区块链的历史,可以发现有18720个区块(从区块364188到区块345469),其中只有一个交易(即coinbase交易)有422个。
比特币区块链,一个问题清算系统,是一个全球性的、分布式的、容量有限且昂贵的系统。每笔交易的价值内容都不一样。当block容量不够时,要保证高价值交易进入block。高价值交易有意愿也有能力支付足够高的网费,从而获得足够高的优先权。
随着比特币的繁荣,交易数量会越来越大,而有限的区块容量会让低价值交易(比如发1分钱)永远进不了区块,因为低价值交易是不可能支付高额网费的。
然后网络退化为清算系统,低值交易被驱逐出去,这些交易反而由第三方记账系统完成。
在闪电网出现之前,第三方记账系统主要是一个链外钱包提供商。用户信任第三方钱包平台,将比特币存入其中。同一平台用户之间的转账只带来账户余额的变化,不产生比特币交易。
现金系统现金系统是指所有的交易都要进入block,所以当block容量不足时,要及时增加block的容量限制,对系统进行扩容。可能会出现短期事务阻塞,但从长期来看,所有事务都应该能够阻塞。每个人都享受着比特币系统带来的巨大便利和优势。
为解决区块链容量问题,比特币于2017年8月24日推出隔离见证。
什么是隔离见证?
让我们回顾一下上图中比特币在区块链的交易结构。
每个事务的输入都包含一个ScriptSig,主要用于事务验证。只对需要验证交易的矿工有意义,对普通用户完全没有必要。
并且隔离见证将从事务中排除这个ScriptSig。从而扩大了可以容纳的交易数量。
同时,将ScriptSig排除在事务之外的好处是避免了事务的可延展性。
什么是可扩展攻击?扩展性是指某个东西变形了,但本质不变。对于事务,ScriptSig中包含的签名实际上是可以更改的。从而导致整个交易的改变,并最终导致交易ID的改变。
因为事务ID是整个事务的散列。
为什么签名是可变的?
因为对于某个签名算法,可能有几种签名方法,而且都是正确有效的签名。但最终会导致交易id的改变。
假设有这样的情况。小明在火币上发起提现交易。com。当这个交易被广播到网络并且还没有被打包到块中时。
小明对这笔交易进行了监控,并对这笔交易的签名进行了微调,从而生成了一笔新的交易,并发送到比特币网络。
最后,比特币网收到了小明修改后的交易。
然而,在这个时候,小明可以向Huobi.com抱怨,他没有收到交易。Firecoin.com的客服会根据之前的交易id来查询这个记录,当然是没有的。最后,Firecoin.com会补偿小明一笔费用。所以小明的攻击成功了。
区块链扩张问题比特币的区块链规模一直在增加。事实上,这个问题存在于所有的区块链网络中,而不仅仅是比特币,因为每个区块链节点都需要存储链上的所有信息。
让我们看看区块链的大小。2020年,一个完整节点的大小将超过250G!
反对社群对于比特币来说,挖矿本身就是一种投票。最初的想法是以CPU为单位用计算能力投票,保证系统的安全性。但随着“聪明”的技术人员把CPU换成GPU,再换成FPGA,再换成ASIC矿机,这条路已经与初衷渐行渐远。
任何一个比特币社区的人都会发现,持有比特币的人和挖矿的人变成了完全不同的一群人。比特币矿工似乎已经完全脱离了社区。很多矿工可能根本不知道比特币的生态,甚至不关心比特币的未来。
所以每年我们都能看到一些奇怪的场景。持有比特币的社区不得不谴责和呼吁一些矿池降低计算能力,以免严重影响比特币的发展。
这些矿池也会说基于道德和意识在减少自己的份额。持有比特币的人不觉得这一幕很诡异吗?比特币的命运掌握在不一定关心比特币命运的人手中。
看似相似的是,公司的命运不是由持有公司股份的股东决定的,而是由可能根本不拥有股份的人决定的,而只有有钱的人,也就是金融界的那些“门口的野蛮人”。持有比特币的人完全无法对比特币的未来做出自己的决定。似乎中本聪设定的“一个CPU,一张选票”的文明世界,突然退化成了一个单纯依靠蛮力,看谁更强的原始社会。
比特币在发展初期,主要依靠以中本聪为核心的技术团队制定相关技术标准,开发比特币钱包。然而,随着中本聪退出比特币,这方面的任务逐渐转移到比特币基金会。
比特币基金会是一个非营利组织,负责协调比特币的发展。除了开发比特币钱包,他们还参与推广比特币概念和应用,教育市场和与政府沟通。由于基金会本身是非营利组织,只能靠捐款来运作。但是比特币世界大量资金投入矿机,开发者很难从比特币的发展中获利。
开发者经常面临两难的境地。随着比特币在全球获得一定程度的认可,其客户端被全球数百万人使用。但其早期核心开发者已经消失,以至于后续开发者不敢更改核心代码,只能在外围做一些补丁。因为一旦核心代码被修改,任何一个小问题都可能造成全球比特币网络的瘫痪(在比特币的发展中已经出现了),没有多少开发者愿意冒这样的风险。但是,如果能够成功地进行更改并稳定地运行,除了社区的掌声之外,开发人员不会获得任何实际利益。
而且是否使用新版客户端的决定权在比特币矿工手中,所以任何对矿工不利的修改都无法通过。连比特币基金会都无能为力,开发者也没有足够的热情去修改。在这种情况下,经过多年的发展,比特币客户端仍然停留在非常原始的状态,不仅不适合普通人使用,也完全不像互联网时代的软件。中本聪最初设想的社区中很多开发者不断修改系统,但是Linux像Linux一样通过社区的共同努力推动系统适应时代发展的情况并没有出现。
要解决问题,实际上有两种更好的解决块扩展问题的方法。
第一个是闪电网络:
闪电可以看做是一个临时的记账系统。例如,A和B有许多直接交易,所以他们可以首先在区块链建立一个通道。
所有后续交易都在这个渠道中进行(可以是智能合约的形式)。只有通道关闭,两者之间的交易才会正式更新到比特币网络。
这为A和b节省了大量的交易成本。
另一种叫做侧链技术。
侧链技术实际上是在比特币网络之外建立了另一条链。比特币只用于清算。
当然,为了解决比特币的问题,第二代甚至第三代区块链技术平台已经出现。感兴趣的朋友可以继续关注我的后续更新。
本文总结了区块链网络的难点和一些解决方案。希望你能喜欢。
作者:flydean程序,那些东西
本文链接:http://www.flydean.com/bitcoin-in-trouble/
本文来源:flydean的博客
欢迎关注我的微信官方账号:更多精彩等着你!