`

《区块链底层设计Java实战》之第一章区块链简介

阅读更多

 第1 章  区块链简介

与君初相识  犹如故人归

 

1.1 戏说区块链

当笔者奉调出任区块链研发负责人之初,加班相对之前又多了些。加班多了,

自然陪家里小宝宝玩儿的时间就少了。为此,小宝宝有点儿不开心。

家里三岁的小宝宝和笔者有过这样一段对话。

 

小宝宝:“爸爸,你怎么不回来陪我玩儿啊,我睡觉的时候你还没回来!”

 

笔者:“宝宝,爸爸去做区块链了。事情很多,所以加班多啦。”

 

小宝宝:“什么是区块链啊?好玩不?”

 

笔者:“区块链是一个游戏,这个游戏可好玩了!”

 

小宝宝:“我也想玩,怎么玩啊?”

 

笔者:“比如,过年的时候,你会收到什么呀?”

 

小宝宝:“压岁钱!”

 

笔者:“对,那爸爸妈妈还会说什么呢?”

 

小宝宝:“爸爸妈妈先把毛爷爷帮我收起来,我长大了再花!”

 

笔者:“对。可是,如果等你长大了,爸爸妈妈没给你曾经收到的这么多压岁钱

花,你怎么办?”

 

小宝宝:……

 

笔者:“有了区块链就不会出现这种假设的问题啦。比如过年的时候,爷爷给了

你1000 块压岁钱,爷爷就在自己的小本本上写:今天给了宝宝1000 块压岁钱。然

后爷爷大声告诉奶奶、爸爸、妈妈:‘我今天给了宝宝1000 块压岁钱。’奶奶、爸爸、

妈妈听到之后都在自己的小本本上写:爷爷今天给了宝宝1000 块压岁钱。”

 

“然后奶奶给了你2000 块压岁钱,奶奶就在自己的小本本上写:今天给了宝宝

2000 块压岁钱。然后奶奶大声告诉爷爷、爸爸、妈妈:‘我今天给了宝宝2000 块压

岁钱。’爷爷、爸爸、妈妈听到之后都在自己的小本本上写:奶奶今天给了宝宝2000

块压岁钱。”

 

“之后爸爸给了你3000 块压岁钱,爸爸就在自己的小本本上写:今天给了宝宝

3000 块压岁钱。然后爸爸大声告诉爷爷、奶奶、妈妈:‘我今天给了宝宝3000 块压

岁钱。’爷爷、奶奶、妈妈听到之后都在自己的小本本上写:爸爸今天给了宝宝3000

块压岁钱。”

 

“最后妈妈给了你4000 块压岁钱,妈妈就在自己的小本本上写:今天给了宝宝

4000 块压岁钱。然后妈妈大声告诉爷爷、奶奶、爸爸:‘我今天给了宝宝4000 块压

岁钱。’爷爷、奶奶、爸爸听到之后都在自己的小本本上写:妈妈今天给了宝宝4000

块压岁钱。”

 

“每年过年大家给完宝宝压岁钱之前后都这样写在小本本上,然后告诉其他人也

写在自己的小本本上,这就是区块链。”

 

“我们还可以约定宝宝10 岁时就可以拿出1000 块钱买好吃的,到你10 岁的时

候呢,1000 块钱就会送到你手上。这就是智能合约。”

 

小宝宝:“区块链这个游戏真好玩,快给我拿纸和笔,我也要写!”

 

1.2 正说区块链

 

2018 年年初以来,区块链一词火遍了大街小巷,出租车司机、程序员、培训机

构等都在谈论区块链。区块链在网络上也成了热门搜索词汇,在百度指数上搜索区

块链可以看到,区块链从2018 年1 月陡然成为热词,之后持续保持“网红”趋势,

搜索指数居高不下,如图1-1 所示。

 

什么是区块链呢?

 

区块链一词最早出现在中本聪(Satoshi Nakamoto)的“比特币:一种点对点的

电子现金系统(Bitcoin: A Peer-to-Peer Electronic Cash System)”一文中。

在比特币系统中,区块链作为存储底层,承载了上层众多认同比特币相关协议

并严格遵守及维护协议的节点(个人或组织)的记录各类信息的行为。

 

区块链的存储是一种链式存储,区块按照生成的时间顺序前后链接,区块的链

接基于区块存储内容的哈希值构建。区块生成后会在区块链系统的各个节点(个人

或组织)中同步,因此各个节点最终均保存了一份完整且一致的数据。也就是说,

区块链系统会保持最终一致性,但不保证实时一致性。

 

比特币系统中理论上不支持数据的删除和修改。数据的删除和修改意味着其修

改所在区块的哈希值也需要随之修改,而该区块之后的所有区块的前向链接哈希值

均需改变。随着比特币系统中节点(个人或组织)数量的增多,前向哈希值的修改

和同步工作会愈发繁重。在比特币全网络中对数据删除和修改变得愈发困难,因此

比特币系统中区块数据的不可篡改性就体现了出来。

 

由于加入比特币网络的节点(个人或组织)严格遵守比特币协议,因此区块链

从理论上具备了承载信用的特性。

 

从技术上来说,区块链技术并非凭空产生,而是基于已有技术演变而来的。

 

区块链的链式构成和我们上学时所学的《数据结构和算法》这类书籍中的单链

表有一定的相似性,链表中的各部分内容均通过指针(哈希值也是泛化指针的一种

形式)相连。不同之处在于,单链表是从前向后构建关联关系,即新插入一个内容

时,需从链表的表头开始移动指针至链表尾部,再将尾部的指针指向新建的内容,

新建的内容自动成为链表的尾部。而区块链是从后向前构建关联关系,即新生成的

区块通过前面区块的哈希值与前面区块建立连接。

 

区块中header+body 的结构设计与Web 开发中常见的HTTP 协议有一定的相似

性。HTTP 协议的request 和response 均由三部分组成:request/response line、

request/response body、request/response header。

 

区块内容的加密就更常见了,无论是对称加密,抑或是非对称加密,在MySQL

敏感数据存储、接口参数加密、OAuth 授权等无处不在。而区块内容中多条交易信

息对应的Merkle 树源于《数据结构和算法》中的二叉树。

 

区块链中P2P 网络是区块链系统的基础。共识的达成、数据的同步均依赖于高

效的P2P 网络系统。P2P 网络的构建源于少见的Java 网络编程部分。在生活中,QQ、

微信、微博等场景均有类似应用。如果读者研究过ElasticSearch、Redis 集群、Kafka

集群等数据同步的代码,对开发和构建P2P 网络应该更有信心。不过随着技术的发

展,Java 开发小伙伴可以不再基于原始的Socket 进行开发,可以选用WebSocket 或

t-io 等组件进行开发。

 

区块链上共识的达成基于共识算法。共识算法的起源算法很多读者都熟知,如

Paxos 一致性算法,分布式数据库的二、三阶段提交协议、ZooKeeper 的快速选举算

法等。当然,不同的公链、联盟链的共识算法在不同场景有不同的选择,但算法基

础都是一脉相承的。

 

区块的存储和常见的分布式应用开发略有不同。在分布式应用开发中,我们熟

悉的分库分表、分布式缓存集群等并不适用。区块链的每个节点是一个单机,存储

也随本机进行。因此,区块的存储往往选用高性能的文件系统或高性能的单机版

SQL/NoSQL 数据库,如SQLite、LevelDB、RocksDB 等。当然,单机的存储空间始

终是有限的,随着存储承载压力的增加,后续区块链存储的扩容也可能成为区块链

领域的另一种创新。

 

看到这么多相似的技术,是不是已经觉得区块链底层的研发不再高不可攀了

呢?来吧,笔者将带你走进区块链底层开发世界,曾经以为的高门槛将不再遥不可及!

 

 

1.3 区块链的未来:联盟链

2018 年伊始,区块链在国内开始火热起来。各个行业各个领域都开始寻找自身

 

业务和区块链的结合,不断有一些尝试性的落地应用上线,其中以金融、游戏领域

为主,内容、房产信息、商品溯源等场景也开始引入区块链。

不同场景下,区块链类型的选型也不尽相同。

 

在区块链世界中,一般划分为公链、联盟链、私链。从技术视角而言,公链、

联盟链、私链的底层技术大抵相同,但适用场景则大相径庭。我们可以从不同的视

角来看待公链、联盟链、私链。

 

从去中心化这一区块链系统最大的特色来说,公链是完全去中心化的,公链网

络的各个节点都可以读取和写入数据;联盟链则是部分去中心化,节点由联盟内成

员部署,读写权限也可以根据联盟内的协议来定制;私链本质上还是中心化的,数

据的写入由私链所属组织控制,数据的读取和使用则由私链所属组织的应用场景来

定。

 

从代码开源程度而言,公链的开放程度最大,全世界的个人和组织均可获取其

完整代码,个人和组织可以直接部署,亦可修改为己所用。联盟链则是对联盟内部

用户开源其最核心代码,代码的写权限可以在联盟内部分级管理。私链的代码归属

于个人或组织,一般不对外开放源码。

 

从激励体系角度而言,激励体系是公链的灵魂,不可或缺;联盟链可以根据场

景选择是否使用激励体系;私链则更加灵活。

 

那么公链、联盟链、私链谁代表了区块链未来的发展方向呢?特别是谁代表了

企业级区块链的未来呢?笔者判断是联盟链。

 

激励体系作为公链的灵魂,其对应的优秀经济模型的设计比较困难。同时,激

励体系往往是为了吸引更多的节点进入公链挖矿,挖矿在现有的共识算法体系下是

一种耗费计算资源的低效行为,并不经济。而且企业相关的业务信息往往私密性较

强,不适合进入公链,即便有部分信息可以在公链落地,数据落地的经济成本也不

便宜,毕竟矿工打包数据是需要付费的。

 

而私链既可以使用公链开源代码,也可以基于联盟链开源代码实现,只是节点

数量要少得多。私链的应用往往是在组织内部,并不会对外产生多大影响。

 

联盟链则不然。各个联盟链组建之初往往都立足于行业,着眼于解决行业共性

问题,是能促进行业效率和发展的底层支撑技术。由于企业级应用往往涉及业务逻

辑甚至商业机密,因此公链目前并不太适合企业级区块链的应用场景,而联盟链给

业务逻辑和商业信息限定了范围,使得区块链技术应用的普适性大大增加。

作为研发,在学会驳接各类公链、联盟链、私链的同时,更应知晓区块链的底

层实现技术。本书以联盟链为主线,以区块链底层技术为支撑展开内容,一步步引

导读者构建区块链底层平台。

 



 书籍二维码如下



 

  • 大小: 1.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics