最近更新了八篇分布式的文章,准备写下第九篇的时候,发现跟区块链关系非常紧密,于是就先写一篇区块链的科普文章吧。
紫霞仙子:听说你最近在学区块链,给我讲讲呗~
一、用大白话说下什么是区块链?
1.我是至尊宝,我爱紫霞仙子你,在这个时间
,这个地点
,我对紫霞你说:至尊宝爱紫霞一万年
。
2.现在我把这句话写在了纸上
:
3.但是如果我把这张纸交给紫霞你,你又怕我反悔
。而如果我把这张纸交给月老,我又怕月老可能会修改
内容,而改成只爱你一年。
4.我为了防止类似事情发生,就把这些这爱情真言,告诉了师父、二师弟悟能、三师弟悟净、白龙马、牛魔王等认识的人,他们都帮我们记录
了这些信息。
5.目前这份信息现在是安全的,我无法抵赖
,我会爱你一万年。
6.为了表达对他们帮忙记录信息的感谢,我给他们每个人发了一个红包。
7.而那些帮我们记录的人就称作节点
。
8.而至尊宝爱紫霞一万年
这句话 时间 地点这些信息,打包起来就形成了一个信息包,也就是区块链中的区块
。而多个区块连在一起就是区块链
。
9.去中心化
就是不需要月老来统一记录这些信息。
10.娶亲当天,我答应了紫霞三个条件,又需要去记录了,而师父和师弟他们很忙,不想浪费时间在记录上面,所以决定选一个人来帮助大家记录这些信息。
12.选谁来记录了,会不会不安全呢?那就来个很难的算数题吧,谁能算出来,就给谁来记录,我还会给记录的人一个大红包,也就是比特币
。而做出算数题就称作工作量证明
。
13.而这个记录的人就被称作矿工
。矿工们不断算题,争夺
信息记录的权利
。从而获得信息记录的奖励
。
二、什么是区块链?
区块链的英文是 Block Chain,它的技术的产生和发展跟比特币有着千丝万缕的联系。
- 因比特币的火热,区块链技术被世人所知。比特币是区块链技术最成功最成熟的应用案例。
- 区块链技术作为构建比特币数据结构及交易体系的基础技术。
- 区块链是一个去中心化的分布式数据库,该数据由一串使用密码学方法产生的数据区块有序链接而成,而区块中包含有一定时间内产生的无法被篡改的数据记录信息。
- 区块链由多种技术整合:密码学、数学、经济学、网络科学等。这些技术以特定方式组合在一起,形成了一种新的去中心化数据记录与存储体系。而每个区块上又打上了时间戳,形成了前后关联且连续的诚实数据记录存储结构。
三、为什么要有区块链?
区块链解决了以下两个问题:
交易确认和资金清算问题
现实社会中各种经济活动涉及资金清算的,除了直接的现金交易外,都需要当事人执行以下步骤:
- 在银行等机构开立账户。
- 通过开户机构进行资金清算。
但由于公民有多个开户机构的账户,甚至还有跨国账户,而当事人的交易必须通过开户机构之间的清算才能完成。严重影响了交易确认
和资金清算
的效率和成本。
中心化问题
传统的信用建立是靠很多的中心
,譬如央行、商业银行,还有法院、经济警察等。但带来的问题就是成本过高
。
而且我们存的钱都是银行管控的,如果银行倒闭了,那存的钱可能就没有意义了。
四、什么是比特币?
- 比特币由中本聪在 2008 年发表的论文《比特币:一种点对点的电子现金系统中》首次提出。
- 比特币是一种虚拟的加密数字货币,去中心化的支付系统。不依赖特定的货币机构发行,不受央行和任何金融机构控制。
- 根据特定算法,通过大量的计算产生。
- 通过计算得到的区块奖励最开始是 50 个比特币,每隔大约 10 分钟,下一批 50 个比特币产生。总量达到 1050 万(2100 万的 50%)时,奖励减半为 25 个。每隔 4 年,奖励减半,总量最多为 2100万。
- 比特币可以通过挖矿获得,也可以通过交易购买获得。
下图总结了普通货币和比特币的区别:
五、区块内包含什么?
区块链的区块由区块头和区块体两部分组成。
区块头:由上一个区块的哈希值、区块体的哈希值、4 字节的随机数、时间戳等组成。固定 80个字节。
区块体:区块包含的交易数据,其中第一笔交易是 CoinBase 交易,这个是一比激励矿工的特殊交易。
六、区块链的特性有哪些?
去中心化
区块链不依赖中央处理节点,实现了数据的分布式记录、存储和更新。
每个区块链节点都必须遵循同一个规则,而该规则基于密码算法而非信用,每次数据更新都需要网络内其他用户的批准,所以不需要一套第三方中介机构或信任机构背书。
传统中心化网络中,如果中心被攻击了,则会破坏整个系统。
透明性
读和写数据记录对全网节点是透明的。区块链使用开源的程序、开放的规则和高参与度,可被全网审查、追溯。
开放性
除了被加密的私有信息外,区块链的数据对所有人公开(特殊区块链系统除外)。
任何人都可以通过公开的接口查询记录。
自治性
整个系统可自由安全地交换数据、记录数据、更新数据。
信息不可篡改
信息一旦经过验证并添加至区块链后,就会得到永久存储,无法更改。
除非能够同时控制系统中超过 51%的节点,否则单个节点上对数据库的修改是无效的。
匿名性
交易的双方都是匿名的情况下进行,无须通过公开身份来让对方产生信任。
七、什么是挖矿?
矿
指比特币。挖矿
指挖比特币。挖矿的过程其实就是解决复杂的密码学问题。矿工
指运用挖矿设备(比如CPU、GPU 等有计算能力的设备)来进行挖矿的人。而作为对他们服务的奖励,矿工可以得到他们所确认的交易中包含的手续费
,以及新产生的比特币。矿池
指大家联合挖矿设备一起来挖矿,算力集中的地方。
而怎么才算挖到比特币呢?这个就牵扯到工作量证明了。
八、什么是工作量证明?
工作量证明的英文是 Proof of Work,简称 PoW。
在现实生活中,也有工作量证明这一说法:比如大学的学位证、毕业证,就是证明大学期间通过 4 年的努力完成了相关课程的学习,别说你没努力就拿到了证书,汗。
也就是说工作量证明就是通过指定的结果,来证明自己做过了一定量的工作。而在区块链中,这个工作就是哈希运算。
区块链中节点通过哈希运算得到符合条件的哈希值,来证明工作量。而这个过程一个随机数的查找过程,俗称挖矿
。
找到符合条件的随机数的方法是不停地随机试探
,直到搜索到一个有效的数。而这个随机数是由 N 个前导零构成,零的个数取决于网络的难度值。比如以下的随机数由四个前导零构成。
0000ec5927ba10ea45a6822dcc205050ae74ae1ad2d9d41e978e1ec9762dc404
工作量证明的三要素如图所示:
输入:拥有 80 字节固定长度的区块头。
算法:双重 SHA 256 哈希运算。也就是对 SHA256 哈希运算的结果,再执行一次哈希运算。
条件:计算出的哈希值,只有小于目标值,才是有效的,否则无效,必须重算。
九、区块链的工作原理?
计算出符合条件的哈希值后,然后怎么处理呢?
矿工就把这个哈希值的信息广播给集群中的所有其他节点,其他节点就进行验证,验证通过后,就会把之前那个矿工的区块加入到自己的区块链中,最终形成一串区块链。详细步骤如下:
1.节点将新的数据记录向全网进行广播。
2.接收节点对收到的数据记录信息进行合法性校验,如果有效,则将数据记录纳入一个区块中。
3.接收节点对区块执行共识算法。
4.共识达成后,区块被纳入节点的区块中进行延长。
最后形成的区块链就是如下图所示:
十、怎么攻击区块链?
计算哈希值完全依赖硬件的算力,算力越强,算出哈希值的概率越高,时间越短。
也就是说如果有坏人掌握了 51 % 的算力,就可以发起 51 % 的攻击,比如双花攻击(Double Spending)。也就是同一份钱花了 2 次。
如果攻击者掌握了较多的算力,就能挖掘出一条原链更长的攻击链。然后又将攻击链向全网广播。而节点按照约定会接受更长的链,也就是会接受攻击链,丢弃原链。如下图所示:
攻击链是红色那一条,比原链分支多一个区块,被系统接受,称为有效的链,而原链就被废弃了。
十一、区块链的缺点
区块链体积过大
区块链不断地发展,节点存储的区块链数据体积会越来越大,存储和计算负担将会越来越重。比如现在的比特币区块链,完整数据已经超过 60 GB,如果用比特币客户端进行数据同步的话,至少三天三夜。
数据确认时间过长
比特币交易的一次确认时间大约是 10 分钟,而完成 6 次确认的时间是 1 小时。需要等待 1 个小时才能完成确认。
交易频率过低
比特币每秒最高处理 6.67 笔交易。怎么算的呢?
每条交易大约 250 个字节,区块大小假定限制在 1 MB,可以容纳的交易数据量为 4000 条。每 10 分钟产生一个区块,每天可以产生 144 个区块,可以交易 144 * 4000 = 576000 条交易,然后除以每天的总秒数 86400,也就是 576000 / 864400 ≈ 6.67。
目前需要解决扩容问题才能突破这个瓶颈。
受到现行制度的制约
目前监管部门对这项新技术缺乏充分的认识和预期,法律和制度建立可能会滞后,也缺乏必要的制度规范和法律保护,加大了时长主题的风险。
十二、区块链的应用
- 物联网。传统的物联模式是由一个数据中心负责收集各连接的设备信息,成本很高。而利用区块链使这些设备连在一起形成一个可持续运行的分布式网络。各设备可自行发送更换零配件的订单,甚至还能和其他设备进行电源竞价,使用户家庭能源消耗地最小化。
- 保险。传统的保险模式是通过投保人申请理赔的方式。而如果用区块链的职能合约技术,保险公司无需等待投保人申请理赔,就能主动进行赔付。
- 医疗。现在医院都改用电子病历了,但是存储信息是在医院处,这就是一个中心化的问题,而带来了医患纠纷问题和安全性问题。如果用区块链技术,则病历信息不可篡改和高强度保密。
总结
本文用一个故事开头,大白话讲解了区块链的概念,然后用 11 个核心问题来理清区块链中大家常关心的问题。
本文既是一篇科普文章,也是一篇原理性文章,对于原理性的问题,我都用图解的方式来讲解,相信会较容易理解一点。
区块链跟分布式联系紧密,比如区块链中用到 PoW 算法,拜占庭容错,都是充分利用分布式特性。学习区块链的过程也是学习分布式的过程。
作者简介:悟空,8年一线互联网开发和架构经验,用故事讲解分布式、架构设计。《JVM性能优化实战》专栏作者,开源了《Spring Cloud 实战 PassJava》项目,自主开发了一个 PMP 刷题小程序。关注可免费刷题。
我是悟空,努力变强,变身超级赛亚人!