【区块链共识机制一】POW、POS、DPOS

【区块链共识机制一】POW、POS、DPOS

96 念_夕 关注

2018.04.12 13:16 字数 2980 阅读 25评论 0喜欢 1

去中心化系统维系的核心,在于参与者达成的共识。共识是博弈后的产出,既是博弈,就是平衡,参与到系统中的各方,都是唯利是图的,名、钱、权,各有所需。

区块链技术发展至今,遇到了各种如拥堵,中心化,浪费资源等问题,各种解决方案层出不穷,也出现了除比特币使用的POW机制外的其他几种共识机制。

1.pow( Proof of Work)工作量证明

顾名思义,通过完成一定工作,来证明你有能力完成记账,系统中算得最快的节点获得奖励,这样一个去中心化的系统能运行起来的关键在于奖励,然后才是围绕奖励建立起来的维持系统的机制。这个奖励,在比特币系统中也就是比特币,从博弈的角度来看,比特币的市值越高,参与进来的人就越多,维护系统的人就越多,并且维护系统的节点的能力就越强,在这个过程中,维护系统付出的硬件,电力,时间等资源就越来越多,反向推动比特币升值,最终形成一个良性的,基于利益的,完全自治的,安全的,稳定的去中心化系统。

相对而言,依赖机器进行哈希运算竞争来获取记账权,比拼的节点算力,归根到底是计算机硬件和电力的比拼,这造成系统交易消耗之外的,额外的高资源消耗。同时由于算力这种资源比拼,最终会出现大矿场垄断奖励的问题,导致收益集中,也就是主要的比特币集中在少数节点手里面,形成对比特币价的操纵,但是从比特币系统的交易属性来看,作为交易手段的一种,普通人利用系统进行交易,成本太高,大可以不用,所有从交易属性的角度来看,比特币系统会维持在一个适当的价值。从金融属性来看,特别是做多做空产品出现,由于可监管性弱,参与比特币金融投资风险很大。

从技术实现上来讲,POW非常简单,可靠

一下是 go 写一个简单的POW

func (pow *ProofOfWork) Run() (int, []byte) {

    var hashInt big.Int

    var hash [32]byte

    nonce := 0

    fmt.Printf("Mining a new block")

    for nonce < maxNonce {

        data := pow.prepareData(nonce)

        hash = sha256.Sum256(data)

        if math.Remainder(float64(nonce), 100000) == 0 {

            fmt.Printf("\r%x", hash)

        }

        hashInt.SetBytes(hash[:])

        if hashInt.Cmp(pow.target) == -1 {

            break

        } else {

            nonce++

        }

    }

    return nonce, hash[:]

}

本质是暴力计算符合条件的hash值

2.POS Proof of Stake,权益证明

POS是一种在公链中的共识算法,可作为POW算法的一种替换。POW是保证比特币、当前以太坊和许多其它区块链安全的一种机制,但是POW算法在挖矿过程中因破坏环境和浪费电力而受到指责。POS试图通过以一种不同的机制取代挖矿的概念,从而解决这些问题。

POS机制可以被描述成一种虚拟挖矿。鉴于POW主要依赖于计算机硬件的稀缺性来防止女巫攻击,POS则主要依赖于区块链自身里的代币。在POW中,一个用户可能拿1000美元来买计算机,加入网络来挖矿产生新区块,从而得到奖励。而在POS中,用户可以拿1000美元购买等价值的代币,把这些代币当作押金放入POS机制中,这样用户就有机会产生新块而得到奖励。在POW中,如果用户花费2000美元购买硬件设备,当然会获得两倍算力来挖矿,从而获得两倍奖励。同样,在POS机制中投入两倍的代币作为押金,就有两倍大的机会获得产生新区块的权利。

总体上说,POS算法如下所示。存在一个持币人的集合,他们把手中的代币放入POS机制中,这样他们就变成验证者。假设在区块链最前面一个区块(区块链中最新的块),这时POS算法在这些验证者中随机选取一个(选择验证者的权重依据他们投入的代币多少,比如一个投入押金为10000代币的验证者被选择的概率是一个投入1000代币验证者的10倍),给他们权利产生下一个区块。如果在一定时间内,这个验证者没有产生一个区块,则选出第二个验证者来代替来产生新区块。与POW一样,以最长的链为准。

POS 的优点:

不需要为了保护区块链而消耗大量电力(例如,比特币和以太坊预计每天要在共识机制的电力和硬件上耗费超过100万美元的成本)。

