本文是在记录作者在区块链技术的入门学习。
所谓道生一,一生二,二生三,三生万物。本文要阐述的就是区块链技术这个“道”生出来的“一”,即何为区块链。
首先要明确的是,比特币是区块链技术的一种应用,中本聪在其08年原始论文中,并没有提及到区块链。在研究比特币之前,必须要研究其底层的区块链技术。
区块链技术属于计算机信息技术,更严格是地说,它是计算机信息技术中的数据库部分,承担数据存储的作用。理解了这一层,那就可以很清楚地认识到,区块链就是一种新类型的数据库。那么数据库有什么属性呢?很简单,可以总结为两点,一是多个数据库之间的协同工作,二是数据库本身的增删改查能力,这是数据库共性的东西。那么作为区块链技术与其他数据库相比,例如Mysql、sqlserver等,其特性显现在哪里,这是接下来要重点解决的。
当前的问题是,区块链中,数据库与数据库之间是如何协同的?
要回答这个问题,首先要了解分布式数据库的概念。通常,使用分布式数据库有两个目的,一是为了提高数据存取效率,二是防止因不可抗力导致某一数据库数据遗失产生的问题,故比较重大的系统都会采用分布的存储方案。区块链就是一个分布式数据库,但它与其他分布式数据库相比,又有一些特性。在区块链中,一个个分布各地的数据库都是一个个节点,每个节点中都保存着相同的数据,任何人都可以轻易地创建新的节点,拥有这些节点中的数据,但这些数据都是经过加密的,只有拥有密钥的才能查看对应的原始数据。
由此可看出一些区块链的特性。第一,数据篡改非常困难,只改本节点的数据是得不到其他节点的承认;第二,任何人都可以轻易得到数据,但加密的数据保证数据不会泄露。当然,这并非区块链的全部特性。
现阶段解决的问题只能证明区块链中一个个节点是孤立地存在着,无法说明各个节点之间如何通讯的,故接下来要弄清楚各个节点之间如何保持通讯。
任何人都可以轻易更改自己节点的数据,但最重要的一点是,如何让你本节点做的数据变动得到其他节点的认可?这个数据变动其实就是数据增加,数据删除和修改几乎不可能此问题后文会详细解释。这个问题可分为两方面,一是数据的存储权限,二是数据的来源。先解决数据的存储权限问题,区块链技术采用共识机制,就是你这个节点要做存储数据的工作,必须得到其他节点的认可,这个认可机制在区块链设计里就要确定,例如比特币的认可是51%的全节点算力。那如何得到认可呢?换句话说,如何让其他节点承认你有存储数据的权限?区块链采用工作量证明,在数学领域,有一些问题推导困难,但证明容易,被认可的节点需要根据系统提供的问题推导结果,并发送给其他节点用于验证正确性,若正确,则会得到其他节点的认可,若得到一定比例节点的认可,那就证明你被认可有存储的权限。
解决了共识机制这个问题,再来说说数据来源这个问题。
先分析数据类型,理论上,任何类型的数据都可以在区块链上存储,但实际上,存储的数据类型是由区块链产品的固有属性决定的,所以它是脱离不了区块链产品的应用场景。故此处不作深入分析。
接下来分析数据来源。数据来源于各个节点,因此执行存储权限的节点只拥有选择数据的权限,它是不能创造数据。在比特币中系统中,这个数据称为交易,数据产生在两个节点互相签名间,这个交易过程涉及太多密码学的内容,此处不再深入分析。
通过以上的分析,我们已经解决了区块链中各个节点的通讯问题。
接下来要解决的问题是,在单个节点中,数据如何增删改查?此问题留待后文解决。