区块链技术

  1. 什么是区块链?
    • 去中心化,分布式,区块化存储数据库
    • 存储全部的余额以及交易流水数据
    • 每个节点都有完整的账本数据
    • 账本数据上有完整的历史交易数据
    • 交易数据都存储在区块上
    • 每个区块包含前一区块的id以及HASH,从而成链
  1. 区块链基本原理

    • 交易 一次操作可以导致整个账本状态进行一次改变。
    • 区块 记录一段时间的交易和状态结果。是对当前账本状态的一次共识
    • 链 由一个个区块发生顺序串联而成。整个状态变化的日志。
  2. 区块链特性

    • 去中心化
    • 开放性
    • 去信任
    • 自治性,集体维护
    • 可靠的数据库
    • 匿名性
  3. 核心技术

    • p2p (peer to peer)
    • 数字签名
    • 区块化数据库
    • 竞争记账权
    • 共识算法
    • 交易回溯
  4. 区块链化数据库的典型特征

    • 去中心化,分布式,区块化
    • 区块 header+body
    • 随机数
    • 时间戳
    • 包含父区块创建后,本区块创建之前的全部交易
    • 满足某个条件的区块HASH:
      • a) SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
      • b) Target值由动态的难度系数确定,Target越小,难度越高;

Merkle tree

在构造Merkle树时,首先要对数据块计算哈希值,通常,选用SHA-256等哈希算法。但如果仅仅防止数据不是蓄意的损坏或篡改,可以改用一些安全性低但效率高的校验和算法,如CRC。然后将数据块计算的哈希值两两配对(如果是奇数个数,最后一个自己与自己配对),计算上一层哈希,再重复这个步骤,一直到计算出根哈希值。

Merkle树大多用来进行完整性验证,比如分布式环境下,从多台主机获取数据,怎么验证获取的数据是否正确呢,只要验证Merkle树根哈希一致,即可。例如,下图中L3数据块发生错误(比如数据被修改了),错误会传导到计算hash(L3),接着传导到计算hash(Hash1-0+Hash1-1),最后传导到根哈希,导致根哈希的不一致,可以说,任何底层数据块的变化,最终都会传导到根哈希。另外如果根哈希不一致,也可以通过Merkle树快速定位到导致不一致的数据。

查找错误 log(N)


共识算法

1、POW:Proof of Work,工作量证明
POW是比特币在Block的生成过程中使用的一种共识算法,也可以说是最原始的区块链共识算法了。POW工作量证明,简单地理解就是,通过一份证明来确认做过一定量的工作。

在比特币系统中,得到合理的Block Hash需要经过大量尝试计算。当某个节点提供出一个合理的Block Hash值,说明该节点确实经过了大量的尝试计算。

这种工作量证明的形式,在我们日常生活中也十分常见。比如驾照,能拿到驾照,说明你已经进行过为期几个月甚至几年的练车和考试;再比如现在很火的吃鸡和王者荣耀游戏中的K/D(Kill/Death)和胜率,分值越高证明你越厉害,同时也说明你进行了大量的游戏练习和技巧学习。
2、POS:Proof of Stake,权益证明
由于POW机制存在消耗算力巨大、交易确认时间较长,挖矿活动集中容易形成中心化等缺点,便演进出了POS权益证明。POS简单来说,就是一个根据持有数字货币数量和时间来分配相应利息的制度,类似平时我们在银行中存款。

基于权益证明共识的区块链系统中,参与者的角色是验证者Validator,只需要投资系统的数字货币并在特定时间内验证自己是否为下一区块创造者,即可完成下一区块的创建。下一区块创造者是以某种确定的方式来选择,验证者被选中为下一区块创造者的概率与其所拥有的系统中数字货币的数量成正比例,即拥有300个币的验证者被选中的概率是拥有100个币验证者的3倍。

在POS模式下,有一个名词叫币龄,每个币每天产生1币龄。比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000。这个时候,如果你验证了一个POS区块,你的币龄就会被清空为0,同时从区块中获得相对应的数字货币利息。

这下就很有意思了,持币有利息。并且由于POS是在一个有限的空间里完成,不是像POW那样在无限空间里寻找,因此无需大量能源消耗。

3、DPOS:Delegated Proof of Stake,授权权益证明
DPOS最早出现在比特股中,又称受托人机制,它的原理是让每一个持有比特股的人进行投票,由此产生101位代表 。我们可以将其理解为101个超级节点或者矿池,而这101个超级节点彼此的权利完全相等。

从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。DPOS的出现最主要还是因为矿机的产生,大量的算力在不了解也不关心数字货币的人身上,类似演唱会的黄牛,大量囤票而丝毫不关心演唱会的内容。

DPOS通过其选择区块生产者和验证节点质量的算法确保了安全性,同时消除了交易需要等待一定数量区块被非信任节点验证的时间消耗。通过减少确认的要求,DPOS算法大大提高了交易的速度。通过信任少量的诚信节点,可以去除区块签名过程中不必要的步骤。

4、PBFT:Practical Byzantine FaultTolerance,实用拜占庭容错
PBFT意为实用拜占庭容错算法,该算法由Miguel Castro (卡斯特罗)和Barbara Liskov(利斯科夫)在1999年提出来,解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。

PBFT是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。

将所有的副本组成的集合使用大写字母R表示,使用0到|R|-1的整数表示每一个副本。为了描述方便,假设|R|=3f+1,这里f是有可能失效的副本的最大个数。尽管可以存在多于3f+1个副本,但是额外的副本除了降低性能之外不能提高可靠性。

5、RAFT,一致性共识算法
RAFT算法包含三种角色,分别是:跟随者(follower),候选人(candidate)和领导者(leader)。集群中的一个节点在某一时刻只能是这三种状态的其中一种,这三种角色可以随着时间和条件的变化而互相转换。

RAFT算法主要有两个过程:一个过程是领导者选举,另一个过程是日志复制,其中日志复制过程会分记录日志和提交数据两个阶段。RAFT算法支持最大的容错故障节点是(N-1)/2,其中N为集群中总的节点数量。

国外有一个动画介绍RAFT算法介绍的很透彻,有兴趣的朋友可以结合动画更好的理解下RAFT算法,这里不再做过多介绍。动画链接地址:http://thesecretlivesofdata.com/raft/

上述是目前主要的区块链共识算法,当然还有其他算法,比如POET:Proof of Elapsed Time流逝时间量证明,Ripple Consensus瑞波共识机制等。

每种算法,各有千秋,在特定环境下和时间段上被采用都有各自的考虑和意义。对不同的区块链应用场景而言,适合的算法即为最好的算法。


推荐文章

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注