欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 18:43:37
...

 第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 年伊始,区块链在国内开始火热起来。各个行业各个领域都开始寻找自身

 

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

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

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

 

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

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

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

 

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

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

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

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

定。

 

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

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

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

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

 

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

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

 

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

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

 

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

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

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

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

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

 

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

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

 

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

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

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

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

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

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

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

 



 书籍二维码如下


《区块链底层设计Java实战》之第一章区块链简介
            
    
    博客分类: 区块链 《区块链底层设计Java实战》区块链简介 
 

  • 《区块链底层设计Java实战》之第一章区块链简介
            
    
    博客分类: 区块链 《区块链底层设计Java实战》区块链简介 
  • 大小: 1.5 KB