前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十一张图解析区块链原理

十一张图解析区块链原理

原创
作者头像
阿仁
修改2018-08-07 23:21:39
4.2K0
修改2018-08-07 23:21:39
举报

区块链概念很火,尤其是2018年伊始在各互联网指数上热度都极大上扬。区块链到底是怎么回事?区块链原理到底是什么?本文就是为揭开区块链原理而来,让我们仔细研究下区块链,探究区块链的奥秘。

如果说互联网使得信息可以自由传播,那么,区块链则可以做到价值在互联网上传播,说区块链是革命可能有点夸大,但至少是在信息技术基础上,区块链使得价值在可信赖的去中心化价值体系中传播。

先尝试用一句话来描述什么是区块链:区块链建立了一个各节点地位对等的网络,在节点之间无需事先信任的情况下,通过加密算法和共识机制,以及块链结构的数据存储,实现数字资产在节点之间的转移(节点是指加入该网络的计算设备)。本质上可以说是一个基于分布式的价值传输体系。

图1 中心化网络
图1 中心化网络

什么是节点地位对等的网络?区块链的众多文章中都提到了,就是点对点的去中心化。反之,就是中心化网络,图1就是中心化的网络,内容或交易数据都需要通过中心化处理,用户都在中心系统拥有账户,数据是在中心系统的两个账户间转移。常规的网络系统大多都是中心化的,账户和数据存储在中心服务器上,然后通过客户端App查看数据。

去中心化的利弊不多做分析,因为放到实际的行业应用中即可以发现其用途,比如某个行业内我们不希望某个公司控制所有数据和资产,一家独大而增大行业风险;比如我们总担心花钱购买的一些商家的折扣卡,在商家倒闭或跑路之后,导致钱财损失。有了区块链技术,上述问题可以解决,前者问题可以通过类似比特币的区块链解决,后者问题可以通过类似以太坊的智能合约区块链解决。​因此我们时常希望构建一个节点地位对等的去中心化网络。

图2 节点对等的P2P网络
图2 节点对等的P2P网络

区块链的去中心化特征明白了,但是对等的用户节点之间如何通信呢?P2P(peer to peer) 技术可以解决这个问题,P2P技术在早年的下载软件中被广泛应用,例如BT下载,节点既下载也上传数据,达到网络中所有节点间数据的逐渐同步。通过P2P,用户之间就可以直接交换信息了,在比特币的网络中,就可以同步交易数据。图2是点对点的去中心化系统,节点间直接交换数据。

节点地位对等的P2P网络建立了,但仔细想想,这样的网络用于价值传输,似乎还存在较多问题。

图3 全量账本
图3 全量账本

如图3,每个节点都全量记录交易数据,通过P2P网络来同步,全量记录是需要的,否则只能依赖别人的记录。但是,部分节点可能会某些时间不在线,或者某些交易数据记录有误,长期积累后,就很难同步,问题也随之而来,以哪个节点为准?这就类似拜占庭将军问题。我们希望该P2P网络具备容错能力,确保信息传递的一致性,零信任基础的节点达成共识。区块链的块链存储结构解决了上述问题。

图4 短时账本
图4 短时账本

首先,按固定时间段划分,所有节点记录这段时间内的账本。以比特币网络为例,交易信息会通过P2P网络广播到所有在线节点,在线节点会记录十分钟左右的交易记录,如图4。当然即使是十分钟的账本,也可能出现图3中的节点不在线的问题,不急,我们接着看。

图5 竞争记账
图5 竞争记账

