当前位置:  首页 →区块链话题 →正文

区块链运作的核心技术

2018-12-15 20:06:52 区块链百科

区块链的核心技术包括:块链数据结构、非对称加密、共识算法、P2P网络、Merkle证明等。区块链技术可以用下图的架构模型抽象表示,自底向上分为数据层、网络层、共识层、激励层、合约层和最后的应用层。今天先简单解释下这些核心技术,以便深入挖掘区块链技术背后的缘由和价值。

区块链技术的架构模型

 

块链数据结构:区块结构+链式结构

区块链中每一个区块的结构如下图所示,由区块头和区块体构成。

区块的结构

区块头中包含以下信息:

  • 版本号:用于跟踪软件/协议的更新
  • 父区块的哈希:引用区块链中父区块的哈希值
  • 时间戳:该区块产生的时间
  • 目标哈希:当前区块的哈希值
  • 随机数(Nonce):用于工作量证明算法的技术器
  • Merkle根:该区块中交易的merkle树根的哈希值
  • 区块高度:记录该区块在区块链中位置

区块体中保存的是自上一个区块以来的交易数据。

然后每个区块通过连接上一个区块,最终形成一条长链,如下图所示:

各个区块连接方式

 

非对称加密技术

非对称加密算法有一对秘钥,分别是公钥和私钥,这两者是成对的,公钥是可以公开的,而私钥则是用户自己保留。用私钥加密的数据只有公钥才可以解密。公钥和私钥之间的这种数学关系,使得私钥可以用于生成特定消息的签名。而这个签名可以在不暴露私钥的前提下通过公钥进行验证。

也就是说我对一段消息用私钥进行签名(也就是加密),然后把这个数据连同签名和我的公钥发送给对方,对方就可以通过公钥对签名进行验证(解密)对比数据从而验证数据的有效性。

在比特币系统中,公钥用于接收比特币,而私钥则用户比特币支付时的交易签名。

在支付比特币时,比特币的所有者需要在交易中提交自己的公钥和该交易的签名。而比特币网络中所有节点可以通过所提交的公钥和签名进行验证,从而确认支付者对交易的比特币的所有权。

 

Merkle证明

Merkle证明的原始应用是比特币系统,比特币区块链使用了Merkle证明,为的是将交易存储在每一个区块中,使得交易不能被篡改,同时也容易验证交易是否包含在一个特定区块中。

Merkle树的一个重要使用场景就是快速支付验证,也就是中本聪描述的”简化支付验证”(SPV)的概念:轻量级节点不用下载每一笔交易以及每一个区块,可以仅下载链的区块头,每个区块中仅包含下述5项内容,数据块大小为80字节。

Merkle树

Merkle树,也叫哈希树,是一种二叉树,它是一种用做快速归纳和校验大规模数据完整性的数据结构。

Merkle树由一个根节点、一组中间节点和一组叶节点组成。最下面的叶子节点可以存储哈希值或者数据,每个中间节点是两个子节点的内容的哈希值,而根节点同样也是由两个子节点的内容的哈希值组成。

我们可以发现,只要存储数据的叶子节点有任何的变动,都会传递到相应的父节点,最终其Merkle树的根节点都会发生变化。

如下图的,如果需要证明区块上是否存在一笔交易C,那么我们只需要N3和N4的哈希值就可以证明,过程如下:

Step1:获取交易C的哈希值,N2=Hash(交易C)

Step2:通过N2和N3的哈希值,得到父节点的哈希值:N5=Hash(N2+N3)

Step3:同上,通过N4和N5的哈希值,得到根节点的哈希值:Root=Hash(N4+N5)

Step4:然后将上一步得到的根哈希值对比区块头中MerkleTree的根哈希值,如果相同,则证明该区块中存在交易C,否则说明不存在

 

P2P网络

负责交易数据的网络传输和广播、节点发现和维护。网络中没有客户端或服务端的概念,只有平等的同级节点,每个节点既是客户端也是服务端。

