比特币的区块链以线性“链”的方式存储区块,每个区块在数学上都指向前一个区块。通过这种方式,即使没有对区块进行明确的编号,区块的顺序也是清晰的。
区块之间用数字相互联系。具体来说,比特币使用一种叫作哈希的数学技术。例如,把单词、数字、比特币区块等一堆信息输入一个哈希算法中,这个算法会输出一个简短的信息“指纹”。
其实,人类一直在使用哈希,比如首字母组合。一个很长的英文名字很容易被压缩成几个字母。例如,将“John Fitzgerald Kennedy”这个长长的名字变成“JFK”这个简短的名字。其中有一个输入(全名)、哈希函数(获取某人姓名首字母的过程)和一个输出或哈希值(首字母)。计算机使用更多样化的哈希函数,其中最流行的是MD5算法和SHA-256算法,它们的核心思想是一样的:大数据输入变成短输出。
在比特币中,每个区块都有一个相关的哈希。每个区块的哈希部分基于它的前一个区块的哈希。通过这种方式,每个区块都指向它的前一个区块。所以,如果你有一个无序的区块列表和与它们相关的哈希表,你可以很容易地对区块进行排序,这就像一个人可以通过查看情节来排列书页一样。
哈希表中的数字和字母是怎么回事?哈希是用十六进制[4]编写的。其实际字符长度也比4个字符长得多,但我们的缩短版作为举例已经足够用了。因此,比特币以区块的形式批量处理交易,并且以链的方式将它们彼此连接起来。区块遇见链。
让我们回顾一下们基于哈希的区块链系统,你会注意到它实际上并不需要将区块放入线性的链中。没有什么能阻止在一个给定的区块之后紧接着出现两个或更多的区块。因此,区块链不一定是线性链。事实上,区块链通常不是线性链。区块链看起来更像“区块树”,有“树干”和“树枝”。
当两个矿工同时挖出一个区块时,区块树有时会产生一个新的分支。这种情况很少见,但确实会发生。当这种情况发生时,两笔交易会从最近的交易中分离出来,一个新的区块分支就诞生了。为了保证线性的正式历史,比特币使用了名为“最长链原则”的经验法则。这条法则指出,拥有最多区块的“区块树”的分支就是正式的区块链。最长链决定了你有多少钱、过去发生过什么交易等。如果某件事不在最长链上,它就不会发生。
在比特币用户的计算机上运行的比特币软件,只向在最长链上添加一个区块的矿工支付报酬,从而贯彻最长链原则。这通常足以使矿工们保持秩序。不过,它有一个副作用。如果两个矿工同时开采出一个区块,就会产生两个分支,但只有一个分支会胜出,成为最长链。另一个分支成为“孤儿”并被抛弃,而在挖掘出该分支底部区块的不幸矿工将得不到任何钱。这种“孤儿”事件一天会发生好几次。
但是最长链原则仍然存在安全漏洞。如果一个不正当的矿工创造了一个新分支,并且能比其他矿工更快地挖掘区块,从而使他的分支比合法的分支更长,那该怎么办呢?嗯,不正当的矿工的分支将成为最长链,所以它将成为正式的区块链。他的欺诈链上的所有区块将成为正式历史,而合法链上的一些区块将被扔掉。
当然,让骗子控制区块链会造成很多混乱,这也可能导致欺诈。设想一下,不正当的矿工用比特币购买了数千美元的商品,并把交易放在区块链上。然后,他执行攻击,建立一个比正式区块链更长的新链。他支付给商家的交易数据将被丢弃,因为这些交易数据所在的区块不在最长链上。这就好像他一开始就没有付款一样。所以,他最终得到了所有的商品,但从来没有为它付过钱!
为了解决这个问题,中本聪使用了“工作量证明”法,也就是说你想建立一个区块就需要正确地算出一个哈希值,但是除非你控制了全网足够大的算力,否则你很难连续几次都是那个首先算出哈希值的幸运儿。而如果你要想做到这点,你要花太多的钱去配置机器和算力了,那么你能从中诈骗到多少个比特币来支付这笔钱呢?基本上不可能诈骗到这么多比特币,而且你一旦诈骗成功,比特币的信誉下降,你诈骗到的比特币可能一文不值,你花大钱购买的算力和机器就全部打了水漂。