区块链如何工作?用大白话讲解区块链技术(二)
比特币技术从2009年比特币诞生开始不断演化更新,如今早已是精彩纷呈百花齐放,不管是学术界还是企业界,不断涌现出最新的技术和成果。由于区块链的开源和分布式特性,所以从一开始它就是世界性的技术。
区块链真的安全吗?以及为什么被称为区块链呢?任何人都可以通过互联网访问区块链网络,也可以通过账号地址查询相关的交易记录,如果有人一直使用同一个账号地址来发送和接收交易,那么很容易将所有的交易对应到同一个账号拥有者。比特币网络允许你在钱包中生成任意多的账号地址,也就是私钥和公钥对。系统允许你使用不同的账号发送和接收交易,没有人能同时知道你所有的账号和私钥,除非你一直使用用一个私钥和地址发送交易。 比特币地址的全部可能性是2¹⁶⁰ 或者 1461501637330902918203684832716283019655932542976。这个天文数字保证了比特币出现两个相同地址的概率几乎为零。 比特币网络可能还会出现安全漏洞,那就是多次使用已经使用过的比特币。由于交易可能通过不同的节点被发送到区块链网络中,所以两笔不同的交易到达同一个节点的顺序有可能不同。 攻击者发送一笔交易后,随后又很快发一笔相反的交易,将收款地址指定为自己的某一个账户地址,由于网络延时和节点分布广泛,此时有些节点就有可能会先收到后一笔交易请求,由于两笔交易用的是同一个UTXO,所以节点就会认定第一笔交易引用了已使用过的UTXO,进而认为交易无效。 于是很多人想到了使用发交易时刻的时间戳来标记交易顺序,这种方法其实也很容易被攻击,毕竟时间戳是很容易被篡改的。因此我们很难判定两笔交易的发送顺序,这就给了骗子和攻击者可乘之机。 如果上面的情况频繁发生,那么将会在网络节点中产生分歧,无法达成有效共识,因此区块链在设计之初就考虑到使用特定的共识机制来防止骗子的攻击。 比特币网络通过将交易分组到块中来实现对交易的排序,每一个块包含有限数量的交易,以及上一个区块的标识信息。每个块会根据时间先后顺序依次排列,形成一个链条,故而也称系统为区块链。 在同一个块中的交易被认为同时发生,而未入块的交易则说明还没有得到确认,每一个节点都有权将一定数量的交易打包到块中,并且将打包后的块广播到网络中,求得其他节点的认可,成为链上的新块。那么这里就会有一个问题,既然每个节点都可以打包交易,那么到底以谁打包的块为准呢? 想要将自己打包的块加入到链条中,每一个块必须包含一个复杂数学问题的答案,这个数学问题是由不可逆的加密哈希函数构造而成。唯一解决这个数学问题的方式就是根据前一个块的信息,添加随机信息,然后不停地计算哈希结果,直到满足系统给出的目标值。对于一台普通的计算机,这样的计算难度可能需要消耗一年的时间。正是通过调整目标值,以及各个节点为了竞争打包区块权而不停地提高硬件性能,才使得比特币系统可以维持在平均10分钟出一个块。 率先计算出正确答案的节点,会将答案放入新块并广播到网络中,其他节点可以将答案带入数学难题中以验证结果是否正确,验证过程非常简单快速。这就如同在你不知道密码锁的密码时,你需要不停地试,非常耗时间,但是一旦你知道答案后,验证就非常简单了。 如果两个节点同时算出答案并将自己打包的块广播到网络中,结果会如何呢?在这种情况下,两个节点都会将自己打包的块放置在区块链的最末端,而对于其他节点也是优先验证并认可第一个达到的块。 比特币系统有一个原则,那就是每一个节点永远都只会认可最长的链,当网络中的其他节点收到上一个区块后,会立马投入到下一个区块的打包过程中,一旦打包成功,就会立马将新块追加到链末端。而对于那些一直没有打包成功的节点来说,只需要记住选择最长链就行,这样系统即便会出现短暂的分歧,但是最终还是只会有唯一的一条主链。 同一时间打包成功同一区块的概率很低,因此系统不可能频繁出现同一时间处理多个区块的情况,所以比特币系统可以在很快的时间内针对同一条主链达成共识。 在特定时间区块出现分歧也很容易被攻击者利用,如果一笔交易所在的区块处于相对短的链中,一旦下一个区块确定,也就是最长链确定后,那么这笔交易就会立马变成未被确认的交易。在比特币系统中,交易的安全性是由加密算法机制保证的,任何的攻击几乎都是在与整个网络算力做对抗。 接下来我们不妨通过一个例子看一下 Mary 是可以如何利用短暂的区块分歧来进行双花攻击的。Mary 付给 John 比特币以换取 John 的产品,因为比特币网络节点总是以最长链为最终确定的主链,如果Mary 可以依靠自己的算力生成比较长的链,然后将一笔相反的交易包含在其中,那么 John 将会同时失去本应得的比特币和自己的产品。 那么系统如何阻止这类攻击呢?事实上每次链上添加新块都不是 Mary 一个人说了算的,她需要和别人一起计算复杂数学题来获取打包区块的权力,如果她拥有强大的算力,保证每一次都能打包成功,那么她确实可以轻易地发动攻击,因为她完全可以将对自己有利的交易放入自己打造的最长链中。 但是比特币网络中的很多节点都想拥有打包区块的权力,所有人都会和 Mary 竞争,换言之,如果Mary 想要实现她的攻击行为,就意味着要和整个网络的算力对抗,这个算力成本将会非常高,高到需要她掂量一下攻击是否还有利可图。 如果退一步,Mary 并不奢望每一次都能获取到打包权力,只需要保证自己希望的交易落在最长链即可。那么就意味着Mary掌握的算力要保证她在恰当的时间内,在后续的数次区块打包竞争中都能获胜,这个算力成本要求也非常高,道理也是类似的,你也许能在某一次区块打包竞争中获胜,但是要保证接下来连续的数次打包中都能获得打包权,依然要面临着对抗全网算力的压力。 总之,Mary 需要拥有全网50%以上的算力才能达到她的攻击目的,即便她能做到,也只有25%的几率在一条链上获得连续两个区块的打包权。她想要在同一条链上获得越多区块的打包权,成功的几率就越低。所以比特币网络中的交易是依靠系统的数学竞赛来保证其安全性的,在这场竞赛中,攻击者要面临对抗整个网络算力的压力。 因此交易会随着后续区块的增加而变得更加安全,因为每个区块都会保存上一个区块的唯一标识信息,下一个区块也会保存当前区块的唯一标识信息,而且一旦区块数据有任何更改,那么其后区块所保存的标识信息就必须跟着更改。如果更改其中一个区块,并且想要获得其他节点的认可,攻击者就必须同时要重新计算该区块后面所有区块的数据,以保证相互之间留存的标识信息都是对的,每一次的篡改都意味着要和别人竞争打包权,对算力的要求同样非常高。 在比特币网络中,每次出块的平均时间间隔是10分钟,一笔交易通常认为1小时,也就是6个区块打包完成后,才算得到真正确认,因为同时破解6个区块对算力的要求是非常高的。 比特币挖矿为了发送比特币,用户需要引用钱包中已有的UTXO,也就是未使用的交易输入,并且将交易发送到全网进行广播,那么第一笔比特币从哪里来呢?或者说第一个UTXO从哪来呢? 为了平衡由于网络异常或者钱包私钥丢失,而导致的全网经济通缩,系统会给每一次通过计算数学难题获得打包权的人新币奖励,这种为了获得比特币奖励而运行比特币软件的行为被称为“挖矿”,这种行为很像现实生活中的挖金矿。 比特币奖励成为了很多人运行节点的动力,他们愿意为此付出一定的算力以保证可以处理交易,并且维持整个比特币网络的稳定。 因为单靠一台普通计算机计算打包数学难题至少需要耗费非常长的时间,于是很多节点就会联合起来共同破解计算难题,这样他们解决难题的几率就会大很多,然后再根据各自的算力分配奖励,这种联合打包的组织也被称为“矿池”。 一些矿池的算力非常大,大到其算力已经超过全网算力的20%,正如上文提到的双花攻击,他们俨然已经成为比特币全网安全的隐患,不过即使他们其中的矿池未来拥有超过50%的算力,那么只要累加的区块足够多,历史交易依然是足够安全的。当然有很多矿池也在限制算力的继续增加,以保证比特币全网的安全。 随着计算机硬件性能的提升,比特币网络中节点的算力也会越来越高,不过系统会自动根据全网算力动态调整数学题的计算难度,以保证大概平均10分钟的出块时间,这点同样可以保证全网的稳定性和安全性。 此外,比特币每隔四年挖矿奖励就会减半,因此比特币挖矿将会逐渐失去吸引力,为了鼓励节点继续维护比特币网络,每一笔交易都会包含一笔小额交易手续费用以奖励打包区块的矿工。所以对于挖矿成功的矿工来说,会同时收到区块中所有交易的手续费和系统奖励的新币。 手续费的意义还在于矿工会优先处理那些愿意支付更高手续费的交易,通过市场调节的方式使得交易手续费处于合理的区间。比特币现有的交易手续费相比传统银行来说,要低得多,而且手续费跟交易金额没有关系。 区块链的优势和挑战现在你已经对区块链如何工作有了全面基本的认识了,接下来让我们来快速看一下为什么它如此有趣。 使用区块链技术有如下显著的优势:
然而,区块链技术依然有一些挑战:
总之,区块链技术未来有极大的潜力会重构其他行业,从传统的广告业到能源供应。它最大的优势在于可以形成去中心化的生态,降低交易和信任成本。 新的技术每天都在发生和迭代,例如2015年出现的可以提供去中心化应用的智能合约平台以太坊。但是请记住区块链技术依然处于早期实验阶段,各种用于改善和提升区块链安全的技术和工具层出不穷,未来区块链将会在更多的产品、工具和服务上体现其价值,让我们拭目以待。 收藏 |
2018-06-24
2018-11-20
2019-01-10
2019-01-10
2019-01-10
2019-11-14
2019-11-14
2019-11-14
2019-11-13