也许有些标题党,但是我保证文章接下来的内容包含了外行人了解工作量证明(PoW)共识的一些要点。我们会解释区块链世界中不同新型算法的发展,以及为什么共识算法是区块链生态系统中最突出的主题。为什么企业应该在实施从大量选择中挑选出来的区块链技术之前先要理解共识?
这篇文章中,我们首先会讨论最突出的共识机制,工作量证明(PoW)。PoW在几乎所有量产级别的系统中,例如比特币和以太坊,都在被使用。
我们会全方位探讨工作量证明(PoW)并且看看它是如何帮助达成共识并且避免双花。让我们开始吧。
寻找小丑鱼Nemo
工作量证明(PoW)需要矿工找到(其实是计算)一个值来获得共识。让我们称这个值为Nemo。
输入(I)+Nemo(N)=输出(O)
Nemo,这里我们命名为N。
工作量证明(PoW)机制中就包括寻找N,当N被加入到转账区块上时(输入),它就会产生已知的输出。
当然,输入除了打包在区块链中的转账信息还有其他东西,例如前个区块的哈希值,nonce等。但是我们在这里不深入探讨这是怎么实施的。矿工会基于转账费用选择输入中的转账信息。
输出是一个哈希值(拥有部分属性和前零串等等)。输出的属性可以被改变从而增加或者降低网络挖矿的难度。挑战之处在于要在N被添加到输入并给出输出的时候找到(而且快速寻找到,因为矿工在竞争)。获得N的值非常难,并且需要计算机消耗大量的算力才能得出正确的N。
你也可以说矿工的计算机做了大量工作得出正确的N。由于这项计算工作,公有链会在工作量证明(PoW)机制上进行运行。
矿工会被给予一定的奖励或者手续费作为这项工作的补偿。
整个系统在最初就被设计成很难计算获得N,但是如果给你N和转账的区块,很容易去验证是否(输入+N)和输出相等。
一旦矿工成功获得N,它会广播这个工作量证明(PoW)到全网(为了想要获得挖矿奖励)。假设矿工A发现了Nemo,但是矿工B,矿工C和矿工D仍然在寻找他们的Nemo。他们会从A处获得一个信号,其中包含一个有转账记录的区块和Nemo(N)。矿工B,C,D能够快速检查是否可以使用这个N来产出O。
如果可以正确地得到输出,他们能够将这个添加到本地的区块链上(同意A的转账版本,因此达到共识)。
这就在4个去中心化非信任节点之间达成了共识。同样的逻辑可以拓展到任何节点数量。
但是关于双花呢?
好先生,坏先生和丑先生以及链分叉的故事
让我们来通过好先生和坏先生的例子来理解工作量证明(PoW)。坏先生想买好先生在某个公司的股份。他们达成协议,好先生会接受比特币(或者以太坊)支付,并且一旦交易完成,他就会将股票的电子拥有权转给坏先生。
坏先生转给了好先生200比特币,并在这个过程中清空了自己的钱包。不为认知的是,坏先生转了同样的200个比特币给丑先生,他是坏先生的化名。
现在如果好先生够聪明地话,他就会等这次转账完成并永远保存在区块链上。所以他需要等待在含有他转账信息的区块之后至少12个区块(区块数量随着现有比特币网络哈希力的变化而变化),才能保证他不会被链重组分叉所影响。在此之后,他可以很放心地将股票转给坏先生。这样地话,坏先生给丑先生的转账就会被网络拒绝。
但是在这个事件中,好先生太单纯了。他看到坏先生已经转给他所需要的比特币,就立刻将股份转移给了坏先生。如果坏先生足够幸运地话,他转给丑先生(他自己)的转账会被网络预先接受,并且会永久保存在区块链上,而他给好先生的转账会由于链分叉而被拒绝。
事实上,坏先生没有花一分钱,但是却拥有了好先生的股份。所以他可以将同一笔比特币花费两次。
比特币网络在尽最大力量来防止双花,并且让用户知道要等到他们的比特币转账
足够的时间,而且变得不可以逆转了才能在网络上进行支付转移资产。
51%攻击案例
如果坏先生不想总是依赖运气来欺骗好先生。他听说过51%攻击,并且知道任何人拥有网络大多数的哈希算力,就可以逆转转账或者进行双花。他买了比特币网络51%的算力,现在就可以很轻易地去欺骗好先生或者做其他任何事情。
那么为什么坏先生或者其他人没有在做这个事情呢?
获得全网51%的算力需要极其高地成本。
你只可以逆转近期的转账。重新写更早的转账在计算量上来看也会非常困难,基本上不可能。
一旦网络被攻破,那么其货币也会失去价值。尽管你可以买断大多数的哈希力,你也不会因为参与者会失去对系统公平的信仰,同时货币价值也会大跌。
你可以购买51%的网络算力,但是这很快就会显得毫无价值。
希望大家可以看到工作量证明(PoW)背后的智慧,致敬中本聪。
工作量证明(PoW)的替代者
几乎所有新的著名的区块链方案都会提出自己的共识机制。以太坊提出了Casper,一种权益证明(PoS)的算法,Eris使用的是Tendermint算法,超级账本则使用PBFT(实用性拜占庭容错算法),超级账本锯齿湖使用PoET(时间消失证明)以及SGX(软件防护扩展指令)以及等等。但是这是为什么呢?
工作量证明(PoW)的缺陷:
1 挖矿需要耗费电力以及使用非常昂贵的硬件
2 处理能源中心化的担忧,特别是在私有或者联盟链
3 如果网络中只有几个已知的成员,那么在私有网络中挖矿获得共识没有意义
4 节点总是能够带来外部处理能力,反而在私有链中会有更高的价值转账。