跳过正文
  1. Posts/

什么是区块链?

·4672 字·10 分钟·
BlockChain

前言
#

本文将介绍区块链的技术原理以区块链的分类和架构.

从一个账本说起
#

初始账本
#

想象一个传统的账本,用于记录某个小型企业的所有财务交易。在这个账本中,每次交易都由会计师手动记录,每一笔交易都需要经过审计,以确保准确性。这个账本的问题在于它容易出错,容易篡改,并且需要耗费大量时间和资源来维护。

image
初始账本

数字化账本
#

随着技术的发展,这家企业决定将其账本数字化。他们创建了一个电子账本系统,使交易记录更容易管理。这个数字账本允许多个人同时查看和记录交易,但它仍然受到公司内部管理和审计的约束。这意味着虽然数字化,但账本仍然集中管理。

image
数字化账本

区块链账本
#

企业开始关注到区块链技术,他们将其账本升级到区块链账本。现在,账本不再由单一中心机构管理,而是分布在网络中的多个节点上。每一次交易都被放入一个区块,这些区块链接在一起,构成一个不断增长的链。账本的每个节点都可以查看完整的交易历史,这使得账本更加透明和不易篡改。此外,审计也变得更容易,因为每个节点都包含相同的信息。

image
区块链账本

区块链技术原理
#

区块链在本质上就是一种记账方法,当然了,并不是通过人来记账的,而是通过一种软件,我们暂且简称为区块链客户端。通常我们把运行中的客户端软件称为“节点”。这些节点运行后,彼此之间会认识一下,它们彼此之间是这样认识的:节点 A 认识节点 B 也认识节点 C,节点 D 联系到了节点 A,让节点 A 把他认识的人的联系方式发给自己,这样节点 D 也认识了节点 B 和节点 C,通过这样的方式,大家就形成了一张网。

在这个网络中,每个节点都维护着自己的一个账本,账本中记录着网络中发生的一笔笔账务,具体是什么账务取决于这个区块链网络的功能,区块链技术属于一种技术方法,可以用来实现各种不同的业务功能,小到如上例中的日常记账,大到各种复杂的商业合约,等等。

网络中的节点是独立记账的,可是记账的内容要保持彼此一致。所用的方法就是设定一个游戏规则,通过这个规则选出一个记账的节点,在区块链系统中,这个方法称为“共识算法”,就是一种大家都遵守的筛选方案。

选出一个节点后,则一段时间内的账务数据都以这个节点记录的为准,这个节点记录后会把数据广播出去,告诉其他的节点,其他节点只需要通过网络来接收新的数据,接收后各自根据自己现有的账本验证一下能不能接得上,有没有不匹配和不规范的,如果都符合要求,就存储到自己的账本中。

image
区块链

区块链的技术理念,其实就是大家共同来参与记账,通过一种规则不断地选出账务打包者,其他节点接收验证,并且每个用户都有一对密钥表示自己,通过脚本系统的功能实现在公共网络中定向发送有价值的数据。

区块链工作流程
#

区块链系统有很多种,第一个应用区块链技术的软件就是比特币,到现在为止,已经出现了相当多的基于区块链技术的衍生系统,比如 ATOM、以太坊、DOT 等。

每一类系统都有自己的特点,但是有一点,无论是什么类型的区块链,它的工作方式或者说工作流程都是类似的,在本质上它们都是同一类技术结构的产物。

我们先来看一个转账交易的流程。转账交易本质上就是发送一笔数据,这个数据可以表示为资产,也可以表示为订单或者其他各种形式的数据,我们看一下下面的图示。

image
区块链工作流程
从图中我们可以看到,整个数据的发送过程其实还是很简单的,数据发送出去后,会被打包进区块,然后广播出去给所有的节点确认,确认没有问题后就写入到各自的本地区块链账本中,当网络中的大多数节点都确认写入后,这个转账过程就算是完成了

实际上,整个区块链网络,就是大家共同来维护一份公共账本。这个公共账本是一个逻辑上的概念,每个节点各自都是独立维护自己账本数据的,而所谓的公共账本,是各自的账本要保持一致,保持一致的部分就是公共账本,我们看下图示:

