PoS(Proof of Stake)本质上是一种持有一定币量而获得挖矿资格和收益的共识协议,在最初 Proof of Stake 2013年被提出来后, Nothing At Stake (无利害关系)的问题和 Long-Range Attack(长程攻击)问题是经常被谈论的 Proof of Stake 共识协议的挑战。
今天我们先来看看 Nothing At Stake problem (无利害关系)。
Nothing At Stake, a situaTIon where someone loses nothing when behaving badly, but stands to gain everything.
Nothing At Stake 问题的本质是 “作恶无成本,好处无限多”。具体来讲,是当在 PoS 共识系统出现分叉 (fork) 的情况时 ,出块节点可以在”不受任何损失“的前提下,同时为多条链出块,从而有可能获得“所有收益”。
这就好比有个窗口,排队既可领钱,当只有一个窗口时,大家会乖乖的排队,每人都有,其乐融融。
但是当第二个窗口出现时。大家知道,最终这两个窗口有可能只有一个领到的是“真钱”,另外一个的钱会变成废纸。但排队的你不知道哪个窗口会是发“ 真钱” 的窗口。所以你会怎么做呢? 你可能会下个跑腿订单帮你分身同时去另外一个窗口排队。
但是,在实际 PoS 出块节点时,此时的分身无成本,只是计算机做一个运算而已。
这会造成什么乱象呢?
聪明的出块节点会有动力产生新的分叉,支持或发起不合法交易,其他逐利的出块节点会同时在多条链(窗口)上排队出块支持新的分叉。随着时间的推移,分叉越来越多,非法交易,作恶猖狂。区块链将不再是唯一链,所有出块节点没有办法达成共识。
另外,无利害关系问题还让双花攻击更容易。不像 PoW 51% 的攻击那样,PoS 的攻击节点只需要多一定的算力 (有时候仅仅1% )就有可以进行攻击。例如一个质押总量占流通币量只有30%的币,攻击成本相比 60% 质押率的网络更容易攻击。
有多容易呢?如下图所示,仍然是 A、B、C 三个出块节点,假如 A是攻击节点,它在产生分叉时创造两笔交易。一笔将X个币发给自己的一个钱包地址,同时在另外一个分叉上将X个币发到交易所。B、C出块节点因 Nothing At Stake 所以同时会在两条分叉链上出块。当交易被交易所确认后, A 将 X 个币出售兑换成隐私币种,移出交易所。之后 A 通过增加质押币量,或创建多个其他出块节点的方式提升出块权重,只在分叉链继续出块。此时最长链很明显,且逐渐拉开差距,会最终成为最长链,A 成功将 X 个币双花。
为什么 Nothing At Stake 问题仅仅是 PoS 的挑战? PoW难道不会有吗?
PoW机制天生避免了这个问题。因为在出块时,矿工会付出机会成本 — 算力资源。如果分叉出现, 矿工需要慎重的选择在哪条链上出块,一旦选错,付出的算力成本则没有收益。矿工也不会选择在两条链上均分算力,这样只会将原链的出块概率缩小一半,可能得不偿失。
那么如何解决 Nothing At Stake问题 ?
一般的策略都是后置惩罚,既如果被判为恶意出块行为,则会将 stake 的一部分或保证金作为罚金。然而,所有的惩罚和监管措施都只是事后,而不像 PoW需算力出块的隐形约束直接。
我们来看看 Tezos 是怎样使用惩罚机制来避免 Nothing At Stake 问题的:在 Tezos 链上参与挖矿需要保证金,这部分保证金就是用来保证“面包师” (baker)的诚实行为,如果面包师试图在两个分支上广播区块,那么他的保证金将被没收。如果面包师成功创建和广播了合法区块,他将获得区块奖励和交易手续费。这种机制用金钱奖惩来避免双挖矿问题,节点的安全由面包师自行维护。
除了后置惩罚,至今的解决方案,都是要牺牲一定程度的性能、去中心化原则,合约机制的设计也更复杂。
这种复杂性体现在什么地方呢?
在 PoS 中,节点的角色和职责众多:除了和PoW中类似的出块节点 (Miner), 还有验证节点(Validator) 为区块背书 ,守护猎人(State Guardian) 抓“坏人”。
守护猎人的 stake 有一定的锁定期,一般是需要X个区块之后才可以拿到质押的币,这样可以给守护猎人足够时间来抓住非法节点。
此外,虽然项目方可以通过前置节点筛选选择信任的节点,但是中心化的问题依然不可避免:
· 如果网络发展迅速,利益超过了组织的信誉,那么,被选出的实名节点不一定仍然可信;
· 节点是否有足够的动机或技术能力去保证自身的反攻击能力,从而保证网络安全;
· 节点数量有限,伸缩性不够,仍然是中心化;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)