信息会由发起节点开始向临近节点进行广播,收到信息的节点又会进行转发,从而实现指数级传播到全部网络节点。

区块链作为分布式网络,其实现的关键就是基于P2P网络。P2P技术发展到现在,已经经历了3代的发展。

  • 第1代:采用中央服务器的模式,每个节点都需要先连接中央服务器才能知道其他节点的位置,这种技术有个致命缺陷—单点故障。典型代表是:Napster。
  • 第2代:采用广播的模式,每个节点在定位资源或节点的时候,会向自己相连的所有节点进行询问,被问到的节点如果不知道结果也执行同样操作,直到找到资源或节点位置。这种技术的一个问题是会引发”广播风暴”并严重占用网络带宽。典型代表是:Gnutella的早期版本。
  • 第3代:也是目前广泛使用的分布式哈希表(简称DHT)技术,解决了前两代中出现的单点故障问题和广播风暴问题。

目前实现了DHT协议的算法有Kademlia[6](简称Kad)和Chord[7]等,其中Kad算法由于其简单易用而被广泛使用,比特币网络和以太坊网络中P2P网络使用的就是Kad算法。

DHT协议

DHT主要是用来存储大量的数据。它存储数据的key、value键值对,其中key值是数据的哈希值,value就是数据本身。下面我们简单介绍下Kad算法。

 

共识算法

也叫共识机制,主要用来解决各节点数据一致性和有效性问题。共识机制在区块链中扮演者核心的地位,共识机制决定了谁拥有记账的权利。

通过一套大家认可的验证方式对网络中的交易进行验证,验证通过后交易方可生效。同时也普遍作为发行Token的一种机制,常见的有POW、POS、DPOS、PBFT等算法。

POW,工作量证明机制,通过一个竞争机制(计算猜测一个nonce随机值,得以解决规定的哈希问题),让计算工作完成最出色的节点获得记账的权利。这样可以保证一段时间内,只会出现少数几个同一高度的合法区块。而POW通过这种算力消耗的经济惩罚限制了恶意的参与,因为它需要付出大量的经济成本。

同时,这些合法的区块会在区块链网络中进行广播,收到的节点会将区块添加到自己维护的最长链上。所以这时候有可能当前节点同时收到两个同一高度的合法区块,也就会出现分叉,但是最终随着挖矿的继续运行,最终会有一条链成为最长链。

智能合约指的是一段写在区块链上的代码,一旦某个事件触发合约中的条款,代码即自动执行。其保证在没有第三方的情况下让参与方履行承诺(交易),履约过程是完全自动且不可逆转的。

 

脚本代码

脚本是区块链上实现自动验证、自动执行合约的重要技术。每一笔交易的每一项输出严格意义上并不是指向一个地址,而是指向一个脚本。脚本类似一套规则,它约束着接收方怎样才能花掉这个输出上锁定的资产。

交易的合法性验证也依赖于脚本。目前它依赖于两类脚本:锁定脚本和解锁脚本。锁定脚本是在输出交易上加上的条件,通过一段脚本语言来实现,位于交易的输出。解锁脚本与锁定脚本相对应,只有满足锁定脚本要求的条件,才能花掉这个脚本上对应的资产,位于交易的输入。通过脚本语言可以表达很多灵活的条件。解释脚本是通过类似我们编程领域里的”虚拟机”,它分布式运行在区块链网络里的每一个节点。

以上就是区块链运作的核心技术。区块链的核心优势是去中介化,能够通过运用哈希算法、数字签名、时间戳、分布式共识和经济激励等手段,在节点无需互相信任的分布式系统中建立信用,实现点对点交易和协作,从而为中心化机构普遍存在的高成本、低效率和数字存储不安全等问题提供了解决方案。

BB财经原创,作者区块链百科,转载请注明出处:http://www.bbcaijing.cn/qukuailian/37067.html