image
区块链网络
如图所示,有些节点在广播新的数据,有些节点在接收数据,大家共同维护一个账本,确保达成一致。区块链技术其实就是围绕如何保持数据的一致、如何让这个公共账本的数据不被篡改来展开的。为了解决这些问题,区块链技术拥有一套技术栈。

与传统的 Excel 表格、Word 文档记录格式不同的是,区块链是将产生的数据按照一定的时间间隔,分成一个个的数据块记录,然后再根据数据块的先后关系串联起来,也就是所谓的区块链。但不管是比特币、莱特币、以太坊还是其他,核心结构和工作原理都是共同的。

image
区块链网络

如图所示,这是区块链系统结构的基本组成,各种系统本质上都是在这个经典结构之上直接实现或者扩展实现。这些零部件装配在一起,组成了一个区块链软件,运行起来后就称之为一个节点,多个这样的节点在不同的计算机设备上运行起来,就组成了一个网络。在这个网络中每个节点都是平等的,大家互相为对方提供服务,这种网络被称为点对点的“对等网络”

区块链账本
#

如图所述,它表示一种特有的数据记录格式。区块链,就是“区块+链”,所谓的区块就是指数据块的意思,每一个数据块之间通过某个标志连接起来,从而形成一条链。

image
区块链账本

以比特币来说,大约是每 10 分钟产生一个区块,区块中主要包含了交易事务数据以及区块的摘要信息。我们看下比特币中区块链数据的组成示意图:

image
区块链数据

通过上图我们可以看到比特币中区块链账本的数据组成以及关系,并且可以看到区块数据在逻辑上分成了区块头和区块体,每个区块头中通过梅克尔根关联了区块中众多的交易事务,而每个区块之间通过区块头哈希值(区块头哈希值就是一个区块的身份证号)串联起来。 它将连续不断发生的数据分成了一个一个的数据块。

在下载同步这些数据的时候,可以并行地从各个节点来获得,无论数据先后,到达本地后再根据身份证号组装起来就行。另外,这是一种链条格式,链条最大的特点就是一环扣一环,很难从中间去破坏。比如,有人篡改了中间的 2 号区块,那么就得同时把 2 号区块后续的所有区块都更改掉,这个难度就大了。

在区块链系统中,一个节点产生的数据或者更改的数据要发送到网络中的其他节点接受验证,而其他节点是不会验证通过一个被篡改的数据的,因为跟自己的本地区块链账本数据匹配不起来,这也是区块链数据不可篡改的一个很重要的技术设计。

共识机制
#

所谓共识,就是指大家都达成一致的意思,在区块链系统中,如何让每个节点通过一个规则将各自的数据保持一致是一个很核心的问题,这个问题的解决方案就是制定一套共识算法。

在区块链系统中,存在着多种这样的筛选方案,比如 PoW(Proof of Work,工作量证明)、PoS(Proof of Stake,权益证明)、DPoS(Delegate Proof of Stake,委托权益证明)、PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)等,各种不同的算法。

密码算法
#

区块链账本对每个区块都会计算出一个哈希值,称为区块哈希,通过区块哈希来串联区块,如果有人篡改了中间的某一个区块数据,那么后面的区块就都要进行修改,这个时候并不是简单地修改一下后面区块的地址指向就能结束的,由于后面的区块是通过区块哈希来指向的,只要前面的区块发生变动,这个区块哈希就无效了,就指不到正确的区块了。

实际上,除了整个区块会被计算哈希值外,区块中包含的每一笔事务数据也会被计算出一个哈希值,称为“事务哈希”,每一个事务哈希都可以唯一地表示一个事务。对一个区块中所有的事务进行哈希计算后,可以得出一组事务哈希,再通过对这些事务哈希进行加工处理,最终会得出一棵哈希树的数据结构。哈希树的顶部就是树根,称为“梅克尔根”。通过这个梅克尔根就可以将整个区块中的事务约束起来,只要区块中的事务有任何改变,梅克尔根就会发生变化,利用这一点,可以确保区块数据的完整性。

脚本系统
#

