区块链技术 blockchain区块链研习社金马带你定投区块链

区块链中的工作量证明和股权证明

2017-11-21  本文已影响1128人  老码农不上班

工作量证明 PoW

工作量证明早期应用在抵抗网络攻击(例如 DDOS),中本聪首次把它应用到区块链技术中。比特币使用 Hashcash ,该算法可分解为如下步骤:

  1. 取一些公开的数据(在比特币中取区块头的数据)
  2. 给这个公开数据添加一个计数器。计数器默认从 0 开始(在区块链中计数器就是 nonce)
  3. 将 data(数据) 和 counter(计数器) 组合到一起,获得一个哈希
  4. 检查哈希是否符合一定的条件:
    • 如果符合条件,结束
    • 如果不符合,增加计数器,重复步骤 3-4

Hashcash 原始的实现要求一个哈希的前 20 位必须是 0 , 但在比特币系统中算 0 的位数为动态变化,保证每 10 分钟生成一个块。在编码实现时,我们需要把公开数据(在比特币中取区块头)加 nonce 做哈希运算,然后和设定的难度比较,小于难度值则认为运算正确。

...
// Run performs a proof-of-work
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)
        fmt.Printf("\r%x", hash)
        hashInt.SetBytes(hash[:])

        if hashInt.Cmp(pow.target) == -1 {
            break
        } else {
            nonce++
        }
    }
    fmt.Print("\n\n")

    return nonce, hash[:]
}
...

股权证明 PoS

PoS 试图解决 PoW 中大量资源被浪费的缺点。它的安全性不是来自矿机的性能,而是来自提高经济损失的经济价值。

区块链维护一个验证人的集合,验证者轮流对块提名并投票,每个验证者的投票权重取决于其存款的大小。 持币的节点通过发送某种特定类型的交易把币作为锁定的保障金之后成为一个验证者,然后区块链当前有效的验证者基于某种共识算法产生并确认一个新块。

共识算法通过奖励验证者提高矿工的积极性,从算法层面可把这些共识算法分为:

当前实现了 PoS 的协议有 Casper 和 Tendermint ,他们最大的不同点如下:

这里比较简单的回答是 Casper 重点关注活跃度(可用性)和可以接受相对不实时的安全(正确性)。虽然 Tendermint 是一个伟大的项目,但他的缺点是,如果检查点没有得到三分之二的投票,那么链出块将会停止。这就是为什么以太坊选择在 Casper 上做工作而不是使用 Tendermint 的原因。

Tendermint是基于拜占庭容错的PoS设计;Casper 有两种实现方式:

开源代码

参考阅读

上一篇下一篇

猜你喜欢

热点阅读