第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实战》之第一章区块链简介相关推荐

  1. 《区块链底层设计Java实战》之第三章密码学

    第3 章 密码学 九层之台,起于累土  千里之行,始于足下 第3 章 密码学 ............................................................. ...

  2. 区块链技术架构 java_《区块链底层设计Java实战》之第二章区块链架构

    第2 章   区块链架构 会当凌绝顶  一览众山小 正如开篇所言:会当凌绝顶,一览众山小.进入区块链底层开发前,我们需要 了解区块链底层的通用架构是如何设计的,从上而下地审视区块链底层的结构,做 到了 ...

  3. python 微服务架构实战_《分布式服务架构:原理、设计与实战》第一章分布式微服务架构设计原理...

    1.从传统单体架构到服务化架构 1.1 JEE架构 JEE将企业级软件架构分为三个层级 : Web 层.业务逻辑层和数据存取层.对应的职能团队,主要包括:用户 交互 UI 团队.后台业务逻辑处理团 队 ...

  4. 《Reids 设计与实现》第一章 简单动态字符串和链表

    <Reids 设计与实现>第一章 简单动态字符串和链表 文章目录 <Reids 设计与实现>第一章 简单动态字符串和链表 一.简单动态字符串 1.简介 2.SDS 的定义 3. ...

  5. 学习《深入浅出python量化交易交易实战》第一章(笔记)

    1.学习<深入浅出python量化交易交易实战>第一章 记录学习过程中的代码和一些坑 1.1 基础(名词解释) 1.1.1 CAPM (Capital Asset Pricing Moda ...

  6. 《linux内核设计与实现》第一章

    第一章Linux内核简介 一.unix 1.Unix的历史 Unix是现存操作系统中最强大和最优秀的系统. --1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物. - ...

  7. 尚学堂java实战第四章课后习题

    尚学堂java实战第四章课后习题 文章中的题目答案仅供参考 选择题答案: 1.B 解析:一个java类必然存在构造器,即使没有定义构造器,也会存在一个默认的无参构造器. 2.D 3.AC 解析: A( ...

  8. 第一章 Redis基础(简介+下载和安装+基本操作)----黑马

    第一章 Redis基础(简介+下载和安装+基本操作) ----黑马 文章目录 第一章 Redis基础(简介+下载和安装+基本操作) ----黑马 学习目标: 1. Redis 简介 1.1 NoSQL ...

  9. 第一章 Web MVC简介 —— 跟开涛学SpringMVC

    第一章 Web MVC简介 -- 跟开涛学SpringMVC Web MVC简介 1.1.Web开发中的请求-响应模型: 在Web世界里,具体步骤如下: 1.  Web浏览器(如IE)发起请求,如访问 ...

  10. 《深入理解 Spring Cloud 与微服务构建》第一章 微服务简介

    <深入理解 Spring Cloud 与微服务构建>第一章 微服务简介 文章目录 <深入理解 Spring Cloud 与微服务构建>第一章 微服务简介 一.单体架构及其存在的 ...

最新文章

  1. 【C语言】libiniparser库使用例子,
  2. java 4大作用域_JavaWeb的四大作用域详解
  3. 30天敏捷结果(30):提升敏捷结果
  4. 学习进度条(第六周)
  5. @getmapping注解的作用_一口气说出6种,@Transactional注解的失效场景
  6. 拉里.埃里森_耶鲁大学演讲
  7. Apache-不重启完成添加或更改域名
  8. 编写JQuery插件-2
  9. 华为nova8系列获得3C认证:搭载66W超级快充怒追Mate40
  10. 一文详解opencv摄像头数字识别
  11. python函数式编程-装饰器
  12. 【侯捷】C++内存管理机制
  13. Android视频融合特效播放与渲染
  14. SCAU 菱形打印全集
  15. 根号下的X平方加一C语言,根号下x平方加一分之一怎样积分
  16. Linux-通过LVM对服务器磁盘进行动态扩容
  17. 线程让步——Thread.yield()
  18. 抢滩产研高地:零售To B的新探索
  19. matlab中用imnoise向图像中加入特定高斯半径的噪声
  20. 485电路设计:上拉电阻和限流电阻对光耦的通信速度的影响

热门文章

  1. 手机序列号和IMEI号的区别
  2. java中国象棋棋子走法,中国象棋的规则及各种棋子的走法介绍
  3. 已知三角形底和高用c语言,三角形面积公式有哪些 如何求三角形面积
  4. mpp格式文件怎么打开,mpp进度计划
  5. 单交换机配置vlan
  6. centos7.5安装
  7. 2021-5-17:Spring Boot整合Redis
  8. 浅析Relaxed Ordering对PCIe系统稳定性的影响
  9. ae合成设置快捷键_这些AE技巧,相见恨晚
  10. 鸿蒙系统怎么关闭地理位置通知,让隐私无忧,查看和去除照片地理位置信息的App小集合...