影客网络科技|为什么以比特币为代表的虚拟货币难当货币大任?从区块链技术说起( 二 )


“区块”是将多笔交易数据打包在一起形成的数据体 。 可以将区块理解为一个账本,账本里记录了多笔交易 。 单笔交易在最简单的情况下 , 大小为250字节,当然实际发生的交易会大于这个数值 。 每个区块大小被中本聪限定最大为1兆字节(1024千字节),那么我们就可以算出来,一个区块最多可以容纳4096(1024000/250)笔交易 。 以账本作比喻,中本聪限定了一个账本最多只有1024页 。 而每个最基本的交易要占用四分之一页,那么一个账本最多就是4096笔交易 。
区块成“链”的同时交易也成链 。 记账人按照规则在账本(区块)上记满了交易后 , 在封面贴上时间封条 , 同时在账本封面上记录前一个账本的编号 , 这样就在账本之间构成了一个首尾相连的账本链条 。 这样构成的账本链条,有一个特点:越老的账本,其中的交易越难以篡改 。 若要更改2015年高度为363270区块中的一笔交易,那么就要将自2015年该账本之后的所有账本,全数改掉,重新记账才可做到 。
如何防止篡改账本呢?比特币创造性使用了工作量证明(POW)机制 , 矿机通过哈希运算竞争获得记账权 , 从而防止区块篡改 。 比特币没有中心服务器 , 而是由所有节点的矿机自发运行为系统提供算力 。 矿机通过竞争 , 以获得记账权 , 系统会给获得记账权的矿机以比特币作为奖励 。 也就是我们常说的“挖矿” 。 矿机作POW运算就是对“区块头”数据进行两次哈希运算(比特币使用的是SHA256哈希运算),得到了一个256位的哈希值 。
算出哈希值只要几秒时间 , 矿机在瞬间即可完成 , 因此 , 比特币给哈希运算提出了要求 , 也即你必须算出指定要求的哈希值 , 比如 , 前19位数都是零 。 这样 , 难度陡然增加 。 矿机要算出指定要求的哈希值 , 必须用试错的方法 , 将随机数(专业上称作“被使用一次的非重复的随机数值” , 即Nonce)不断代入以运算出小于某个数值的哈希值 。 因为SHA256的运算结果是非常随机的,所以,要想运算出指定的哈希值,唯一的方法就是不停地尝试Nonce 。 因此,矿机是否能够挖矿成功,一是依赖矿机的运算速度;二是依赖运气,也许第一次改变Nonce的值,就得到了合乎大小的哈希值,也许运行几百亿次,也没有得到 。 比特币设置了自动调节哈希运算的时间 , 将其设定为平均十分钟 , 并动态调整 。 这个时间设定 , 是两个方面的平衡 , 时间太少 , 消耗算力不够 , 无法让篡改企图知难而退 , 且造成网络同步不稳定 , 而时间太长则交易确认时间过长 , 矿机体验太差 。 (哈希运算问题比较复杂 , 这几个术语我们限于篇幅不作详细解释 , 有兴趣的读者可以阅读《区块链简史》第四章 。 )
以上是对比特币的区块链原理的基本解释 , 对于非技术人员了解比特币的运行效率而言 , 至关重要的有三个方面:
第一 , 可以将每一次比特币交易验证过程理解为一次“出块” , 就是将很多交易数据文件整理在一起后封装 , 并盖上数据哈希和时间戳 , 从此不再更改(前提是在哈希竞赛中胜出并在共识机制中得到足够多的确认) 。
第二 , 比特币区块大小被设定为1兆字节 , 每个区块理论上只能记载4096笔交易 。
第三 , 出块时间就是矿机们验证交易、区块打包、哈希竞赛的时间 , 按照比特币代码的设定 , 比特币哈希竞赛的目标难度值会进行动态调整 , 使出块时间平均维持在10分钟左右 。
二、从单笔交易速度看 , 比特币“出块”时间被设定为平均十分钟 , 耗时是支付宝的200倍 , 无法用于公众日常使用
比特币在底层技术上将“出块”时间设定为平均10分钟 , 这也即意味着完成“一批”交易的验证时间是10分钟 。 每次交易的平均确认时间也在10分钟左右 。 对于公众日常支付 , 这个速度是无法接受的 。 试想 , 你在超市结账 , 排在你前面的人 , 用比特币发起支付到商家确认收到比特币 , 要10分钟 , 这队应该排到几公里外了 。 再仔细用简单的数字计算一下:超市的一个收银柜台要10分钟完成一笔收款 , 一个小时才6笔 , 在8个小时的营业时间里只能完成48笔 。 可以说比特币的这种速度是无法满足公众的日常使用需求 。


推荐阅读