区块链漫谈

前两年区块链概念甚嚣尘上,各行各业都想蹭一蹭这个热度,而过去两年币圈行情也随之跌宕起伏。

记得17年时候,我所在的B2B电商也跟风追逐区块链概念,领导也让我技术跟进区块链这一块,与所谓行业公链对接云云。因为公司技术氛围比较开放,我也耿直的表达了看衰区块链的想法,婉拒了这个工作安排。

后来阴差阳错之中,我竟然进入一个交易所工作了几个月,感触良多。现如今整个行业每况愈下,区块链这个过气网红也在迅速降温,世人对它也爱答不理。或许是基于逆潮流而动的坏毛病吧,我打算在这个技术领域深入研究下去,深耕耘而厚积薄发。

接下来我会对整个行业的底层技术、热门公链、上层应用等各个方面进行系统的阐述,具体内容以技术为侧重点,展现形式为一篇篇独立的博文,没有固定的时间与安排,想到哪里写到哪里。

漫谈区块链

对区块链比较常见的解释便是去中心化分布式记账分布式数据库,当然这个数据库与传统的关系型数据库或NoSQL等在功能上有着非常大的区别。接下来,我也尝试从更加容易理解、更加通俗的角度讲一讲区块链。你也可以在这里看到大家对区块链的讨论。

区块数据

在我的理解里,区块链数据就像是关系型数据库的binlog,所有的增删改操作都通过递增后缀的方式记录在区块数据里,这些数据块就像是按照时间分片的binlog文件。

相对于普通数据库而言,它往往没有所谓总账的概念,也就是说并不会汇总整理历史binlog。比如区块链中存储有一个金额 amount=1,执行amount++操作之后,区块链中并不会直接记录amount=2,而是区块数据中有序地存储amount=1amount++。如果你想获取最终的值,就需要重放一遍历史binlog

矿工

区块链作为特殊设计的软件系统,最终必然需要运行在合适的硬件环境之上。也就是说需要大量的硬件服务器运行这套软件系统,存储与维护历史区块数据,并接收、汇总新的记账操作生成新的区块,这种硬件服务器在区块链中的角色便是矿工。

矿工是整个区块链网络系统的硬件支撑,成熟的区块链网络中往往存在成千上万的矿工服务器,这些服务器负责轮流承担leader节点的工作,也就是将新的增删改操作记录在新的区块中。

当然,这些硬件服务器也不可能无偿地为整个区块链网络提供服务,它们会对所有的写操作征收手续费,除此之外,区块链本身在算法上也会给创建新区块的矿工节点赠予实质的奖励。

共识机制

由于区块链在系统设计上对生成新区块的矿工有多重经济上的激励措施,因此会有许多人主动提供硬件资源来支撑区块链网络的记账工作。此时记账与矿工之间,就存在一种供过于求的供需关系,那么整个区块链网络如何决定由哪个矿工担任下一个区块的创建呢?此时就引入了共识机制。

从区块链网络的安全项、可靠性等多方面考虑,需要确保每个区块尽可能由不同的节点生成,也就是记账权尽可能的分散。同时也需要提高矿工的门槛,防止破坏者竞争到记账权。这就需要有一个公平的竞争策略,确保矿工之间通过某种机制进行公平的竞争,这就是所谓的共识机制,包括工作量证明机制、股权证明机制等等。

工作量证明机制就是要求矿工节点在生成区块之前进行一定量的数学运算,这些数学运算本身并没有什么意义,但是只有完成这些数学运算的矿工节点所产出的区块,才可以得到其他节点的认可。

但是因为工作量证明机制过于浪费硬件资源,许多公链也会选择采用各种各样的其他的共识算法,这些后续详谈。

数据加密

上文介绍了区块链的数据区块存储及整个系统的运行机制,之后便是区块链中数据的归属与安全问题。

对于上层应用而言,我们需要将自己的数据写入区块链中,同时禁止其他人修改自己的数据。为了防止不同用户互相篡改对方的数据,区块链在算法上针对数据的所有权采用各种加密or签名验证,常用的算法便是非对称算法包括ECDSA、EDDSA等,也有个别奇葩的公链并不使用非对称加密算法,而是单纯的哈希算法。

对于采用了非对称加密算法的区块链而言,上层应用修改自己的数据时,需要通过私钥来对操作签名来证明自己的所有权。区块链中记账矿工则通过公钥进行所有权鉴定,如果验证没问题才会接受记账请求,并选择性地录入下一个区块中。

数字货币

数字货币本质上只是在区块链记账体系中的一个个虚拟的数值,也可以理解为区块链系统中的积分。伴随着新区块的诞生,系统会自动奖励给矿工若干个积分,而上层应用向区块链提交记账请求时,也需要向矿工提供少量积分作为记账的手续费。

由于这些积分在区块链系统中存在使用价值,并具有流通属性,因此它们理所当然地成为了区块链这个虚拟系统中的法币,在虚拟系统之外,它们也会被当做虚拟数字货币。积分的归属权往往是一个或多个私钥,也有可能是一套特殊的脚本,再或者直接是一个钱包地址。

除此之外,一些支持智能合约的区块链内部也可以创建自定义的代币,此类代币便是典型的记账,与主链币也有区别。