区块链的本质不是历史记录不可删除的。估计很多人会反对这句话,但我们先看一下案例。
比特币并不是不可删除的,白皮书“第7章:回收磁盘空间”明确写了,比特币的历史交易是可以丢弃的。
如果最近的交易已经被纳入了足够多的区块之中,那么就可以丢弃该交易之前的数据,以回收硬盘空间。——《比特币:点对点电子现金系统》7 回收磁盘空间
以太坊同样是可以删除历史交易的,还可以删除账户。Solidity有一个delete操作符,可以用来编写删除历史记录的合约代码,用于回收空间用。为了激励大家释放公共空间,删除还是可以退回gas的。
EoS的智能合约可以使用新的版本对旧版本进行覆盖。EoS还有丢失私钥找回的设计。
可以确定地说,比特币、以太坊和EOS,以及几乎所有的链,严格意义来说历史记录都是可以删除的。这在设计上就保证了历史记录是可删除的。
其实在我们日常生活中,不可删除历史的需求很少。如果把不可删除的特性看成是区块链的本质,那适用范围会相当窄,这样就流行不起来。我们可以重新思考这一特性。
删除历史记录是篡改的子集,篡改还包括了把A直接改成B。
但其实把不可删除,放大到不可篡改,也是成立的。区块链技术可以在业务逻辑上,是可以先把上一笔记录给删除了,退回,再发一笔新的交易。这样就可以在区块链的规则上实现取消交易,或者直接翻转交易。在设计上是完全没有问题的。
如果说不可篡改不是区块链的本质,那区块链凭啥和传统的数据库相比,有啥优势呢?
产品的质量管制有两类思路,一类是结果评估。比如手机,生产出来后,使用各种指标来检测成品,达标后我们就贴上合格标。
还有另一类是过程控制。有些产品是不能对结果进行测量的,否则会造成破坏。比如药,你要进行结果检测就不能吃了。这样的产品可以采用抽样检测,100万个样品,随机抽取1%,样品合格我们就认定整体合格。但还有另外一个质量控制方法,就是对生产过程进行检测。
医药和医械产品,食品等生产,都是要有严格的过程检测的,每一道工序都要符合标准。只有生产工序符合标准,并且还要对成品进行抽样检测,才能合格上市。
区块链的底层运行机制就类似于过程检测。
比特币的每一个矿池节点生产的区块,都是可以被其他节点验证的。其他节点会把组成这个区块的所有交易和区块头,按共识规则一步一步验证。验证区块的过程相当于区块生产的每一道工序,都被验证节点重现一次,看结果是不是和接收到的区块一致。
从区块链的原理来看,你会发现,生产区块的节点和验证区块的节点都和特定的计算机无关的。
工业生产出来的产品,一定是和设备有关的,换一台同样的设备按相同的工艺生产同一产品,最终出来的产品肯定是有差别。就像哲学家说的,世界上没有一片树叶是相同的。
使用过程检测的结果,也无法保证产品100%的同质性。
一直以来,计算机上的软件和数据,也是和特定的计算机有关的。计算机里有一个概念叫可移植性,就是一个程序在一台设备上能跑,在另一台设备上也能跑,并且得出的数据结果无差异。但绝对的数据结果同质,特别是考虑时间因素,是很难做到的。
现在我们为了得到计算结果在多个终端一致,我们都使用云计算。本质上云计算是所有用户终端共同使用的一台设备(云)来完成数据的加工和展示。比如,我们使用多人可编辑的google文档。
区块链这个技术的出现,就实现了一个跨时间和跨计算设备,同质的计算过程。使用区块链技术,可以实现,使用相同的输入,经过计算后,一定得出相同的输出,结果100%同质。这个过程和计算机设备无关,甚至是和时间无关,你可以在做任意时间使用相同的输入得出相同的输出。
也就是说,区块链技术实现了真正的计算过程真实可信。这也是为什么说区块链是信任机器。而区块链之所以要保留历史交易记录,就是为了验证任意时刻的输出结果,提供历史输入信息。
区块链的这种特性,就可以让业务过程可被任意第三方验证,从而自证清白。就像,在以太坊上发ICO,募了多少钱,从哪个地址募来的ETH,代币分发了给哪个地址,都是清晰可以被任意节点验证的。
使用区块链来实现计算过程可验证的产品,和构建不可篡改性的产品,前者可适应的场景要广阔的多