两年前,小灰以前写过一期关于区块链的漫画,可能很多新来的小伙伴还没有看过。最近趁着区块链重新成为热门话题,小灰把这篇漫画稍作修改,再次推送给大家。

什么是区块链?

区块链,英文 Blockchain,本质上是一种去中心化的分布式数据库。任何人只要架设自己的服务器,接入区块链网络,都可以成为这个庞大网络的一个节点。

区块链既然本质是数据库,里面究竟存储了什么东西呢?让我们来了解一下区块链的基本单元:区块(Block)

一个区块分为两大部分:

1.区块头 

区块头里面存储着区块的头信息,包含上一个区块的哈希值(PreHash),本区块体的哈希值(Hash),以及时间戳(TimeStamp)等等。

2.区块体

区块体存储着这个区块的详细数据(Data),这个数据包含若干行记录,可以是交易信息,也可以是其他某种信息。

刚才提及的哈希值又是什么意思呢?

想必大家都听说过MD5,MD5就是典型的哈希算法,可以把一串任意长度的明文转化成一串固定长度(128bit)的字符串,这个字符串就是哈希值。

而在我们的区块链中,采用的是一种更为复杂的哈希算法,叫做SHA256。最新的数据信息(比如交易记录)经过一系列复杂的计算,最终会通过这个哈希算法转化成了长度为256bit的哈希值字符串,也就是区块头当中的Hash,格式如下:

a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0

区块与Hash是一一对应的,Hash可以当做是区块的唯一标识。


不同的区块之间是如何进行关联的呢?依靠Hash和PreHash来关联。每一个区块的PreHash和前一个区块的Hash值是相等的。

什么是挖矿?

为什么要计算区块的哈希值呢?

既然区块链是一个链状结构,就必然存在链条的头节点(第一个区块)和尾节点(最后一个区块)。一旦有人计算出区块链最新数据信息的哈希值,相当于对最新的交易记录进行打包,新的区块会被创建出来,衔接在区块链的末尾。

新区块头的Hash就是刚刚计算出的哈希值,PreHash等于上一个区块的Hash。区块体的Data存储的是打包前的交易记录,这部分数据信息已经变得不可修改。

这个计算Hash值,创建新区块的过程就叫做挖矿


用于进行海量计算的服务器,叫做矿机

操作计算的工作人员,叫做矿工

计算哈希值究竟难在哪里?咱们来做一个最粗浅的解释,哈希值计算的公式如下:

Hash = SHA-256(最后一个区块的Hash + 新区块基本信息 + 交易记录信息 + 随机数)

其中,交易记录信息也是一串哈希值,它的计算涉及到一个数据结构 Merkle Tree。有兴趣的小伙伴可以查阅相关资料,我们暂时不做展开介绍。

这里关键的计算难点在于随机数的生成。猥琐的区块链发明者为了增大Hash的计算难度,要求Hash结果的前72bit必须都是0,这个几率实在是太小太小。


由于(最后一个区块的Hash + 新区块基本信息 + 交易记录信息)是固定的,所以能否获得符合要求的Hash,完全取决于随机数的值。挖矿者必须经过海量计算,反复生成随机数进行“撞大运”一般的尝试,才有可能得到正确的Hash,从而挖矿成功。

同时,区块头内还包含着一个动态的难度系数,当全世界的硬件计算能力越来越快的时候,区块链的难度系数也会水涨船高,使得全网平均每10分钟才能产生出一个新区块。

小伙伴们明白挖矿有多么难了吧?需要补充的是,不同的区块链应用在细节上是不同的,这里所描述的挖矿规则是以比特币为例。

区块链的应用

比特币(BitCoin)的概念最初由中本聪于2008年提出,而后根据这一思路设计发布了开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。

什么是P2P网络呢?

传统的货币都是由中央银行统一发行,所有的个人储蓄也是由银行统一管理,这是典型的中心化系统。

而比特币则是部署在一个全世界众多对等节点组成的去中心化网络之上。每一个节点都有资格对这种数字货币进行记录和发行。

至于比特币底层的数据存储,正是基于了区块链技术。比特币的每一笔交易,都对应了区块体数据中的一行,简单的示意如下:

交易记录的每一行都包含时间戳、交易明细、数字签名。

表格中只是为了方便理解。实际存储的交易明细是匿名的,只会记录支付方和收款方的钱包地址

至于数字签名呢,可以理解为每一条单笔交易的防伪标识,由非对称加密算法所生成。

接下来说一说比特币矿工的奖励:

比特币协议规定,挖到新区块的矿工将获得奖励,从2008年起是50个比特币,然后每4年减半,目前2018年是12.5个比特币。流通中新增的比特币都是这样诞生的,也难怪大家对挖掘比特币的工作如此趋之若鹜!

区块链的优势和劣势


区块链的优势:


1.去中心化


区块链不依赖于某个中心节点,整个系统的数据由全网所有对等节点共同维护,都可以进行数据的存储和检验。这样一来,除非攻击者黑掉全网半数以上的节点,否则整个系统是不会遭到破坏的。


2.信息不可篡改


区块内的数据是无法被篡改的。一旦数据遭到篡改哪怕一丁点,整个区块对应的哈希值就会随之改变,不再是一个有效的哈希值,后面链接的区块也会随之断裂。

区块链的劣势:


1.过度消耗能源

想要生成一个新的区块,必须要大量服务器资源进行大量无谓的尝试性计算,严重耗费电能。