由于权益证明避免了高电耗,就没有太多必要为了保持网络中参与者的积极性而发行很多新代币。从理论上来说,甚至有可能变为负发行量,其中一部分交易费被“烧掉(burned)”,因此供应量会逐渐减少。

权益证明有助于实现更多采用博弈论机制设计的技术,从而更好地抑制中心化卡特尔式机构的形成,如果这种机构确实形成了的话,也能够阻止它们危害网络(如工作量证明中的自私挖矿)。

降低中心化风险,因此规模经济不会造成太大问题。你不会因为负担得起更好的大批量矿机而获得与投入资金不成比例的收益,在PoS中,1000万美元投资带给你的收益就是100万美元投资的整整十倍。

能够采用经济处罚,这让发动各种形式的51%攻击所要付出的代价比在工作量证明中高出许多——Vlad Zamfir说过这样一句话,大意是:“就好像如果你参与了51%攻击,你的ASIC矿场就会烧毁一样”。

3.DPoS

与PoS的主要区别在于节点选举若干代理人,由代理人验证和记账。其合规监管、性能、资源消耗和容错性与PoS相似。类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。

DPoS的工作原理为:

去中心化表示每个股东按其持股比例拥有影响力,51%股东投票的结果将是不可逆且有约束力的。其挑战是通过及时而高效的方法达到51%批准。为达到这个目标,每个股东可以将其投票权授予一名代表。获票数最多的前100位代表按既定时间表轮流产生区块。每名代表分配到一个时间段来生产区块。所有的代表将收到等同于一个平均水平的区块所含交易费的10%作为报酬。如果一个平均水平的区块含有100股作为交易费,一名代表将获得1股作为报酬。

网络延迟有可能使某些代表没能及时广播他们的区块,而这将导致区块链分叉。然而,这不太可能发生,因为制造区块的代表可以与制造前后区块的代表建立直接连接。建立这种与你之后的代表(也许也包括其后的那名代表)的直接连接是为了确保你能得到报酬。

该模式可以每30秒产生一个新区块,并且在正常的网络条件下区块链分叉的可能性极其小,即使发生也可以在几分钟内得到解决。

成为代表:

成为一名代表,你必须在网络上注册你的公钥,然后分配到一个32位的特有标识符。然后该标识符会被每笔交易数据的“头部”引用。

授权选票:

每个钱包有一个参数设置窗口,在该窗口里用户可以选择一个或更多的代表,并将其分级。一经设定,用户所做的每笔交易将把选票从“输入代表”转移至“输出代表”。一般情况下,用户不会创建特别以投票为目的的交易,因为那将耗费他们一笔交易费。但在紧急情况下,某些用户可能觉得通过支付费用这一更积极的方式来改变他们的投票是值得的。

保持代表诚实:

每个钱包将显示一个状态指示器,让用户知道他们的代表表现如何。如果他们错过了太多的区块,那么系统将会推荐用户去换一个新的代表。如果任何代表被发现签发了一个无效的区块,那么所有标准钱包将在每个钱包进行更多交易前要求选出一个新代表。

抵抗攻击:

在抵抗攻击上,因为前100名代表所获得的权力权是相同的,每名代表都有一份相等的投票权。因此,无法通过获得超过1%的选票而将权力集中到一个单一代表上。因为只有100名代表,可以想象一个攻击者对每名轮到生产区块的代表依次进行拒绝服务攻击。幸运的是,由于事实上每名代表的标识是其公钥而非IP地址,这种特定攻击的威胁很容易被减轻。这将使确定DDOS攻击目标更为困难。而代表之间的潜在直接连接,将使妨碍他们生产区块变得更为困难。

DPOS里没有小节点,DPOS保证选不上小节点。在DPOS里,理论上来讲,大节点不再是富人本人,而是富人的代理人,当然富人本人也可以亲自上阵。但是总体而言,按照DPOS的逻辑,管理区块链的人,应该代表了最大多数财富的意见。而在理想状态中,DPOS是有个隐藏的“声望”系统的——如果你钱多,或者你之前管理没出过问题,那么你声望就会提高,别人选你的几率也会增加,于是,你的收益也会增加。这个时候,你如果作恶,你会损失声望,就没人选你继续参与管理区块链了,但是从收益-成本来看,作恶的成本相对POW和POS要小很多了。

猜你喜欢

转载自blog.csdn.net/jfkidear/article/details/81259015