四、区块链技术逻辑
1. 区块链加密技术
哈希算法:又称为散列函数,是指将任意长度的二进制数据通过算法映射为固定长度的二进制数据的过程。它是一种单向的密码体制,加密后无法反推出原始数据。在区块链中的应用涉及到区块创建过程、信息封装过程和数据验证过程。
SHA-256算法:SHA(Secure Hash Algorithm,安全哈希算法)是一套由美国标准与技术局制定的加密哈希函数的总称。SHA-2是这套算法里安全性较高的一类函数群,SHA-256则为此函数群中一种包含32位哈希值数据的算法。
公钥加密算法:这种密码算法需要两个密钥——公开密钥和私有密钥。算法通过私钥产生公钥,但是反向通过公钥推导出私钥则几乎不可能。公钥加密的数据只有对应私钥才能解开,私钥签名的信息通过公钥验证。在区块链中使用的公钥密码算法是基于椭圆代数的特性开发的椭圆曲线算法。
2. 区块链连接方式
这里以比特币区块链为例进行解释。2009年1月3日中本聪制作了比特币区块链的创世区块,也就是第一个区块,并以此作为数据的源头。连接某区块的前一个区块称为其父区块。每一个区块分为两部分——区块头和区块主体。区块主体用于储存区块链网络中发布的交易信息,区块头则用来储存各种哈希值数据。包含于其中的两条哈希值是Merkle根值和父哈希值。
Merkle根值是对区块主体中的所有交易记录进行哈希运算得到的一个值。
父哈希值是上一区块的头哈希值。
当新的区块被创造时首先会根据交易记录产生新区块的Merkle根值并加入到新区块的区块头中,这一行为会使得父区块对其自身区块头的所有数据进行处理生成一个头哈希值并将此值植入新区块的区块头中成为其父哈希值。以此方式完成了区块间的连接。
3. 区块链共识算法
工作量证明机制(Proof of Work,POW):目前大部分数字资产使用这种算法,如比特币、以太坊。区块的产生需要一定的算力,即计算设备每秒能进行哈希运算的次数。一台设备的算力在全网算力中所占的比重即由这台设备创建新区块(挖矿)的概率。目前众多平台组织各个节点进行联合挖矿,这些平台称之为矿池。下图为目前各大矿池的算力分布图。
资料来源:coin.dance
权益证明机制(Proof of Stake,POS):目前小部分数字资产使用该算法,如未来币、黑币。此机制引入了“币龄”概念。一个节点拥有一定的数字资产,每持有单位数字资产一天则积累一个币天的币龄,若发现新的区块则现有的币龄将清零并重新累计。POS部分保留了POW机制用来生成初始数字资产,之后便通过区块链网络中币龄的消耗来产生新的数字资产。节点所拥有的币龄在全网币龄中所占的权重即由此节点创建新区块的概率。
股份授权证明机制(Delegated Proof of Stake,DPOS):该算法较为成熟的应用有比特股。在该机制下,每一个持有数字资产的节点可以对全网络节点进行投票并由此产生若干位(BitShares为101位,EOS为21位)代表。可以将这些代表类比为POW机制下的若干个超级矿池,他们因为占据了大部分的算力因而几乎对区块链的开发占有绝对主导权。而在DPOS机制下,这若干个超级节点彼此的权利是完全相等的。若代表不能按时生成区块则会被除名并被新选出的代表取代。
4. 区块链分叉
区块开采产生分叉:如果在很短的时间间隔内同时有两个节点A、B创建了下一个区块,由于网络传输速度的限制,一部分网络节点会先收到A节点的确认信息,另一部分网络节点则先收到B节点确认信息。区块A和区块B会以平行区块的形式同时以前一个区块为父区块连接到链中。这两个区块都是有效的,包含了几乎相同的数据信息。之后全网的网络节点将按照其认可的区块为父区块继续创建下一区块,当某一支链优先创建出下一区块的时候这条支链将会成为长链(在POW算法下指总算力最高的链,在POS算法下指总消耗币龄最高的链)并被全网确认,分叉结束。
系统升级产生分叉:区块链的共识协议包括交易结构的协议和区块结构的协议。如果区块链系统出现问题需要修复或者结构上需要升级便会通过分叉的方式实现。这样的分叉分为软分叉和硬分叉。
软分叉:在新协议下创建的区块可以被旧区块接受,反之亦然,是一种向上兼容的模式。实际上新旧区块会交替出现在区块链中,随着节点对新协议的逐渐接受,旧区块将最终消失,不会产生支链。
硬分叉:在新协议下创建的区块不可以被旧区块接受,是一种向下兼容的模式。新区块会从旧有区块链中分叉,各节点达成共识并将算力投入到将新区块作为父区块的新链中,最终完成硬分叉。
无论是何种分叉都需要大部分算力达成共识并通过。以太坊于2016年发生硬分叉,然而有一部分节点依然坚持在旧链上工作并且拥有一定的算力,由此以太坊成为两链并行的硬分叉案例。旧链对应的数字资产称为以太坊经典(ETC),新链仍称作以太坊(ETH)。