在上篇关于区块链的文章中,我已经为大家简单地介绍了区块链的相关概念与简介,博客链接—区块链的相关概念与简介,本篇我将对区块链技术中的技术理念与技术栈做一个简单的介绍。
区块链的技术理念
通过区块链的概念我们知道,区块链在本质上来说就是一种记账方法,当然它并不是通过人来记账的,而是通过一种软件,我暂且称它为区块链客户端。他们运行于不同的设备上,彼此之间独立工作。通常我们把运行中的客户端成为“节点”。所有的节点都在一个互通的网络中,在网络中,一旦有什么交易发生,消息就会马上广播传遍给每个节点。在区块链软件的结构中,这中互相通信的功能成为“网络路由”。
在这个网络中,每个节点都维持着自己的账本,账本记录着网络中每一笔账务。具体是什么样的账务呢?这得看具体是什么样的功能网络。区块链技术属于一种技术方法,可以用来实现不同的业务功能,例如小到日常记账,大到各种复杂的商业合约等等。那么网络中的记账需要保持一致,所用的方法就是大家遵守一个规则,通过规则选出记账的节点。那么这种规则就成为“共识算法”。
在有些系统中,会考虑到通过规则选出的节点这个过程中所付出的劳动,毕竟这个节点需要通过不断得通过“工作证明”来取得记账权,还是挺辛苦的。于是会设计一种激励机制,负责打包数据以及广播的那个节点可以获得系统的奖励。那么大家都会很积极地去争取那种奖励。有些区块链系统会设计一种带竞争的机制,让各个节点去抢夺,谁能抢到这个机会就能获得数据打包的权利并且获得这笔奖励,这种情况下我们会形象地将这个竞争的过程称为“挖矿”。
那么,话又说回来了,我们将一个个运行客户端成为节点,那到底怎么标记不同的使用者呢?也是通过用户注册吗?其实不然,在区块链系统中,是通过一种密码算法来实现的,具体来说是通过一种叫公开秘钥算法的机制来实现的。我们知道对于一种密码算法来说,无论算法过程是什么样的,都会有一个秘钥,而公开秘钥算法拥有一对秘钥,是彼此配合使用的,可以相互用来加密和解密的。其中一种叫公钥,另一种叫私钥,公钥可以公开给别人,私钥要自己保存好。在区块链中,公钥是用来用户识别身份的。
那么两种秘钥是如何配合工作的?我来简单说明一下:用公钥加密的数据必须使用对应的私钥来解密,而使用私钥加密的(通常称为“签名”)的数据必须用对应的攻牙来解密。举个例子,张三要发给李四一张支票,那么怎么传送过去呢?直接发送过去,那么支票中的数据必然会被全网的其他的节点都知晓,这个处于安全性考虑肯定是不允许的。于是张三在支票上用李四的公钥加了密,然后再签上自己的名字(使用自己的私钥签名),这样的话,即使其他人拿到这张支票也没用,因为只有李四拥有自己的私钥来能解开这张支票来使用。这种功能设计在区块链系统中称为“脚本系统”。
总结:现在我们知道了,区块链的技术理念其实就是大家共同来参与记账,通过一种规则(共识算法)不断地选出账务打包者,其他节点接受验证,并且每个用户都有一对秘钥表示自己,通过脚本系统的功能实现在公共网络中定向发送有价值的数据。
区块链的工作流程
区块链的应用有很多种,第一个应用区块链技术的软件就是比特币,到现在为止,出现了很多机遇区块链技术的衍生系统,比如闪电网络、公正通、以太坊、超级账本项目等。但是无论设么类型的应用,它们的工作方式或者说工作流程都是相似的,本质上他们都是同一种技术结构的产物。我们接下来说说区块链的工作流程。
我们先来看一个转账交易的流程。转账交易本质上就是发送一笔数据,这个数据可以表示为资产,也可以表示为订单或者其他形式的数据,我们看一下下面的图示:
在图中,我们可以看到,整个数据的发送过程还是比较简单的,数据发送出去后,会被打包进区块,然后广播出去给所有节点确认,确认没有问题后就写入给的本地区块链账本中,当网络中的大多数节点都确认写入后,确认没问题后就写入到各自的本地区块账本中,当网络中大部分的节点都确认写入后,这个转账交易就算完成了。
这个工作流程是具有代表性的,其他各种系统都是在这个基础上进行衍生和扩展的,如有些会增加身份认证功能,以确保只有符合身份的验证的用户才能发送数据,有些扩展交易数据的表达能力,不但能用表示一般的交易转账,还能表示更复杂的商业逻辑,各种应用很多,但是万变不离其中。
说一千道一万,整个区块链网络,就是大家一起共同来维护一份公立账本。注意,这个账本只是逻辑上的概念,每个节点各自都是独立维护自己账本数据的,而所谓的公共账本,就是说各自的账本要保持一致,保持一致的部分就是公共账本。区块链技术其实就是围绕如何保持数据的一致,如何让公共账本的数据不能被篡改来展开的,为了解决这些问题,区块链拥有一套自己技术栈,我下篇博客会详细阐述区块链的技术栈。