在线节点每十分钟打包交易信息,并需要争取记账权,争取到记账权的节点就是这次的leader,其他所有节点要以它的账为准。如何争取记账权?在比特币里就是工作量证明(PoW算法)。工作量证明如何实施?如图5所示,节点都对自己的账本做哈希(Hash)计算,当然如果账本内容不变,每次计算出来的哈希值(一个16进制字符串)是不会变的,所以需要在账本里面插入一个随机数,每次修改随机数再计算哈希值,直到计算出的哈希值小于预设的阈值。图5中的f(x)假设为哈希计算,参数是账本和随机变量,要反复尝试出f(x)<N的随机数为止。此方法没有捷径,所有节点只能努力计算,争取早点猜出那个随机值,当然对于计算性能高的节点更有优势,因为相同时间可猜的计算的次数要多。

图6 打包短时账本
图6 打包短时账本

图6,最先算出的节点就开始打包这十分钟的账本了,包里面含有账本、随机数等,当然这时候别的节点还在努力的计算,因为它们并不知道有个节点已经算出来了。

图7 同步区块
图7 同步区块

图7,打好后的包称之为块(block),该节点马上把块同步给其他节点,其他节点在收到块之后就立即停止了手头的工作量证明计算,并校验该块的正确性。比如,工作量证明是否有效,每一笔交易是否正确等。

图8 区块加入链
图8 区块加入链

图8,校验通过后,该十分钟的交易信息大家以此为准,把块加入到链上,即所有历史的块,按时间顺序串联起来。校验不通过怎么办?当然是舍弃,继续计算,自然会有别的节点打包出正确的块。​另外,如果有交易记录因为某些原因没有被打包进当前区块怎么办?没问题,只要该交易内容已经广播给其他节点,在下个时间段也会被打包进区块。

工作量证明似乎有点浪费资源,为什么不是固定节点打包块呢?因为这样做可以防止恶意攻击以及节点故障,提升了整个网络的容错性和安全性。

图9 非对称加密
图9 非对称加密

块链结构搞清楚了,但是还存在问题,十分钟的账里面的每一笔交易,是如何保证正确的呢?这里就要提到非对称加密算法了,图9所示,所谓非对称加密,就是加密和解密需要不同的两串密钥,图中以钥匙示例,实际在计算机里就是两个不同的密码字符串。如果用其中一个密钥加密,则必须用成对的另一个密钥来解密。于是一个称之为私钥,用户自己留着,一个称之为公钥,可以公开给网络上别的节点。有什么用呢?除了图9中的加密,还可以做签名。

图10 广播交易内容和签名
图10 广播交易内容和签名

签名如图10,比如A节点先计算出一笔交易内容的哈希值字符串,然后用私钥将这个哈希值加密为签名(图中密封信所示,实际在计算机中也是一个字符串)。A节点将交易内容连同签名一起发给别的节点,别的节点收到后,用A的公钥解密签名就得到了加密前的哈希值,比较交易内容的哈希值,如果两者一致,说明该交易内容确实是A节点发出的,并且没有被别人篡改过。

图11 环环相扣 无法篡改
图11 环环相扣 无法篡改

还有一个问题,如何保证历史的区块不被修改?首先,因为链式存储的特性,以哈希值为索引,每个区块都包含前一个区块的哈希值,环环相扣。如图11所示,如果改变97号区块的内容,那么其哈希值也变了,98号区块中填写的97号哈希值也要相应更改,98号改变了,则连锁反应,必须更改之后的所有区块。这样修改是很难做到的,因为新的区块也一直在产生,而节点间的同步是以最长链为标准。那有人可能会疑问,我修改其中的一个区块,并一下构造一个很长的链不就行了?对不起,很难做到,因为有PoW工作量证明机制的存在,每产生一个区块,必须是将该时间段内的全网交易+随机数碰撞出小于阈值的哈希值之后,才能产生被别的节点认可的区块,这种机制下无法随意生成一个长链,据理论计算,只有拥有全部节点算力51%以上者才有可能具备这个能力。

以上就是阿仁对于区块链基本原理的初次探讨,区块链经过了多年的发展,从比特币到智能合约,其技术内容也越来越深奥,值得研究的内容很多很多。请静待后续更新,更多内容请关注公众号“阿仁的商业视界”。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档