区块链共识算法----POW

POW(proof of work)工作量证明

-工作量证明即挖矿,通俗来说就是干的越多,收获越多。

-即通过与或运算,来计算出一个满足规则的随机数,即获得了本次的记账权。

-在发出本轮需要记录的数据之后,全网其他节点验证之后一起存储。


-一个符合要求的区块哈希值Block Hash由N个前导的零组成(零的个数取决于网络难度值),如果要得到合理的区块哈希,则需要进行大量的计算,计算时间取决于机器的哈希运算速度。

-当某个节点提供了一个合理的Block Hash值,说明该节点确实进行了大量的尝试运算,是概率事件。

-当节点占有全网n%的算力时,该节点有n/100的概率找到Block Hash。

-区块链是基于互联网的去中心化账本,各节点均需要有一份完整的账本,但是各个节点不能同时记账(节点在不同的环境,会接收不同的信息),否则会导致账本的不一致,而共识机制即规定了哪个节点有权记账。

-新区块链必须找到一种不同的散列算法,否则面临比特币算力攻击。比特币已经吸引全世界大部分算力,其他再用POW共识机制的区块链应用很难获得相同的算力来保障安全。


应用:比特币

-以每个节点的计算能力(即“算力”)来竞争记账权,即POW机制。

-比特币系统中任一节点若想生成一个新的区块并写入区块链中,必须解出Bitcoin系统中的难题,即完成一定量的工作。(将不同的nonce输入,进行SHA-256哈希运算,找出满足给定数量前导0的哈希值)

-难题的三要素:工作量证明函数、区块、难度值

    工作量证明函数:SHA-256函数

    难度值:由区块hash的前导0的个数决定(零的个数越多,则难度越大),并且被设定为无论节点算力如何,区块产生速率为10min一个。

注意:1、哈希函数为单向函数(即由随机数计算哈希值较容易,但是由哈希值倒推随机数较难),即可认为得到小于目标难度的结果,大概率是通过计算(完成工作)获得的。

        2、关于难度值:

            (1)为何用0的个数来标志难度值:类比掷骰子n次,定义“6以下”,难度系数为1,则“3以下”难度系数为2,“1以下”难度系数为6,即需要6倍的工作量。

            (2)难度更新方法:在比特币中规定一个256位的整数为难度1,即0x00000000FFFFF...F。

                   若需要10min恒定,即全网算力需要约10min才可以满足此规则(挖矿的hash小于这个数),则算力提高n倍时,难度值也要提高n倍。比特币系统没2016个区块更新一次难度,即算法如下:

                    [ new_target ] = [ prev_target ] * [ 前2015个区块生成所需要的时间 ] / 1209600

                    注:1209600即每10min出一个区块时,出2016个区块所需要的秒数



优点:

1、容错方面允许全网50%的节点出错,若要破坏系统,则需要投入极大成本(若你有全球51%的算力,则可尝试攻击Bitcoin)。

2、完全去中心化,节点自由进出;

3、算法简单容易实现,节点无需交换额外信息即可达成共识。


缺点:

1、不适合私有/联盟链,为最终一致性,非强一致性且共识效率低。

2、每次达成共识需要全网共同参与运算,使得共识达成的周期长,效率低下,不合适商业应用,可监督性弱。

3、容易产生分叉,需要等待多个确认,区块确认时间难以缩短

4、浪费能源,一来机器进行数学计算来获得记账权,资源消耗大于其他共识机制

5、永远没有最终性,需要检查点机制来弥补其最终性。

6、某些矿池算力过大,因而可能违反去中心化。


猜你喜欢

转载自blog.csdn.net/qq_28703359/article/details/81046717