区块链听起来玄之又玄,但其原理其实并不难懂(难的地方在执行细节和各种算法),作为非业内人士,如果被各种术语弄得头昏脑胀而不去理解什麽是区块链的话,你就要吃大亏了。让一连四集的区块链奇谈为你拨开云雾见青天。
上回提到,为了鼓励大家帮忙确认交易,所有帮忙确认的电脑都会得到手续费和额外奖金作为报酬,手续费由想要记新帐的电脑支付,而额外奖金则由系统支付。额外奖金是得到大家同意由系统创造出来的钱,而为了防止购买力下降(钱愈来愈多),所以这 100 台电脑一早达成了共识,额外奖金会愈来愈少,到最後会变成 0。系统𥚃面所有的钱永远不会超过 2100 万元。
所谓有钱使得鬼推磨,自从有手续费和额外奖金後,大家变得非常踊跃,交易亦愈来愈多。慢慢地又出问题了,随着帐簿愈来愈长,检查帐簿变得愈来愈难了,试想想,如果 100 台电脑都各自验证交易的真确性并更新自己的帐簿,万一中间不小心写错了而又没有即时被发现,久而久之错误便会渐渐累积,到最後各自的帐簿都不一样!
这时,电脑们意识到问题的严重性,它们马上开会讨论对策。
终於,它们想到了一个解决方案,把交易纪录变成一条相连的链,每一则交易都需要记下上一则纪录的锁钥,交易纪录都长成这样子:
第一则交易
锁钥 :0 <- 上一则纪录的锁钥,由於这是第一则纪录,所以没有锁钥
交易 :1 号电脑向 2 号电脑支付了 100 元
日期 :2017-04-01 17:24:07
确认 :5 号电脑确认
第二则交易
锁钥 :2178 <- 上一则纪录的锁钥,按上一则纪录的内容计算
交易 :14 号电脑向 7 号电脑支付了 75 元
日期 :2017-04-01 17:35:12
确认 :61 号电脑确认
第三则交易
锁钥 :4421
交易 :1 号电脑向 2 号电脑支付了 100 元
日期 :2017-04-01 17:24:07
确认 :6 号电脑确认
看懂了锁钥是怎样来的吗?电脑们设计了一条算式,只要把上一则交易纪录的所有数字加起来就是锁钥,以第二则交易为例,对应上一则纪录的锁钥为 2178 (0+1+2+100+2017+4+1+17+24+7+5)。假若 8 号电脑在纪录第二则交易时出错了,把支付的金额由 75 元记录为 57 元,当需要记录第三则交易时,它便会发现自己计算的锁钥和大家的都不一样,这时 8 号电脑就可以马上发现错误了。
上面的加法算式是为了方便大家理解,电脑们用的是复杂很多的算式,算式的设计确保了每一则纪录都有一条对应的锁钥,不论是内容上的改动,还是次序上的更变都会产生一条完全不同的锁钥。这条锁钥很难计算,亦很花时间,但却很容易验算。详情可以查看(杂凑演算法/哈希函数 hash function)
用锁钥串连起来的链状结构有几个好处,首先是防止出错,因为锁钥是独一无二并按上一则纪录来计算的,所以只要发现锁钥不一样就能知道之前有纪录出错了,而不需要逐一核对。
更重要的是防止有人修改之前的纪录,因为当有二个版本不一样的帐簿时,所有电脑都会默认最长的帐簿为正确的帐簿(因为纪录最完整)。乍听之下,这条规则很奇怪,因为要伪造一本最长的帐簿好像也没有多难,事实是:
非常难!
帐簿的交易纪录由锁钥串连,锁钥很难计算,亦很花时间,假设要 10 分钟才能找出锁钥。
再以上面的交易纪录为例,现在 33 号电脑使坏心眼,想要把「1 号电脑向 2 号电脑支付了 100 元」改为「1 号电脑向 33 号电脑支付了 100 元」,这时,33 号电脑必须从新计算第二则交易纪录的锁钥,由於第二则交易纪录的锁钥又会影响第三则交易纪录的锁钥,33 号电脑又须从新计算,这过程一共花了 20 分钟。问题是正常的交易还在进行,20 分钟後正确的帐簿都已经有五则交易纪录了,33 号电脑的帐簿不可能成为最长的帐簿。
有读者可能会问,是否真的有很难计算但却很容易验算的锁钥?当然有,请看看这一条 (2178 X A + (1 + 2 + 2017) X B ) / (16871 X C ) = 0.5 而锁钥就是 ABC 的解,请不要尝试算出答案,答案 A = 9, B = 7, C = 4
而这一本用锁钥串连起来的帐簿,就是所谓的区块链!
从此,这 100 台电脑便开始过着幸福快乐的日子!我知道读者们还有一些疑问,下一篇的区块链奇谈将会一次过为大家扫除迷雾。
网友评论