2.信息的网络延迟

以比特币为例,任何一笔交易数据都需要同步到其他所有节点,同步过程中难免会受到网络传输延迟的影响,带来较长的耗时。

几点补充:

1.本漫画部分内容参考了阮一峰的博文《区块链入门教程》,感谢这位大神的科普。

2.由于篇幅有限,关于Merkle Tree 和 非对称加密 的知识暂时没有展开细讲,有兴趣的小伙伴们可以查阅资料进行更深一步的学习。

—————END—————

扫码或长按关注
回复「 加群 」进入技术群聊

漫画:什么是区块链?相关推荐

  1. 区块链人才月均薪酬1.6W?

    01 在上周,我国宣布将重点推动区块链技术的发展,这个消息无疑是为区块链开发者们打了一针强心剂,简直是喜大普奔啊 ! 因为之前区块链这个技术虽然一直在圈内很火,但是却没有得到国家的全面认可和推广,所以 ...

  2. 区块链人才月均薪酬1.6万元?

    在上周,我国宣布将重点推动区块链技术的发展,这个消息无疑是为区块链开发者们打了一直强心剂,简直是喜大普奔啊 ! 因为之前区块链这个技术虽然一直在圈内很火,但是却没有得到国家的全面认可和推广,所以很多区 ...

  3. 科普漫画:什么是区块链?

    两年前,小灰以前写过一期关于区块链的漫画,可能很多新来的小伙伴还没有看过.最近趁着区块链重新成为热门话题,小灰把这篇漫画稍作修改,再次推送给大家. 什么是区块链? 区块链,英文 Blockchain, ...

  4. 漫画告诉你:区块链到底是什么?

    区块链到底是什么? 一幅漫画让你秒懂 区块链技术是指一种全民参与记账的方式.所有的系统背后都有一个数据库,你可以把数据库看成是就是一个大账本.目前是各自记各自的账. 由于没有中心化的中介机构存在,让所 ...

  5. 新华社科普漫画刷屏:一分钟看懂区块链

    10 月 25 日,国家提倡大力发展区块链技术.一夜之间,区块链概念开始火了. 究竟什么是区块链,分布式账本又是什么,区块链等于比特币吗?一系列的问题,让小白用户不得其解. 新华社 11 月 9 日发 ...

  6. 区块链到底是个什么鬼,一幅漫画让你秒懂

    区块链到底是个什么鬼,一幅漫画让你秒懂 字体:  小  中  大  | 打印发布: 2018-1-12 10:58    作者: n    来源: 21世纪经济报道    查看: 930 次 区块链技 ...

  7. 区块链究竟是什么鬼?看完漫画秒懂

    区块链技术是指一种全民参与记账的方式.所有的系统背后都有一个数据库,你可以把数据库看成是就是一个大账本.目前是各自记各自的账. 由于没有中心化的中介机构存在,让所有的东西都通过预先设定的程序自动运行, ...

  8. 区块链将带来怎样的应用?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 在上一篇文章中,咱们聊到了区块链技术正在与大数据.云计算.物联网以及人工智能这些技术链接,随时可能碰撞出技术创新的火花, ...

  9. 别人家的爸爸!为了解释区块链,阿里工程师给儿子画了一本童话书

    明天是儿童节了,有个阿里工程师,给7岁儿子准备了一份很温馨的儿童节礼物:自己画的童话故事书. 这就是传说中的别人家的爸爸! 我厂的程序员,画起漫画来也是脑洞清奇:他用一个老鼠大王想吃上最正宗的奶酪的故 ...

最新文章

  1. 计算机设备及网络建设使用情况,高校信息化网络基础设施建设状况对比
  2. Python爬虫的框架有哪些?推荐这五个!
  3. spring 配置多数据源
  4. 软件测试用例文档模板 简书,如何写出高质量的测试用例
  5. 我也分享一个c# ini操作类
  6. matlab mat文件
  7. android:Android中用文件初始化sqlite数据库(zz)
  8. Python私有变量的用法
  9. Java原子类中CAS的底层实现,java高级面试笔试题
  10. 计算机一级考试系统改革,以等级考试为导向的大学计算机改革
  11. 转自云风blog:三国志战略版服务器卡顿问题
  12. axios get请求添加去缓存
  13. SQL:pgsql中时间戳转换为整数
  14. 校园网免认证登录基于DNS伪装包
  15. AD使用技巧 内附AD18下载地址
  16. 解决--网页兼容模式下虚拟打印保存为pdf乱码
  17. golang中使用validator进行数据校验及自定义翻译器
  18. MFC对话框部分区域的显示和隐藏功能的实现
  19. 文件服务器迁移方法,文件服务器迁移工具
  20. 讲个故事给你听,觉得好的带回家!

热门文章

  1. 压缩感知先进——关于稀疏矩阵
  2. POJ 2976 Dropping Tests
  3. 手机吞吃蛇游戏的设计与开发
  4. 第5节 三个败家子(5)——刘封,被封印的秘密
  5. 网吧电影服务器解决方案完全指南(一)
  6. Readhat中挂载yum源
  7. Flask爱家租房--发布新房源(保存房屋图片)
  8. android预览界面编译出错,Android O预览findViewById编译错误
  9. 请编写一个方法,实现整数的乘法、减法和除法运算(这里的除指整除)。只允许使用加号。
  10. azkaban的操作指南