所谓脚本,就是指一组程序规则。在区块链系统中,有些系统中的程序规则是固定的,比如在比特币系统中,只能进行比特币的发送与接收,这个发送与接收的过程就是通过实现在比特币中的一组脚本程序来完成的;而有些系统是允许用户自行编写一组程序规则的,编写好后可以部署到区块链账本中,这样就可以扩展区块链系统的功能,比如以太坊就是通过实现一套可以自定义功能的脚本系统,进而实现了智能合约的功能。

脚本系统使得在区块链中可以实现各种各样的业务功能。后续我们的 Web3 开发主要就是使用区块链的脚本系统将数据记录到区块链上,将区块链的优点充分地发挥出来。

网络路由
#

区块链系统是一个分布式的网络,这些网络中的节点如何来彼此进行连接通信呢?依靠的就是网络路由功能。

在分布式的网络结构中,不存在一个指定的服务器,大家没法通过一个服务器来直接交换彼此的身份信息,就只能依靠彼此联系并传播信息。在区块链系统中,这个功能一般会定义成一种协议,称为“节点发现协议”。

除了要发现节点外,更重要的一个功能就是同步数据,节点通过向邻近节点发送数据请求来获得最新的数据,节点彼此都充当服务者和被服务者,通过这种方式,网络中的每一个节点都会在某一个时刻达成数据上的一致。

区块链分类与架构
#

区块链架构
#

区块链从最开始的面向数字货币的比特币,到能支持自定义智能合约的以太坊,整体架构一直在不断变化。

区块链 1.0 架构
#

这个阶段区块链系统主要是用来实现数字货币的,如图所示,在整个架构中,分为核心节点和前端工具

image
区块链1.0架构

在前端工具中,最明显的就是钱包工具,钱包工具是提供给用户管理自己账户地址以及余额的;浏览器则用来查看当前区块链网络中发生的数据情况,比如最新的区块高度、内存池的交易数、单位时间的网络处理能力等;RPC 客户端和命令行接口都是用来访问核心节点的功能的,在这个时候,核心节点就相当于一个服务器,通过 RPC 服务提供功能调用接口。

区块链 2.0 架构
#

区块链 2.0 架构的代表产品是以太坊。如图所示,与 1.0 架构相比,最大的特点就是支持智能合约,在以太坊中,我们使用智能合约开发工具开发合约程序,并且编译为字节码,最终部署到以太坊的区块链账本中。部署后的智能合约是运行在虚拟机上的,称为“以太坊虚拟机”。正是通过这样的智能合约的实现,扩展了区块链系统的功能,在以太坊中还是支持数字货币的,因此在应用工具中也是有钱包工具的。

image
区块链2.0架构

区块链 3.0 架构
#

在 3.0 的架构中,超越了对数字货币或者金融的应用范畴,而将区块链技术作为一种泛解决方案,可以在其他领域应用,比如行政管理、文化艺术、企业供应链、医疗健康、物联网、产权登记等,可以认为是面向行业应用。行业应用一般是需要具备企业级的属性的,比如身份认证、许可授权、加密传输等,并且对数据的处理性能也会有要求,因此企业级场景下的应用,往往都是联盟链或者私有链。

如图所示,首先在 3.0 架构中,数字货币不再是一个必选组件了,当然如果需要,我们也是可以通过智能合约的方式来实现数字货币的。与之前的架构相比,最大的特点就是增加了一个网关控制,实际上就是增加了对安全保密的需求支持,并且通过数据审计加强对数据的可靠性管理。

image
区块链3.0架构

区块链分类
#

总结
#

区块链系统实际上就是一个维护公共数据账本的系统,一切技术单元的设计都是为了更好地维护好这个公共数据账本。通过共识算法达成节点的账本数据一致;通过密码算法确保账本数据的不可篡改性以及数据发送的安全性;通过脚本系统扩展账本数据的表达范畴。

我们甚至可以认为,区块链系统实际上就是一种特别设计的数据库系统或者说分布式数据库系统,在这个数据库中可以存储数字货币,也可以存储逻辑更复杂的智能合约,以及范围更加广阔的各种业务数据。

资源
#

要了解有关区块链的更多信息,建议您学习以下资源:

推荐阅读
#

相关文章

About me
·5 字·1 分钟
Software Engineer and Web Design